summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Patou <mat@matws.net>2010-10-31 16:24:46 +0300
committerMatthieu Patou <mat@matws.net>2010-10-31 18:51:54 +0300
commit9f0fb0261ecdecb093ced28024a36973bf1938b9 (patch)
tree62df03e045130aadb16d659f5e25c7db164401a6
parent97c0def79d123406b44289a131c054ebe863823d (diff)
downloadsamba-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.py15
-rw-r--r--lib/util/charset/wscript_configure6
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)