summaryrefslogtreecommitdiff
path: root/wscript
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2021-03-29 16:30:37 +1100
committerAndrew Bartlett <abartlet@samba.org>2021-04-07 02:17:34 +0000
commitff1c3af603b47a7e8f9faad8d1c2e4a489559155 (patch)
tree57e4e58e85b46fcdacc26dd14168d0bdf9057fe4 /wscript
parent4d3b6506d30e4bf302f832493dad00a83b73d370 (diff)
downloadsamba-ff1c3af603b47a7e8f9faad8d1c2e4a489559155.tar.gz
build: Only add -Wl,--as-needed when supported
If -Wl,--as-needed is added to EXTRA_LDFLAGS (via ADD_LDFLAGS, as per commit 996560191ac6bd603901dcd6c0de5d239e019ef4) then on some platforms (at least CentOS 8 and Fedora 33), any indirect/recursive dependencies (i.e. private libraries) are added to both the binary (reqid_test in the CTDB case) and to samba-util.so. However, only samba-util.so has rpath set to find private libraries. When ld.so tries to resolve these dependencies for the binary it fails. This may be a bug on those platforms, but it occurs reliably and our users will also hit the bug. For binaries that have other private library dependencies (e.g. bundled talloc) rpath will contain the private library directory so the duplicate private library dependencies are then found... that is, when it works, it works by accident! For some reason (deep in waf or wafsamba) if -Wl,--as-needed is added to LINKFLAGS (as is done in conf.add_as_needed()) then it works: the direct dependencies are only added to samba-util.so and the same depenencies (indirect dependencies for binaries) are not added incorrectly to the binaries. So, without changing 1/2 of waf/wafsamba the simplest fix is to revert to adding -Wl,--as-needed to LINKFLAGS, which was the case before commit 996560191ac6bd603901dcd6c0de5d239e019ef4. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14288 Signed-off-by: Amitay Isaacs <amitay@gmail.com> Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Bjoern Jacke <bj@sernet.de> Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Diffstat (limited to 'wscript')
-rw-r--r--wscript4
1 files changed, 2 insertions, 2 deletions
diff --git a/wscript b/wscript
index 9c501e9441f..dc547b44aa4 100644
--- a/wscript
+++ b/wscript
@@ -336,8 +336,8 @@ def configure(conf):
# allows us to find problems on our development hosts faster.
# It also results in faster load time.
- conf.ADD_LDFLAGS('-Wl,--as-needed', testflags=True)
-
+ if conf.CHECK_LDFLAGS('-Wl,--as-needed'):
+ conf.env.append_unique('LINKFLAGS', '-Wl,--as-needed')
if not conf.CHECK_NEED_LC("-lc not needed"):
conf.ADD_LDFLAGS('-lc', testflags=False)