diff options
author | William Deegan <bill@baddogconsulting.com> | 2018-12-10 17:33:14 -0500 |
---|---|---|
committer | William Deegan <bill@baddogconsulting.com> | 2018-12-10 17:33:14 -0500 |
commit | f4b0ced65442d77b8925210cd81ae45d3266da85 (patch) | |
tree | 30b6f0b82773aaa57e0f8237424df7e2b82f7f05 /test/LINK | |
parent | 903d9a41e160005360aef34d7850bde9e51ecc7c (diff) | |
download | scons-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.py | 57 | ||||
-rw-r--r-- | test/LINK/applelink_image/SConstruct_CurVers_CompatVers | 18 |
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']) |