5 Oct 03:53
BSDBuild: r732 - trunk/BSDBuild
From: Notices of SVN commits on the BSDBuild source repository <bsdbuild-commits@...>
Subject: BSDBuild: r732 - trunk/BSDBuild
Newsgroups: gmane.comp.sysutils.bsdbuild.scm
Date: 2008-10-05 01:54:25 GMT
Subject: BSDBuild: r732 - trunk/BSDBuild
Newsgroups: gmane.comp.sysutils.bsdbuild.scm
Date: 2008-10-05 01:54:25 GMT
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);
}
RSS Feed