diff options
author | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2019-04-07 21:36:05 +0200 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2019-04-07 21:36:05 +0200 |
commit | cb5c042a181fba3540952991b48382fabedaf88c (patch) | |
tree | 9844249f3536956e627d24a46394b920655ce8ee | |
parent | 59305c8b98d1046806e1cb80e2c7ba023c6f49cd (diff) | |
parent | dd0d49c4ef08ddd0e6cb8e689f07ee84b51c2974 (diff) | |
download | nx-libs-cb5c042a181fba3540952991b48382fabedaf88c.tar.gz nx-libs-cb5c042a181fba3540952991b48382fabedaf88c.tar.bz2 nx-libs-cb5c042a181fba3540952991b48382fabedaf88c.zip |
Merge branch 'Ionic-bugfix/libXcomp-pthread-underlinking' into 3.6.x
Attributes GH PR #791: https://github.com/ArcticaProject/nx-libs/pull/791
-rw-r--r-- | debian/patches/2004_enforce-lpthread.patch | 33 | ||||
-rw-r--r-- | debian/patches/series | 1 | ||||
-rw-r--r-- | m4/ax_cxx_compile_stdcxx.m4 | 45 | ||||
-rw-r--r-- | m4/ax_pthread.m4 | 42 | ||||
-rw-r--r-- | nxcomp/src/Makefile.am | 2 | ||||
-rwxr-xr-x | nxdialog/bin/nxdialog | 2 | ||||
-rw-r--r-- | nxdialog/m4/.keep | 0 | ||||
-rw-r--r-- | nxproxy/configure.ac | 11 | ||||
l--------- | nxproxy/m4/ax_pthread.m4 | 1 | ||||
-rw-r--r-- | nxproxy/src/Makefile.am | 3 |
10 files changed, 49 insertions, 91 deletions
diff --git a/debian/patches/2004_enforce-lpthread.patch b/debian/patches/2004_enforce-lpthread.patch deleted file mode 100644 index 474feb0dd..000000000 --- a/debian/patches/2004_enforce-lpthread.patch +++ /dev/null @@ -1,33 +0,0 @@ -Description: Enforce -lpthread when linking nxcomp. -Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> -Abstract: - This is a workaround for a nasty libtool bug!!! - . - We actually compile libXcomp with pthread support, but libtool uses g++ - ... -nostdlib ... -pthread on Linux. -nostdlib causes -pthread to be - ignored. - . - According to GCC upstream, this is not a bug: - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 - . - GCC upstream insists that libtool needs to handle -pthread in a special - way when using -nostdlib. - . - A patch has been submitted to the libtool project: - http://lists.gnu.org/archive/html/libtool-patches/2013-11/msg00015.html - but never applied to the code base. Boo. - . - We will work around this bug by hard-coding the linking with pthread - support in libXcomp for now. - ---- a/nxcomp/src/Makefile.am -+++ b/nxcomp/src/Makefile.am -@@ -139,7 +139,7 @@ - libXcomp_la_LDFLAGS = \ - -version-number @LT_COMP_VERSION@ \ - -no-undefined \ -- $(PTHREAD_LDFLAGS) \ -+ $(PTHREAD_LDFLAGS) -lpthread \ - $(NULL) - - libXcompincludedir = $(includedir)/nx diff --git a/debian/patches/series b/debian/patches/series index 745ba5c80..e1ec9c56d 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,4 +1,3 @@ 2001_nx-X11_install-location.debian.patch 2002_xserver-xext_set-securitypolicy-path.debian.patch 2003_nxdialog-use-python3.patch -2004_enforce-lpthread.patch diff --git a/m4/ax_cxx_compile_stdcxx.m4 b/m4/ax_cxx_compile_stdcxx.m4 index 5032bba80..43087b2e6 100644 --- a/m4/ax_cxx_compile_stdcxx.m4 +++ b/m4/ax_cxx_compile_stdcxx.m4 @@ -33,19 +33,19 @@ # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> # Copyright (c) 2015 Paul Norman <penorman@mac.com> # Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> -# Copyright (c) 2016 Krzesimir Nowak <qdlacz@gmail.com> +# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com> +# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com> # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. -#serial 7 +#serial 11 dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro dnl (serial version number 13). -AX_REQUIRE_DEFINED([AC_MSG_WARN]) AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], [$1], [14], [ax_cxx_compile_alternatives="14 1y"], @@ -61,14 +61,6 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) AC_LANG_PUSH([C++])dnl ac_success=no - AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, - ax_cv_cxx_compile_cxx$1, - [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], - [ax_cv_cxx_compile_cxx$1=yes], - [ax_cv_cxx_compile_cxx$1=no])]) - if test x$ax_cv_cxx_compile_cxx$1 = xyes; then - ac_success=yes - fi m4_if([$2], [noext], [], [dnl if test x$ac_success = xno; then @@ -139,7 +131,6 @@ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl [define if the compiler supports basic C++$1 syntax]) fi AC_SUBST(HAVE_CXX$1) - m4_if([$1], [17], [AC_MSG_WARN([C++17 is not yet standardized, so the checks may change in incompatible ways anytime])]) ]) @@ -199,11 +190,13 @@ namespace cxx11 struct Base { + virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { + virtual ~Derived() override {} virtual void f() override {} }; @@ -587,20 +580,12 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ #error "This is not a C++ compiler" -#elif __cplusplus <= 201402L +#elif __cplusplus < 201703L #error "This is not a C++17 compiler" #else -#if defined(__clang__) - #define REALLY_CLANG -#else - #if defined(__GNUC__) - #define REALLY_GCC - #endif -#endif - #include <initializer_list> #include <utility> #include <type_traits> @@ -608,16 +593,12 @@ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ namespace cxx17 { -#if !defined(REALLY_CLANG) namespace test_constexpr_lambdas { - // TODO: test it with clang++ from git - constexpr int foo = [](){return 42;}(); } -#endif // !defined(REALLY_CLANG) namespace test::nested_namespace::definitions { @@ -852,12 +833,9 @@ namespace cxx17 } -#if !defined(REALLY_CLANG) namespace test_template_argument_deduction_for_class_templates { - // TODO: test it with clang++ from git - template <typename T1, typename T2> struct pair { @@ -876,7 +854,6 @@ namespace cxx17 } } -#endif // !defined(REALLY_CLANG) namespace test_non_type_auto_template_parameters { @@ -890,12 +867,9 @@ namespace cxx17 } -#if !defined(REALLY_CLANG) namespace test_structured_bindings { - // TODO: test it with clang++ from git - int arr[2] = { 1, 2 }; std::pair<int, int> pr = { 1, 2 }; @@ -927,14 +901,10 @@ namespace cxx17 const auto [ x3, y3 ] = f3(); } -#endif // !defined(REALLY_CLANG) -#if !defined(REALLY_CLANG) namespace test_exception_spec_type_system { - // TODO: test it with clang++ from git - struct Good {}; struct Bad {}; @@ -952,7 +922,6 @@ namespace cxx17 static_assert (std::is_same_v<Good, decltype(f(g1, g2))>); } -#endif // !defined(REALLY_CLANG) namespace test_inline_variables { @@ -977,6 +946,6 @@ namespace cxx17 } // namespace cxx17 -#endif // __cplusplus <= 201402L +#endif // __cplusplus < 201703L ]]) diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4 index 5fbf9fe0d..07a9cd265 100644 --- a/m4/ax_pthread.m4 +++ b/m4/ax_pthread.m4 @@ -82,7 +82,8 @@ # 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 25 +#arctica-serial 1 AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD]) AC_DEFUN([AX_PTHREAD], [ @@ -334,6 +335,42 @@ for ax_pthread_try_flag in $ax_pthread_flags; do PTHREAD_LIBS="-lpthread" ;; + -pthread) + AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) + PTHREAD_CFLAGS="$ax_pthread_try_flag" + + if test "x$GCC" = "xyes"; then + # Thanks to libtool bug #13550, we have to consider the possibility + # that -nostdlib will be used during compilation at some point. + # Try to determine the first pthread library available, + # ignoring any other variants. + for ax_pthread_try_lib_flag in $ax_pthread_flags; do + case $ax_pthread_try_lib_flag in + none|-*|pthread-config) + continue + ;; + + *) + PTHREAD_LIBS="-l$ax_pthread_try_lib_flag" + + ax_pthread_save_LIBS="$LIBS" + LIBS="$PTHREAD_LIBS $LIBS" + + # We only need to link a trivial program with + # the current library value. + # Linking should fail if the library doesn't + # exist, otherwise we should be good to go. + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], + [LIBS="$ax_pthread_save_LIBS" + break], + [LIBS="$ax_pthread_save_LIBS" + PTHREAD_LIBS=""]) + ;; + esac + done + fi + ;; + -*) AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag]) PTHREAD_CFLAGS="$ax_pthread_try_flag" @@ -438,7 +475,8 @@ if test "x$ax_pthread_ok" = "xyes"; then 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]) ]) diff --git a/nxcomp/src/Makefile.am b/nxcomp/src/Makefile.am index 682ddbaca..9cecae88e 100644 --- a/nxcomp/src/Makefile.am +++ b/nxcomp/src/Makefile.am @@ -139,7 +139,7 @@ AM_CPPFLAGS = \ libXcomp_la_LDFLAGS = \ -version-number @LT_COMP_VERSION@ \ -no-undefined \ - $(PTHREAD_LDFLAGS) \ + @PTHREAD_LIBS@ \ $(NULL) libXcompincludedir = $(includedir)/nx diff --git a/nxdialog/bin/nxdialog b/nxdialog/bin/nxdialog index 0678ee4f2..bce1886e3 100755 --- a/nxdialog/bin/nxdialog +++ b/nxdialog/bin/nxdialog @@ -47,7 +47,7 @@ # # Examples: # nxdialog --dialog yesno --message "message text" --caption "message title" --parent 0 -# nxdialog --dialog yesno --message "message text" --caption "message title" --window 0x123456 --parent 0 +# nxdialog --dialog pulldown --message "message text" --caption "message title" --window 0x123456 --parent 0 from __future__ import print_function diff --git a/nxdialog/m4/.keep b/nxdialog/m4/.keep new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/nxdialog/m4/.keep diff --git a/nxproxy/configure.ac b/nxproxy/configure.ac index 6a0a41cbb..2ca64f61e 100644 --- a/nxproxy/configure.ac +++ b/nxproxy/configure.ac @@ -28,17 +28,6 @@ NX_DEFAULT_OPTIONS NX_TARGET_USE_ELF -dnl This is a workaround for a nasty libtool bug. -dnl We actually compile libXcomp with pthread support, but libtool uses g++ ... -nostdlib ... -pthread -dnl on Linux. -nostdlib causes -pthread to be ignored. -dnl According to GCC upstream, this is not a bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460 -dnl GCC upstream insists that libtool needs to handle -pthread in a special way when using -nostdlib. -dnl A patch has been submitted to the libtool project: http://lists.gnu.org/archive/html/libtool-patches/2013-11/msg00015.html -dnl but never applied to the code base. Boo. -dnl We will work around this bug by using AX_PTHREAD and linking with pthread support in all consumers of -dnl libXcomp for now. -AX_PTHREAD([], AC_MSG_ERROR([no POSIX threads support detected])) - AC_CONFIG_FILES([ Makefile man/Makefile diff --git a/nxproxy/m4/ax_pthread.m4 b/nxproxy/m4/ax_pthread.m4 deleted file mode 120000 index 156af3df3..000000000 --- a/nxproxy/m4/ax_pthread.m4 +++ /dev/null @@ -1 +0,0 @@ -../../m4/ax_pthread.m4
\ No newline at end of file diff --git a/nxproxy/src/Makefile.am b/nxproxy/src/Makefile.am index fbe52cbf8..20ec7022e 100644 --- a/nxproxy/src/Makefile.am +++ b/nxproxy/src/Makefile.am @@ -9,12 +9,10 @@ nxproxy_SOURCES = \ $(NULL) nxproxy_LDADD = \ - @PTHREAD_LIBS@ \ -L$(top_srcdir)/../nxcomp/src/.libs -lXcomp \ $(NULL) nxproxy_LDFLAGS = \ - $(PTHREAD_LDFLAGS) \ $(NULL) if TARGET_ELF @@ -25,7 +23,6 @@ endif TARGET_ELF nxproxy_CFLAGS = \ $(BASE_CFLAGS) \ - $(PTHREAD_CFLAGS) \ $(NULL) AM_CPPFLAGS = \ |