From 3015cd81aefb131028d00b9163155f6039f1e865 Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Sat, 17 Jun 2017 15:29:50 +0100 Subject: DMD and LDC do now support shared objects on MacOS. A couple of corrections. --- test/D/SharedObjects/Common/common.py | 5 +---- test/D/SharedObjects/Image/SConstruct_template | 7 ++----- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/test/D/SharedObjects/Common/common.py b/test/D/SharedObjects/Common/common.py index 0322385..a46ea7e 100644 --- a/test/D/SharedObjects/Common/common.py +++ b/test/D/SharedObjects/Common/common.py @@ -63,9 +63,6 @@ def testForTool(tool): elif platform == 'darwin': filename = 'code.o' libraryname = 'libanswer.dylib' - # As at 2014-09-14, DMD 2.066, LDC master head, and GDC 4.9.1 do not support - # shared libraries on OSX. - test.skip_test('Dynamic libraries not yet supported on OSX.\n') elif platform == 'win32': filename = 'code.obj' libraryname = 'answer.dll' @@ -75,7 +72,7 @@ def testForTool(tool): test.dir_fixture('Image') test.write('SConstruct', open('SConstruct_template', 'r').read().format(tool)) - if tool == 'dmd': + if Base()['DC'] == 'gdmd': # The gdmd executable in Debian Unstable as at 2012-05-12, version 4.6.3 puts out messages on stderr # that cause inappropriate failure of the tests, so simply ignore them. test.run(stderr=None) diff --git a/test/D/SharedObjects/Image/SConstruct_template b/test/D/SharedObjects/Image/SConstruct_template index cae8713..d263e63 100644 --- a/test/D/SharedObjects/Image/SConstruct_template +++ b/test/D/SharedObjects/Image/SConstruct_template @@ -1,10 +1,7 @@ # -*- mode:python; coding:utf-8; -*- -import os - environment = Environment( - tools=['{}', 'link']) - -environment['ENV']['HOME'] = os.environ['HOME'] # Hack for gdmd + tools=['{0}', 'link'] +) environment.SharedLibrary('answer', 'code.d') -- cgit v0.12 From f57360b60c20eacb2b39485a3986a79a823a2e67 Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Sat, 17 Jun 2017 15:40:47 +0100 Subject: Always provide a value for DC, never leave it unset: Detect can fail to find an executable. --- src/engine/SCons/Tool/dmd.py | 2 +- src/engine/SCons/Tool/gdc.py | 2 +- src/engine/SCons/Tool/ldc.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/engine/SCons/Tool/dmd.py b/src/engine/SCons/Tool/dmd.py index 64beea5..783640b 100644 --- a/src/engine/SCons/Tool/dmd.py +++ b/src/engine/SCons/Tool/dmd.py @@ -75,7 +75,7 @@ def generate(env): static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter) shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter) - env['DC'] = env.Detect(['dmd', 'gdmd']) + env['DC'] = env.Detect(['dmd', 'ldmd2', 'gdmd']) or 'dmd' env['DCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS -c -of$TARGET $SOURCES' env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}' env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}' diff --git a/src/engine/SCons/Tool/gdc.py b/src/engine/SCons/Tool/gdc.py index fdfe867..f519428 100644 --- a/src/engine/SCons/Tool/gdc.py +++ b/src/engine/SCons/Tool/gdc.py @@ -65,7 +65,7 @@ def generate(env): static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter) shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter) - env['DC'] = env.Detect('gdc') + env['DC'] = 'gdc' env['DCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS -c -o $TARGET $SOURCES' env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}' env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}' diff --git a/src/engine/SCons/Tool/ldc.py b/src/engine/SCons/Tool/ldc.py index 215c3e7..7e5d339 100644 --- a/src/engine/SCons/Tool/ldc.py +++ b/src/engine/SCons/Tool/ldc.py @@ -70,7 +70,7 @@ def generate(env): static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter) shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter) - env['DC'] = env.Detect('ldc2') + env['DC'] = 'ldc2' env['DCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS -c -of=$TARGET $SOURCES' env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}' env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}' -- cgit v0.12 From 9457abb8761928c02c68a1b923bbc16fda9bb2bd Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Sun, 18 Jun 2017 15:14:54 +0100 Subject: LDC does not automatically include the druntime library as dmd does. --- src/engine/SCons/Tool/ldc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/SCons/Tool/ldc.py b/src/engine/SCons/Tool/ldc.py index 7e5d339..ecc3b9e 100644 --- a/src/engine/SCons/Tool/ldc.py +++ b/src/engine/SCons/Tool/ldc.py @@ -111,7 +111,7 @@ def generate(env): env['DSHLINKFLAGS'] = SCons.Util.CLVar('$DLINKFLAGS -shared -defaultlib=phobos-ldc') #### END DEPRECATION 2017-05-21 - env['SHDLINKCOM'] = '$DLINK -of=$TARGET $DSHLINKFLAGS $__DSHLIBVERSIONFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS' + env['SHDLINKCOM'] = '$DLINK -of=$TARGET $DSHLINKFLAGS $__DSHLIBVERSIONFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS -L-ldruntime-ldc' env['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-L-l' env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else '' -- cgit v0.12 From 5729b712bb37571a870f5c3e12a99fddfbf18536 Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Sun, 18 Jun 2017 17:31:56 +0100 Subject: Correct the rpath prefix for LDC on Darwin. --- src/engine/SCons/Tool/ldc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/SCons/Tool/ldc.py b/src/engine/SCons/Tool/ldc.py index 7e5d339..dc56ad8 100644 --- a/src/engine/SCons/Tool/ldc.py +++ b/src/engine/SCons/Tool/ldc.py @@ -111,7 +111,7 @@ def generate(env): env['DSHLINKFLAGS'] = SCons.Util.CLVar('$DLINKFLAGS -shared -defaultlib=phobos-ldc') #### END DEPRECATION 2017-05-21 - env['SHDLINKCOM'] = '$DLINK -of=$TARGET $DSHLINKFLAGS $__DSHLIBVERSIONFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS' + env['SHDLINKCOM'] = '$DLINK -of=$TARGET $DSHLINKFLAGS $__DSHLIBVERSIONFLAGS $__DRPATH $SOURCES $_DLIBDIRFLAGS $_DLIBFLAGS -L-ldruntime-ldc' env['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-L-l' env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else '' @@ -132,7 +132,7 @@ def generate(env): # __RPATH is set to $_RPATH in the platform specification if that # platform supports it. - env['DRPATHPREFIX'] = '-L-rpath=' + env['DRPATHPREFIX'] = '-L-Wl,-rpath,' if env['PLATFORM'] == 'darwin' else '-L-rpath=' env['DRPATHSUFFIX'] = '' env['_DRPATH'] = '${_concat(DRPATHPREFIX, RPATH, DRPATHSUFFIX, __env__)}' -- cgit v0.12 From 04796d463904ce278ed09e58517467d8047945f8 Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Sun, 18 Jun 2017 17:35:25 +0100 Subject: Attempt a fix for dmd rpath on OSX. --- src/engine/SCons/Tool/dmd.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/engine/SCons/Tool/dmd.py b/src/engine/SCons/Tool/dmd.py index 783640b..813f949 100644 --- a/src/engine/SCons/Tool/dmd.py +++ b/src/engine/SCons/Tool/dmd.py @@ -129,7 +129,7 @@ def generate(env): # __RPATH is set to $_RPATH in the platform specification if that # platform supports it. - env['DRPATHPREFIX'] = '-L-rpath=' + env['DRPATHPREFIX'] = '-L-rpath,' if env['PLATFORM'] == 'darwin' else '-L-rpath=' env['DRPATHSUFFIX'] = '' env['_DRPATH'] = '${_concat(DRPATHPREFIX, RPATH, DRPATHSUFFIX, __env__)}' -- cgit v0.12 From b3c1a8d197c0353206f14782921e27d3534ec1e3 Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Sun, 18 Jun 2017 17:35:47 +0100 Subject: LDC shared libraries work on OSX. --- test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py b/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py index 8060add..2bcff1e 100644 --- a/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py +++ b/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py @@ -50,11 +50,10 @@ def testForTool(tool): libraryname = 'libstuff.so' filename = 'stuff.os' elif platform == 'darwin': + if tool == 'gdc': + test.skip_test('Dynamic libraries not yet supported by dmd and gdc on OSX.\n') libraryname = 'libstuff.dylib' filename = 'stuff.os' - # As at 2014-09-14, DMD 2.066, LDC master head, and GDC 4.9.1 do not support - # shared libraries on OSX. - test.skip_test('Dynamic libraries not yet supported on OSX.\n') elif platform == 'win32': libraryname = 'stuff.dll' filename = 'stuff.obj' -- cgit v0.12 From fda72fd3c1516012ff9d04fb260037fd1bc16abc Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Sun, 18 Jun 2017 19:04:54 +0100 Subject: Remove DMD from the tests on OSX till the correct rpath option is discovered. --- test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py b/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py index 2bcff1e..5acd26a 100644 --- a/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py +++ b/test/D/Issues/2940_Ariovistus/Common/correctLinkOptions.py @@ -50,7 +50,7 @@ def testForTool(tool): libraryname = 'libstuff.so' filename = 'stuff.os' elif platform == 'darwin': - if tool == 'gdc': + if tool == 'dmd' or tool == 'gdc': test.skip_test('Dynamic libraries not yet supported by dmd and gdc on OSX.\n') libraryname = 'libstuff.dylib' filename = 'stuff.os' -- cgit v0.12 From f682d3b5d89b2a37d8743966206a6da303812528 Mon Sep 17 00:00:00 2001 From: Russel Winder Date: Tue, 20 Jun 2017 19:52:04 +0100 Subject: Update the DC setting as requested to use Detect. --- src/engine/SCons/Tool/gdc.py | 2 +- src/engine/SCons/Tool/ldc.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/engine/SCons/Tool/gdc.py b/src/engine/SCons/Tool/gdc.py index 4baa548..a8e037c 100644 --- a/src/engine/SCons/Tool/gdc.py +++ b/src/engine/SCons/Tool/gdc.py @@ -65,7 +65,7 @@ def generate(env): static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter) shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter) - env['DC'] = 'gdc' + env['DC'] = env.Detect('gdc') or 'gdc' env['DCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS -c -o $TARGET $SOURCES' env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}' env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}' diff --git a/src/engine/SCons/Tool/ldc.py b/src/engine/SCons/Tool/ldc.py index 1c4f566..b10bb75 100644 --- a/src/engine/SCons/Tool/ldc.py +++ b/src/engine/SCons/Tool/ldc.py @@ -70,7 +70,7 @@ def generate(env): static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter) shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter) - env['DC'] = 'ldc2' + env['DC'] = env.Detect('ldc2') or 'ldc2' env['DCOM'] = '$DC $_DINCFLAGS $_DVERFLAGS $_DDEBUGFLAGS $_DFLAGS -c -of=$TARGET $SOURCES' env['_DINCFLAGS'] = '${_concat(DINCPREFIX, DPATH, DINCSUFFIX, __env__, RDirs, TARGET, SOURCE)}' env['_DVERFLAGS'] = '${_concat(DVERPREFIX, DVERSIONS, DVERSUFFIX, __env__)}' -- cgit v0.12