summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Tool/link.py
diff options
context:
space:
mode:
authorDirk Baechle <dl9obn@darc.de>2014-12-19 14:59:20 (GMT)
committerDirk Baechle <dl9obn@darc.de>2014-12-19 14:59:20 (GMT)
commita759567a12fbd11989bea5f8eb0238639ec15e8b (patch)
treebd3e106ab9d2a4022e4f6cb6cfe5fbdc15f0d79a /src/engine/SCons/Tool/link.py
parentf0121389aa88ab9a3d232f5e516850d2aad2bf00 (diff)
downloadSCons-a759567a12fbd11989bea5f8eb0238639ec15e8b.zip
SCons-a759567a12fbd11989bea5f8eb0238639ec15e8b.tar.gz
SCons-a759567a12fbd11989bea5f8eb0238639ec15e8b.tar.bz2
- switching versioned shared libs to using Node.attributes
Diffstat (limited to 'src/engine/SCons/Tool/link.py')
-rw-r--r--src/engine/SCons/Tool/link.py32
1 files changed, 23 insertions, 9 deletions
diff --git a/src/engine/SCons/Tool/link.py b/src/engine/SCons/Tool/link.py
index f70f5b8..2624946 100644
--- a/src/engine/SCons/Tool/link.py
+++ b/src/engine/SCons/Tool/link.py
@@ -82,13 +82,18 @@ def shlib_emitter(target, source, env):
version = env.subst('$SHLIBVERSION')
if version:
version_names = shlib_emitter_names(target, source, env)
- # change the name of the target to include the version number
- target[0].name = version_names[0]
- for name in version_names:
- env.SideEffect(name, target[0])
- env.Clean(target[0], name)
+ # mark the target with the shared libraries name, including
+ # the version number
+ target[0].attributes.shlibname = version_names[0]
+ shlib = env.File(version_names[0], directory=target[0].get_dir())
+ target[0].attributes.shlibpath = shlib.path
+ for name in version_names[1:]:
+ env.SideEffect(name, shlib)
+ env.Clean(shlib, name)
if Verbose:
print "shlib_emitter: add side effect - ",name
+ env.Clean(shlib, target[0])
+ return ([shlib], source)
except KeyError:
version = None
return (target, source)
@@ -107,9 +112,12 @@ def shlib_emitter_names(target, source, env):
if version:
if platform == 'posix' or platform == 'sunos':
versionparts = version.split('.')
- name = target[0].name
+ if hasattr(target[0].attributes, 'shlibname'):
+ name = target[0].attributes.shlibname
+ else:
+ name = target[0].name
# generate library name with the version number
- version_name = target[0].name + '.' + version
+ version_name = name + '.' + version
if Verbose:
print "shlib_emitter_names: target is ", version_name
print "shlib_emitter_names: side effect: ", name
@@ -125,7 +133,10 @@ def shlib_emitter_names(target, source, env):
version_names.append(name)
elif platform == 'darwin':
shlib_suffix = env.subst('$SHLIBSUFFIX')
- name = target[0].name
+ if hasattr(target[0].attributes, 'shlibname'):
+ name = target[0].attributes.shlibname
+ else:
+ name = target[0].name
# generate library name with the version number
suffix_re = re.escape(shlib_suffix)
version_name = re.sub(suffix_re, '.' + version + shlib_suffix, name)
@@ -136,7 +147,10 @@ def shlib_emitter_names(target, source, env):
version_names.append(version_name)
elif platform == 'cygwin':
shlib_suffix = env.subst('$SHLIBSUFFIX')
- name = target[0].name
+ if hasattr(target[0].attributes, 'shlibname'):
+ name = target[0].attributes.shlibname
+ else:
+ name = target[0].name
# generate library name with the version number
suffix_re = re.escape(shlib_suffix)
version_name = re.sub(suffix_re, '-' + re.sub('\.', '-', version) + shlib_suffix, name)