Author: vedge
Date: 2008-10-04 22:54:06 -0300 (Sat, 04 Oct 2008)
New Revision: 732

Modified:
   trunk/BSDBuild/pthreads.pm
Log:
test for the pthreadsGC* libraries from Pthreads-w32; patch from Ryan Lindeman.


Modified: trunk/BSDBuild/pthreads.pm
===================================================================
--- trunk/BSDBuild/pthreads.pm  2008-09-28 06:05:03 UTC (rev 731)
+++ trunk/BSDBuild/pthreads.pm  2008-10-05 01:54:06 UTC (rev 732)
@@ -25,10 +25,36 @@
 # OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
 # USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE..
 
-my $pthreads_test = << 'EOF';
+my @include_dirs = (
+       '/usr/include/pthreads',
+       '/usr/local/include',
+       '/usr/local/include/pthreads',
+);
+
+my @lib_dirs = (
+       '/usr/local/lib',
+);
+
+my @lib_files = (
+       'pthread',
+       'pthreadGC1',
+       'pthreadGC1d',
+       'pthreadGCE1',
+       'pthreadGCE1d',
+       'pthreadGC2',
+       'pthreadGC2d',
+       'pthreadGCE2',
+       'pthreadGCE2d',
+);
+
+my $test_std = << 'EOF';
 #include <pthread.h>
 #include <signal.h>
-static void *start_routine(void *arg) { return (NULL); }
+
+static void *start_routine(void *arg)
+{
+       return (NULL);
+}
 int main(int argc, char *argv[])
 {
        pthread_mutex_t mutex;
@@ -42,23 +68,82 @@
 }
 EOF
 
