Browse Source

configure: Intelligently detect what flags/libs get us working pthread, and define HAVE_PTHREAD_CANCEL if pthread_cancel is available

Luke Dashjr 13 years ago
parent
commit
1e6e2affb9
2 changed files with 50 additions and 16 deletions
  1. 2 1
      Makefile.am
  2. 48 15
      configure.ac

+ 2 - 1
Makefile.am

@@ -8,7 +8,7 @@ EXTRA_DIST	= example.conf m4/gnulib-cache.m4 linux-usb-bfgminer \
 
 SUBDIRS		= lib ccan
 
-INCLUDES	= $(PTHREAD_FLAGS) -fno-strict-aliasing
+INCLUDES	= -fno-strict-aliasing
 
 bin_PROGRAMS	= bfgminer
 
@@ -21,6 +21,7 @@ bfgminer_LDADD	= $(DLOPEN_FLAGS) @LIBCURL_LIBS@ @JANSSON_LIBS@ @PTHREAD_LIBS@ \
 		  @MATH_LIBS@ lib/libgnu.a ccan/libccan.a
 bfgminer_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib @LIBUSB_CFLAGS@ @LIBCURL_CFLAGS@
 
+bfgminer_CPPFLAGS += $(PTHREAD_FLAGS)
 bfgminer_CPPFLAGS += $(NCURSES_CPPFLAGS)
 
 # common sources

+ 48 - 15
configure.ac

@@ -64,7 +64,6 @@ AC_FUNC_ALLOCA
 
 have_cygwin=false
 have_win32=false
-PTHREAD_FLAGS="-lpthread"
 DLOPEN_FLAGS="-ldl"
 WS2_LIBS=""
 MATH_LIBS="-lm"
@@ -88,7 +87,6 @@ case $target in
   *-*-mingw*)
     have_x86_64=false
     have_win32=true
-    PTHREAD_FLAGS=""
     DLOPEN_FLAGS=""
     WS2_LIBS="-lws2_32"
     AC_DEFINE([_WIN32_WINNT], [0x0501], "WinNT version for XP+ support")
@@ -99,11 +97,7 @@ case $target in
 	;;
   powerpc-*-darwin*)
     CFLAGS="$CFLAGS -faltivec"
-    PTHREAD_FLAGS=""
     ;;
-  *-*-darwin*)
-    PTHREAD_FLAGS=""
-	;;
 esac
 
 
@@ -153,11 +147,50 @@ else
 fi
 AM_CONDITIONAL([HAVE_OPENCL], [test x$opencl = xyes])
 
-AC_CHECK_LIB(pthread, pthread_create, [
-	true
-],
-        AC_MSG_ERROR([Could not find pthread library - please install libpthread]))
-PTHREAD_LIBS=-lpthread
+m4_define([BFG_PTHREAD_FLAG_CHECK],
+	AC_MSG_CHECKING([for $1])
+	for cflag in ' -pthread' ''; do
+		for lib in ' -lpthread' ''; do
+			CFLAGS="${save_CFLAGS}${cflag}"
+			LIBS="${save_LIBS}${lib}"
+			AC_LINK_IFELSE([
+				AC_LANG_PROGRAM([
+					#include <pthread.h>
+				], [
+					void *f = $1;
+				])
+			], [
+				found_pthread=true
+				PTHREAD_FLAGS="${cflag}"
+				PTHREAD_LIBS="${lib}"
+				if test "x${cflag}${lib}" = "x"; then
+					AC_MSG_RESULT([yes])
+				else
+					AC_MSG_RESULT([with${cflag}${lib}])
+				fi
+				$2
+				break 2
+			],[])
+		done
+	done
+)
+
+save_CFLAGS="${CFLAGS}"
+save_LIBS="${LIBS}"
+found_pthread=false
+BFG_PTHREAD_FLAG_CHECK([pthread_cancel],[
+	AC_DEFINE([HAVE_PTHREAD_CANCEL], [1], [Define if you have a native pthread_cancel])
+])
+if test "x${found_pthread}" = "xfalse"; then
+	AC_MSG_RESULT([no])
+	BFG_PTHREAD_FLAG_CHECK([pthread_create])
+	if test "x${found_pthread}" = "xfalse"; then
+		AC_MSG_RESULT([no])
+		AC_MSG_ERROR([Could not find pthread library - please install libpthread])
+	fi
+fi
+CFLAGS="${save_CFLAGS}"
+LIBS="${save_LIBS}"
 
 AC_CHECK_LIB(jansson, json_loads, [
 	true
@@ -702,10 +735,10 @@ fi
 
 echo
 echo "Compilation............: make (or gmake)"
-echo "  CPPFLAGS.............:" $CPPFLAGS $NCURSES_CPPFLAGS
-echo "  CFLAGS...............:" $CFLAGS $LIBUSB_CFLAGS
-echo "  LDFLAGS..............:" $LDFLAGS $PTHREAD_FLAGS
-echo "  LDADD................:" $LIBS $DLOPEN_FLAGS $LIBCURL_LIBS $JANSSON_LIBS $PTHREAD_LIBS $NCURSES_LIBS $PDCURSES_LIBS $WS2_LIBS $MATH_LIBS $UDEV_LIBS $LIBUSB_LIBS
+echo "  CPPFLAGS.............:" $CPPFLAGS $NCURSES_CPPFLAGS $PTHREAD_FLAGS
+echo "  CFLAGS...............:" $CFLAGS $LIBUSB_CFLAGS $PTHREAD_FLAGS
+echo "  LDFLAGS..............:" $LDFLAGS $PTHREAD_FLAGS $PTHREAD_LIBS
+echo "  LDADD................:" $LIBS $DLOPEN_FLAGS $LIBCURL_LIBS $JANSSON_LIBS $NCURSES_LIBS $PDCURSES_LIBS $WS2_LIBS $MATH_LIBS $UDEV_LIBS $LIBUSB_LIBS
 echo
 echo "Installation...........: make install (as root if needed, with 'su' or 'sudo')"
 echo "  prefix...............: $prefix"