Implement Tool refactoring. (Chad Austin + Steve Leblanc)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 10 Apr 2003 05:35:38 +0000 (05:35 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 10 Apr 2003 05:35:38 +0000 (05:35 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@638 fdb21ef1-2011-0410-befe-b5e4ea1792b1

62 files changed:
doc/man/scons.1
src/CHANGES.txt
src/RELEASE.txt
src/engine/SCons/Environment.py
src/engine/SCons/EnvironmentTests.py
src/engine/SCons/Tool/386asm.py
src/engine/SCons/Tool/BitKeeper.py
src/engine/SCons/Tool/CVS.py
src/engine/SCons/Tool/Perforce.py
src/engine/SCons/Tool/RCS.py
src/engine/SCons/Tool/SCCS.py
src/engine/SCons/Tool/Subversion.py
src/engine/SCons/Tool/ToolTests.py
src/engine/SCons/Tool/__init__.py
src/engine/SCons/Tool/ar.py
src/engine/SCons/Tool/default.py
src/engine/SCons/Tool/dvipdf.py
src/engine/SCons/Tool/dvips.py
src/engine/SCons/Tool/g++.py
src/engine/SCons/Tool/g77.py
src/engine/SCons/Tool/gas.py
src/engine/SCons/Tool/gcc.py
src/engine/SCons/Tool/gnulink.py
src/engine/SCons/Tool/icc.py
src/engine/SCons/Tool/ifl.py
src/engine/SCons/Tool/ilink.py
src/engine/SCons/Tool/jar.py
src/engine/SCons/Tool/javac.py
src/engine/SCons/Tool/latex.py
src/engine/SCons/Tool/lex.py
src/engine/SCons/Tool/linkloc.py
src/engine/SCons/Tool/masm.py
src/engine/SCons/Tool/mingw.py
src/engine/SCons/Tool/mslib.py
src/engine/SCons/Tool/mslink.py
src/engine/SCons/Tool/msvc.py
src/engine/SCons/Tool/nasm.py
src/engine/SCons/Tool/pdflatex.py
src/engine/SCons/Tool/pdftex.py
src/engine/SCons/Tool/sgiar.py
src/engine/SCons/Tool/sgias.py
src/engine/SCons/Tool/sgicc.py
src/engine/SCons/Tool/sgif77.py
src/engine/SCons/Tool/sgilink.py
src/engine/SCons/Tool/tar.py
src/engine/SCons/Tool/tex.py
src/engine/SCons/Tool/yacc.py
src/engine/SCons/Tool/zip.py
test/AS.py
test/ASFLAGS.py
test/BuildDir.py
test/CC.py
test/CPPFLAGS.py
test/CPPPATH.py
test/CVS.py
test/CXX.py
test/DVIPDF.py
test/JAR.py
test/JARFLAGS.py
test/JAVAC.py
test/JAVACFLAGS.py
test/Options.py

index 75e83d19706818aad3832bd0b6e494d414f94440..a3f35af29bdc2f7c163bc5fd0d3108c305dca1d5 100644 (file)
@@ -844,12 +844,15 @@ will call the specified elements
 to update the new construction environment:
 
 .ES
-def my_tool(env, platform):
+def my_tool(env):
     env['XYZZY'] = 'xyzzy'
 
 env = Environment(tools = [my_tool])
 .EE
 
+The tool definition (i.e. my_tool()) can use the PLATFORM variable from
+the environment it receives to customize the tool for different platforms.
+
 If no tool list is specified, then SCons will auto-detect the installed
 tools using the PATH variable in the ENV construction variable and the
 platform name when the Environment is constructed. Changing the PATH
@@ -2555,6 +2558,20 @@ The prefix used for PDF file names.
 .IP PDFSUFFIX
 The suffix used for PDF file names.
 
+.IP PLATFORM
+The name of the platform used to create the Environment.  If no platform is
+specified when the Environment is created,
+.B SCons
+autodetects the platform.
+
+.ES
+env = Environment(tools = [])
+if env['PLATFORM'] == 'cygwin':
+    Tool('mingw')(env)
+else:
+    Tool('msvc')(env)
+.EE
+
 .IP PROGPREFIX
 The prefix used for executable file names.
 
index 5e0067ba1f9e2901797a611755e8c8d3809c249d..1c01d1bc9a803d8b792d20f7f5745df3c9020764 100644 (file)
@@ -14,6 +14,10 @@ RELEASE 0.14 - XXX
 
   - Use .dll (not .so) for shared libraries on Cygwin.
 
+  - Add a PLATFORM variable to construction environments.
+
+  - Remove the "platform" argument from tool specifications.
+
   From Steven Knight:
 
   - Add support for Java (javac and jar).
index e0235182eb9377416f529a6ea19b132a6d232f67..493ed00ff8be0be0b38f0ed845786cab7fe4812e 100644 (file)
@@ -27,7 +27,8 @@ RELEASE 0.14 - XXX
 
   Please note the following important changes since release 0.13:
 
-  -
+  - Tool specifications no longer take a "platform" argument.
+    XXX
 
   Please note the following important changes since release 0.11:
 
index 37182c46b0e0a58b717b3ce5236d898f9a02d15e..e3d29ebac42a00ddff095e6c3285f12d0f001659 100644 (file)
@@ -191,6 +191,7 @@ class Environment:
 
         if SCons.Util.is_String(platform):
             platform = SCons.Platform.Platform(platform)
+        self._dict['PLATFORM'] = str(platform)
         platform(self)
 
         # Apply the passed-in variables before calling the tools,
@@ -207,7 +208,7 @@ class Environment:
         for tool in tools:
             if SCons.Util.is_String(tool):
                 tool = SCons.Tool.Tool(tool)
-            tool(self, platform)
+            tool(self)
 
         # Reapply the passed in variables after calling the tools,
         # since they should overide anything set by the tools:
index 9a6eb1cb51ac54160a8d373d01e685eb23d3567a..c041755d9d0806b913eaa2d065674a7b82c1b322 100644 (file)
@@ -735,23 +735,34 @@ class EnvironmentTestCase(unittest.TestCase):
 
     def test_platform(self):
         """Test specifying a platform callable when instantiating."""
-        def p(env):
-            env['XYZZY'] = 777
-        env = Environment(platform = p)
+        class platform:
+            def __str__(self):        return "TestPlatform"
+            def __call__(self, env):  env['XYZZY'] = 777
+
+        def tool(env):
+            assert env['PLATFORM'] == "TestPlatform"
+
+        env = Environment(platform = platform(), tools = [tool])
         assert env['XYZZY'] == 777, env
+        assert env['PLATFORM'] == "TestPlatform"
 
     def test_tools(self):
         """Test specifying a tool callable when instantiating."""
-        def t1(env, platform):
+        def t1(env):
             env['TOOL1'] = 111
-        def t2(env, platform):
+        def t2(env):
             env['TOOL2'] = 222
-        def t3(env, platform):
+        def t3(env):
             env['AAA'] = env['XYZ']
+        def t4(env):
+            env['TOOL4'] = 444
         env = Environment(tools = [t1, t2, t3], XYZ = 'aaa')
         assert env['TOOL1'] == 111, env['TOOL1']
         assert env['TOOL2'] == 222, env
-        assert env['AAA'] == 'aaa', env
+        assert env['AAA'] == 'aaa', env        
+        t4(env)
+        assert env['TOOL4'] == 444, env
+        
 
     def test_get(self):
         """Test the get() method."""
index c07f8564c767afdc8f73b54b2c1060f9ef068f58..5a2340b6f86e8d64ccb989546ccad7361a2b7657 100644 (file)
@@ -51,7 +51,7 @@ if os.path.normcase('.s') == os.path.normcase('.S'):
 else:
     ASPPSuffixes.extend(['.S'])
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for ar to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 6d81eb08c84b5e0ed438cd6218c311af5ffc9a38..3208b6777be8b356919a45f0eb4ce713e6498b23 100644 (file)
@@ -38,7 +38,7 @@ import os.path
 
 import SCons.Builder
 
-def generate(env, platform):
+def generate(env):
     """Add a Builder factory function and construction variables for
     BitKeeper to an Environment."""
 
index 9c5dc605e79e68cb644bdd247ab53228771146d4..f16376b9bc595b06ec0740397075a6c274801c35 100644 (file)
@@ -37,7 +37,7 @@ import os.path
 
 import SCons.Builder
 
-def generate(env, platform):
+def generate(env):
     """Add a Builder factory function and construction variables for
     CVS to an Environment."""
 
index 2f9fb88c491ca6f0afb646ba39f61c1fe66e85b0..3c574b437bfc4380f954a0fcd3206b85856004f5 100644 (file)
@@ -46,7 +46,7 @@ from SCons.Tool.PharLapCommon import addPathIfNotExists
 _import_env = [ 'P4PORT', 'P4CLIENT', 'P4USER', 'USER', 'USERNAME', 'P4PASSWD',
                 'P4CHARSET', 'P4LANGUAGE', 'SYSTEMROOT' ]
 
-def generate(env, platform):
+def generate(env):
     """Add a Builder factory function and construction variables for
     Perforce to an Environment."""
 
index 2a7e9e4f0729a7397c56e49da959584079b0072f..3b9547ce18f865952d555c555d40ebc12ea0a16e 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Builder
 
-def generate(env, platform):
+def generate(env):
     """Add a Builder factory function and construction variables for
     RCS to an Environment."""
 
index b559feaf56c44866e2832285c0ea4c6a6627b4cd..b75d67644f9031dca5c17778fb83866e574cc9e2 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Builder
 
-def generate(env, platform):
+def generate(env):
     """Add a Builder factory function and construction variables for
     SCCS to an Environment."""
 
index 195af39779fb38f982bc335c1b8cabdb03ff34fe..56569f31cf137d89177365863eebb81d86fb49a7 100644 (file)
@@ -37,7 +37,7 @@ import os.path
 
 import SCons.Builder
 
-def generate(env, platform):
+def generate(env):
     """Add a Builder factory function and construction variables for
     Subversion to an Environment."""
 
index 53922b00cadfb2a735dad09526a72901f338173e..72aab353974ce82de4c21534104a2e4a4675ca6f 100644 (file)
@@ -47,7 +47,7 @@ class ToolTestCase(unittest.TestCase):
         env['BUILDERS'] = {}
         env['ENV'] = {}
         t = SCons.Tool.Tool('g++')
-        t(env, 'foo')
+        t(env)
         assert (env['CXX'] == 'c++' or env['CXX'] == 'g++'), env['CXX']
         assert env['CXXFLAGS'] == '$CCFLAGS', env['CXXFLAGS']
         assert env['INCPREFIX'] == '-I', env['INCPREFIX']
index ca28471b78e092ff26507c882cc3868049862429..9e6d450920d5942014f76cae93e2aad1efba8cdb 100644 (file)
@@ -51,7 +51,7 @@ class ToolSpec:
     def __str__(self):
         return self.name
     
-def Tool(name, platform = None):
+def Tool(name):
     """Select a canned Tool specification.
     """
     full_name = 'SCons.Tool.' + name
index 4671309ddb4481eefb2943bb898e1924107e2483..d0ecb9bcdec759f20ade881185aa131bb2583730 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for ar to an Environment."""
     bld = SCons.Defaults.StaticLibrary
     env['BUILDERS']['Library'] = bld
index f334b68d56285fc9fbb84bb04b7a30519a643b09..fd77229ddf00fa84fd771ca5eea96764b2d145b8 100644 (file)
@@ -35,10 +35,10 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Tool
 
-def generate(env, platform):
+def generate(env):
     """Add default tools."""
-    for t in SCons.Tool.tool_list(platform, env):
-        SCons.Tool.Tool(t, platform)(env, platform)
+    for t in SCons.Tool.tool_list(env['PLATFORM'], env):
+        SCons.Tool.Tool(t)(env)
 
 def exists(env):
     return 1
index e77bed73b3ec2c6328a4843d5aa23b56dc41f9d4..3f4198f8b679b1b28bbbbb92f0f5138ffd25e10f 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for dvipdf to an Environment."""
     try:
         bld = env['BUILDERS']['PDF']
index 4e668e5961e8efb5674731625701abcfc8427e49..f197b9b285bdb704877167300dc2c604ba87007b 100644 (file)
@@ -42,7 +42,7 @@ PostScript = SCons.Builder.Builder(action = '$PSCOM',
                                    src_suffix = '.dvi',
                                    src_builder = 'DVI')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for dvips to an Environment."""
     env['BUILDERS']['PostScript'] = PostScript
     
index 877b605010f62972434c16d6e58455a6c520d236..c13f9865bcfc3b0850c04a3557866c7b315e70f1 100644 (file)
@@ -45,7 +45,7 @@ CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++']
 if os.path.normcase('.c') != os.path.normcase('.C'):
     CXXSuffixes.append('.C')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for g++ to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 3c50581d314731d17e5b082b5dc8deac25ab286c..33fe76b85b0750b52c7505ac168ca92d462daefb 100644 (file)
@@ -48,7 +48,7 @@ if os.path.normcase('.f') == os.path.normcase('.F'):
 else:
     F77PPSuffixes.append('.F')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for g77 to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 08f0e5bc5326e218332811b7083c65dac2198cad..097624c82e5eaa40cdb114249a55aeedacd07505 100644 (file)
@@ -48,7 +48,7 @@ if os.path.normcase('.s') == os.path.normcase('.S'):
 else:
     ASPPSuffixes.extend(['.S'])
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for as to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 3321d910787470f3598ddb4e62839da6d4b0325d..5b6befa1b32f35e5edcbd400a7471025df21a6a9 100644 (file)
@@ -45,7 +45,7 @@ CSuffixes = ['.c']
 if os.path.normcase('.c') == os.path.normcase('.C'):
     CSuffixes.append('.C')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for gcc to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 9f782c1652f3b6768736421c7c709a2f154b5a36..7e17370f680e907b83b6e506d164342b757d86c8 100644 (file)
@@ -38,7 +38,7 @@ import SCons.Util
 
 linkers = ['c++', 'cc', 'g++', 'gcc']
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for gnulink to an Environment."""
     env['BUILDERS']['SharedLibrary'] = SCons.Defaults.SharedLibrary
     env['BUILDERS']['Program'] = SCons.Defaults.Program
index c10886beb3bff8c21069958a5867abf902cf5572..490db6df089c6deaf2e9e0631c633f453889dad9 100644 (file)
@@ -40,7 +40,7 @@ import SCons.Errors
 CSuffixes = ['.c', '.C']
 CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++']
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for MSVC++ to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index fbd1fbe9440221f34bb056c0d51781c7e0c68059..6e9f248f9fc47ca636380acace6371d0885cc19b 100644 (file)
@@ -46,7 +46,7 @@ if os.path.normcase('.f') == os.path.normcase('.F'):
 else:
     F77PPSuffixes.append('.F')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for ifl to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 27713f232a4b155be441aabed1de054a6453ef91..388fb86b5faaf4ddcf8e8b93fdeefefe8db3727f 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for ilink to an Environment."""
     env['BUILDERS']['Program'] = SCons.Defaults.Program
     
index 496a82398c4d71ebbd561079bb69ed61105b1cf5..b1164b52bafd5403439bd4b2a5cbb53bda4e70f6 100644 (file)
@@ -38,7 +38,7 @@ import os.path
 
 import SCons.Builder
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for jar to an Environment."""
     try:
         bld = env['BUILDERS']['Jar']
index 22145fcf5510a2b1f3b6746fe2174614d797e4fc..e2d4ecb262d7a3675793e9bf551e6b68d5059411 100644 (file)
@@ -133,7 +133,7 @@ elif java_parsing == 2:
         f.close()
         return pkg_dir, classes
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for javac to an Environment."""
     def emit_java_files(target, source, env):
         """Create and return lists of source java files
index 2326f9d9b7cd0c83404691e9e4d2cc960ca1e87b..d9b912c584b1d9d0c2d354efd8f7dc29c94ae56e 100644 (file)
@@ -38,7 +38,7 @@ import SCons.Defaults
 
 LaTeXAction = SCons.Action.Action('$LATEXCOM')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for LaTeX to an Environment."""
 
     try:
index cd2eb7b3fdaa8c807f7d7bf41bf192c3d85c8d4d..95a53156f6e24aabf9f07d40bdde350d9cac1c1b 100644 (file)
@@ -36,7 +36,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 import SCons.Defaults
 import SCons.Tool
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for lex to an Environment."""
     c_file, cxx_file = SCons.Tool.createCFileBuilders(env)
 
index d55a4eeb52d2146159da628e52778a622ce81260..fc315d9f527da6c944b83bdb150bd9ab0fa4018d 100644 (file)
@@ -76,7 +76,7 @@ class LinklocGenerator:
         else:
             return "${TEMPFILE('" + self.cmdline + "')}"
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for ar to an Environment."""
     env['BUILDERS']['SharedLibrary'] = SCons.Defaults.SharedLibrary
     env['BUILDERS']['Program'] = SCons.Defaults.Program
index 46f6c207dbcb5a09b6ff907bd82303c7eab1883f..0284c1dda2db5da38e5310bb844e1e202179c819 100644 (file)
@@ -45,7 +45,7 @@ if os.path.normcase('.s') == os.path.normcase('.S'):
 else:
     ASPPSuffixes.extend(['.S'])
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for masm to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 2d1c5008ff29767505cd7344c0975a1e4b2fc46d..c89bc216c422c7dfce219471a76cb861a87d7e49 100644 (file)
@@ -95,8 +95,7 @@ shlib_action = SCons.Action.CommandGenerator(shlib_generator)
 
 res_builder = SCons.Builder.Builder(action='$RCCOM', suffix='.o')
 
-def generate(env, platform):
-    
+def generate(env):
     mingw = find(env)
     if mingw:
         dir = os.path.dirname(mingw)
@@ -114,7 +113,7 @@ def generate(env, platform):
     # Most of mingw is the same as gcc and friends...
     gnu_tools = ['gcc', 'g++', 'gnulink', 'ar', 'gas']
     for tool in gnu_tools:
-        SCons.Tool.Tool(tool, platform)(env,platform)
+        SCons.Tool.Tool(tool)(env)
 
     #... but a few things differ:
     env['CC'] = 'gcc'
index 958218fd933d2cebbe048608d76b6896186eb886..4180e05c3eee5c66635b08205863c54c3cc24ce8 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for lib to an Environment."""
     env['BUILDERS']['Library'] = SCons.Defaults.StaticLibrary
     env['BUILDERS']['StaticLibrary'] = SCons.Defaults.StaticLibrary
index fa174e40cb017b0d4f694ca7e0a0c6cebbe7b87f..5522b0a06fd77b9d41f6bd72e44eda35fc7a86ae 100644 (file)
@@ -118,7 +118,7 @@ def prog_emitter(target, source, env):
         
     return (target,source)
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for ar to an Environment."""
     env['BUILDERS']['SharedLibrary'] = SCons.Defaults.SharedLibrary
     env['BUILDERS']['Program'] = SCons.Defaults.Program
index 70d43ade16dcf5dc17a729bd882c7c8a82fd1dd2..eaaec3e92c1896d275190358636ddf1985432e4f 100644 (file)
@@ -240,7 +240,7 @@ def object_emitter(target, source, env):
 pch_builder = SCons.Builder.Builder(action='$PCHCOM', suffix='.pch', emitter=pch_emitter)
 res_builder = SCons.Builder.Builder(action='$RCCOM', suffix='.res')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for MSVC++ to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 4c00872ecd72f3302591ead970fc73a260d2f8f5..1a9a8d56644f77d072bf3e2935cb6d3ebc15673a 100644 (file)
@@ -45,7 +45,7 @@ if os.path.normcase('.s') == os.path.normcase('.S'):
 else:
     ASPPSuffixes.extend(['.S'])
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for nasm to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index e96dc6f14be452109abae28181d921a5b0a20d81..1ae606e5a07e7eb79ad006fc028743b19329d6a5 100644 (file)
@@ -38,7 +38,7 @@ import SCons.Defaults
 
 PDFLaTeXAction = SCons.Action.Action('$PDFLATEXCOM')
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for pdflatex to an Environment."""
     try:
         bld = env['BUILDERS']['PDF']
index 821ded68e773e6e6f0ab49c99560ff3b5fa8bf60..14b3d954b3ad617f5ea9d4e68e47a55fe85d669f 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for pdftex to an Environment."""
     try:
         bld = env['BUILDERS']['PDF']
index 7869298dd59da93019064ce602a42aaf1099520b..2722af6e9a023f4281a79d5c8c0bcba68ae0af8e 100644 (file)
@@ -37,7 +37,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for ar to an Environment."""
     bld = SCons.Defaults.StaticLibrary
     env['BUILDERS']['Library'] = bld
index fea4a6f1483d3acd58e730e06be35348001053b0..f258ab2a90fa07179b87f47936854ba317e39722 100644 (file)
@@ -42,9 +42,9 @@ import SCons.Util
 assemblers = ['as']
 
 ASSuffixes = ['.s', '.asm', '.ASM']
-ASPPSuffixes = ['.spp', '.SPP']
+ASPPSuffixes = ['.S', '.spp', '.SPP']
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for as to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index d323303caad785b020e618cf8903ae03ead8636b..92ce92b6e237c0639de7f87a62e3a55248b4e73d 100644 (file)
@@ -40,9 +40,9 @@ import SCons.Defaults
 import SCons.Util
 
 CSuffixes = ['.c']
-CXXSuffixes = ['.C', '.cpp', '.cc', '.cxx']
+CXXSuffixes = ['.C', '.cpp', '.cc', '.cxx', '.c++', '.C++']
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for gcc to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
index 5cb3b268ffed16cfbd84049c449103e34d7f8e6c..040e1d81588f992e9dc1a726b76175acf90b35b0 100644 (file)
@@ -41,10 +41,10 @@ import SCons.Util
 
 compilers = ['f77']
 
-F77Suffixes = ['.f', '.for', '.F', '.FOR']
-F77PPSuffixes = ['.fpp', '.FPP']
+F77Suffixes = ['.f', '.for', '.FOR']
+F77PPSuffixes = ['.F', '.fpp', '.FPP']
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for g77 to an Environment."""
     static_obj, shared_obj = SCons.Tool.createObjBuilders(env)
 
@@ -61,7 +61,7 @@ def generate(env, platform):
     env['F77COM']     = '$F77 $F77FLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
     env['F77PPCOM']   = '$F77 $F77FLAGS $CPPFLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
     env['SHF77']      = '$F77'
-    env['SHF77FLAGS'] = '$F77FLAGS -fPIC'
+    env['SHF77FLAGS'] = '$F77FLAGS'
     env['SHF77COM']   = '$SHF77 $SHF77FLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
     env['SHF77PPCOM'] = '$SHF77 $SHF77FLAGS $CPPFLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
 
index 8304bb6cff3f10af6194ca3c4a27a7757b0901c4..f1b6a0607275cba2b4cce7cdc7f9afc3963c3d04 100644 (file)
@@ -38,7 +38,7 @@ import SCons.Util
 
 linkers = ['CC', 'cc']
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for MIPSPro to an Environment."""
     env['BUILDERS']['SharedLibrary'] = SCons.Defaults.SharedLibrary
     env['BUILDERS']['Program'] = SCons.Defaults.Program
index 6692d57bba7df3b5ed539bdbb8fdaa072d4cb23e..011f48b0a1b7928d052b42b5cca2a63c413773a0 100644 (file)
@@ -45,7 +45,7 @@ TarBuilder = SCons.Builder.Builder(action = '$TARCOM',
                                    multi = 1)
 
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for tar to an Environment."""
     try:
         bld = env['BUILDERS']['Tar']
index 398b84197fb3f35a621a13bbbeae3986b20ea6a8..c3d38f150a0c39ad965e5053f90d0f7b50a55846 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Defaults
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for TeX to an Environment."""
     try:
         bld = env['BUILDERS']['DVI']
index 5322904bb75de41e2d67b41d59a46866ea6d2000..0c80cf83910bf5a46d3b1b9dfbbf5059a73c8c5d 100644 (file)
@@ -35,7 +35,7 @@ __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import SCons.Tool
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for yacc to an Environment."""
     c_file, cxx_file = SCons.Tool.createCFileBuilders(env)
     
index f4a8a28b436cb8c33e9eddfe075421f24ced7387..4404247bdfa5fadc1701e301a9c92a3edd448a31 100644 (file)
@@ -71,7 +71,7 @@ ZipBuilder = SCons.Builder.Builder(action = '$ZIPCOM',
                                    multi = 1)
 
 
-def generate(env, platform):
+def generate(env):
     """Add Builders and construction variables for zip to an Environment."""
     try:
         bld = env['BUILDERS']['Zip']
index 932883d52b38132f084207540fc3afd960d0c6ef..22eb17c22e6a74e1035d1cadf7697c5458cc78d1 100644 (file)
@@ -112,6 +112,7 @@ sys.exit(0)
 
 test.write('SConstruct', """
 env = Environment(LINK = r'%s mylink.py',
+                  LINKFLAGS = [],
                   AS = r'%s myas.py',
                   CC = r'%s myas.py')
 env.Program(target = 'test1', source = 'test1.s')
@@ -168,8 +169,9 @@ test.fail_test(test.read('test6' + _exe) != "This is a .SPP file.\n")
 
 
 as = test.detect('AS', 'as')
+x86 = (sys.platform == 'win32' or string.find(sys.platform, 'linux') != -1)
 
-if as:
+if as and x86:
 
     test.write("wrapper.py",
 """import os
@@ -248,7 +250,7 @@ main(int argc, char *argv[])
 
 ml = test.where_is('ml')
 
-if ml:
+if ml and sys.platform == 'win32':
 
     test.write("wrapper.py",
 """import os
index 229a27a5d14d803f216d07b041f467ba4c52486f..0331aed9b904fdd007e1a32f651f639c1c0dbfc6 100644 (file)
@@ -130,6 +130,7 @@ sys.exit(0)
 
 test.write('SConstruct', """
 env = Environment(LINK = r'%s mylink.py',
+                  LINKFLAGS = [],
                   AS = r'%s myas.py', ASFLAGS = '-x',
                   CC = r'%s myas.py')
 env.Program(target = 'test1', source = 'test1.s')
index c7c8dd41caf6270dda09b1108ba61bada95a58ea..f0e889a67252f19a2909a96c0115d8e2ff71f9c1 100644 (file)
@@ -25,6 +25,7 @@
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os.path
+import string
 import sys
 import time
 import TestSCons
@@ -97,7 +98,12 @@ SConscript(File('SConscript', var4), "env")
 env = Environment(CPPPATH='.', F77PATH='.')
 SConscript('../build/var5/SConscript', "env")
 SConscript('../build/var6/SConscript', "env")
-""") 
+""")
+
+if string.find(sys.platform, 'irix') != -1:
+    fortran_runtime = 'ftn'
+else:
+    fortran_runtime = 'g2c'
 
 test.subdir(['test', 'src'])
 test.write(['test', 'src', 'SConscript'], """
@@ -132,9 +138,9 @@ except:
 
 if f77 and WhereIs(env['F77']):
     env.Command(target='b2.f', source='b2.in', action=buildIt)
-    env.Copy(LIBS = ['g2c']).Program(target='bar2', source='b2.f')
-    env.Copy(LIBS = ['g2c']).Program(target='bar1', source='b1.f')
-""")
+    env.Copy(LIBS = [r'%s']).Program(target='bar2', source='b2.f')
+    env.Copy(LIBS = [r'%s']).Program(target='bar1', source='b1.f')
+""" % (fortran_runtime, fortran_runtime))
 
 test.write('test/src/f1.c', r"""
 #include "f1.h"
index 94dd6f65ebc9063bf14b727009e07d3fd191941e..93b0ed5a7b4c02c1f546742aed35a9bd26a99a70 100644 (file)
@@ -113,8 +113,10 @@ sys.exit(0)
 test.write('SConstruct', """
 cc = Environment().Dictionary('CC')
 env = Environment(LINK = r'%s mylink.py',
+                  LINKFLAGS = [],
                   CC = r'%s mycc.py',
-                 CXX = cc)
+                  CXX = cc,
+                  CXXFLAGS = [])
 env.Program(target = 'test1', source = 'test1.c')
 """ % (python, python))
 
index da4ff13d1aa3b7fe619c8e9ffae7a1a0495c18d8..352ed7d0b046f1c0be01aa68decf9445c50b1b9c 100644 (file)
@@ -34,9 +34,11 @@ python = TestSCons.python
 if sys.platform == 'win32':
     _exe = '.exe'
     _obj = '.obj'
+    _shobj = '.obj'
 else:
     _exe = ''
     _obj = '.o'
+    _shobj = '.os'
 
 test = TestSCons.TestSCons()
 
@@ -107,8 +109,10 @@ sys.exit(0)
 test.write('SConstruct', """
 env = Environment(CPPFLAGS = '-x',
                   LINK = r'%s mylink.py',
+                  LINKFLAGS = [],
                   CC = r'%s mygcc.py cc',
                   CXX = r'%s mygcc.py c++',
+                  CXXFLAGS = [],
                   F77 = r'%s mygcc.py g77')
 env.Program(target = 'foo', source = Split('test1.c test2.cpp test3.F'))
 """ % (python, python, python, python))
@@ -128,7 +132,7 @@ test.write('test3.F', r"""test3.F
 #link
 """)
 
-test.run(arguments = '.', stderr = None)
+test.run(arguments = '.', stderr=None)
 
 test.fail_test(test.read('test1' + _obj) != "test1.c\n#link\n")
 
@@ -143,8 +147,10 @@ test.fail_test(test.read('mygcc.out') != "cc\nc++\ng77\n")
 test.write('SConstruct', """
 env = Environment(CPPFLAGS = '-x',
                   SHLINK = r'%s mylink.py',
+                  SHLINKFLAGS = [],
                   CC = r'%s mygcc.py cc',
                   CXX = r'%s mygcc.py c++',
+                  CXXFLAGS = [],
                   F77 = r'%s mygcc.py g77')
 env.SharedLibrary(target = File('foo.bar'),
                   source = Split('test1.c test2.cpp test3.F'))
@@ -166,14 +172,17 @@ test.write('test3.F', r"""test3.F
 """)
 
 test.unlink('mygcc.out')
+test.unlink('test1' + _obj)
+test.unlink('test2' + _obj)
+test.unlink('test3' + _obj)
 
 test.run(arguments = '.', stderr = None)
 
-test.fail_test(test.read('test1' + _obj) != "test1.c\n#link\n")
+test.fail_test(test.read('test1' + _shobj) != "test1.c\n#link\n")
 
-test.fail_test(test.read('test2' + _obj) != "test2.cpp\n#link\n")
+test.fail_test(test.read('test2' + _shobj) != "test2.cpp\n#link\n")
 
-test.fail_test(test.read('test3' + _obj) != "test3.F\n#link\n")
+test.fail_test(test.read('test3' + _shobj) != "test3.F\n#link\n")
 
 test.fail_test(test.read('foo.bar') != "test1.c\ntest2.cpp\ntest3.F\n")
 
index 06e69339b4d37aff08e280a5adc226e2dc64308c..cb650fa3fce03aa54c725bfcc88a0d1300aad9ef 100644 (file)
@@ -200,7 +200,10 @@ test.up_to_date(arguments = args)
 # Check that a null-string CPPPATH doesn't blow up.
 test.write('SConstruct', """
 env = Environment(CPPPATH = '')
-env.Library('foo', source = '')
+env.Library('foo', source = 'empty.c')
+""")
+
+test.write('empty.c', """
 """)
 
 test.run(arguments = '.')
index d8d9da5a1526318ee8f2a6a8c30542256cf584e6..1296c5e13c7339213633f2f6cceb03117880e2f7 100644 (file)
@@ -95,6 +95,7 @@ test.run(chdir = 'import',
 
 # Test the most straightforward CVS checkouts, using the module name.
 test.write(['work1', 'SConstruct'], """
+import os
 def cat(env, source, target):
     target = str(target[0])
     source = map(str, source)
@@ -102,7 +103,8 @@ def cat(env, source, target):
     for src in source:
         f.write(open(src, "rb").read())
     f.close()
-env = Environment(BUILDERS={'Cat':Builder(action=cat)})
+env = Environment(ENV = { 'PATH' : os.environ['PATH'] },
+                  BUILDERS={'Cat':Builder(action=cat)})
 env.Prepend(CVSFLAGS='-Q ')
 env.Cat('aaa.out', 'foo/aaa.in')
 env.Cat('bbb.out', 'foo/bbb.in')
@@ -163,6 +165,7 @@ test.fail_test(not is_writable(test.workpath('work1', 'foo', 'sub', 'fff.in')))
 
 # Test CVS checkouts when the module name is specified.
 test.write(['work2', 'SConstruct'], """
+import os
 def cat(env, source, target):
     target = str(target[0])
     source = map(str, source)
@@ -170,7 +173,8 @@ def cat(env, source, target):
     for src in source:
         f.write(open(src, "rb").read())
     f.close()
-env = Environment(BUILDERS={'Cat':Builder(action=cat)})
+env = Environment(ENV = { 'PATH' : os.environ['PATH'] },
+                  BUILDERS={'Cat':Builder(action=cat)})
 env.Prepend(CVSFLAGS='-q ')
 env.Cat('aaa.out', 'aaa.in')
 env.Cat('bbb.out', 'bbb.in')
index f2b33683f437661009d35ec4fb2fec70acd0490b..cd2c7a917590fff2c79494d21412e6adea9d2210 100644 (file)
@@ -112,7 +112,9 @@ sys.exit(0)
 
 test.write('SConstruct', """
 env = Environment(LINK = r'%s mylink.py',
-                  CXX = r'%s myc++.py')
+                  LINKFLAGS = [],
+                  CXX = r'%s myc++.py',
+                  CXXFLAGS = [])
 env.Program(target = 'test1', source = 'test1.cc')
 env.Program(target = 'test2', source = 'test2.cpp')
 env.Program(target = 'test3', source = 'test3.cxx')
@@ -161,7 +163,9 @@ if os.path.normcase('.c') != os.path.normcase('.C'):
 
     test.write('SConstruct', """
 env = Environment(LINK = r'%s mylink.py',
-                  CXX = r'%s myc++.py')
+                  LINKFLAGS = [],
+                  CXX = r'%s myc++.py',
+                  CXXFLAGS = [])
 env.Program(target = 'test6', source = 'test6.C')
 """ % (python, python))
 
index 4d0428ad78723ff3226d2af9762ff93640147b63..a140c3ab412b2f99b3479576e5f91b6c045f3a25 100644 (file)
@@ -114,9 +114,11 @@ os.system(cmd)
 """ % string.replace(test.workpath('wrapper.out'), '\\', '\\\\'))
 
     test.write('SConstruct', """
-foo = Environment()
+import os
+foo = Environment(ENV = { 'PATH' : os.environ['PATH'] })
 dvipdf = foo.Dictionary('DVIPDF')
-bar = Environment(DVIPDF = r'%s wrapper.py ' + dvipdf)
+bar = Environment(ENV = { 'PATH' : os.environ['PATH'] },
+                  DVIPDF = r'%s wrapper.py ' + dvipdf)
 foo.PDF(target = 'foo.pdf',
         source = foo.DVI(target = 'foo.dvi', source = 'foo.tex'))
 bar.PDF(target = 'bar.pdf',
index f5b304886edb5b9d42698c8f4115c84b50472d86..9fdf20e397441fbb5d45cedfd0e622ea44537b0f 100644 (file)
@@ -89,6 +89,9 @@ line 3
     test.fail_test(test.read('test2' + _exe) != "test2.CLASS\nline 3\n")
 
 
+if not os.path.exists('/usr/local/j2sdk1.3.1/bin/javac'):
+    print "Could not find Java, skipping test(s)."
+    test.pass_test(1)
 
 
 test.write("wrapper.py", """\
index af5b89d496d7077aabe00debe0474a00bfa522d1..539806f56713a26e3033ac46faae28de2ddc71ab 100644 (file)
@@ -56,6 +56,10 @@ public class Example1
 }
 """)
 
+if not os.path.exists('/usr/local/j2sdk1.3.1/bin/javac'):
+    print "Could not find Java, skipping test(s)."
+    test.pass_test(1)
+
 test.run(arguments = '.',
          stdout = test.wrap_stdout("""\
 /usr/local/j2sdk1.3.1/bin/javac -d classes -sourcepath src src/Example1.java
index 9526259243ad0a3b03969a3dd9481129f9793133..f2910a4e3eb8f516028a3fc8563bcffa54614626 100644 (file)
@@ -91,6 +91,9 @@ line 3
     test.fail_test(test.read('test2.class') != "test2.JAVA\nline3\n")
 
 
+if not os.path.exists('/usr/local/j2sdk1.3.1/bin/javac'):
+    print "Could not find Java, skipping test(s)."
+    test.pass_test(1)
 
 
 test.write("wrapper.py", """\
index 1a05e2c2d72cae1f2899953f354f776e4e92ade3..6e02bb6274cde484bbd3f36f9e368482f9eb8681 100644 (file)
@@ -30,6 +30,10 @@ import TestSCons
 
 test = TestSCons.TestSCons()
 
+if not os.path.exists('/usr/local/j2sdk1.3.1/bin/javac'):
+    print "Could not find Java, skipping test(s)."
+    test.pass_test(1)
+
 test.subdir('src')
 
 test.write('SConstruct', """
index 4f979df31a428954fac9342d6de7eafb9b1dabea..9c817ba5a02d85ffda42f0995f75fc85944d8fc4 100644 (file)
@@ -58,7 +58,7 @@ opts.Add('CC',
 opts.Add('UNSPECIFIED',
          'An option with no value')
 
-def test_tool(env, platform):
+def test_tool(env):
     if env['RELEASE_BUILD']:
         env['CCFLAGS'] = env['CCFLAGS'] + ' -O'
     if env['DEBUG_BUILD']: