package/gnutls: disable for static build
authorBernd Kuhls <bernd.kuhls@t-online.de>
Thu, 25 May 2017 16:34:43 +0000 (18:34 +0200)
committerThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Mon, 29 May 2017 20:52:34 +0000 (22:52 +0200)
The gnutils code uses __attribute__((constructor)) and
__attribute__((destructor)) to call constructor/desctructor when a
shared library is loaded.
Constructor/desctructor are not used when a static library is used
(except when if -Wl,--whole-archive -lgnutls -Wno-whole-archive is
used, not tested).

Even if gnutls initialization (_gnutls_global_init()) may be
called manually, the gnutls maintainer said it's not supported [1].

"Note that static linking applications with gnutls is not something
 supported. gnutls relies on library constructors and destructors
 which are not loaded when linking statically."

Now the gnutls script warns about static linking [2].

So disable gnutls statically by adding "depends on !BR2_STATIC_LIBS"
at Kconfig level and --disable-static in GNUTLS_CONF_OPTS.

Fixes:
[taskd] http://autobuild.buildroot.net/results/c2d/c2dd5c1c9dc87d2943c15e58ee56e67d7375368c
[ffmpeg] http://autobuild.buildroot.net/results/892/8926d319d6d1cd1ee72239ad7d9ca869d2355628
[sngrep] http://autobuild.buildroot.net/results/f7f/f7fb42d3742f6f01000a0d181e0c785640284405

[1] https://gitlab.com/gnutls/gnutls/issues/203
[2] https://gitlab.com/gnutls/gnutls/commit/6b748886799f88ddee9721dba4fc4d52854832ae

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
[Romain: merge our two patches together
    add some option comment
    disable static libgnutls.a
    add sngrep autobuilder reference]
Signed-off-by: Romain Naour <romain.naour@gmail.com>
Tested-by: Bernd Kuhls <bernd.kuhls@t-online.de>
[Thomas: do not disable libgnutls.a]
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
package/aiccu/Config.in
package/connman/Config.in
package/gnutls/Config.in
package/libmicrohttpd/Config.in
package/libsoup/Config.in
package/network-manager/Config.in
package/samba4/Config.in
package/taskd/Config.in
package/vpnc/Config.in
package/webkitgtk/Config.in

index b346328dcc7eab9bba23568e3f72cdcd8c9e185b..a2d6100171995eadf6b701a6258b7af16560c088 100644 (file)
@@ -1,5 +1,6 @@
 config BR2_PACKAGE_AICCU
        bool "aiccu"
+       depends on !BR2_STATIC_LIBS # gnutls
        depends on BR2_USE_WCHAR
        depends on BR2_TOOLCHAIN_HAS_THREADS
        depends on BR2_USE_MMU # fork()
@@ -18,6 +19,7 @@ config BR2_PACKAGE_AICCU
 
          http://www.sixxs.net/tools/aiccu/
 
-comment "aiccu needs a toolchain w/ wchar, threads"
+comment "aiccu needs a toolchain w/ wchar, threads, dynamic library"
        depends on BR2_USE_MMU
-       depends on !(BR2_USE_WCHAR && BR2_TOOLCHAIN_HAS_THREADS)
+       depends on !BR2_USE_WCHAR || !BR2_TOOLCHAIN_HAS_THREADS \
+               || BR2_STATIC_LIBS
index 28cf16861c8d89370b0ee04aa0a4561ef9bd186b..253c604e88c5f0115853a3d7e7a17ed7665703a7 100644 (file)
@@ -33,12 +33,16 @@ config BR2_PACKAGE_CONNMAN_WIFI
 
 config BR2_PACKAGE_CONNMAN_WISPR
        bool "enable WISPr support"
+       depends on !BR2_STATIC_LIBS # gnutls
        select BR2_PACKAGE_GNUTLS
        help
          Enable support for Wireless Internet Service Provider
          roaming (WISPr). A RADIUS server is used to authenticate the
          subscriber's credentials.
 
+comment "connman WISPr needs a toolchain w/ dynamic library"
+       depends on BR2_STATIC_LIBS
+
 config BR2_PACKAGE_CONNMAN_BLUETOOTH
        bool "enable Bluetooth support"
        help
index 1af00cd71ac6f02e5dbd3f1757d1054ea7409036..1db069c655362ba68a4915288cc2a47a5c48b9a4 100644 (file)
@@ -1,5 +1,7 @@
 config BR2_PACKAGE_GNUTLS
        bool "gnutls"
+       # https://gitlab.com/gnutls/gnutls/issues/203
+       depends on !BR2_STATIC_LIBS
        depends on BR2_USE_WCHAR
        select BR2_PACKAGE_LIBTASN1
        select BR2_PACKAGE_LIBUNISTRING
@@ -22,5 +24,5 @@ config BR2_PACKAGE_GNUTLS_TOOLS
 
 endif
 
-comment "gnutls needs a toolchain w/ wchar"
-       depends on !BR2_USE_WCHAR
+comment "gnutls needs a toolchain w/ wchar, dynamic library"
+       depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS
index 302dbb7ac8adf43d3eed280c46954ba0942a87a7..2a685ca408d7d1dce00b3e77665909169e29cd9b 100644 (file)
@@ -12,14 +12,15 @@ if BR2_PACKAGE_LIBMICROHTTPD
 config BR2_PACKAGE_LIBMICROHTTPD_SSL
        bool "https support"
        depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt
+       depends on !BR2_STATIC_LIBS # gnutls
        depends on BR2_USE_WCHAR
        select BR2_PACKAGE_GNUTLS
        select BR2_PACKAGE_LIBGCRYPT
        help
          Enable HTTPS (SSL) support.
 
-comment "libmicrohttpd https support needs a toolchain w/ wchar"
-       depends on !BR2_USE_WCHAR
+comment "libmicrohttpd https support needs a toolchain w/ wchar, dynamic library"
+       depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS
 
 endif
 
index bc0ba950aad2995f2ae5a41c6c93a78b4af508a6..236d3c428a83a4454326e30ed1d60de0cf8bd656 100644 (file)
@@ -22,11 +22,15 @@ config BR2_PACKAGE_LIBSOUP_GNOME
 
 config BR2_PACKAGE_LIBSOUP_SSL
        bool "https support"
+       depends on !BR2_STATIC_LIBS # gnutls
        select BR2_PACKAGE_GLIB_NETWORKING
        select BR2_PACKAGE_GNUTLS
        help
          Enable HTTPS (SSL) support.
 
+comment "libsoup https support needs a toolchain w/ dynamic library"
+       depends on BR2_STATIC_LIBS
+
 endif
 
 comment "libsoup needs a toolchain w/ wchar, threads"
index c9dabfdd42f4d0af7ddf2d84b5913b7b341172f3..04bb651325495811fbc58c17e7163c2c4cac920f 100644 (file)
@@ -1,6 +1,7 @@
 config BR2_PACKAGE_NETWORK_MANAGER
        bool "networkmanager"
        depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt
+       depends on !BR2_STATIC_LIBS # gnutls
        depends on BR2_USE_MMU # dbus
        depends on BR2_PACKAGE_HAS_UDEV
        # Tested with 3.2, but may even work with earlier versions
@@ -57,8 +58,8 @@ comment "pppd support needs a glibc or uClibc toolchain"
 
 endif
 
-comment "NetworkManager needs udev /dev management and a glibc toolchain w/ headers >= 3.7"
+comment "NetworkManager needs udev /dev management and a glibc toolchain w/ headers >= 3.7, dynamic library"
        depends on BR2_USE_MMU
        depends on !BR2_PACKAGE_HAS_UDEV || \
                !BR2_TOOLCHAIN_HEADERS_AT_LEAST_3_7 || \
-               !BR2_TOOLCHAIN_USES_GLIBC
+               !BR2_TOOLCHAIN_USES_GLIBC || BR2_STATIC_LIBS
index 447418568dade95f373cff5bad2cdf663b4d7254..ba48b8ab3717cb5701a5b9f2bd6e1830f8e3d42f 100644 (file)
@@ -10,7 +10,7 @@ config BR2_PACKAGE_SAMBA4
        depends on BR2_USE_WCHAR # python
        depends on BR2_TOOLCHAIN_HAS_NATIVE_RPC
        depends on BR2_TOOLCHAIN_HAS_THREADS_NPTL # python -> libffi
-       depends on !BR2_STATIC_LIBS # python
+       depends on !BR2_STATIC_LIBS # python, gnutls
        depends on !BR2_nios2 # binary too large, relocations don't fit
        depends on BR2_TOOLCHAIN_HAS_SYNC_4
        select BR2_PACKAGE_E2FSPROGS
index 7d26abaae3850f471db7faa7c170f9a90bb7c18f..19d123fb5910c1e166f5c3b6e79e9afcec46dd38 100644 (file)
@@ -1,5 +1,6 @@
 config BR2_PACKAGE_TASKD
        bool "taskd"
+       depends on !BR2_STATIC_LIBS # gnutls
        depends on BR2_USE_WCHAR # gnutls
        depends on BR2_USE_MMU # fork()
        depends on BR2_INSTALL_LIBSTDCPP
@@ -11,6 +12,7 @@ config BR2_PACKAGE_TASKD
 
          http://taskwarrior.org/
 
-comment "taskd needs a toolchain w/ C++, wchar"
+comment "taskd needs a toolchain w/ C++, wchar, dynamic library"
        depends on BR2_USE_MMU
-       depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP
+       depends on !BR2_USE_WCHAR || !BR2_INSTALL_LIBSTDCPP || \
+               BR2_STATIC_LIBS
index 2049c457314ba7933ff8e47343a13964ea0bd4d3..6455b0d87abe356ead6622fff90690756965594f 100644 (file)
@@ -1,6 +1,7 @@
 config BR2_PACKAGE_VPNC
        bool "vpnc"
        depends on BR2_PACKAGE_LIBGPG_ERROR_ARCH_SUPPORTS # libgcrypt
+       depends on !BR2_STATIC_LIBS # gnutls
        depends on BR2_USE_MMU # fork()
        depends on BR2_USE_WCHAR # gnutls
        select BR2_PACKAGE_LIBGCRYPT
@@ -15,6 +16,6 @@ config BR2_PACKAGE_VPNC
 
          http://www.unix-ag.uni-kl.de/~massar/vpnc
 
-comment "vpnc needs a toolchain w/ wchar"
+comment "vpnc needs a toolchain w/ wchar, dynamic library"
        depends on BR2_USE_MMU
-       depends on !BR2_USE_WCHAR
+       depends on !BR2_USE_WCHAR || BR2_STATIC_LIBS
index 25f6fad49c4f6b07eb0ee2a7f7eb8850e31c2738..0e53d06379ecc17958e73674ee1b7b308f0abf5b 100644 (file)
@@ -49,11 +49,15 @@ if BR2_PACKAGE_WEBKITGTK
 
 config BR2_PACKAGE_WEBKITGTK_HTTPS
        bool "HTTPS support"
+       depends on !BR2_STATIC_LIBS # gnutls -> libsoup
        select BR2_PACKAGE_CA_CERTIFICATES # runtime
        select BR2_PACKAGE_LIBSOUP_SSL
        help
          Enable HTTPS protocol support.
 
+comment "webkitgtk https support needs a toolchain w/ dynamic library"
+       depends on BR2_STATIC_LIBS
+
 config BR2_PACKAGE_WEBKITGTK_MULTIMEDIA
        bool "multimedia support"
        select BR2_PACKAGE_GSTREAMER1