Gary Oberbrunner avatar Gary Oberbrunner committed 8764000

Backed out changeset 87e2f40b59e3 (merge of D support updates)

Comments (0)

Files changed (64)

 
                             Change Log
 
-  From Russel Winder:
-    - Revamp of the D language support. Tools for DMD, GDC and LDC provided
-      and integrated with the C and C++ linking.   NB  This is only tested with
-      D v2, D v1 is now deprecated.
-
-RELEASE 2.X.X -
+RELEASE 2.X.X - 
 
   From Alexey Klimkin:
     - Fix nested LIBPATH expansion by flattening sequences in subst_path.
       * provided a new module rpmutils.py, wrapping the RPM naming rules
         for target files and further hardware-dependent info (compatibility,
         compiler flags, ...),
-      * added new test methods must_exist_one_of() and
+      * added new test methods must_exist_one_of() and 
         must_not_exist_any_of() and
       * removed Aegis support from runtest.py. (#2872)
 
   From Rob Managan:
     - Updated the TeX builder to support the \newglossary command
       in LaTeX's glossaries package and the files it creates.
-    - Improve support for new versions of biblatex in the TeX builder
+    - Improve support for new versions of biblatex in the TeX builder 
       so biber is called automatically if biblatex requires it.
 
 RELEASE 2.2.0 - Mon, 05 Aug 2012 15:37:48 +0000
   From Alexey Petruchik:
     - Support for Microsoft Visual Studio 11 (both using it
       and generating MSVS11 solution files).
-
+    
   From Alexey Klimkin:
     - Fixed the Taskmaster, curing spurious build failures in
       multi-threaded runs (#2720).
-
+    
   From Dirk Baechle:
     - Improved documentation of command-line variables (#2809).
     - Fixed scons-doc.py to properly convert main XML files (#2812).
     - Fix Intel compiler to sort versions >9 correctly (esp. on Linux)
     - Fix Install() when the source and target are directories and the
       target directory exists.
-
+    
   From David Garcia Garzon:
     - Fix Delete to be able to delete broken symlinks and dir
       symlinks.
-
+  
   From Robert Lehr:
     - Handle .output file generated by bison/yacc properly. Cleaning it
       when necessary.
 
   From Antoine Dechaume:
     - Handle SWIG file where there is whitespace after the module name
-      properly. Previously the generated files would include
+      properly. Previously the generated files would include 
       the whitespace.
 
   From Dmitry R.:
 
   From Evgeny Podjachev and Alexey Petruchick:
 
-    - Support generation of Microsoft Visual Studio 2008 (9.0)
+    - Support generation of Microsoft Visual Studio 2008 (9.0) 
       and 2010 (10.0) project and solution files.
 
   From Ken Deeter:
     - The TeX builders should now work with tex files that are generated
       by another program. Thanks to Hans-Martin von Gaudecker for
       isolating the cause of this bug.
-
+      
     - Added support for INDEXSTYLE environment variable so makeindex can
       find style files.
 
     - Added support for the bibunits package so we call bibtex on all
       the bu*.aux files.
-
+      
     - Add support of finding path information on OSX for TeX applications
       MacPorts and Fink paths need to be added by the user
 
     - Fix "Ignoring corrupt sconsign entry" warnings when building
       in a tree with a pre-2.0 .sconsign file.
 
-    - Fix propagation from environment of VS*COMNTOOLS to resolve issues
+    - Fix propagation from environment of VS*COMNTOOLS to resolve issues 
       initializing MSVC/MSVS/SDK issues.
 
     - Handle detecting Visual C++ on Python verions with upper-case

src/engine/MANIFEST-xml.in

 SCons/Tool/g77.xml
 SCons/Tool/gas.xml
 SCons/Tool/gcc.xml
-SCons/Tool/gdc.xml
 SCons/Tool/gfortran.xml
 SCons/Tool/gnulink.xml
 SCons/Tool/gs.xml
 SCons/Tool/javac.xml
 SCons/Tool/javah.xml
 SCons/Tool/latex.xml
-SCons/Tool/ldc.xml
 SCons/Tool/lex.xml
 SCons/Tool/link.xml
 SCons/Tool/linkloc.xml

src/engine/MANIFEST.in

 SCons/Tool/cc.py
 SCons/Tool/cvf.py
 SCons/Tool/CVS.py
-SCons/Tool/DCommon.py
 SCons/Tool/default.py
 SCons/Tool/dmd.py
 SCons/Tool/dvi.py
 SCons/Tool/g77.py
 SCons/Tool/gas.py
 SCons/Tool/gcc.py
-SCons/Tool/gdc.py
 SCons/Tool/gfortran.py
 SCons/Tool/gnulink.py
 SCons/Tool/gs.py
 SCons/Tool/javac.py
 SCons/Tool/javah.py
 SCons/Tool/latex.py
-SCons/Tool/ldc.py
 SCons/Tool/lex.py
 SCons/Tool/link.py
 SCons/Tool/linkloc.py

src/engine/SCons/Tool/DCommon.py

-"""SCons.Tool.DCommon
-
-Common code for the various D tools.
-
-Coded by Russel Winder (russel@winder.org.uk)
-2012-09-06
-"""
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import os.path
-
-def isD(source):
-    if not source:
-        return 0
-    for s in source:
-        if s.sources:
-            ext = os.path.splitext(str(s.sources[0]))[1]
-            if ext == '.d':
-                return 1
-    return 0
-
-def addDPATHToEnv(env, executable):
-    dPath = env.WhereIs(executable)
-    if dPath:
-        phobosDir = dPath[:dPath.rindex(executable)] + '/../src/phobos'
-        if os.path.isdir(phobosDir):
-            env.Append(DPATH=[phobosDir])
-
-def setSmartLink(env, smart_link, smart_lib):
-    linkcom = env.get('LINKCOM')
-    try:
-        env['SMART_LINKCOM'] = smart_link[linkcom]
-    except KeyError:
-        def _smartLink(source, target, env, for_signature, defaultLinker=linkcom):
-            if isD(source):
-                # TODO: I'm not sure how to add a $DLINKCOMSTR variable
-                # so that it works with this _smartLink() logic,
-                # and I don't have a D compiler/linker to try it out,
-                # so we'll leave it alone for now.
-                return '$DLINKCOM'
-            else:
-                return defaultLinker
-        env['SMART_LINKCOM'] = smart_link[linkcom] = _smartLink
-
-    arcom = env.get('ARCOM')
-    try:
-        env['SMART_ARCOM'] = smart_lib[arcom]
-    except KeyError:
-        def _smartLib(source, target, env, for_signature, defaultLib=arcom):
-            if isD(source):
-                # TODO: I'm not sure how to add a $DLIBCOMSTR variable
-                # so that it works with this _smartLib() logic, and
-                # I don't have a D compiler/archiver to try it out,
-                # so we'll leave it alone for now.
-                return '$DLIBCOM'
-            else:
-                return defaultLib
-        env['SMART_ARCOM'] = smart_lib[arcom] = _smartLib
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

src/engine/SCons/Tool/__init__.py

         assemblers = ['masm', 'nasm', 'gas', '386asm' ]
         fortran_compilers = ['gfortran', 'g77', 'ifl', 'cvf', 'f95', 'f90', 'fortran']
         ars = ['mslib', 'ar', 'tlib']
-        other_plat_tools = ['msvs', 'midl']
+        other_plat_tools=['msvs','midl']
     elif str(platform) == 'os2':
         "prefer IBM tools on OS/2"
         linkers = ['ilink', 'gnulink', ]#'mslink']
         fortran_compiler = FindTool(fortran_compilers, env) or fortran_compilers[0]
         ar = FindTool(ars, env) or ars[0]
 
-    d_compilers = ['dmd', 'gdc', 'ldc']
-    d_compiler = FindTool(d_compilers, env) or d_compilers[0]
-
     other_tools = FindAllTools(other_plat_tools + [
+                               'dmd',
                                #TODO: merge 'install' into 'filesystem' and
                                # make 'filesystem' the default
                                'filesystem',
                                ], env)
 
     tools = ([linker, c_compiler, cxx_compiler,
-              fortran_compiler, assembler, ar, d_compiler]
+              fortran_compiler, assembler, ar]
              + other_tools)
 
     return [x for x in tools if x]

src/engine/SCons/Tool/dmd.py

 Tool-specific initialization for the Digital Mars D compiler.
 (http://digitalmars.com/d)
 
-Originally coded by Andy Friesen (andy@ikagames.com)
+Coded by Andy Friesen (andy@ikagames.com)
 15 November 2003
 
-Evolved by Russel Winder (russel@winder.org.uk)
-2010-02-07, 2010-11-17, 2011-02, 2011-05-14, 2012-05-08, 2012-09-02, 2012-09-06
+Amended by Russel Winder (russel@russel.org.uk)
+2010-02-07
 
 There are a number of problems with this script at this point in time.
-The one that irritates the most is the Windows linker setup.  The D
+The one that irritates me the most is the Windows linker setup.  The D
 linker doesn't have a way to add lib paths on the commandline, as far
 as I can see.  You have to specify paths relative to the SConscript or
 use absolute paths.  To hack around it, add '#/blah'.  This will link
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os
-import subprocess
 
 import SCons.Action
 import SCons.Builder
 import SCons.Scanner.D
 import SCons.Tool
 
-import SCons.Tool.DCommon
+# Adapted from c++.py
+def isD(source):
+    if not source:
+        return 0
+
+    for s in source:
+        if s.sources:
+            ext = os.path.splitext(str(s.sources[0]))[1]
+            if ext == '.d':
+                return 1
+    return 0
 
 smart_link = {}
+
 smart_lib = {}
 
 def generate(env):
+    global smart_link
+    global smart_lib
+
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
     DAction = SCons.Action.Action('$DCOM', '$DCOMSTR')
     env['DDEBUG'] = []
 
     if dc:
-        SCons.Tool.DCommon.addDPATHToEnv(env, dc)
+        # Add the path to the standard library.
+        # This is merely for the convenience of the dependency scanner.
+        dmd_path = env.WhereIs(dc)
+        if dmd_path:
+            x = dmd_path.rindex(dc)
+            phobosDir = dmd_path[:x] + '/../src/phobos'
+            if os.path.isdir(phobosDir):
+                env.Append(DPATH = [phobosDir])
 
     env['DINCPREFIX'] = '-I'
     env['DINCSUFFIX'] = ''
     env['DFLAGSUFFIX'] = ''
     env['DFILESUFFIX'] = '.d'
 
-    env['DLINK'] = '$DC'
-    env['DLINKCOM'] = '$DLINK -of$TARGET $SOURCES $DFLAGS $DLINKFLAGS $_DLINKLIBFLAGS'
-    env['DLIB'] = 'lib'
-    env['DLIBCOM'] = '$DLIB $_DLIBFLAGS -c $TARGET $SOURCES $_DLINKLIBFLAGS'
+    # Need to use the Digital Mars linker/lib on windows.
+    # *nix can just use GNU link.
+    if env['PLATFORM'] == 'win32':
+        env['DLINK'] = '$DC'
+        env['DLINKCOM'] = '$DLINK -of$TARGET $SOURCES $DFLAGS $DLINKFLAGS $_DLINKLIBFLAGS'
+        env['DLIB'] = 'lib'
+        env['DLIBCOM'] = '$DLIB $_DLIBFLAGS -c $TARGET $SOURCES $_DLINKLIBFLAGS'
 
-    env['_DLINKLIBFLAGS'] = '$( ${_concat(DLIBLINKPREFIX, LIBS, DLIBLINKSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-    env['_DLIBFLAGS'] = '$( ${_concat(DLIBFLAGPREFIX, DLIBFLAGS, DLIBFLAGSUFFIX, __env__)} $)'
-    env['DLINKFLAGS'] = []
-    env['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-L-l'
-    env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else ''
-    env['DLIBFLAGPREFIX'] = '-'
-    env['DLIBFLAGSUFFIX'] = ''
-    env['DLINKFLAGPREFIX'] = '-'
-    env['DLINKFLAGSUFFIX'] = ''
+        env['_DLINKLIBFLAGS'] = '$( ${_concat(DLIBLINKPREFIX, LIBS, DLIBLINKSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
+        env['_DLIBFLAGS'] = '$( ${_concat(DLIBFLAGPREFIX, DLIBFLAGS, DLIBFLAGSUFFIX, __env__)} $)'
+        env['DLINKFLAGS'] = []
+        env['DLIBLINKPREFIX'] = ''
+        env['DLIBLINKSUFFIX'] = '.lib'
+        env['DLIBFLAGPREFIX'] = '-'
+        env['DLIBFLAGSUFFIX'] = ''
+        env['DLINKFLAGPREFIX'] = '-'
+        env['DLINKFLAGSUFFIX'] = ''
 
-    SCons.Tool.createStaticLibBuilder(env)
+        SCons.Tool.createStaticLibBuilder(env)
 
-    # Basically, we hijack the link and ar builders with our own.
-    # these builders check for the presence of D source, and swap out
-    # the system's defaults for the Digital Mars tools.  If there's no D
-    # source, then we silently return the previous settings.
-    SCons.Tool.DCommon.setSmartLink(env, smart_link, smart_lib)
+        # Basically, we hijack the link and ar builders with our own.
+        # these builders check for the presence of D source, and swap out
+        # the system's defaults for the Digital Mars tools.  If there's no D
+        # source, then we silently return the previous settings.
+        linkcom = env.get('LINKCOM')
+        try:
+            env['SMART_LINKCOM'] = smart_link[linkcom]
+        except KeyError:
+            def _smartLink(source, target, env, for_signature,
+                           defaultLinker=linkcom):
+                if isD(source):
+                    # XXX I'm not sure how to add a $DLINKCOMSTR variable
+                    # so that it works with this _smartLink() logic,
+                    # and I don't have a D compiler/linker to try it out,
+                    # so we'll leave it alone for now.
+                    return '$DLINKCOM'
+                else:
+                    return defaultLinker
+            env['SMART_LINKCOM'] = smart_link[linkcom] = _smartLink
 
-    # It is worth noting that the final space in these strings is
-    # absolutely pivotal.  SCons sees these as actions and not generators
-    # if it is not there. (very bad)
-    env['ARCOM'] = '$SMART_ARCOM '
-    env['LINKCOM'] = '$SMART_LINKCOM '
+        arcom = env.get('ARCOM')
+        try:
+            env['SMART_ARCOM'] = smart_lib[arcom]
+        except KeyError:
+            def _smartLib(source, target, env, for_signature,
+                         defaultLib=arcom):
+                if isD(source):
+                    # XXX I'm not sure how to add a $DLIBCOMSTR variable
+                    # so that it works with this _smartLib() logic, and
+                    # I don't have a D compiler/archiver to try it out,
+                    # so we'll leave it alone for now.
+                    return '$DLIBCOM'
+                else:
+                    return defaultLib
+            env['SMART_ARCOM'] = smart_lib[arcom] = _smartLib
+
+        # It is worth noting that the final space in these strings is
+        # absolutely pivotal.  SCons sees these as actions and not generators
+        # if it is not there. (very bad)
+        env['ARCOM'] = '$SMART_ARCOM '
+        env['LINKCOM'] = '$SMART_LINKCOM '
+    else: # assuming linux
+        linkcom = env.get('LINKCOM')
+        try:
+            env['SMART_LINKCOM'] = smart_link[linkcom]
+        except KeyError:
+            def _smartLink(source, target, env, for_signature,
+                           defaultLinker=linkcom, dc=dc):
+                if isD(source):
+                    try:
+                        libs = env['LIBS']
+                    except KeyError:
+                        libs = []
+                    if dc == 'dmd':
+                        # TODO: This assumes that the dmd executable is in the
+                        # bin directory and that the libraries are in a peer
+                        # directory lib.  This true of the Digital Mars
+                        # distribution but . . .
+                        import glob
+                        dHome = env.WhereIs(dc).replace('/dmd' , '/..')
+                        if glob.glob(dHome + '/lib/*phobos2*'):
+                            if 'phobos2' not in libs:
+                                env.Append(LIBPATH = [dHome + '/lib'])
+                                env.Append(LIBS = ['phobos2'])
+                                # TODO: Find out when there will be a
+                                # 64-bit version of D.
+                                env.Append(LINKFLAGS = ['-m32'])
+                        else:
+                            if 'phobos' not in libs:
+                                env.Append(LIBS = ['phobos'])
+                    elif dc is 'gdmd':
+                        env.Append(LIBS = ['gphobos'])
+                    if 'pthread' not in libs:
+                        env.Append(LIBS = ['pthread'])
+                    if 'm' not in libs:
+                        env.Append(LIBS = ['m'])
+                return defaultLinker
+            env['SMART_LINKCOM'] = smart_link[linkcom] = _smartLink
+
+        env['LINKCOM'] = '$SMART_LINKCOM '
 
 def exists(env):
     return env.Detect(['dmd', 'gdmd'])

src/engine/SCons/Tool/dmd.xml

 -->
 <tool name="dmd">
 <summary>
-Sets construction variables for the D language compiler DMD or GDMD.
+Sets construction variables for D language compilers
+(the Digital Mars D compiler, or GDC).
 </summary>
 <sets>
 <!--

src/engine/SCons/Tool/gdc.py

-"""SCons.Tool.gdc
-
-Tool-specific initialization for the GDC compiler.
-(https://github.com/D-Programming-GDC/GDC)
-
-Coded by Russel Winder (russel@winder.org.uk)
-2012-05-09, 2012-09-06
-
-Compiler variables:
-    DC - The name of the D compiler to use.  Defaults to gdc.
-    DPATH - List of paths to search for import modules.
-    DVERSIONS - List of version tags to enable when compiling.
-    DDEBUG - List of debug tags to enable when compiling.
-
-Linker related variables:
-    LIBS - List of library files to link in.
-    DLINK - Name of the linker to use.  Defaults to gcc.
-    DLINKFLAGS - List of linker flags.
-
-Lib tool variables:
-    DLIB - Name of the lib tool to use.  Defaults to lib.
-    DLIBFLAGS - List of flags to pass to the lib tool.
-    LIBS - Same as for the linker. (libraries to pull into the .lib)
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import SCons.Action
-import SCons.Defaults
-import SCons.Tool
-
-import SCons.Tool.DCommon
-
-smart_link = {}
-smart_lib = {}
-
-def generate(env):
-    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
-    DAction = SCons.Action.Action('$DCOM', '$DCOMSTR')
-
-    static_obj.add_action('.d', DAction)
-    shared_obj.add_action('.d', DAction)
-    static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter)
-    shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter)
-
-    dc = env.Detect('gdc')
-    env['DC'] = dc
-    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__)}  $)'
-    env['_DDEBUGFLAGS'] = '$( ${_concat(DDEBUGPREFIX, DDEBUG, DDEBUGSUFFIX, __env__)} $)'
-    env['_DFLAGS'] = '$( ${_concat(DFLAGPREFIX, DFLAGS, DFLAGSUFFIX, __env__)} $)'
-
-    env['DPATH'] = ['#/']
-    env['DFLAGS'] = []
-    env['DVERSIONS'] = []
-    env['DDEBUG'] = []
-
-    if dc:
-        SCons.Tool.DCommon.addDPATHToEnv(env, dc)
-
-    env['DINCPREFIX'] = '-I'
-    env['DINCSUFFIX'] = ''
-    env['DVERPREFIX'] = '-version='
-    env['DVERSUFFIX'] = ''
-    env['DDEBUGPREFIX'] = '-debug='
-    env['DDEBUGSUFFIX'] = ''
-    env['DFLAGPREFIX'] = '-'
-    env['DFLAGSUFFIX'] = ''
-    env['DFILESUFFIX'] = '.d'
-
-    env['DLINK'] = '$DC'
-    env['DLINKCOM'] = '$DLINK -o $TARGET $SOURCES $DFLAGS $DLINKFLAGS $_DLINKLIBFLAGS'
-    env['DLIB'] = 'lib'
-    env['DLIBCOM'] = '$DLIB $_DLIBFLAGS -c $TARGET $SOURCES $_DLINKLIBFLAGS'
-
-    env['_DLINKLIBFLAGS'] = '$( ${_concat(DLIBLINKPREFIX, LIBS, DLIBLINKSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-    env['_DLIBFLAGS'] = '$( ${_concat(DLIBFLAGPREFIX, DLIBFLAGS, DLIBFLAGSUFFIX, __env__)} $)'
-    env['DLINKFLAGS'] = []
-    env['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-l'
-    env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else ''
-    env['DLIBFLAGPREFIX'] = '-'
-    env['DLIBFLAGSUFFIX'] = ''
-    env['DLINKFLAGPREFIX'] = '-'
-    env['DLINKFLAGSUFFIX'] = ''
-
-    SCons.Tool.createStaticLibBuilder(env)
-
-    # Basically, we hijack the link and ar builders with our own.
-    # these builders check for the presence of D source, and swap out
-    # the system's defaults for the Digital Mars tools.  If there's no D
-    # source, then we silently return the previous settings.
-    SCons.Tool.DCommon.setSmartLink(env, smart_link, smart_lib)
-
-    # It is worth noting that the final space in these strings is
-    # absolutely pivotal.  SCons sees these as actions and not generators
-    # if it is not there. (very bad)
-    env['ARCOM'] = '$SMART_ARCOM '
-    env['LINKCOM'] = '$SMART_LINKCOM '
-
-def exists(env):
-    return env.Detect('gdc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

src/engine/SCons/Tool/gdc.xml

-<!--
-__COPYRIGHT__
-
-This file is processed by the bin/SConsDoc.py module.
-See its __doc__ string for a discussion of the format.
--->
-<tool name="gdc">
-<summary>
-Sets construction variables for the D language compiler GDC.
-</summary>
-<sets>
-<!--
-DC
-DCOM
-_DINCFLAGS
-_DVERFLAGS
-_DDEBUGFLAGS
-_DFLAGS
-DPATH
-DFLAGS
-DVERSIONS
-DDEBUG
-DINCPREFIX
-DINCSUFFIX
-DVERPREFIX
-DVERSUFFIX
-DDEBUGPREFIX
-DDEBUGSUFFIX
-DFLAGPREFIX
-DFLAGSUFFIX
-DFLESUFFIX
-DLINK
-DLINKCOM
-DLIB
-DLIBCOM
-_DLINKLIBFLAGS
-_DLIBFLAGS
-DLINKFLAGS
-DLIBLINKPREFIX
-DLIBLINKSUFFIX
-DLIBFLAGPREFIX
-DLIBFLAGSUFFIX
-DLINKFLAGPREFIX
-DLINKFLAGSUFFIX
-LINKCOM
-ARCOM
-LIBS
--->
-</sets>
-<uses>
-</uses>
-</tool>

src/engine/SCons/Tool/ldc.py

-"""SCons.Tool.ldc
-
-Tool-specific initialization for the LDC compiler.
-(http://www.dsource.org/projects/ldc)
-
-Coded by Russel Winder (russel@winder.org.uk)
-2012-05-09, 2012-09-06
-
-Compiler variables:
-    DC - The name of the D compiler to use.  Defaults to ldc2.
-    DPATH - List of paths to search for import modules.
-    DVERSIONS - List of version tags to enable when compiling.
-    DDEBUG - List of debug tags to enable when compiling.
-
-Linker related variables:
-    LIBS - List of library files to link in.
-    DLINK - Name of the linker to use.  Defaults to gcc.
-    DLINKFLAGS - List of linker flags.
-
-Lib tool variables:
-    DLIB - Name of the lib tool to use.  Defaults to lib.
-    DLIBFLAGS - List of flags to pass to the lib tool.
-    LIBS - Same as for the linker. (libraries to pull into the .lib)
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import os
-import subprocess
-
-import SCons.Action
-import SCons.Builder
-import SCons.Defaults
-import SCons.Scanner.D
-import SCons.Tool
-
-import SCons.Tool.DCommon
-
-smart_link = {}
-smart_lib = {}
-
-def generate(env):
-    static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
-
-    DAction = SCons.Action.Action('$DCOM', '$DCOMSTR')
-
-    static_obj.add_action('.d', DAction)
-    shared_obj.add_action('.d', DAction)
-    static_obj.add_emitter('.d', SCons.Defaults.StaticObjectEmitter)
-    shared_obj.add_emitter('.d', SCons.Defaults.SharedObjectEmitter)
-
-    dc = env.Detect('ldc2')
-    env['DC'] = dc
-    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__)}  $)'
-    env['_DDEBUGFLAGS'] = '$( ${_concat(DDEBUGPREFIX, DDEBUG, DDEBUGSUFFIX, __env__)} $)'
-    env['_DFLAGS'] = '$( ${_concat(DFLAGPREFIX, DFLAGS, DFLAGSUFFIX, __env__)} $)'
-
-    env['DPATH'] = ['#/']
-    env['DFLAGS'] = []
-    env['DVERSIONS'] = []
-    env['DDEBUG'] = []
-
-    if dc:
-        SCons.Tool.DCommon.addDPATHToEnv(env, dc)
-
-    env['DINCPREFIX'] = '-I='
-    env['DINCSUFFIX'] = ''
-    env['DVERPREFIX'] = '-version='
-    env['DVERSUFFIX'] = ''
-    env['DDEBUGPREFIX'] = '-debug='
-    env['DDEBUGSUFFIX'] = ''
-    env['DFLAGPREFIX'] = '-'
-    env['DFLAGSUFFIX'] = ''
-    env['DFILESUFFIX'] = '.d'
-
-    env['DLINK'] = '$DC'
-    env['DLINKCOM'] = '$DLINK -of$TARGET $SOURCES $DFLAGS $DLINKFLAGS $_DLINKLIBFLAGS'
-    env['DLIB'] = 'lib'
-    env['DLIBCOM'] = '$DLIB $_DLIBFLAGS -c $TARGET $SOURCES $_DLINKLIBFLAGS'
-
-    env['_DLINKLIBFLAGS'] = '$( ${_concat(DLIBLINKPREFIX, LIBS, DLIBLINKSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)'
-    env['_DLIBFLAGS'] = '$( ${_concat(DLIBFLAGPREFIX, DLIBFLAGS, DLIBFLAGSUFFIX, __env__)} $)'
-    env['DLINKFLAGS'] = []
-    env['DLIBLINKPREFIX'] = '' if env['PLATFORM'] == 'win32' else '-L-l'
-    env['DLIBLINKSUFFIX'] = '.lib' if env['PLATFORM'] == 'win32' else ''
-    env['DLIBFLAGPREFIX'] = '-'
-    env['DLIBFLAGSUFFIX'] = ''
-    env['DLINKFLAGPREFIX'] = '-'
-    env['DLINKFLAGSUFFIX'] = ''
-
-    SCons.Tool.createStaticLibBuilder(env)
-
-    # Basically, we hijack the link and ar builders with our own.
-    # these builders check for the presence of D source, and swap out
-    # the system's defaults for the Digital Mars tools.  If there's no D
-    # source, then we silently return the previous settings.
-    SCons.Tool.DCommon.setSmartLink(env, smart_link, smart_lib)
-
-    # It is worth noting that the final space in these strings is
-    # absolutely pivotal.  SCons sees these as actions and not generators
-    # if it is not there. (very bad)
-    env['ARCOM'] = '$SMART_ARCOM '
-    env['LINKCOM'] = '$SMART_LINKCOM '
-
-
-def exists(env):
-    return env.Detect('ldc2')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

src/engine/SCons/Tool/ldc.xml

-<!--
-__COPYRIGHT__
-
-This file is processed by the bin/SConsDoc.py module.
-See its __doc__ string for a discussion of the format.
--->
-<tool name="dmd">
-<summary>
-Sets construction variables for the D language compiler LDC2.
-</summary>
-<sets>
-<!--
-DC
-DCOM
-_DINCFLAGS
-_DVERFLAGS
-_DDEBUGFLAGS
-_DFLAGS
-DPATH
-DFLAGS
-DVERSIONS
-DDEBUG
-DINCPREFIX
-DINCSUFFIX
-DVERPREFIX
-DVERSUFFIX
-DDEBUGPREFIX
-DDEBUGSUFFIX
-DFLAGPREFIX
-DFLAGSUFFIX
-DFLESUFFIX
-DLINK
-DLINKCOM
-DLIB
-DLIBCOM
-_DLINKLIBFLAGS
-_DLIBFLAGS
-DLINKFLAGS
-DLIBLINKPREFIX
-DLIBLINKSUFFIX
-DLIBFLAGPREFIX
-DLIBFLAGSUFFIX
-DLINKFLAGPREFIX
-DLINKFLAGSUFFIX
-LINKCOM
-ARCOM
-LIBS
--->
-</sets>
-<uses>
-</uses>
-</tool>

test/D/CoreScanner/Image/SConstruct_template

-# -*- mode:python; coding:utf-8; -*-
-
-import os
-
-environment = Environment(
-    ENV=os.environ,
-    tools=['link', '{}'])
-environment.Program('test1.d')
-environment.Program('test2.d')

test/D/CoreScanner/Image/ignored.d

-module  ignored;
-
-int something;

test/D/CoreScanner/Image/module1.d

-module  module1;
-
-int something;

test/D/CoreScanner/Image/module2.d

-module  module2;
-
-int something;

test/D/CoreScanner/Image/module3.di

-module  module3;
-
-int something;

test/D/CoreScanner/Image/p/ignored.d

-module  p.ignored;
-
-int something;

test/D/CoreScanner/Image/p/submodule1.d

-module  p.submodule1;
-
-int something;

test/D/CoreScanner/Image/p/submodule2.d

-module p.submodule2;
-
-int something;

test/D/CoreScanner/Image/test1.d

-import module1;
-import module2;
-import module3;
-import p.submodule1;
-import p.submodule2;
-
-int main() {
-   return 0;
-}

test/D/CoreScanner/Image/test2.d

-import
-   module1,
-   module2,
-   module3;
-import
-   p.submodule1,
-   p.submodule2;
-
-int main() {
-   return 0;
-}

test/D/CoreScanner/common.py

-"""
-Verify that the D scanner can return multiple modules imported by
-a single statement.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import TestSCons
-
-from os.path import abspath, dirname
-
-import sys
-sys.path.insert(1, abspath(dirname(__file__) + '/../Support'))
-
-from executablesSearch import isExecutableOfToolAvailable
-
-def testForTool(tool):
-
-    test = TestSCons.TestSCons()
-
-    _obj = TestSCons._obj
-
-    if not isExecutableOfToolAvailable(test, tool) :
-        test.skip_test("Required executable for tool '{}' not found, skipping test.\n".format(tool))
-
-    test.dir_fixture('Image')
-    test.write('SConstruct', open('SConstruct_template', 'r').read().format(tool))
-
-    arguments = 'test1%(_obj)s test2%(_obj)s' % locals()
-
-    if tool == 'dmd':
-        # 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(arguments=arguments, stderr=None)
-    else:
-        test.run(arguments=arguments)
-
-    test.up_to_date(arguments=arguments)
-
-    test.write(['module2.d'], """\
-module  module2;
-
-int something_else;
-""")
-
-    if tool == 'dmd':
-        # 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.not_up_to_date(arguments=arguments, stderr=None)
-    else:
-        test.not_up_to_date(arguments=arguments)
-
-    test.up_to_date(arguments=arguments)
-
-    test.write(['p', 'submodule2.d'], """\
-module p.submodule2;
-
-int something_else;
-""")
-
-    if tool == 'dmd':
-        # 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.not_up_to_date(arguments=arguments, stderr=None)
-    else:
-        test.not_up_to_date(arguments=arguments)
-
-    test.up_to_date(arguments=arguments)
-
-    test.pass_test()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/CoreScanner/sconstest-dmd.py

-"""
-Test compiling and executing using the dmd tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from common import testForTool
-testForTool('dmd')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/CoreScanner/sconstest-gdc.py

-"""
-Test compiling and executing using the gdc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from common import testForTool
-testForTool('gdc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/CoreScanner/sconstest-ldc.py

-"""
-Test compiling and executing using the ldc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from common import testForTool
-testForTool('ldc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/DMD2.py

-#!/usr/bin/env python
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-#  Amended by Russel Winder <russel@russel.org.uk> 2010-05-05
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import TestSCons
-
-_exe = TestSCons._exe
-test = TestSCons.TestSCons()
-
-if not test.where_is('dmd') and not test.where_is('gdmd'):
-    test.skip_test("Could not find 'dmd' or 'gdmd', skipping test.\n")
-
-test.write('SConstruct', """\
-import os
-env = Environment(tools=['link', 'dmd'], ENV=os.environ)
-if env['PLATFORM'] == 'cygwin': env['OBJSUFFIX'] = '.obj'  # trick DMD
-env.Program('foo', 'foo.d')
-""")
-
-test.write('foo.d', """\
-import std.stdio;
-int main(string[] args) {
-    printf("Hello!");
-    return 0;
-}
-""")
-
-test.run()
-
-test.run(program=test.workpath('foo'+_exe))
-
-test.fail_test(not test.stdout() == 'Hello!')
-
-test.pass_test()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/GDC.py

-#!/usr/bin/env python
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-#  Amended by Russel Winder <russel@russel.org.uk> 2010-05-05
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import TestSCons
-
-_exe = TestSCons._exe
-test = TestSCons.TestSCons()
-
-if not test.where_is('gdc'):
-    test.skip_test("Could not find 'gdc', skipping test.\n")
-
-test.write('SConstruct', """\
-import os
-env = Environment(tools=['link', 'gdc'], ENV=os.environ)
-if env['PLATFORM'] == 'cygwin': env['OBJSUFFIX'] = '.obj'  # trick DMD
-env.Program('foo', 'foo.d')
-""")
-
-test.write('foo.d', """\
-import std.stdio;
-int main(string[] args) {
-    printf("Hello!");
-    return 0;
-}
-""")
-
-test.run()
-
-test.run(program=test.workpath('foo'+_exe))
-
-test.fail_test(not test.stdout() == 'Hello!')
-
-test.pass_test()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/LinkingProblem/SConstruct_template

-# -*- mode:python; coding=utf-8; -*-
-
-import os
-
-environment = Environment(
-    ENV=os.environ,
-    tools = ['cc', 'link' , '{}'],
-    LIBS = ['ncurses'])
-
-environment.Object('ncurs_impl.o', 'ncurs_impl.c')
-
-environment.Program('prog', Split("""
-	prog.d
-	ncurs_impl.o
-"""))
-
-environment.Program('cprog', Split("""
-	cprog.c
-	ncurs_impl.o
-"""))

test/D/HSTeoh/LinkingProblem/cprog.c

-extern int ncurs_init();
-extern int ncurs_cleanup();
-
-int main() {
-	ncurs_init();
-	ncurs_cleanup();
-}

test/D/HSTeoh/LinkingProblem/ncurs_impl.c

-/* Ncurses wrappers */
-#include <ncurses.h>
-
-int ncurs_init() {
-	initscr();
-	cbreak();
-	noecho();
-	keypad(stdscr, TRUE);
-}
-
-int ncurs_cleanup() {
-	endwin();
-}

test/D/HSTeoh/LinkingProblem/prog.d

-/*
- * Simple D program that links to ncurses via a C wrapping file.
- */
-
-extern(C) {
-	int ncurs_init();
-	int ncurs_cleanup();
-}
-
-void main() {
-	ncurs_init();
-	ncurs_cleanup();
-}
-

test/D/HSTeoh/README.txt

-The tests here are evolutions of test cases provided by H.S.Teoh via email.

test/D/HSTeoh/SingleStringCannotBeMultipleOptions/SConstruct_template

-# -*- mode:python; coding=utf-8; -*-
-
-import os
-
-environment = Environment(
-    ENV=os.environ,
-    tools=['link', '{}'],
-    # It might be thought that a single string can contain multiple options space separated. Actually this
-    # is deemed to be a single option, so leads to an error.
-    DFLAGS = '-m64 -O')
-
-environment.Program('proj', Split("""
-proj.d
-mod1.d
-cmod.c
-"""))

test/D/HSTeoh/SingleStringCannotBeMultipleOptions/cmod.c

-/* This is a sample C module. */
-
-int csqr(int arg) {
-	return arg*arg;
-}

test/D/HSTeoh/SingleStringCannotBeMultipleOptions/mod1.d

-module mod1;
-import std.stdio;
-
-void print_msg() {
-	writeln("Hello, this is a test program for the new SCons D support");
-}

test/D/HSTeoh/SingleStringCannotBeMultipleOptions/proj.d

-import std.stdio;
-import mod1;
-
-extern(C) {
-	int csqr(int arg);
-}
-
-void main() {
-	print_msg();
-
-	auto i = 17;
-	writefln("The square of %d is %d", i, csqr(i));
-}

test/D/HSTeoh/linkingProblem_common.py

-"""
-These tests check an issue with the LIBS environment variable.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import TestSCons
-
-from os.path import abspath, dirname
-
-import sys
-sys.path.insert(1, abspath(dirname(__file__) + '/../Support'))
-
-from executablesSearch import isExecutableOfToolAvailable
-
-def testForTool(tool):
-
-    test = TestSCons.TestSCons()
-
-    if not isExecutableOfToolAvailable(test, tool) :
-        test.skip_test("Required executable for tool '{}' not found, skipping test.\n".format(tool))
-
-    test.dir_fixture('LinkingProblem')
-    test.write('SConstruct', open('SConstruct_template', 'r').read().format(tool))
-
-    test.run()
-
-    test.must_exist(test.workpath('ncurs_impl.o'))
-    test.must_exist(test.workpath('cprog'))
-    test.must_exist(test.workpath('prog'))
-
-    test.pass_test()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/sconstest-linkingProblem_dmd.py

-"""
-Test compiling and executing using the gdc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from linkingProblem_common import testForTool
-testForTool('dmd')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/sconstest-linkingProblem_gdc.py

-"""
-Test compiling and executing using the gdc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from linkingProblem_common import testForTool
-testForTool('gdc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/sconstest-linkingProblem_ldc.py

-"""
-Test compiling and executing using the ldc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from linkingProblem_common import testForTool
-testForTool('ldc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/sconstest-singleStringCannotBeMultipleOptions_dmd.py

-"""
-Test compiling and executing using the dmd tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from singleStringCannotBeMultipleOptions_common import testForTool
-testForTool('dmd')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/sconstest-singleStringCannotBeMultipleOptions_gdc.py

-"""
-Test compiling and executing using the gdc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from singleStringCannotBeMultipleOptions_common import testForTool
-testForTool('gdc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/sconstest-singleStringCannotBeMultipleOptions_ldc.py

-"""
-Test compiling and executing using the ldc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from singleStringCannotBeMultipleOptions_common import testForTool
-testForTool('ldc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HSTeoh/singleStringCannotBeMultipleOptions_common.py

-"""
-These tests verify that SCons fails appropriately where the user has tried to supply multiple command line
-options via a single string rather than providing a list of strings, one string per option.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import TestSCons
-
-from os.path import abspath, dirname
-
-import sys
-sys.path.insert(1, abspath(dirname(__file__) + '/../Support'))
-
-from executablesSearch import isExecutableOfToolAvailable
-
-def testForTool(tool):
-
-    test = TestSCons.TestSCons()
-
-    if not isExecutableOfToolAvailable(test, tool) :
-        test.skip_test("Required executable for tool '{}' not found, skipping test.\n".format(tool))
-
-    test.dir_fixture('SingleStringCannotBeMultipleOptions')
-    test.write('SConstruct', open('SConstruct_template', 'r').read().format(tool))
-
-    test.run(status=2, stdout=None, stderr=None)
-
-    result = {
-        'dmd': ".*unrecognized switch '-m64 -O'.*",
-        'gdc': ".*unrecognized command line option.*",
-        'ldc': ".*Unknown command line argument '-m64 -O'.*",
-        }[tool]
-
-    test.fail_test(not test.match_re_dotall(test.stderr(), result))
-
-    test.pass_test()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HelloWorld/CompileAndLinkOneStep/Image/SConstruct_template

-# -*- mode:python; coding:utf-8; -*-
-
-import os
-
-environment = Environment(
-    ENV=os.environ,
-    tools=['link', '{}'])
-
-environment.Program('helloWorld.d')

test/D/HelloWorld/CompileAndLinkOneStep/Image/helloWorld.d

-import std.stdio;
-
-int main(immutable string[] args) {
-  writeln("Hello World.");
-  return 0;
-}

test/D/HelloWorld/CompileAndLinkOneStep/common.py

-"""
-Support functions for all the tests.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-import TestSCons
-
-from os.path import abspath, dirname
-
-import sys
-sys.path.insert(1, abspath(dirname(__file__) + '/../../Support'))
-
-from executablesSearch import isExecutableOfToolAvailable
-
-def testForTool(tool):
-
-    test = TestSCons.TestSCons()
-
-    if not isExecutableOfToolAvailable(test, tool) :
-        test.skip_test("Required executable for tool '{}' not found, skipping test.\n".format(tool))
-
-    test.dir_fixture('Image')
-    test.write('SConstruct', open('SConstruct_template', 'r').read().format(tool))
-
-    if tool == 'dmd':
-        # 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)
-    else:
-        test.run()
-
-    test.must_exist(test.workpath('helloWorld.o'))
-    test.must_exist(test.workpath('helloWorld'))
-
-    test.run(program=test.workpath('helloWorld'+TestSCons._exe))
-    test.fail_test(test.stdout() != 'Hello World.\n')
-
-    test.pass_test()
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HelloWorld/CompileAndLinkOneStep/sconstest-dmd.py

-"""
-Test compiling and executing using the dmd tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from common import testForTool
-testForTool('dmd')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HelloWorld/CompileAndLinkOneStep/sconstest-gdc.py

-"""
-Test compiling and executing using the gdc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from common import testForTool
-testForTool('gdc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HelloWorld/CompileAndLinkOneStep/sconstest-ldc.py

-"""
-Test compiling and executing using the ldc tool.
-"""
-
-#
-# __COPYRIGHT__
-#
-# Permission is hereby granted, free of charge, to any person obtaining
-# a copy of this software and associated documentation files (the
-# "Software"), to deal in the Software without restriction, including
-# without limitation the rights to use, copy, modify, merge, publish,
-# distribute, sublicense, and/or sell copies of the Software, and to
-# permit persons to whom the Software is furnished to do so, subject to
-# the following conditions:
-#
-# The above copyright notice and this permission notice shall be included
-# in all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
-# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
-# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-
-__revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
-
-from common import testForTool
-testForTool('ldc')
-
-# Local Variables:
-# tab-width:4
-# indent-tabs-mode:nil
-# End:
-# vim: set expandtab tabstop=4 shiftwidth=4:

test/D/HelloWorld/CompileThenLinkTwoSteps/Image/SConstruct_template

-# -*- mode:python; coding:utf-8; -*-
-
-import os
-
-environment = Environment(
-    ENV=os.environ,
-    tools=['link', '{}'])
-
-objects = environment.Object('helloWorld.d')
-
-environment.Program('helloWorld', objects)

test/D/HelloWorld/CompileThenLinkTwoSteps/Image/helloWorld.d

-import std.stdio;
-
-int main(immutable string[] args) {
-  writeln("Hello World.");
-  return 0;
-}

test/D/HelloWorld/CompileThenLinkTwoSteps/common.py