diff options
author | Matthieu Patou <mat@matws.net> | 2010-10-31 16:24:46 +0300 |
---|---|---|
committer | Matthieu Patou <mat@matws.net> | 2010-10-31 18:51:54 +0300 |
commit | 9f0fb0261ecdecb093ced28024a36973bf1938b9 (patch) | |
tree | 62df03e045130aadb16d659f5e25c7db164401a6 | |
parent | 97c0def79d123406b44289a131c054ebe863823d (diff) | |
download | samba-9f0fb0261ecdecb093ced28024a36973bf1938b9.tar.gz samba-9f0fb0261ecdecb093ced28024a36973bf1938b9.tar.bz2 samba-9f0fb0261ecdecb093ced28024a36973bf1938b9.zip |
build: check that if we provide -liconv we can build shared libs
On Solaris with sun studio compiling an executable with -liconv even if
there is no libiconv.so or libiconv.a will work but not for a shared
lib.
This problem leads to build problem as the linker won't be able to find
libiconv when building shared lib as liconv is wrongly specified
-rw-r--r-- | buildtools/wafsamba/samba_autoconf.py | 15 | ||||
-rw-r--r-- | lib/util/charset/wscript_configure | 6 |
2 files changed, 19 insertions, 2 deletions
diff --git a/buildtools/wafsamba/samba_autoconf.py b/buildtools/wafsamba/samba_autoconf.py index f987d1d41a..e84a456287 100644 --- a/buildtools/wafsamba/samba_autoconf.py +++ b/buildtools/wafsamba/samba_autoconf.py @@ -474,12 +474,19 @@ def library_flags(conf, libs): @conf -def CHECK_LIB(conf, libs, mandatory=False, empty_decl=True, set_target=True): +def CHECK_LIB(conf, libs, mandatory=False, empty_decl=True, set_target=True, shlib=False): '''check if a set of libraries exist as system libraries returns the sublist of libs that do exist as a syslib or [] ''' + fragment= ''' +int foo() +{ + int v = 2; + return v*2; +} +''' ret = [] liblist = TO_LIST(libs) for lib in liblist[:]: @@ -488,8 +495,12 @@ def CHECK_LIB(conf, libs, mandatory=False, empty_decl=True, set_target=True): continue (ccflags, ldflags) = library_flags(conf, lib) + if shlib: + res = conf.check(features='cc cshlib', fragment=fragment, lib=lib, uselib_store=lib, ccflags=ccflags, ldflags=ldflags) + else: + res = conf.check(lib=lib, uselib_store=lib, ccflags=ccflags, ldflags=ldflags) - if not conf.check(lib=lib, uselib_store=lib, ccflags=ccflags, ldflags=ldflags): + if not res: if mandatory: Logs.error("Mandatory library '%s' not found for functions '%s'" % (lib, list)) sys.exit(1) diff --git a/lib/util/charset/wscript_configure b/lib/util/charset/wscript_configure index 274a2d7630..e54bfcc924 100644 --- a/lib/util/charset/wscript_configure +++ b/lib/util/charset/wscript_configure @@ -4,6 +4,12 @@ # as the external libiconv can use a macro to override iconv_open to libiconv_open # and then we may find the wrong iconv.h later due to other packages looking # in /usr/local +# We check for the lib iconv when building a shared lib has some compiler/linker +# managed to link when specifying -liconv a executable even if there is no +# libiconv.so or libiconv.a + +conf.CHECK_LIB(libs="iconv", shlib=True) + if (conf.CHECK_FUNCS_IN('iconv_open', 'iconv', checklibc=False, headers='iconv.h') or conf.CHECK_FUNCS('iconv_open', headers='iconv.h')): conf.DEFINE('HAVE_NATIVE_ICONV', 1) |