summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/engine/SCons/Environment.py1
-rw-r--r--src/engine/SCons/Tool/__init__.py11
-rw-r--r--src/engine/SCons/Tool/link.py17
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