diff options
author | Jeremy Allison <jra@samba.org> | 2021-05-13 13:20:17 -0700 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2021-05-14 01:50:25 +0000 |
commit | 9be3be8aca8d1ee198791c5ffebeddf997372caf (patch) | |
tree | 908ce8193bc2eac8b9a29f5b6c61539513086bda /wscript | |
parent | 2b9a1feae7364a294b024dbeaf6a0202bbad468a (diff) | |
download | samba-9be3be8aca8d1ee198791c5ffebeddf997372caf.tar.gz |
build: wscript. Fix the build on FreeBSD with the clang ld.lld-XX linker.
FreeBSD is broken. It doesn't include 'extern char **environ'
in any shared library, but statically inside crt0.o.
If we're running on a FreeBSD with the GNU linker ld we
can get around this by explicitly telling the linker to
ignore 'environ' as an unresolved symbol in a shared library.
However, the clang linker ld.lld-XX is broken in that it
doesn't have that option.
First try to see if have '-Wl,--ignore-unresolved-symbol,environ'
and just use that if so.
If not, we have to use '-Wl,--allow-shlib-undefined' instead
and remove all instances of '-Wl,-no-undefined'.
Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Martin Schwenke <martin@meltin.net>
Autobuild-User(master): Jeremy Allison <jra@samba.org>
Autobuild-Date(master): Fri May 14 01:50:25 UTC 2021 on sn-devel-184
Diffstat (limited to 'wscript')
-rw-r--r-- | wscript | 28 |
1 files changed, 28 insertions, 0 deletions
@@ -380,6 +380,34 @@ def configure(conf): msg="Checking compiler for full RELRO support"): conf.env['ENABLE_RELRO'] = True + # + # FreeBSD is broken. It doesn't include 'extern char **environ' + # in any shared library, but statically inside crt0.o. + # + # If we're running on a FreeBSD with the GNU linker ld we + # can get around this by explicitly telling the linker to + # ignore 'environ' as an unresolved symbol in a shared library. + # + # However, the clang linker ld.lld-XX is broken in that it + # doesn't have that option. + # + # First try to see if have '-Wl,--ignore-unresolved-symbol,environ' + # and just use that if so. + # + # If not, we have to use '-Wl,--allow-shlib-undefined' instead + # and remove all instances of '-Wl,-no-undefined'. + + if sys.platform.startswith('freebsd'): + # Do we have Wl,--ignore-unresolved-symbol,environ ? + flag_added = conf.ADD_LDFLAGS('-Wl,--ignore-unresolved-symbol,environ', testflags=True) + if not flag_added: + # No, fall back to -Wl,--allow-shlib-undefined. + conf.ADD_LDFLAGS('-Wl,--allow-shlib-undefined', testflags=True) + # Remove any uses of '-Wl,-no-undefined' + conf.env['EXTRA_LDFLAGS'] = list(filter(('-Wl,-no-undefined').__ne__, conf.env['EXTRA_LDFLAGS'])) + # And make sure we don't try and remove it again when 'allow_undefined_symbols=true' + conf.env.undefined_ldflags = [] + conf.SAMBA_CONFIG_H('include/config.h') def etags(ctx): |