From 1b1f61b2266eaabce9ea7f3eeefc68f946fd0328 Mon Sep 17 00:00:00 2001 From: Robert Managan Date: Wed, 17 Oct 2012 11:49:02 -0700 Subject: add support for darwin --- src/engine/SCons/Environment.py | 1 - src/engine/SCons/Tool/__init__.py | 11 +++++------ src/engine/SCons/Tool/link.py | 17 +++++++++++++---- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py index 0bb92ed..7d56487 100644 --- a/src/engine/SCons/Environment.py +++ b/src/engine/SCons/Environment.py @@ -2257,7 +2257,6 @@ class Base(SubstitutionEnvironment): (major, age, revision) = version.split(".") soname = "lib" + libname + shlib_suffix + "." + major shlink_flags += [ '-Wl,-Bsymbolic', '-Wl,-soname=%s' % soname ] - print "ilib_suffix ",ilib_suffix,", soname ",soname,", shlink_flags ",shlink_flags elif platform == 'cygwin': ilib_suffix = shlib_suffix shlink_flags += [ '-Wl,-Bsymbolic', diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py index ba473a5..134f336 100644 --- a/src/engine/SCons/Tool/__init__.py +++ b/src/engine/SCons/Tool/__init__.py @@ -259,11 +259,9 @@ def VersionedSharedLibrary(target = None, source= None, env=None): if Verbose: print "ilib_suffix ",ilib_suffix,", soname ",soname,", shlink_flags ",shlink_flags elif platform == 'cygwin': - ilib_suffix = shlib_suffix shlink_flags += [ '-Wl,-Bsymbolic', '-Wl,--out-implib,${TARGET.base}.a' ] elif platform == 'darwin': - ilib_suffix = '.' + version + shlib_suffix shlink_flags += [ '-current_version', '%s' % version, '-compatibility_version', '%s' % version, '-undefined', 'dynamic_lookup' ] @@ -279,10 +277,11 @@ def VersionedSharedLibrary(target = None, source= None, env=None): if version.count(".") != 2: # We need a library name in libfoo.x.y.z.dylib form to proceed raise ValueError - lib = libname + '.dylib' - lib_no_ver = libname + '.dylib' - suffix_re = '%s\\.[0-9\\.]*$' % re.escape(shlib_suffix) - lib_no_ver = re.sub(suffix_re, shlib_suffix, lib) + # regex to find version+.dylib in the target name + suffix_re = '[\\.0-9]*%s$' % re.escape(shlib_suffix) + # remove the version string from libname so we can make a symlink + lib_no_ver = re.sub(suffix_re, shlib_suffix, libname) + os.symlink(libname,lib_no_ver) elif platform == 'posix': if version.count(".") != 2: # We need a library name in libfoo.so.x.y.z form to proceed diff --git a/src/engine/SCons/Tool/link.py b/src/engine/SCons/Tool/link.py index 2d67a1a..9af9b5f 100644 --- a/src/engine/SCons/Tool/link.py +++ b/src/engine/SCons/Tool/link.py @@ -33,6 +33,8 @@ selection method. __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" +import re + import SCons.Defaults import SCons.Tool import SCons.Util @@ -64,16 +66,23 @@ def smart_link(source, target, env, for_signature): return '$CC' def shlib_emitter(target, source, env): + platform = env.subst('$PLATFORM') for tgt in target: tgt.attributes.shared = 1 try: # target[0] comes in as libtest.so. Add the version extensions version = env.subst('$SHLIBVERSION') if version: - versionparts = version.split('.') - name = str(target[0]) - for ver in versionparts: - name = name + '.' + ver + if platform == 'posix': + versionparts = version.split('.') + name = str(target[0]) + for ver in versionparts: + name = name + '.' + ver + target.insert(0, env.fs.File(name)) + elif platform == 'darwin': + shlib_suffix = env.subst('$SHLIBSUFFIX') + name = str(target[0]) + name = re.sub(shlib_suffix+"$",'.'+version+shlib_suffix,name) target.insert(0, env.fs.File(name)) except KeyError: version = None -- cgit v0.12