vlc | branch: master | Martin Storsjö <[email protected]> | Wed Apr 8 14:35:27 2020 +0300| [c36e0e7076118549871822f74dfcff9000d2008d] | committer: Martin Storsjö
contrib: harfbuzz: Update the bundled ax_pthread.m4 This fixes building for Windows with clang, where the bundled version of ax_pthread.m4 assumes that Clang doesn't need the pthread option in LDFLAGS (assuming that a system that Clang supports doesn't need an external library for pthreads). > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c36e0e7076118549871822f74dfcff9000d2008d --- contrib/src/harfbuzz/rules.mak | 1 + contrib/src/harfbuzz/update-ax_pthread.m4.patch | 291 ++++++++++++++++++++++++ 2 files changed, 292 insertions(+) diff --git a/contrib/src/harfbuzz/rules.mak b/contrib/src/harfbuzz/rules.mak index a5d14da1e4..04e46c6ebd 100644 --- a/contrib/src/harfbuzz/rules.mak +++ b/contrib/src/harfbuzz/rules.mak @@ -15,6 +15,7 @@ $(TARBALLS)/harfbuzz-$(HARFBUZZ_VERSION).tar.xz: harfbuzz: harfbuzz-$(HARFBUZZ_VERSION).tar.xz .sum-harfbuzz $(UNPACK) $(APPLY) $(SRC)/harfbuzz/harfbuzz-aarch64.patch + $(APPLY) $(SRC)/harfbuzz/update-ax_pthread.m4.patch $(MOVE) DEPS_harfbuzz = freetype2 $(DEPS_freetype2) diff --git a/contrib/src/harfbuzz/update-ax_pthread.m4.patch b/contrib/src/harfbuzz/update-ax_pthread.m4.patch new file mode 100644 index 0000000000..920e068b9d --- /dev/null +++ b/contrib/src/harfbuzz/update-ax_pthread.m4.patch @@ -0,0 +1,291 @@ +--- harfbuzz/m4/ax_pthread.m4.orig 2020-04-08 14:31:17.385627420 +0300 ++++ harfbuzz/m4/ax_pthread.m4 2020-04-08 14:31:42.361091349 +0300 +@@ -55,6 +55,7 @@ + # + # Copyright (c) 2008 Steven G. Johnson <[email protected]> + # Copyright (c) 2011 Daniel Richard G. <[email protected]> ++# Copyright (c) 2019 Marc Stevens <[email protected]> + # + # This program is free software: you can redistribute it and/or modify it + # under the terms of the GNU General Public License as published by the +@@ -82,7 +83,7 @@ + # modified version of the Autoconf Macro, you may extend this special + # exception to the GPL to apply to your modified version as well. + +-#serial 24 ++#serial 27 + + AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) + AC_DEFUN([AX_PTHREAD], [ +@@ -123,10 +124,12 @@ + # (e.g. DEC) have both -lpthread and -lpthreads, where one of the + # libraries is broken (non-POSIX). + +-# Create a list of thread flags to try. Items starting with a "-" are +-# C compiler flags, and other items are library names, except for "none" +-# which indicates that we try without any flags at all, and "pthread-config" +-# which is a program returning the flags for the Pth emulation library. ++# Create a list of thread flags to try. Items with a "," contain both ++# C compiler flags (before ",") and linker flags (after ","). Other items ++# starting with a "-" are C compiler flags, and remaining items are ++# library names, except for "none" which indicates that we try without ++# any flags at all, and "pthread-config" which is a program returning ++# the flags for the Pth emulation library. + + ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" + +@@ -194,14 +197,47 @@ + # that too in a future libc.) So we'll check first for the + # standard Solaris way of linking pthreads (-mt -lpthread). + +- ax_pthread_flags="-mt,pthread pthread $ax_pthread_flags" ++ ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags" + ;; + esac + ++# Are we compiling with Clang? ++ ++AC_CACHE_CHECK([whether $CC is Clang], ++ [ax_cv_PTHREAD_CLANG], ++ [ax_cv_PTHREAD_CLANG=no ++ # Note that Autoconf sets GCC=yes for Clang as well as GCC ++ if test "x$GCC" = "xyes"; then ++ AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], ++ [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ ++# if defined(__clang__) && defined(__llvm__) ++ AX_PTHREAD_CC_IS_CLANG ++# endif ++ ], ++ [ax_cv_PTHREAD_CLANG=yes]) ++ fi ++ ]) ++ax_pthread_clang="$ax_cv_PTHREAD_CLANG" ++ ++ + # GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) + ++# Note that for GCC and Clang -pthread generally implies -lpthread, ++# except when -nostdlib is passed. ++# This is problematic using libtool to build C++ shared libraries with pthread: ++# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 ++# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333 ++# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555 ++# To solve this, first try -pthread together with -lpthread for GCC ++ + AS_IF([test "x$GCC" = "xyes"], +- [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"]) ++ [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"]) ++ ++# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first ++ ++AS_IF([test "x$ax_pthread_clang" = "xyes"], ++ [ax_pthread_flags="-pthread,-lpthread -pthread"]) ++ + + # The presence of a feature test macro requesting re-entrant function + # definitions is, on some systems, a strong hint that pthreads support is +@@ -224,25 +260,86 @@ + [ax_pthread_check_cond=0], + [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"]) + +-# Are we compiling with Clang? + +-AC_CACHE_CHECK([whether $CC is Clang], +- [ax_cv_PTHREAD_CLANG], +- [ax_cv_PTHREAD_CLANG=no +- # Note that Autoconf sets GCC=yes for Clang as well as GCC +- if test "x$GCC" = "xyes"; then +- AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG], +- [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */ +-# if defined(__clang__) && defined(__llvm__) +- AX_PTHREAD_CC_IS_CLANG +-# endif +- ], +- [ax_cv_PTHREAD_CLANG=yes]) +- fi +- ]) +-ax_pthread_clang="$ax_cv_PTHREAD_CLANG" ++if test "x$ax_pthread_ok" = "xno"; then ++for ax_pthread_try_flag in $ax_pthread_flags; do ++ ++ case $ax_pthread_try_flag in ++ none) ++ AC_MSG_CHECKING([whether pthreads work without any flags]) ++ ;; ++ ++ *,*) ++ PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"` ++ PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"` ++ AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"]) ++ ;; ++ ++ -*) ++ AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) ++ PTHREAD_CFLAGS="$ax_pthread_try_flag" ++ ;; ++ ++ pthread-config) ++ AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) ++ AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) ++ PTHREAD_CFLAGS="`pthread-config --cflags`" ++ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" ++ ;; ++ ++ *) ++ AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) ++ PTHREAD_LIBS="-l$ax_pthread_try_flag" ++ ;; ++ esac ++ ++ ax_pthread_save_CFLAGS="$CFLAGS" ++ ax_pthread_save_LIBS="$LIBS" ++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" ++ LIBS="$PTHREAD_LIBS $LIBS" ++ ++ # Check for various functions. We must include pthread.h, ++ # since some functions may be macros. (On the Sequent, we ++ # need a special flag -Kthread to make this header compile.) ++ # We check for pthread_join because it is in -lpthread on IRIX ++ # while pthread_create is in libc. We check for pthread_attr_init ++ # due to DEC craziness with -lpthreads. We check for ++ # pthread_cleanup_push because it is one of the few pthread ++ # functions on Solaris that doesn't have a non-functional libc stub. ++ # We try pthread_create on general principles. ++ ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h> ++# if $ax_pthread_check_cond ++# error "$ax_pthread_check_macro must be defined" ++# endif ++ static void *some_global = NULL; ++ static void routine(void *a) ++ { ++ /* To avoid any unused-parameter or ++ unused-but-set-parameter warning. */ ++ some_global = a; ++ } ++ static void *start_routine(void *a) { return a; }], ++ [pthread_t th; pthread_attr_t attr; ++ pthread_create(&th, 0, start_routine, 0); ++ pthread_join(th, 0); ++ pthread_attr_init(&attr); ++ pthread_cleanup_push(routine, 0); ++ pthread_cleanup_pop(0) /* ; */])], ++ [ax_pthread_ok=yes], ++ []) ++ ++ CFLAGS="$ax_pthread_save_CFLAGS" ++ LIBS="$ax_pthread_save_LIBS" ++ ++ AC_MSG_RESULT([$ax_pthread_ok]) ++ AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) ++ ++ PTHREAD_LIBS="" ++ PTHREAD_CFLAGS="" ++done ++fi + +-ax_pthread_clang_warning=no + + # Clang needs special handling, because older versions handle the -pthread + # option in a rather... idiosyncratic way +@@ -261,11 +358,6 @@ + # -pthread does define _REENTRANT, and while the Darwin headers + # ignore this macro, third-party headers might not.) + +- PTHREAD_CFLAGS="-pthread" +- PTHREAD_LIBS= +- +- ax_pthread_ok=yes +- + # However, older versions of Clang make a point of warning the user + # that, in an invocation where only linking and no compilation is + # taking place, the -pthread option has no effect ("argument unused +@@ -320,78 +412,7 @@ + + fi # $ax_pthread_clang = yes + +-if test "x$ax_pthread_ok" = "xno"; then +-for ax_pthread_try_flag in $ax_pthread_flags; do +- +- case $ax_pthread_try_flag in +- none) +- AC_MSG_CHECKING([whether pthreads work without any flags]) +- ;; +- +- -mt,pthread) +- AC_MSG_CHECKING([whether pthreads work with -mt -lpthread]) +- PTHREAD_CFLAGS="-mt" +- PTHREAD_LIBS="-lpthread" +- ;; +- +- -*) +- AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) +- PTHREAD_CFLAGS="$ax_pthread_try_flag" +- ;; +- +- pthread-config) +- AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no]) +- AS_IF([test "x$ax_pthread_config" = "xno"], [continue]) +- PTHREAD_CFLAGS="`pthread-config --cflags`" +- PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" +- ;; + +- *) +- AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag]) +- PTHREAD_LIBS="-l$ax_pthread_try_flag" +- ;; +- esac +- +- ax_pthread_save_CFLAGS="$CFLAGS" +- ax_pthread_save_LIBS="$LIBS" +- CFLAGS="$CFLAGS $PTHREAD_CFLAGS" +- LIBS="$PTHREAD_LIBS $LIBS" +- +- # Check for various functions. We must include pthread.h, +- # since some functions may be macros. (On the Sequent, we +- # need a special flag -Kthread to make this header compile.) +- # We check for pthread_join because it is in -lpthread on IRIX +- # while pthread_create is in libc. We check for pthread_attr_init +- # due to DEC craziness with -lpthreads. We check for +- # pthread_cleanup_push because it is one of the few pthread +- # functions on Solaris that doesn't have a non-functional libc stub. +- # We try pthread_create on general principles. +- +- AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h> +-# if $ax_pthread_check_cond +-# error "$ax_pthread_check_macro must be defined" +-# endif +- static void routine(void *a) { a = 0; } +- static void *start_routine(void *a) { return a; }], +- [pthread_t th; pthread_attr_t attr; +- pthread_create(&th, 0, start_routine, 0); +- pthread_join(th, 0); +- pthread_attr_init(&attr); +- pthread_cleanup_push(routine, 0); +- pthread_cleanup_pop(0) /* ; */])], +- [ax_pthread_ok=yes], +- []) +- +- CFLAGS="$ax_pthread_save_CFLAGS" +- LIBS="$ax_pthread_save_LIBS" +- +- AC_MSG_RESULT([$ax_pthread_ok]) +- AS_IF([test "x$ax_pthread_ok" = "xyes"], [break]) +- +- PTHREAD_LIBS="" +- PTHREAD_CFLAGS="" +-done +-fi + + # Various other checks: + if test "x$ax_pthread_ok" = "xyes"; then +@@ -438,7 +459,8 @@ + AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], + [ax_cv_PTHREAD_PRIO_INHERIT], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]], +- [[int i = PTHREAD_PRIO_INHERIT;]])], ++ [[int i = PTHREAD_PRIO_INHERIT; ++ return i;]])], + [ax_cv_PTHREAD_PRIO_INHERIT=yes], + [ax_cv_PTHREAD_PRIO_INHERIT=no]) + ]) _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
