summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/Tool/link.py
diff options
context:
space:
mode:
authorRobert Managan <managan1@llnl.gov>2012-10-24 23:58:15 (GMT)
committerRobert Managan <managan1@llnl.gov>2012-10-24 23:58:15 (GMT)
commit4976bb1cf85184d9ee545b77fe9d18e064a42bee (patch)
tree4e4b2f720a7060164eab1575b2ff9efaa0cc966b /src/engine/SCons/Tool/link.py
parent1b1f61b2266eaabce9ea7f3eeefc68f946fd0328 (diff)
downloadSCons-4976bb1cf85184d9ee545b77fe9d18e064a42bee.zip
SCons-4976bb1cf85184d9ee545b77fe9d18e064a42bee.tar.gz
SCons-4976bb1cf85184d9ee545b77fe9d18e064a42bee.tar.bz2
Treat the sym links as side effects instead of extra targets. This prevents Install from copying the links as full files. Still need to get Install to create the links, if possible. Still a test failure or two to clean up as well. Needs a new test as well.
Diffstat (limited to 'src/engine/SCons/Tool/link.py')
-rw-r--r--src/engine/SCons/Tool/link.py38
1 files changed, 32 insertions, 6 deletions
diff --git a/src/engine/SCons/Tool/link.py b/src/engine/SCons/Tool/link.py
index 9af9b5f..4ad4948 100644
--- a/src/engine/SCons/Tool/link.py
+++ b/src/engine/SCons/Tool/link.py
@@ -66,6 +66,7 @@ def smart_link(source, target, env, for_signature):
return '$CC'
def shlib_emitter(target, source, env):
+ Verbose = False
platform = env.subst('$PLATFORM')
for tgt in target:
tgt.attributes.shared = 1
@@ -75,15 +76,40 @@ def shlib_emitter(target, source, env):
if version:
if platform == 'posix':
versionparts = version.split('.')
- name = str(target[0])
- for ver in versionparts:
+ name = target[0].name
+ # generate library name with the version number
+ version_name = target[0].name + '.' + version
+ # change the name of the target to version_name
+ target[0].name = version_name
+ if Verbose:
+ print "shlib_emitter: target is ", version_name
+ print "shlib_emitter: side effect: ", name
+ # make name w/o version number a side effect (will be a sym link)
+ env.SideEffect(version_name, target[0])
+ env.Clean(target[0], version_name)
+ if Verbose:
+ print "shlib_emitter: versionparts ",versionparts
+ for ver in versionparts[0:-1]:
name = name + '.' + ver
- target.insert(0, env.fs.File(name))
+ if Verbose:
+ print "shlib_emitter: side effect: ", name
+ # make side effects of sym links with partial version number
+ env.SideEffect(name, target[0])
+ env.Clean(target[0], 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))
+ 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)
+ # change the name of the target to version_name
+ target[0].name = version_name
+ if Verbose:
+ print "shlib_emitter: target is ", version_name
+ print "shlib_emitter: side effect: ", name
+ # make name w/o version number a side effect (will be a sym link)
+ env.SideEffect(version_name, target[0])
+ env.Clean(target[0], version_name)
except KeyError:
version = None
return (target, source)