Browse Source

Fix corner case in acx_pthread.m4 to work with -nostdlib, patch from Kacper Kowalik.

liujisi@google.com 14 years ago
parent
commit
d4a57f1557
1 changed files with 34 additions and 0 deletions
  1. 34 0
      m4/acx_pthread.m4

+ 34 - 0
m4/acx_pthread.m4

@@ -340,6 +340,40 @@ if test "x$acx_pthread_ok" = xyes; then
 	   acx_pthread_ok=no
 	   acx_pthread_ok=no
 	fi
 	fi
 	
 	
+	AC_MSG_CHECKING([whether what we have so far is sufficient with -nostdlib])
+	CFLAGS="-nostdlib $CFLAGS"
+	# we need c with nostdlib
+	LIBS="$LIBS -lc"
+	AC_TRY_LINK([#include <pthread.h>],
+	      [pthread_t th; pthread_join(th, 0);
+	       pthread_attr_init(0); pthread_cleanup_push(0, 0);
+	       pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
+	      [done=yes],[done=no])
+
+	if test "x$done" = xyes; then
+	   AC_MSG_RESULT([yes])
+	else
+	   AC_MSG_RESULT([no])
+	fi
+	
+	if test x"$done" = xno; then
+	   AC_MSG_CHECKING([whether -lpthread saves the day])
+	   LIBS="-lpthread $LIBS"
+	   AC_TRY_LINK([#include <pthread.h>],
+	      [pthread_t th; pthread_join(th, 0);
+	       pthread_attr_init(0); pthread_cleanup_push(0, 0);
+	       pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
+	      [done=yes],[done=no])
+
+	   if test "x$done" = xyes; then
+	      AC_MSG_RESULT([yes])
+	      PTHREAD_LIBS="$PTHREAD_LIBS -lpthread"
+	   else
+	      AC_MSG_RESULT([no])
+	      AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries and -nostdlib])
+	   fi
+	fi
+
 	CFLAGS="$save_CFLAGS"
 	CFLAGS="$save_CFLAGS"
 	LIBS="$save_LIBS"
 	LIBS="$save_LIBS"
 	CC="$save_CC"
 	CC="$save_CC"