From d48570143656d1c570c282f8e21e058508910f3c Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sun, 17 Oct 2010 21:58:22 +1100 Subject: waf: automap shared library names from .so to the right extension this should help with MacOSX .dylib libraries --- buildtools/wafsamba/samba_install.py | 18 ++++++++--------- buildtools/wafsamba/samba_utils.py | 39 ++++++++++++++++++++++++++++++++++++ buildtools/wafsamba/wafsamba.py | 5 ++++- buildtools/wafsamba/wscript | 7 ++++++- 4 files changed, 58 insertions(+), 11 deletions(-) (limited to 'buildtools/wafsamba') diff --git a/buildtools/wafsamba/samba_install.py b/buildtools/wafsamba/samba_install.py index dda44cd012..eaeaff3af7 100644 --- a/buildtools/wafsamba/samba_install.py +++ b/buildtools/wafsamba/samba_install.py @@ -87,21 +87,21 @@ def install_library(self): install_name = self.samba_realname install_link = None if getattr(self, 'samba_type', None) == 'PYTHON': - inst_name = '%s.so' % t.target + inst_name = bld.make_libname(t.target, nolibprefix=True, python=True) else: - inst_name = 'lib%s.so' % t.target + inst_name = bld.make_libname(t.target) elif self.vnum: vnum_base = self.vnum.split('.')[0] - install_name = 'lib%s.so.%s' % (self.target, self.vnum) - install_link = 'lib%s.so.%s' % (self.target, vnum_base) - inst_name = 'lib%s.so' % t.target + install_name = bld.make_libname(self.target, version=self.vnum) + install_link = bld.make_libname(self.target, version=vnum_base) + inst_name = bld.make_libname(t.target) if not self.is_bundled: # only generate the dev link for non-bundled libs - dev_link = 'lib%s.so' % self.target + dev_link = bld.make_libname(self.target) else: - install_name = 'lib%s.so' % self.target + install_name = bld.make_libname(self.target) install_link = None - inst_name = 'lib%s.so' % t.target + inst_name = bld.make_libname(t.target) if t.env.SONAME_ST and install_link: t.env.append_value('LINKFLAGS', t.env.SONAME_ST % install_link) @@ -142,7 +142,7 @@ def symlink_lib(self): link_target = getattr(self, 'link_name', '') if link_target == '': - link_target = '%s/lib%s.so%s' % (LIB_PATH, self.target, soext) + link_target = '%s/%s' % (LIB_PATH, self.bld.make_libname(self.target, version=soext)) link_target = os.path.join(blddir, link_target) diff --git a/buildtools/wafsamba/samba_utils.py b/buildtools/wafsamba/samba_utils.py index 7ce9f757e9..e86056e7e8 100644 --- a/buildtools/wafsamba/samba_utils.py +++ b/buildtools/wafsamba/samba_utils.py @@ -527,3 +527,42 @@ def reconfigure(ctx): bld = samba_wildcard.fake_build_environment() Configure.autoconfig = True Scripting.check_configured(bld) + + +def map_shlib_extension(ctx, name, python=False): + '''map a filename with a shared library extension of .so to the real shlib name''' + if name is None: + return None + (root1, ext1) = os.path.splitext(name) + if python: + (root2, ext2) = os.path.splitext(ctx.env.pyext_PATTERN) + else: + (root2, ext2) = os.path.splitext(ctx.env.shlib_PATTERN) + return root1+ext2 +Build.BuildContext.map_shlib_extension = map_shlib_extension + + +def make_libname(ctx, name, nolibprefix=False, version=None, python=False): + """make a library filename + Options: + nolibprefix: don't include the lib prefix + version : add a version number + python : if we should use python module name conventions""" + + if python: + libname = ctx.env.pyext_PATTERN % name + else: + libname = ctx.env.shlib_PATTERN % name + if nolibprefix and libname[0:3] == 'lib': + libname = libname[3:] + if version: + if version[0] == '.': + version = version[1:] + (root, ext) = os.path.splitext(libname) + if ext == ".dylib": + # special case - version goes before the prefix + libname = "%s.%s%s" % (root, version, ext) + else: + libname = "%s%s.%s" % (root, ext, version) + return libname +Build.BuildContext.make_libname = make_libname diff --git a/buildtools/wafsamba/wafsamba.py b/buildtools/wafsamba/wafsamba.py index 2f5d7869f3..02dc44a139 100644 --- a/buildtools/wafsamba/wafsamba.py +++ b/buildtools/wafsamba/wafsamba.py @@ -164,6 +164,9 @@ def SAMBA_LIBRARY(bld, libname, source, deps = TO_LIST(deps) deps.append(obj_target) + realname = bld.map_shlib_extension(realname, python=(target_type=='PYTHON')) + link_name = bld.map_shlib_extension(link_name, python=(target_type=='PYTHON')) + if target_type == 'PYTHON' or realname or not is_bundled: # Sanitize the library name bundled_name = libname.lower().replace('_', '-') @@ -363,7 +366,7 @@ def SAMBA_MODULE(bld, modname, source, while realname.startswith(subsystem+"_"): realname = realname[len(subsystem+"_"):] - realname = bld.env.shlib_PATTERN % realname + realname = bld.make_libname(realname) while realname.startswith("lib"): realname = realname[len("lib"):] diff --git a/buildtools/wafsamba/wscript b/buildtools/wafsamba/wscript index e2b1a278dd..c46c486c12 100644 --- a/buildtools/wafsamba/wscript +++ b/buildtools/wafsamba/wscript @@ -280,7 +280,12 @@ def configure(conf): if 'HAVE_SYS_TIME_H' in conf.env and 'HAVE_TIME_H' in conf.env: conf.DEFINE('TIME_WITH_SYS_TIME', 1) - conf.define('SHLIBEXT', "so", quote=True) + # cope with different extensions for libraries + (root, ext) = os.path.splitext(conf.env.shlib_PATTERN) + if ext[0] == '.': + conf.define('SHLIBEXT', ext[1:], quote=True) + else: + conf.define('SHLIBEXT', "so", quote=True) conf.CHECK_CODE('long one = 1; return ((char *)(&one))[0]', execute=True, -- cgit