summaryrefslogtreecommitdiff
path: root/test/LINK
diff options
context:
space:
mode:
authorWilliam Deegan <bill@baddogconsulting.com>2018-12-10 17:33:14 -0500
committerWilliam Deegan <bill@baddogconsulting.com>2018-12-10 17:33:14 -0500
commitf4b0ced65442d77b8925210cd81ae45d3266da85 (patch)
tree30b6f0b82773aaa57e0f8237424df7e2b82f7f05 /test/LINK
parent903d9a41e160005360aef34d7850bde9e51ecc7c (diff)
downloadscons-git-f4b0ced65442d77b8925210cd81ae45d3266da85.tar.gz
Add APPLELINK_NO_CURRENT_VERSION and APPLELINK_NO_COMPATIBILITY_VERSION to allow user to disable generating either or both -current_version and/or -compatibility_version to the applelink linker. Updates to docs. Add docstrings to generator functions
Diffstat (limited to 'test/LINK')
-rw-r--r--test/LINK/applelink.py57
-rw-r--r--test/LINK/applelink_image/SConstruct_CurVers_CompatVers18
2 files changed, 72 insertions, 3 deletions
diff --git a/test/LINK/applelink.py b/test/LINK/applelink.py
index f48a4988d..86e0a4c4a 100644
--- a/test/LINK/applelink.py
+++ b/test/LINK/applelink.py
@@ -88,6 +88,63 @@ for SHLIBVERSION, APPLELINK_CURRENT_VERSION, APPLELINK_COMPATIBILITY_VERSION, sh
test.run(program='/usr/bin/otool', arguments='-L libfoo.%s.dylib' % SHLIBVERSION, stdout=otool_output)
+# Now test that None in APPLELINK_CURRENT_VERSION or APPLELINK_COMPATIBILITY_VERSION will skip
+# generating their relevant linker command line flag.
+for SHLIBVERSION, \
+ APPLELINK_CURRENT_VERSION, APPLELINK_COMPATIBILITY_VERSION, \
+ APPLELINK_NO_CURRENT_VERSION, APPLELINK_NO_COMPATIBILITY_VERSION in [
+ ('1.2.3', 0, 0, 0, 1),
+ ('1.2.3', 0, 0, 1, 0),
+ ('1.2.3', 0, 0, 1, 1),
+
+]:
+
+ if not APPLELINK_CURRENT_VERSION:
+ APPLELINK_CURRENT_VERSION = SHLIBVERSION
+ if not APPLELINK_COMPATIBILITY_VERSION:
+ APPLELINK_COMPATIBILITY_VERSION = '.'.join(APPLELINK_CURRENT_VERSION.split('.', 2)[:2] + ['0'])
+
+ test.run(
+ arguments='{extra_flags} -f SConstruct_CurVers_CompatVers SHLIBVERSION={SHLIBVERSION} '
+ 'APPLELINK_CURRENT_VERSION={APPLELINK_CURRENT_VERSION} '
+ 'APPLELINK_COMPATIBILITY_VERSION={APPLELINK_COMPATIBILITY_VERSION} '
+ 'APPLELINK_NO_CURRENT_VERSION={APPLELINK_NO_CURRENT_VERSION} '
+ 'APPLELINK_NO_COMPATIBILITY_VERSION={APPLELINK_NO_COMPATIBILITY_VERSION} '.format(
+ **locals()))
+
+ if APPLELINK_NO_CURRENT_VERSION:
+ # Should not contain -Wl,-current_version
+ test.must_not_contain_lines(test.stdout(),
+ ['-Wl,-current_version'])
+ else:
+ # Should contain -Wl,-current_version,{APPLELINK_CURRENT_VERSION}
+ test.must_contain_all_lines(test.stdout(),
+ ['-Wl,-current_version,{APPLELINK_CURRENT_VERSION}'.format(**locals())])
+
+ if APPLELINK_NO_COMPATIBILITY_VERSION:
+ # Should not contain -Wl,-compatibility_version
+ test.must_not_contain_lines(test.stdout(),
+ ['-Wl,-compatibility_version'])
+ else:
+ # Should contain -Wl,-compatibility_version,{APPLELINK_COMPATIBILITY_VERSION}
+ test.must_contain_all_lines(test.stdout(),
+ ['-Wl,-compatibility_version,{APPLELINK_COMPATIBILITY_VERSION}'.format(**locals())])
+
+ if not (extra_flags):
+ # Now run otool -L to get the compat and current version info and verify it's correct in the library.
+ # We expect output such as this
+ # libfoo.1.2.3.dylib:
+ # > libfoo.1.2.3.dylib (compatibility version 1.1.99, current version 9.9.9)
+ # > /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)
+ if APPLELINK_NO_CURRENT_VERSION:
+ APPLELINK_CURRENT_VERSION = '0.0.0'
+ if APPLELINK_NO_COMPATIBILITY_VERSION:
+ APPLELINK_COMPATIBILITY_VERSION = '0.0.0'
+ otool_output = "libfoo.{SHLIBVERSION}.dylib:\n\tlibfoo.{SHLIBVERSION}.dylib (compatibility version {APPLELINK_COMPATIBILITY_VERSION}, current version {APPLELINK_CURRENT_VERSION})\n\t/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1252.50.4)\n".format(
+ **locals())
+
+ test.run(program='/usr/bin/otool', arguments='-L libfoo.%s.dylib' % SHLIBVERSION, stdout=otool_output)
+
test.pass_test()
# Local Variables:
diff --git a/test/LINK/applelink_image/SConstruct_CurVers_CompatVers b/test/LINK/applelink_image/SConstruct_CurVers_CompatVers
index b699ad82d..fba953dc4 100644
--- a/test/LINK/applelink_image/SConstruct_CurVers_CompatVers
+++ b/test/LINK/applelink_image/SConstruct_CurVers_CompatVers
@@ -4,12 +4,25 @@ vars = Variables(None, ARGUMENTS)
vars.Add('SHLIBVERSION', 'Set the SHLIBVERSION', 0)
vars.Add('APPLELINK_CURRENT_VERSION', 'Set APPLELINK_CURRENT_VERSION', 0)
vars.Add('APPLELINK_COMPATIBILITY_VERSION', 'Set APPLELINK_COMPATIBILITY_VERSION', 0)
+vars.Add('APPLELINK_NO_CURRENT_VERSION', 'Set APPLELINK_NO_CURRENT_VERSION', 0)
+vars.Add('APPLELINK_NO_COMPATIBILITY_VERSION', 'Set APPLELINK_NO_COMPATIBILITY_VERSION', 0)
env = Environment(variables = vars, tools=['gcc', 'applelink'])
-obj = env.SharedObject('foo.c')
+if env['APPLELINK_NO_CURRENT_VERSION'] == '0':
+ env['APPLELINK_NO_CURRENT_VERSION'] = 0
+
+if env['APPLELINK_NO_COMPATIBILITY_VERSION'] == '0':
+ env['APPLELINK_NO_COMPATIBILITY_VERSION'] = 0
+
-# sl = env.SharedLibrary('foo', obj)
+print("SHLIBVERSION =[%s]"%env.get('SHLIBVERSION', False))
+print("APPLELINK_CURRENT_VERSION =[%s]"%env.get('APPLELINK_CURRENT_VERSION', False))
+print("APPLELINK_COMPATIBILITY_VERSION =[%s]"%env.get('APPLELINK_COMPATIBILITY_VERSION', False))
+print("APPLELINK_NO_CURRENT_VERSION =[%s]"%env.get('APPLELINK_NO_CURRENT_VERSION', False))
+print("APPLELINK_NO_COMPATIBILITY_VERSION=[%s]"%env.get('APPLELINK_NO_COMPATIBILITY_VERSION', False))
+
+obj = env.SharedObject('foo.c')
sl = env.SharedLibrary('foo', obj)
lm = env.LoadableModule('fool', obj)
@@ -20,4 +33,3 @@ env.InstallVersionedLib(target='#/install',
env.InstallVersionedLib(target='#/install',
source=lm)
-print("SHLIBVERSION=%s"%env['SHLIBVERSION'])