From 58e773dca309b2b4e133a462b36d110be813683d Mon Sep 17 00:00:00 2001 From: Lukas Rusak Date: Thu, 10 Nov 2016 00:12:17 -0800 Subject: [PATCH] protobuf: update to 3.1.0, update to use cmake --- .../addons/addon-depends/protobuf/package.mk | 19 +- .../protobuf/patches/01_pr1333.patch | 923 ------------------ 2 files changed, 13 insertions(+), 929 deletions(-) delete mode 100644 packages/addons/addon-depends/protobuf/patches/01_pr1333.patch diff --git a/packages/addons/addon-depends/protobuf/package.mk b/packages/addons/addon-depends/protobuf/package.mk index 4dc30f951c..58928b58d1 100644 --- a/packages/addons/addon-depends/protobuf/package.mk +++ b/packages/addons/addon-depends/protobuf/package.mk @@ -14,23 +14,30 @@ ################################################################################ PKG_NAME="protobuf" -PKG_VERSION="2.6.1" +PKG_VERSION="3.1.0" PKG_REV="1" PKG_ARCH="any" PKG_LICENSE="OSS" PKG_SITE="https://developers.google.com/protocol-buffers/" -PKG_URL="https://github.com/google/$PKG_NAME/releases/download/v$PKG_VERSION/$PKG_NAME-$PKG_VERSION.tar.gz" -PKG_DEPENDS_HOST="toolchain zlib" +PKG_URL="https://github.com/google/$PKG_NAME/releases/download/v$PKG_VERSION/$PKG_NAME-cpp-$PKG_VERSION.tar.gz" +PKG_DEPENDS_HOST="toolchain zlib:host" PKG_DEPENDS_TARGET="toolchain zlib protobuf:host" PKG_SECTION="devel" PKG_SHORTDESC="protobuf: Protocol Buffers - Google's data interchange format" PKG_LONGDESC="protobuf: Protocol Buffers - Google's data interchange format" PKG_IS_ADDON="no" -PKG_AUTORECONF="yes" +PKG_AUTORECONF="no" -PKG_CONFIGURE_OPTS_HOST="--enable-static --disable-shared" -PKG_CONFIGURE_OPTS_TARGET="--disable-shared --enable-static --with-protoc=$ROOT/$TOOLCHAIN/bin/protoc" +PKG_CMAKE_SCRIPT="cmake/CMakeLists.txt" + +PKG_CMAKE_OPTS_HOST="-DCMAKE_NO_SYSTEM_FROM_IMPORTED=1 \ + -DBUILD_SHARED_LIBS=0 \ + -Dprotobuf_BUILD_TESTS=0 \ + -Dprotobuf_BUILD_EXAMPLES=0 \ + -Dprotobuf_WITH_ZLIB=1" + +PKG_CMAKE_OPTS_TARGET="$PKG_CMAKE_OPTS_HOST" post_makeinstall_target() { rm -rf $INSTALL/usr/bin diff --git a/packages/addons/addon-depends/protobuf/patches/01_pr1333.patch b/packages/addons/addon-depends/protobuf/patches/01_pr1333.patch deleted file mode 100644 index 6318ec66b9..0000000000 --- a/packages/addons/addon-depends/protobuf/patches/01_pr1333.patch +++ /dev/null @@ -1,923 +0,0 @@ -From cab5eae3e0dc8cc13d06b8d94bf4759d14e1c20e Mon Sep 17 00:00:00 2001 -From: john hood -Date: Fri, 18 Mar 2016 23:56:51 +0000 -Subject: [PATCH] Replace ancient m4/acx_pthread.m4 with m4/ax_pthread.m4 - ---- - configure.ac | 5 +- - m4/acx_pthread.m4 | 397 -------------------------------------------- - m4/ax_pthread.m4 | 485 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 487 insertions(+), 400 deletions(-) - delete mode 100644 m4/acx_pthread.m4 - create mode 100644 m4/ax_pthread.m4 - -diff --git a/configure.ac b/configure.ac -index 33a6c64..dc39ee6 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -149,9 +149,8 @@ AS_IF([test "$with_protoc" != "no"], [ - ]) - AM_CONDITIONAL([USE_EXTERNAL_PROTOC], [test "$with_protoc" != "no"]) - --ACX_PTHREAD --AM_CONDITIONAL([HAVE_PTHREAD], [test "x$acx_pthread_ok" = "xyes"]) -- -+AX_PTHREAD -+AM_CONDITIONAL([HAVE_PTHREAD], [test "x$ax_pthread_ok" = "xyes"]) - # We still keep this for improving pbconfig.h for unsupported platforms. - AC_CXX_STL_HASH - -diff --git a/m4/acx_pthread.m4 b/m4/acx_pthread.m4 -deleted file mode 100644 -index 89d42c7..0000000 ---- a/m4/acx_pthread.m4 -+++ /dev/null -@@ -1,397 +0,0 @@ --# This was retrieved from --# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?revision=1277&root=avahi --# See also (perhaps for new versions?) --# http://svn.0pointer.de/viewvc/trunk/common/acx_pthread.m4?root=avahi --# --# We've rewritten the inconsistency check code (from avahi), to work --# more broadly. In particular, it no longer assumes ld accepts -zdefs. --# This caused a restructing of the code, but the functionality has only --# changed a little. -- --dnl @synopsis ACX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) --dnl --dnl @summary figure out how to build C programs using POSIX threads --dnl --dnl This macro figures out how to build C programs using POSIX threads. --dnl It sets the PTHREAD_LIBS output variable to the threads library and --dnl linker flags, and the PTHREAD_CFLAGS output variable to any special --dnl C compiler flags that are needed. (The user can also force certain --dnl compiler flags/libs to be tested by setting these environment --dnl variables.) --dnl --dnl Also sets PTHREAD_CC to any special C compiler that is needed for --dnl multi-threaded programs (defaults to the value of CC otherwise). --dnl (This is necessary on AIX to use the special cc_r compiler alias.) --dnl --dnl NOTE: You are assumed to not only compile your program with these --dnl flags, but also link it with them as well. e.g. you should link --dnl with $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS --dnl $LIBS --dnl --dnl If you are only building threads programs, you may wish to use --dnl these variables in your default LIBS, CFLAGS, and CC: --dnl --dnl LIBS="$PTHREAD_LIBS $LIBS" --dnl CFLAGS="$CFLAGS $PTHREAD_CFLAGS" --dnl CC="$PTHREAD_CC" --dnl --dnl In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute --dnl constant has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to --dnl that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). --dnl --dnl ACTION-IF-FOUND is a list of shell commands to run if a threads --dnl library is found, and ACTION-IF-NOT-FOUND is a list of commands to --dnl run it if it is not found. If ACTION-IF-FOUND is not specified, the --dnl default action will define HAVE_PTHREAD. --dnl --dnl Please let the authors know if this macro fails on any platform, or --dnl if you have any other suggestions or comments. This macro was based --dnl on work by SGJ on autoconf scripts for FFTW (www.fftw.org) (with --dnl help from M. Frigo), as well as ac_pthread and hb_pthread macros --dnl posted by Alejandro Forero Cuervo to the autoconf macro repository. --dnl We are also grateful for the helpful feedback of numerous users. --dnl --dnl @category InstalledPackages --dnl @author Steven G. Johnson --dnl @version 2006-05-29 --dnl @license GPLWithACException --dnl --dnl Checks for GCC shared/pthread inconsistency based on work by --dnl Marcin Owsiany -- -- --AC_DEFUN([ACX_PTHREAD], [ --AC_REQUIRE([AC_CANONICAL_HOST]) --AC_LANG_SAVE --AC_LANG_C --acx_pthread_ok=no -- --# We used to check for pthread.h first, but this fails if pthread.h --# requires special compiler flags (e.g. on True64 or Sequent). --# It gets checked for in the link test anyway. -- --# First of all, check if the user has set any of the PTHREAD_LIBS, --# etcetera environment variables, and if threads linking works using --# them: --if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then -- save_CFLAGS="$CFLAGS" -- CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -- save_LIBS="$LIBS" -- LIBS="$PTHREAD_LIBS $LIBS" -- AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS]) -- AC_TRY_LINK_FUNC(pthread_join, acx_pthread_ok=yes) -- AC_MSG_RESULT($acx_pthread_ok) -- if test x"$acx_pthread_ok" = xno; then -- PTHREAD_LIBS="" -- PTHREAD_CFLAGS="" -- fi -- LIBS="$save_LIBS" -- CFLAGS="$save_CFLAGS" --fi -- --# We must check for the threads library under a number of different --# names; the ordering is very important because some systems --# (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. -- --acx_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" -- --# The ordering *is* (sometimes) important. Some notes on the --# individual items follow: -- --# pthreads: AIX (must check this before -lpthread) --# none: in case threads are in libc; should be tried before -Kthread and --# other compiler flags to prevent continual compiler warnings --# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) --# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) --# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) --# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads) --# -pthreads: Solaris/gcc --# -mthreads: Mingw32/gcc, Lynx/gcc --# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it --# doesn't hurt to check since this sometimes defines pthreads too; --# also defines -D_REENTRANT) --# ... -mt is also the pthreads flag for HP/aCC --# pthread: Linux, etcetera --# --thread-safe: KAI C++ --# pthread-config: use pthread-config program (for GNU Pth library) -- --case "${host_cpu}-${host_os}" in -- *solaris*) -- -- # On Solaris (at least, for some versions), libc contains stubbed -- # (non-functional) versions of the pthreads routines, so link-based -- # tests will erroneously succeed. (We need to link with -pthreads/-mt/ -- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather -- # a function called by this macro, so we could check for that, but -- # who knows whether they'll stub that too in a future libc.) So, -- # we'll just look for -pthreads and -lpthread first: -- -- acx_pthread_flags="-pthreads pthread -mt -pthread $acx_pthread_flags" -- ;; --esac -- --if test x"$acx_pthread_ok" = xno; then --for flag in $acx_pthread_flags; do -- -- case $flag in -- none) -- AC_MSG_CHECKING([whether pthreads work without any flags]) -- ;; -- -- -*) -- AC_MSG_CHECKING([whether pthreads work with $flag]) -- PTHREAD_CFLAGS="$flag" -- ;; -- -- pthread-config) -- AC_CHECK_PROG(acx_pthread_config, pthread-config, yes, no) -- if test x"$acx_pthread_config" = xno; then continue; fi -- PTHREAD_CFLAGS="`pthread-config --cflags`" -- PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`" -- ;; -- -- *) -- AC_MSG_CHECKING([for the pthreads library -l$flag]) -- PTHREAD_LIBS="-l$flag" -- ;; -- esac -- -- save_LIBS="$LIBS" -- save_CFLAGS="$CFLAGS" -- LIBS="$PTHREAD_LIBS $LIBS" -- CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -- -- # 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_TRY_LINK([#include ], -- [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); ], -- [acx_pthread_ok=yes]) -- -- LIBS="$save_LIBS" -- CFLAGS="$save_CFLAGS" -- -- AC_MSG_RESULT($acx_pthread_ok) -- if test "x$acx_pthread_ok" = xyes; then -- break; -- fi -- -- PTHREAD_LIBS="" -- PTHREAD_CFLAGS="" --done --fi -- --# Various other checks: --if test "x$acx_pthread_ok" = xyes; then -- save_LIBS="$LIBS" -- LIBS="$PTHREAD_LIBS $LIBS" -- save_CFLAGS="$CFLAGS" -- CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -- -- # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. -- AC_MSG_CHECKING([for joinable pthread attribute]) -- attr_name=unknown -- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do -- AC_TRY_LINK([#include ], [int attr=$attr; return attr;], -- [attr_name=$attr; break]) -- done -- AC_MSG_RESULT($attr_name) -- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then -- AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name, -- [Define to necessary symbol if this constant -- uses a non-standard name on your system.]) -- fi -- -- AC_MSG_CHECKING([if more special flags are required for pthreads]) -- flag=no -- case "${host_cpu}-${host_os}" in -- *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";; -- *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";; -- esac -- AC_MSG_RESULT(${flag}) -- if test "x$flag" != xno; then -- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS" -- fi -- -- LIBS="$save_LIBS" -- CFLAGS="$save_CFLAGS" -- # More AIX lossage: must compile with xlc_r or cc_r -- if test x"$GCC" != xyes; then -- AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC}) -- else -- PTHREAD_CC=$CC -- fi -- -- # The next part tries to detect GCC inconsistency with -shared on some -- # architectures and systems. The problem is that in certain -- # configurations, when -shared is specified, GCC "forgets" to -- # internally use various flags which are still necessary. -- -- # -- # Prepare the flags -- # -- save_CFLAGS="$CFLAGS" -- save_LIBS="$LIBS" -- save_CC="$CC" -- -- # Try with the flags determined by the earlier checks. -- # -- # -Wl,-z,defs forces link-time symbol resolution, so that the -- # linking checks with -shared actually have any value -- # -- # FIXME: -fPIC is required for -shared on many architectures, -- # so we specify it here, but the right way would probably be to -- # properly detect whether it is actually required. -- CFLAGS="-shared -fPIC -Wl,-z,defs $CFLAGS $PTHREAD_CFLAGS" -- LIBS="$PTHREAD_LIBS $LIBS" -- CC="$PTHREAD_CC" -- -- # In order not to create several levels of indentation, we test -- # the value of "$done" until we find the cure or run out of ideas. -- done="no" -- -- # First, make sure the CFLAGS we added are actually accepted by our -- # compiler. If not (and OS X's ld, for instance, does not accept -z), -- # then we can't do this test. -- if test x"$done" = xno; then -- AC_MSG_CHECKING([whether to check for GCC pthread/shared inconsistencies]) -- AC_TRY_LINK(,, , [done=yes]) -- -- if test "x$done" = xyes ; then -- AC_MSG_RESULT([no]) -- else -- AC_MSG_RESULT([yes]) -- fi -- fi -- -- if test x"$done" = xno; then -- AC_MSG_CHECKING([whether -pthread is sufficient with -shared]) -- AC_TRY_LINK([#include ], -- [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]) -- -- if test "x$done" = xyes; then -- AC_MSG_RESULT([yes]) -- else -- AC_MSG_RESULT([no]) -- fi -- fi -- -- # -- # Linux gcc on some architectures such as mips/mipsel forgets -- # about -lpthread -- # -- if test x"$done" = xno; then -- AC_MSG_CHECKING([whether -lpthread fixes that]) -- LIBS="-lpthread $PTHREAD_LIBS $save_LIBS" -- AC_TRY_LINK([#include ], -- [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]) -- -- if test "x$done" = xyes; then -- AC_MSG_RESULT([yes]) -- PTHREAD_LIBS="-lpthread $PTHREAD_LIBS" -- else -- AC_MSG_RESULT([no]) -- fi -- fi -- # -- # FreeBSD 4.10 gcc forgets to use -lc_r instead of -lc -- # -- if test x"$done" = xno; then -- AC_MSG_CHECKING([whether -lc_r fixes that]) -- LIBS="-lc_r $PTHREAD_LIBS $save_LIBS" -- AC_TRY_LINK([#include ], -- [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]) -- -- if test "x$done" = xyes; then -- AC_MSG_RESULT([yes]) -- PTHREAD_LIBS="-lc_r $PTHREAD_LIBS" -- else -- AC_MSG_RESULT([no]) -- fi -- fi -- if test x"$done" = xno; then -- # OK, we have run out of ideas -- AC_MSG_WARN([Impossible to determine how to use pthreads with shared libraries]) -- -- # so it's not safe to assume that we may use pthreads -- acx_pthread_ok=no -- 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_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_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" -- LIBS="$save_LIBS" -- CC="$save_CC" --else -- PTHREAD_CC="$CC" --fi -- --AC_SUBST(PTHREAD_LIBS) --AC_SUBST(PTHREAD_CFLAGS) --AC_SUBST(PTHREAD_CC) -- --# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: --if test x"$acx_pthread_ok" = xyes; then -- ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1]) -- : --else -- acx_pthread_ok=no -- $2 --fi --AC_LANG_RESTORE --])dnl ACX_PTHREAD -diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4 -new file mode 100644 -index 0000000..d218d1a ---- /dev/null -+++ b/m4/ax_pthread.m4 -@@ -0,0 +1,485 @@ -+# =========================================================================== -+# http://www.gnu.org/software/autoconf-archive/ax_pthread.html -+# =========================================================================== -+# -+# SYNOPSIS -+# -+# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]]) -+# -+# DESCRIPTION -+# -+# This macro figures out how to build C programs using POSIX threads. It -+# sets the PTHREAD_LIBS output variable to the threads library and linker -+# flags, and the PTHREAD_CFLAGS output variable to any special C compiler -+# flags that are needed. (The user can also force certain compiler -+# flags/libs to be tested by setting these environment variables.) -+# -+# Also sets PTHREAD_CC to any special C compiler that is needed for -+# multi-threaded programs (defaults to the value of CC otherwise). (This -+# is necessary on AIX to use the special cc_r compiler alias.) -+# -+# NOTE: You are assumed to not only compile your program with these flags, -+# but also to link with them as well. For example, you might link with -+# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS -+# -+# If you are only building threaded programs, you may wish to use these -+# variables in your default LIBS, CFLAGS, and CC: -+# -+# LIBS="$PTHREAD_LIBS $LIBS" -+# CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -+# CC="$PTHREAD_CC" -+# -+# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant -+# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to -+# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX). -+# -+# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the -+# PTHREAD_PRIO_INHERIT symbol is defined when compiling with -+# PTHREAD_CFLAGS. -+# -+# ACTION-IF-FOUND is a list of shell commands to run if a threads library -+# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it -+# is not found. If ACTION-IF-FOUND is not specified, the default action -+# will define HAVE_PTHREAD. -+# -+# Please let the authors know if this macro fails on any platform, or if -+# you have any other suggestions or comments. This macro was based on work -+# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help -+# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by -+# Alejandro Forero Cuervo to the autoconf macro repository. We are also -+# grateful for the helpful feedback of numerous users. -+# -+# Updated for Autoconf 2.68 by Daniel Richard G. -+# -+# LICENSE -+# -+# Copyright (c) 2008 Steven G. Johnson -+# Copyright (c) 2011 Daniel Richard G. -+# -+# 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 -+# Free Software Foundation, either version 3 of the License, or (at your -+# option) any later version. -+# -+# This program is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General -+# Public License for more details. -+# -+# You should have received a copy of the GNU General Public License along -+# with this program. If not, see . -+# -+# As a special exception, the respective Autoconf Macro's copyright owner -+# gives unlimited permission to copy, distribute and modify the configure -+# scripts that are the output of Autoconf when processing the Macro. You -+# need not follow the terms of the GNU General Public License when using -+# or distributing such scripts, even though portions of the text of the -+# Macro appear in them. The GNU General Public License (GPL) does govern -+# all other use of the material that constitutes the Autoconf Macro. -+# -+# This special exception to the GPL applies to versions of the Autoconf -+# Macro released by the Autoconf Archive. When you make and distribute a -+# modified version of the Autoconf Macro, you may extend this special -+# exception to the GPL to apply to your modified version as well. -+ -+#serial 22 -+ -+AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) -+AC_DEFUN([AX_PTHREAD], [ -+AC_REQUIRE([AC_CANONICAL_HOST]) -+AC_REQUIRE([AC_PROG_CC]) -+AC_REQUIRE([AC_PROG_SED]) -+AC_LANG_PUSH([C]) -+ax_pthread_ok=no -+ -+# We used to check for pthread.h first, but this fails if pthread.h -+# requires special compiler flags (e.g. on Tru64 or Sequent). -+# It gets checked for in the link test anyway. -+ -+# First of all, check if the user has set any of the PTHREAD_LIBS, -+# etcetera environment variables, and if threads linking works using -+# them: -+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then -+ ax_pthread_save_CC="$CC" -+ ax_pthread_save_CFLAGS="$CFLAGS" -+ ax_pthread_save_LIBS="$LIBS" -+ AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"]) -+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -+ LIBS="$PTHREAD_LIBS $LIBS" -+ AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS]) -+ AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes]) -+ AC_MSG_RESULT([$ax_pthread_ok]) -+ if test "x$ax_pthread_ok" = "xno"; then -+ PTHREAD_LIBS="" -+ PTHREAD_CFLAGS="" -+ fi -+ CC="$ax_pthread_save_CC" -+ CFLAGS="$ax_pthread_save_CFLAGS" -+ LIBS="$ax_pthread_save_LIBS" -+fi -+ -+# We must check for the threads library under a number of different -+# names; the ordering is very important because some systems -+# (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. -+ -+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config" -+ -+# The ordering *is* (sometimes) important. Some notes on the -+# individual items follow: -+ -+# pthreads: AIX (must check this before -lpthread) -+# none: in case threads are in libc; should be tried before -Kthread and -+# other compiler flags to prevent continual compiler warnings -+# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h) -+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64 -+# (Note: HP C rejects this with "bad form for `-t' option") -+# -pthreads: Solaris/gcc (Note: HP C also rejects) -+# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it -+# doesn't hurt to check since this sometimes defines pthreads and -+# -D_REENTRANT too), HP C (must be checked before -lpthread, which -+# is present but should not be used directly; and before -mthreads, -+# because the compiler interprets this as "-mt" + "-hreads") -+# -mthreads: Mingw32/gcc, Lynx/gcc -+# pthread: Linux, etcetera -+# --thread-safe: KAI C++ -+# pthread-config: use pthread-config program (for GNU Pth library) -+ -+case $host_os in -+ -+ freebsd*) -+ -+ # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able) -+ # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread) -+ -+ ax_pthread_flags="-kthread lthread $ax_pthread_flags" -+ ;; -+ -+ hpux*) -+ -+ # From the cc(1) man page: "[-mt] Sets various -D flags to enable -+ # multi-threading and also sets -lpthread." -+ -+ ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags" -+ ;; -+ -+ openedition*) -+ -+ # IBM z/OS requires a feature-test macro to be defined in order to -+ # enable POSIX threads at all, so give the user a hint if this is -+ # not set. (We don't define these ourselves, as they can affect -+ # other portions of the system API in unpredictable ways.) -+ -+ AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING], -+ [ -+# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS) -+ AX_PTHREAD_ZOS_MISSING -+# endif -+ ], -+ [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])]) -+ ;; -+ -+ solaris*) -+ -+ # On Solaris (at least, for some versions), libc contains stubbed -+ # (non-functional) versions of the pthreads routines, so link-based -+ # tests will erroneously succeed. (N.B.: The stubs are missing -+ # pthread_cleanup_push, or rather a function called by this macro, -+ # so we could check for that, but who knows whether they'll stub -+ # 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" -+ ;; -+esac -+ -+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC) -+ -+AS_IF([test "x$GCC" = "xyes"], -+ [ax_pthread_flags="-pthread -pthreads $ax_pthread_flags"]) -+ -+# The presence of a feature test macro requesting re-entrant function -+# definitions is, on some systems, a strong hint that pthreads support is -+# correctly enabled -+ -+case $host_os in -+ darwin* | hpux* | linux* | osf* | solaris*) -+ ax_pthread_check_macro="_REENTRANT" -+ ;; -+ -+ aix* | freebsd*) -+ ax_pthread_check_macro="_THREAD_SAFE" -+ ;; -+ -+ *) -+ ax_pthread_check_macro="--" -+ ;; -+esac -+AS_IF([test "x$ax_pthread_check_macro" = "x--"], -+ [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" -+ -+ax_pthread_clang_warning=no -+ -+# Clang needs special handling, because older versions handle the -pthread -+# option in a rather... idiosyncratic way -+ -+if test "x$ax_pthread_clang" = "xyes"; then -+ -+ # Clang takes -pthread; it has never supported any other flag -+ -+ # (Note 1: This will need to be revisited if a system that Clang -+ # supports has POSIX threads in a separate library. This tends not -+ # to be the way of modern systems, but it's conceivable.) -+ -+ # (Note 2: On some systems, notably Darwin, -pthread is not needed -+ # to get POSIX threads support; the API is always present and -+ # active. We could reasonably leave PTHREAD_CFLAGS empty. But -+ # -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 -+ # during compilation"). They expect -pthread to be passed in only -+ # when source code is being compiled. -+ # -+ # Problem is, this is at odds with the way Automake and most other -+ # C build frameworks function, which is that the same flags used in -+ # compilation (CFLAGS) are also used in linking. Many systems -+ # supported by AX_PTHREAD require exactly this for POSIX threads -+ # support, and in fact it is often not straightforward to specify a -+ # flag that is used only in the compilation phase and not in -+ # linking. Such a scenario is extremely rare in practice. -+ # -+ # Even though use of the -pthread flag in linking would only print -+ # a warning, this can be a nuisance for well-run software projects -+ # that build with -Werror. So if the active version of Clang has -+ # this misfeature, we search for an option to squash it. -+ -+ AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread], -+ [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG], -+ [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown -+ # Create an alternate version of $ac_link that compiles and -+ # links in two steps (.c -> .o, .o -> exe) instead of one -+ # (.c -> exe), because the warning occurs only in the second -+ # step -+ ax_pthread_save_ac_link="$ac_link" -+ ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g' -+ ax_pthread_link_step=`$as_echo "$ac_link" | sed "$ax_pthread_sed"` -+ ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)" -+ ax_pthread_save_CFLAGS="$CFLAGS" -+ for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do -+ AS_IF([test "x$ax_pthread_try" = "xunknown"], [break]) -+ CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS" -+ ac_link="$ax_pthread_save_ac_link" -+ AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], -+ [ac_link="$ax_pthread_2step_ac_link" -+ AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])], -+ [break]) -+ ]) -+ done -+ ac_link="$ax_pthread_save_ac_link" -+ CFLAGS="$ax_pthread_save_CFLAGS" -+ AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no]) -+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try" -+ ]) -+ -+ case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in -+ no | unknown) ;; -+ *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;; -+ esac -+ -+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 -+# 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 -+ ax_pthread_save_CFLAGS="$CFLAGS" -+ ax_pthread_save_LIBS="$LIBS" -+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -+ LIBS="$PTHREAD_LIBS $LIBS" -+ -+ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED. -+ AC_CACHE_CHECK([for joinable pthread attribute], -+ [ax_cv_PTHREAD_JOINABLE_ATTR], -+ [ax_cv_PTHREAD_JOINABLE_ATTR=unknown -+ for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do -+ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include ], -+ [int attr = $ax_pthread_attr; return attr /* ; */])], -+ [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break], -+ []) -+ done -+ ]) -+ AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \ -+ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \ -+ test "x$ax_pthread_joinable_attr_defined" != "xyes"], -+ [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], -+ [$ax_cv_PTHREAD_JOINABLE_ATTR], -+ [Define to necessary symbol if this constant -+ uses a non-standard name on your system.]) -+ ax_pthread_joinable_attr_defined=yes -+ ]) -+ -+ AC_CACHE_CHECK([whether more special flags are required for pthreads], -+ [ax_cv_PTHREAD_SPECIAL_FLAGS], -+ [ax_cv_PTHREAD_SPECIAL_FLAGS=no -+ case $host_os in -+ solaris*) -+ ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS" -+ ;; -+ esac -+ ]) -+ AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \ -+ test "x$ax_pthread_special_flags_added" != "xyes"], -+ [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS" -+ ax_pthread_special_flags_added=yes]) -+ -+ AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT], -+ [ax_cv_PTHREAD_PRIO_INHERIT], -+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]], -+ [[int i = PTHREAD_PRIO_INHERIT;]])], -+ [ax_cv_PTHREAD_PRIO_INHERIT=yes], -+ [ax_cv_PTHREAD_PRIO_INHERIT=no]) -+ ]) -+ AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \ -+ test "x$ax_pthread_prio_inherit_defined" != "xyes"], -+ [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.]) -+ ax_pthread_prio_inherit_defined=yes -+ ]) -+ -+ CFLAGS="$ax_pthread_save_CFLAGS" -+ LIBS="$ax_pthread_save_LIBS" -+ -+ # More AIX lossage: compile with *_r variant -+ if test "x$GCC" != "xyes"; then -+ case $host_os in -+ aix*) -+ AS_CASE(["x/$CC"], -+ [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6], -+ [#handle absolute path differently from PATH based program lookup -+ AS_CASE(["x$CC"], -+ [x/*], -+ [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])], -+ [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])]) -+ ;; -+ esac -+ fi -+fi -+ -+test -n "$PTHREAD_CC" || PTHREAD_CC="$CC" -+ -+AC_SUBST([PTHREAD_LIBS]) -+AC_SUBST([PTHREAD_CFLAGS]) -+AC_SUBST([PTHREAD_CC]) -+ -+# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND: -+if test "x$ax_pthread_ok" = "xyes"; then -+ ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1]) -+ : -+else -+ ax_pthread_ok=no -+ $2 -+fi -+AC_LANG_POP -+])dnl AX_PTHREAD