]> granicus.if.org Git - libvpx/commitdiff
configure: Test linking pthreads before using it
authorMartin Storsjo <martin@martin.st>
Sat, 14 Apr 2018 20:40:46 +0000 (23:40 +0300)
committerMartin Storsjo <martin@martin.st>
Sat, 14 Apr 2018 20:42:21 +0000 (23:42 +0300)
This avoids enabling pthreads if only pthreads-w32 is available.
pthreads-w32 provides pthread.h but has a link library with a
different name (libpthreadGC2.a).

Generally, always using win32 threads when on windows would be
sensible.

However, libstdc++ can be configured to use pthreads (winpthreads), and
in these cases, standard C++ headers can pollute the namespace with
pthreads declarations, which break the win32 threads headers that
declare similar symbols - leading us to prefer pthreads on windows
whenever available (see d167a1ae and bug 1132).

Change-Id: Icd668ccdaf3aeabb7fa4e713e040ef3d67546f00

build/make/configure.sh
configure

index 60fc36e430f3292178b35bf1778fa0b07a2364a4..72376373c4efb47d2e23cc94eb81cd48d0e0339d 100644 (file)
@@ -319,6 +319,12 @@ check_ld() {
     && check_cmd ${LD} ${LDFLAGS} "$@" -o ${TMP_X} ${TMP_O} ${extralibs}
 }
 
+check_lib() {
+  log check_lib "$@"
+  check_cc $@ \
+    && check_cmd ${LD} ${LDFLAGS} -o ${TMP_X} ${TMP_O} "$@" ${extralibs}
+}
+
 check_header(){
   log check_header "$@"
   header=$1
@@ -1484,7 +1490,11 @@ EOF
         # bionic includes basic pthread functionality, obviating -lpthread.
         ;;
       *)
-        check_header pthread.h && add_extralibs -lpthread
+        check_lib -lpthread <<EOF && enable_feature pthread_h && add_extralibs -lpthread
+#include <pthread.h>
+#include <stddef.h>
+int main(void) { return pthread_create(NULL, NULL, NULL, NULL); }
+EOF
         ;;
     esac
   fi
index 2f198e9a61e30515f38f2a40533d40b5728afe18..3174a9f4b57146a052b229cbcf52a04c1e99c856 100755 (executable)
--- a/configure
+++ b/configure
@@ -573,13 +573,20 @@ process_detect() {
         check_ld() {
             true
         }
+        check_lib() {
+            true
+        }
     fi
     check_header stdio.h || die "Unable to invoke compiler: ${CC} ${CFLAGS}"
     check_ld <<EOF || die "Toolchain is unable to link executables"
 int main(void) {return 0;}
 EOF
     # check system headers
-    check_header pthread.h
+    check_lib -lpthread <<EOF && enable_feature pthread_h
+#include <pthread.h>
+#include <stddef.h>
+int main(void) { return pthread_create(NULL, NULL, NULL, NULL); }
+EOF
     check_header unistd.h # for sysconf(3) and friends.
 
     check_header vpx/vpx_integer.h -I${source_path} && enable_feature vpx_ports