summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDirk Baechle <dl9obn@darc.de>2013-09-11 20:44:33 (GMT)
committerDirk Baechle <dl9obn@darc.de>2013-09-11 20:44:33 (GMT)
commit25c535f2e5997defdca96a6e0c35a0143e824982 (patch)
treee102cdf970a9d8c9e05593c5254b2da3b2572f54
parent328e541f40849c270fc75f0932594d18d2e6340b (diff)
downloadSCons-25c535f2e5997defdca96a6e0c35a0143e824982.zip
SCons-25c535f2e5997defdca96a6e0c35a0143e824982.tar.gz
SCons-25c535f2e5997defdca96a6e0c35a0143e824982.tar.bz2
- fix for #2916, "Issues with versioned SharedLibrary under OpenBSD"
-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 e80a161..1afe71a 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 David Rothenberger:
- Added cyglink linker that uses Cygwin naming conventions for
shared libraries and automatically generates import libraries.
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: