package/gnutls: disable for static build

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] 6b74888679

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>
2017.05.x
Bernd Kuhls 2017-05-25 18:34:43 +02:00 committed by Thomas Petazzoni
parent 557f8d649d
commit 30ed9de2fd
10 changed files with 34 additions and 13 deletions

View 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

View 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

View 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

View 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

View 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"

View 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

View 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

View 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

View 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

View 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