+my $test_xopen = << 'EOF';
+#include <pthread.h>
+#include <signal.h>
+
+int main(int argc, char *argv[])
+{
+       pthread_mutex_t mutex;
+       pthread_mutexattr_t mutexattr;
+       pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
+       pthread_mutex_init(&mutex, &mutexattr);
+       return (0);
+}
+EOF
+
+sub SearchIncludes ($)
+{
+       my $def = shift;
+
+       foreach my $dir (@include_dirs) {
+               MkIf qq{-f "$dir/pthread.h"};
+                       MkDefine('PTHREADS_CFLAGS', "-I$dir");
+               MkEndif;
+       }
+}
+
+sub SearchLibs ($)
+{
+       my $def = shift;
+
+       foreach my $dir (@lib_dirs) {
+               foreach my $file (@lib_files) {
+                       MkIf qq{-f "$dir/lib$file.a"};
+                               MkDefine($def, "-L$dir -l$file");
+                       MkEndif;
+               }
+       }
+}
+
 sub TestPthreadsStd
 {
        MkDefine('PTHREADS_CFLAGS', '');
-       MkDefine('PTHREADS_LIBS', '-lpthread');
-       MkCompileC('HAVE_PTHREADS', '', '${PTHREADS_LIBS}', $pthreads_test);
+       MkDefine('PTHREADS_LIBS', "-lpthread");
+
+       # Try the standard -lpthread.
+       MkCompileC('HAVE_PTHREADS',
+           '${PTHREADS_CFLAGS}', '${PTHREADS_LIBS}',
+           $test_std);
        MkIf('"${HAVE_PTHREADS}" = "yes"');
                MkDefine('CFLAGS', '${CFLAGS} ${PTHREADS_CFLAGS}');
                MkSaveMK('CFLAGS', 'PTHREADS_CFLAGS', 'PTHREADS_LIBS');
                MkSaveDefine('PTHREADS_CFLAGS', 'PTHREADS_LIBS');
        MkElse();
+               # Fallback to -pthread.
                MkPrintN('checking for -pthread...');
                MkDefine('PTHREADS_LIBS', '-pthread');
-               MkCompileC('HAVE_PTHREADS', '', '${PTHREADS_LIBS}', 
$pthreads_test);
+               MkCompileC('HAVE_PTHREADS',
+                   '${PTHREADS_CFLAGS}', '${PTHREADS_LIBS}',
+                       $test_std);
                MkIf('"${HAVE_PTHREADS}" = "yes"');
                        MkDefine('CFLAGS', '${CFLAGS} ${PTHREADS_CFLAGS}');
                        MkSaveMK('CFLAGS', 'PTHREADS_CFLAGS','PTHREADS_LIBS');
                        MkSaveDefine('PTHREADS_CFLAGS','PTHREADS_LIBS');
+               MkElse();
+                       # Fallback to scanning libs and include files.
+                       MkDefine('PTHREADS_CFLAGS', '');
+                       MkDefine('PTHREADS_LIBS', '');
+                       SearchIncludes('PTHREADS_CFLAGS');
+                       SearchLibs('PTHREADS_LIBS');
+                       MkCompileC('HAVE_PTHREADS',
+                           '${PTHREADS_CFLAGS}', '${PTHREADS_LIBS}',
+                               $test_std);
+                       MkIf('"${HAVE_PTHREADS}" = "yes"');
+                               MkDefine('CFLAGS', '${CFLAGS} 
${PTHREADS_CFLAGS}');
+                               MkSaveMK('CFLAGS', 'PTHREADS_CFLAGS', 
'PTHREADS_LIBS');
+                               MkSaveDefine('PTHREADS_CFLAGS', 
'PTHREADS_LIBS');
+                       MkEndif();
                MkEndif();
        MkEndif();
        return (0);
@@ -119,33 +204,39 @@
 sub TestPthreadsXOpenExt
 {
        MkPrintN('checking for the X/Open Threads Extension...');
+
+       # Define _XOPEN_SOURCE=600 except under FreeBSD.
        MkIf('"${SYSTEM}" = "FreeBSD"');
-               MkDefine('PTHREADS_XOPEN_CFLAGS', '');                          
# Not needed
+               MkDefine('PTHREADS_XOPEN_CFLAGS', '');
        MkElse;
                MkDefine('PTHREADS_XOPEN_CFLAGS',
                         '-U_XOPEN_SOURCE -D_XOPEN_SOURCE=600');
        MkEndif;
-       MkDefine('PTHREADS_XOPEN_LIBS', '-lpthread');
+
+       # Try the standard -lpthread
+       MkDefine('PTHREADS_XOPEN_LIBS', "-lpthread");
        MkCompileC('HAVE_PTHREADS_XOPEN',
-           '${PTHREADS_XOPEN_CFLAGS}', '${PTHREADS_XOPEN_LIBS}', << 'EOF');
-#include <pthread.h>
-#include <signal.h>
-
-int main(int argc, char *argv[])
-{
-       pthread_mutex_t mutex;
-       pthread_mutexattr_t mutexattr;
-       pthread_mutexattr_settype(&mutexattr, PTHREAD_MUTEX_RECURSIVE);
-       pthread_mutex_init(&mutex, &mutexattr);
-       return (0);
-}
-EOF
+           '${PTHREADS_XOPEN_CFLAGS}', '${PTHREADS_XOPEN_LIBS}',
+               $test_xopen);
        MkIf('"${HAVE_PTHREADS_XOPEN}" = "yes"');
                MkSaveMK('PTHREADS_XOPEN_CFLAGS', 'PTHREADS_XOPEN_LIBS');
-               MkSaveDefine('HAVE_PTHREADS_XOPEN', 'PTHREADS_XOPEN_CFLAGS',
-                            'PTHREADS_XOPEN_LIBS');
+               MkSaveDefine('HAVE_PTHREADS_XOPEN');
+               MkSaveDefine('PTHREADS_XOPEN_CFLAGS', 'PTHREADS_XOPEN_LIBS');
        MkElse;
-               MkSaveUndef('HAVE_PTHREADS_XOPEN');
+               # Fallback to scanning libraries and includes.
+               MkDefine('PTHREADS_XOPEN_LIBS', '');
+               SearchLibs('PTHREADS_XOPEN_LIBS');
+               SearchIncludes('PTHREADS_XOPEN_CFLAGS');
+               MkCompileC('HAVE_PTHREADS_XOPEN',
+                   '${PTHREADS_XOPEN_CFLAGS}', '${PTHREADS_XOPEN_LIBS}',
+                       $test_xopen);
+               MkIf('"${HAVE_PTHREADS_XOPEN}" = "yes"');
+                       MkSaveMK('PTHREADS_XOPEN_CFLAGS', 
'PTHREADS_XOPEN_LIBS');
+                       MkSaveDefine('HAVE_PTHREADS_XOPEN');
+                       MkSaveDefine('PTHREADS_XOPEN_CFLAGS', 
'PTHREADS_XOPEN_LIBS');
+               MkElse;
+                       MkSaveUndef('HAVE_PTHREADS_XOPEN');
+               MkEndif;
        MkEndif;
        return (0);
 }

_______________________________________________
BSDBuild-Commits mailing list
[email protected]
http://mail231.csoft.net/mailman/listinfo/bsdbuild-commits

Reply via email to