summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGary Oberbrunner <garyo@oberbrunner.com>2013-09-29 20:19:19 (GMT)
committerGary Oberbrunner <garyo@oberbrunner.com>2013-09-29 20:19:19 (GMT)
commit3ba5d044a4a6bb275cc33b42bff7be165d16ad19 (patch)
tree7faaf034431bb5d44cd49c017a8bd2824f7f6099
parentc76073b8c0dfce959545d8aec1edf0ba09edbd1e (diff)
parent25c535f2e5997defdca96a6e0c35a0143e824982 (diff)
downloadSCons-3ba5d044a4a6bb275cc33b42bff7be165d16ad19.zip
SCons-3ba5d044a4a6bb275cc33b42bff7be165d16ad19.tar.gz
SCons-3ba5d044a4a6bb275cc33b42bff7be165d16ad19.tar.bz2
Merged pull req #85
-rw-r--r--src/CHANGES.txt4
-rw-r--r--src/engine/SCons/Tool/__init__.py22
-rw-r--r--test/Libs/SharedLibrary.py13
3 files changed, 32 insertions, 7 deletions
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index f4229be..1e91144 100644
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -6,6 +6,10 @@
RELEASE 2.3.1.alpha.yyyymmdd - NEW DATE WILL BE INSERTED HERE
+ From Stefan Sperling:
+ - Fixed the setup of linker flags for a versioned SharedLibrary
+ under OpenBSD (#2916).
+
From Antonio Cavallo:
- Improve error if Visual Studio bat file not found.
diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py
index b80d6e4..00413e5 100644
--- a/src/engine/SCons/Tool/__init__.py
+++ b/src/engine/SCons/Tool/__init__.py
@@ -257,6 +257,10 @@ def VersionShLibLinkNames(version, libname, env):
print "VersionShLibLinkNames: linkname = ",linkname
linknames.append(linkname)
elif platform == 'posix':
+ if sys.platform.startswith('openbsd'):
+ # OpenBSD uses x.y shared library versioning numbering convention
+ # and doesn't use symlinks to backwards-compatible libraries
+ return []
# For libfoo.so.x.y.z, linknames libfoo.so libfoo.so.x.y libfoo.so.x
suffix_re = re.escape(shlib_suffix + '.' + version)
# First linkname has no version number
@@ -302,13 +306,17 @@ symlinks for the platform we are on"""
if version:
# set the shared library link flags
if platform == 'posix':
- suffix_re = re.escape(shlib_suffix + '.' + version)
- (major, age, revision) = version.split(".")
- # soname will have only the major version number in it
- soname = re.sub(suffix_re, shlib_suffix, libname) + '.' + major
- shlink_flags += [ '-Wl,-Bsymbolic', '-Wl,-soname=%s' % soname ]
- if Verbose:
- print " soname ",soname,", shlink_flags ",shlink_flags
+ shlink_flags += [ '-Wl,-Bsymbolic' ]
+ # OpenBSD doesn't usually use SONAME for libraries
+ if not sys.platform.startswith('openbsd'):
+ # continue setup of shlink flags for all other POSIX systems
+ suffix_re = re.escape(shlib_suffix + '.' + version)
+ (major, age, revision) = version.split(".")
+ # soname will have only the major version number in it
+ soname = re.sub(suffix_re, shlib_suffix, libname) + '.' + major
+ shlink_flags += [ '-Wl,-soname=%s' % soname ]
+ if Verbose:
+ print " soname ",soname,", shlink_flags ",shlink_flags
elif platform == 'cygwin':
shlink_flags += [ '-Wl,-Bsymbolic',
'-Wl,--out-implib,${TARGET.base}.a' ]
diff --git a/test/Libs/SharedLibrary.py b/test/Libs/SharedLibrary.py
index b7d1374..eac575c 100644
--- a/test/Libs/SharedLibrary.py
+++ b/test/Libs/SharedLibrary.py
@@ -60,6 +60,13 @@ obj = env.SharedObject('bar', 'foo.c')
Default(env.Library(target = 'foo', source = obj))
""")
+test.write('SConstructBaz', """
+env=Environment()
+env['SHLIBVERSION'] = '1.0.0'
+obj = env.SharedObject('baz', 'foo.c')
+Default(env.SharedLibrary(target = 'baz', source = obj))
+""")
+
test.write('foo.c', r"""
#include <stdio.h>
@@ -287,6 +294,12 @@ main(int argc, char *argv[])
test.run(program = test.workpath('progbar'),
stdout = "f4.c\nprogbar.c\n")
+if sys.platform.startswith('openbsd'):
+ # Make sure we don't link libraries with -Wl,-soname on OpenBSD.
+ test.run(arguments = '-f SConstructBaz')
+ for line in test.stdout().split('\n'):
+ test.fail_test(line.find('-Wl,-soname=libbaz.so') != -1)
+
test.pass_test()
# Local Variables: