|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 06/20] tools: Correct PTHREAD options in config/StdGNU.mk
On Fri, 2012-03-16 at 16:26 +0000, Ian Jackson wrote:
> It is not correct to say -lpthread. The correct option is -pthread,
> which may have sundry other effects on code generation etc. It needs
> to be passed both to compilation and linking.
I guess this is a gcc-ism rather than a Linux-ism and so applies to the
BSDs too (at least so long as they use gcc and not clang)?
> Fix the configure test to test -pthread, and plumb the resulting flag
> through to PTHREAD_{CFLAGS,LDFLAGS} in Tools.mk; also substitute
> PTHREAD_LIBS (although this will currently always be empty).
> Remove PTHREAD_LIBS setting from StdGNU.mk.
>
> Fix the one user (libxc) to use PTHREAD_{CFLAGS,LDFLAGS} too.
>
> There are still some other users in tree which pass -pthread or
> -lpthread by adding it as a literal to their own compiler options.
> These will be fixed in a later patch.
>
> Signed-off-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx>
> Cc: Roger Pau Monne <roger.pau@xxxxxxxxxxxxx>
> ---
> config/StdGNU.mk | 1 -
> config/Tools.mk.in | 4 ++
> tools/configure | 95
> +++++++++++++++++++++++++++++++++++---------------
> tools/configure.ac | 5 ++-
> tools/libxc/Makefile | 4 ++-
> tools/m4/pthread.m4 | 41 +++++++++++++++++++++
> tools/m4/savevar.m4 | 6 +++
> 7 files changed, 124 insertions(+), 32 deletions(-)
> create mode 100644 tools/m4/pthread.m4
> create mode 100644 tools/m4/savevar.m4
>
> diff --git a/config/StdGNU.mk b/config/StdGNU.mk
> index e2c9335..e2f2e1e 100644
> --- a/config/StdGNU.mk
> +++ b/config/StdGNU.mk
> @@ -67,7 +67,6 @@ XEN_CONFIG_DIR = $(CONFIG_DIR)/xen
> XEN_SCRIPT_DIR = $(XEN_CONFIG_DIR)/scripts
>
> SOCKET_LIBS =
> -PTHREAD_LIBS = -lpthread
> UTIL_LIBS = -lutil
> DLOPEN_LIBS = -ldl
>
> diff --git a/config/Tools.mk.in b/config/Tools.mk.in
> index 057b055..8247e4a 100644
> --- a/config/Tools.mk.in
> +++ b/config/Tools.mk.in
> @@ -23,6 +23,10 @@ PREPEND_LIB := @PREPEND_LIB@
> APPEND_INCLUDES := @APPEND_INCLUDES@
> APPEND_LIB := @APPEND_LIB@
>
> +PTHREAD_CFLAGS := @PTHREAD_CFLAGS@
> +PTHREAD_LDFLAGS := @PTHREAD_LDFLAGS@
> +PTHREAD_LIBS := @PTHREAD_LIBS@
> +
> # Download GIT repositories via HTTP or GIT's own protocol?
> # GIT's protocol is faster and more robust, when it works at all (firewalls
> # may block it). We make it the default, but if your GIT repository downloads
> diff --git a/tools/configure b/tools/configure
> index c686130..7ee4e3e 100755
> --- a/tools/configure
> +++ b/tools/configure
> @@ -602,6 +602,9 @@ POW_LIB
> LIBOBJS
> ALLOCA
> libiconv
> +PTHREAD_LIBS
> +PTHREAD_LDFLAGS
> +PTHREAD_CFLAGS
> libgcrypt
> libext2fs
> system_aio
> @@ -3844,6 +3847,9 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed
> 's/ /-/g'`;; esac
>
>
>
> +
> +
> +
> # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf
> -*-
> # serial 1 (pkg-config-0.24)
> #
> @@ -3908,6 +3914,16 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed
> 's/ /-/g'`;; esac
>
>
>
> +
> +
> +
> +
> +
> +
> +
> +
> +
> +
> # Enable/disable options
> # Check whether --enable-githttp was given.
> if test "${enable_githttp+set}" = set; then :
> @@ -7010,47 +7026,70 @@ else
> fi
>
>
> -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_create in
> -lpthread" >&5
> -$as_echo_n "checking for pthread_create in -lpthread... " >&6; }
> -if test "${ac_cv_lib_pthread_pthread_create+set}" = set; then :
> +
> + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread flag" >&5
> +$as_echo_n "checking for pthread flag... " >&6; }
> +if test "${ax_cv_pthread_flags+set}" = set; then :
> $as_echo_n "(cached) " >&6
> else
> - ac_check_lib_save_LIBS=$LIBS
> -LIBS="-lpthread $LIBS"
> -cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> +
> + ax_cv_pthread_flags=-pthread
> +
> + PTHREAD_CFLAGS="$ax_cv_pthread_flags"
> + PTHREAD_LDFLAGS="$ax_cv_pthread_flags"
> + PTHREAD_LIBS=""
> +
> +
> + saved_CFLAGS="$CFLAGS"
> +
> + saved_LDFLAGS="$LDFLAGS"
> +
> + saved_LIBS="$LIBS"
> +
> +
> + CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
> +
> + LDFLAGS="$LDFLAGS $PTHREAD_LDFLAGS"
> +
> + LIBS="$LIBS $PTHREAD_LIBS"
> +
> + cat confdefs.h - <<_ACEOF >conftest.$ac_ext
> /* end confdefs.h. */
>
> -/* Override any GCC internal prototype to avoid an error.
> - Use char because int might match the return type of a GCC
> - builtin and then its argument prototype would still apply. */
> -#ifdef __cplusplus
> -extern "C"
> -#endif
> -char pthread_create ();
> -int
> -main ()
> -{
> -return pthread_create ();
> - ;
> - return 0;
> +#include <pthread.h>
> +int main(void) {
> + pthread_atfork(0,0,0);
> + pthread_create(0,0,0,0);
> }
> +
> _ACEOF
> if ac_fn_c_try_link "$LINENO"; then :
> - ac_cv_lib_pthread_pthread_create=yes
> +
> else
> - ac_cv_lib_pthread_pthread_create=no
> + ax_cv_pthread_flags=failed
> fi
> rm -f core conftest.err conftest.$ac_objext \
> conftest$ac_exeext conftest.$ac_ext
> -LIBS=$ac_check_lib_save_LIBS
> -fi
> -{ $as_echo "$as_me:${as_lineno-$LINENO}: result:
> $ac_cv_lib_pthread_pthread_create" >&5
> -$as_echo "$ac_cv_lib_pthread_pthread_create" >&6; }
> -if test "x$ac_cv_lib_pthread_pthread_create" = x""yes; then :
>
> -else
> - as_fn_error $? "Could not find libpthread" "$LINENO" 5
> + CFLAGS="$saved_CFLAGS"
> +
> + LDFLAGS="$saved_LDFLAGS"
> +
> + LIBS="$saved_LIBS"
> +
> +
> fi
> +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_pthread_flags" >&5
> +$as_echo "$ax_cv_pthread_flags" >&6; }
> + if test "x$ax_cv_pthread_flags" = xfailed; then
> + as_fn_error $? "-pthread does not work" "$LINENO" 5
> + fi
> +
> + PTHREAD_CFLAGS="$ax_cv_pthread_flags"
> + PTHREAD_LDFLAGS="$ax_cv_pthread_flags"
> + PTHREAD_LIBS=""
> +
> +
>
> { $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt"
> >&5
> $as_echo_n "checking for clock_gettime in -lrt... " >&6; }
> diff --git a/tools/configure.ac b/tools/configure.ac
> index 3d53a95..3da0c82 100644
> --- a/tools/configure.ac
> +++ b/tools/configure.ac
> @@ -23,6 +23,7 @@ AC_USE_SYSTEM_EXTENSIONS
> AC_CANONICAL_HOST
>
> # M4 Macro includes
> +m4_include([m4/savevar.m4])
> m4_include([m4/enable_feature.m4])
> m4_include([m4/disable_feature.m4])
> m4_include([m4/path_or_fail.m4])
> @@ -34,6 +35,7 @@ m4_include([m4/set_cflags_ldflags.m4])
> m4_include([m4/uuid.m4])
> m4_include([m4/pkg.m4])
> m4_include([m4/curses.m4])
> +m4_include([m4/pthread.m4])
>
> # Enable/disable options
> AX_ARG_ENABLE_AND_EXPORT([githttp], [Download GIT repositories via HTTP])
> @@ -123,8 +125,7 @@ AC_CHECK_LIB([ext2fs], [ext2fs_open2], [libext2fs="y"],
> [libext2fs="n"])
> AC_SUBST(libext2fs)
> AC_CHECK_LIB([gcrypt], [gcry_md_hash_buffer], [libgcrypt="y"],
> [libgcrypt="n"])
> AC_SUBST(libgcrypt)
> -AC_CHECK_LIB([pthread], [pthread_create], [] ,
> - [AC_MSG_ERROR([Could not find libpthread])])
> +AX_CHECK_PTHREAD
> AC_CHECK_LIB([rt], [clock_gettime])
> AC_CHECK_LIB([yajl], [yajl_alloc], [],
> [AC_MSG_ERROR([Could not find yajl])])
> diff --git a/tools/libxc/Makefile b/tools/libxc/Makefile
> index 55eb755..a1ba134 100644
> --- a/tools/libxc/Makefile
> +++ b/tools/libxc/Makefile
> @@ -73,6 +73,8 @@ CFLAGS += -I. $(CFLAGS_xeninclude)
> # Needed for posix_fadvise64() in xc_linux.c
> CFLAGS-$(CONFIG_Linux) += -D_GNU_SOURCE
>
> +CFLAGS += $(PTHREAD_CFLAGS)
> +
> # Define this to make it possible to run valgrind on code linked with these
> # libraries.
> #CFLAGS += -DVALGRIND -O0 -ggdb3
> @@ -157,7 +159,7 @@ libxenctrl.so.$(MAJOR): libxenctrl.so.$(MAJOR).$(MINOR)
> ln -sf $< $@
>
> libxenctrl.so.$(MAJOR).$(MINOR): $(CTRL_PIC_OBJS)
> - $(CC) $(LDFLAGS) -Wl,$(SONAME_LDFLAG) -Wl,libxenctrl.so.$(MAJOR)
> $(SHLIB_LDFLAGS) -o $@ $^ $(DLOPEN_LIBS) $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
> + $(CC) $(LDFLAGS) $(PTHREAD_LDFLAGS) -Wl,$(SONAME_LDFLAG)
> -Wl,libxenctrl.so.$(MAJOR) $(SHLIB_LDFLAGS) -o $@ $^ $(DLOPEN_LIBS)
> $(PTHREAD_LIBS) $(APPEND_LDFLAGS)
>
> # libxenguest
>
> diff --git a/tools/m4/pthread.m4 b/tools/m4/pthread.m4
> new file mode 100644
> index 0000000..57ea85c
> --- /dev/null
> +++ b/tools/m4/pthread.m4
> @@ -0,0 +1,41 @@
> +# We define, separately, PTHREAD_CFLAGS, _LDFLAGS and _LIBS
> +# even though currently we don't set them very separately.
> +# This means that the makefiles will not need to change in
> +# the future if we make the test more sophisticated.
> +
> +AC_DEFUN([AX_PTHREAD_CV2VARS],[
> + PTHREAD_CFLAGS="$ax_cv_pthread_flags"
> + PTHREAD_LDFLAGS="$ax_cv_pthread_flags"
> + PTHREAD_LIBS=""
> +])
> +
> +# We invoke AX_PTHREAD_VARS with the name of another macro
> +# which is then expanded once for each variable.
> +AC_DEFUN([AX_PTHREAD_VARS],[$1(CFLAGS) $1(LDFLAGS) $1(LIBS)])
> +
> +AC_DEFUN([AX_PTHREAD_VAR_APPLY],[
> + $1="$$1 $PTHREAD_$1"
> +])
> +AC_DEFUN([AX_PTHREAD_VAR_SUBST],[AC_SUBST(PTHREAD_$1)])
> +
> +AC_DEFUN([AX_CHECK_PTHREAD],[
> + AC_CACHE_CHECK([for pthread flag], [ax_cv_pthread_flags], [
> + ax_cv_pthread_flags=-pthread
> + AX_PTHREAD_CV2VARS
> + AX_PTHREAD_VARS([AX_SAVEVAR_SAVE])
> + AX_PTHREAD_VARS([AX_PTHREAD_VAR_APPLY])
> + AC_LINK_IFELSE([
> +#include <pthread.h>
> +int main(void) {
> + pthread_atfork(0,0,0);
> + pthread_create(0,0,0,0);
> +}
> +],[],[ax_cv_pthread_flags=failed])
> + AX_PTHREAD_VARS([AX_SAVEVAR_RESTORE])
> + ])
> + if test "x$ax_cv_pthread_flags" = xfailed; then
> + AC_MSG_ERROR([-pthread does not work])
> + fi
> + AX_PTHREAD_CV2VARS
> + AX_PTHREAD_VARS([AX_PTHREAD_VAR_SUBST])
> +])
> diff --git a/tools/m4/savevar.m4 b/tools/m4/savevar.m4
> new file mode 100644
> index 0000000..2156bee
> --- /dev/null
> +++ b/tools/m4/savevar.m4
> @@ -0,0 +1,6 @@
> +AC_DEFUN([AX_SAVEVAR_SAVE],[
> + saved_$1="$$1"
> +])
> +AC_DEFUN([AX_SAVEVAR_RESTORE],[
> + $1="$saved_$1"
> +])
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |