Fix the tests that broke from the tool auto-detect stuff. (Anthony Roach and SK)
authorstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 5 Sep 2002 00:04:32 +0000 (00:04 +0000)
committerstevenknight <stevenknight@fdb21ef1-2011-0410-befe-b5e4ea1792b1>
Thu, 5 Sep 2002 00:04:32 +0000 (00:04 +0000)
git-svn-id: http://scons.tigris.org/svn/scons/trunk@457 fdb21ef1-2011-0410-befe-b5e4ea1792b1

49 files changed:
doc/man/scons.1
rpm/scons.spec
src/engine/MANIFEST.in
src/engine/SCons/Environment.py
src/engine/SCons/Platform/__init__.py
src/engine/SCons/Tool/__init__.py
src/engine/SCons/Tool/ar.py
src/engine/SCons/Tool/default.py [new file with mode: 0644]
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/latex.py
src/engine/SCons/Tool/lex.py
src/engine/SCons/Tool/lib.py
src/engine/SCons/Tool/masm.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/tar.py
src/engine/SCons/Tool/tex.py
src/engine/SCons/Tool/yacc.py
src/engine/SCons/Util.py
test/CFILESUFFIX.py
test/CXXFILESUFFIX.py
test/DVIPDF.py
test/DVIPDFFLAGS.py
test/DVIPS.py
test/DVIPSFLAGS.py
test/LATEX.py
test/LATEXFLAGS.py
test/LEX.py
test/LEXFLAGS.py
test/PDFLATEX.py
test/PDFLATEXFLAGS.py
test/PDFTEX.py
test/PDFTEXFLAGS.py
test/TEX.py
test/TEXFLAGS.py
test/YACC.py
test/YACCFLAGS.py

index eb0954c3d7970c8502a0aac2ba7abedc7728936e..dfed6c34171f775b9ccbdfa5c8af2389da203aa8 100644 (file)
@@ -711,69 +711,31 @@ def my_tool(env):
 env = Environment(tools = [my_tool])
 .EE
 
-SCons supports the following tool specifications
-out of the box on 
-.B cygwin
-and
-.B posix
-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
+variable after the Environment is constructed will not cause the tools to
+be redetected.
 
+SCons supports the following tool specifications
+out of the box on all platforms:
 .ES
 ar
 dvipdf
 dvips
 g++
 g77
-gas (if the GNU assembler is available)
-gcc
-gnulink
-latex
-lex
-nasm (if the GNU assembler is not available)
-pdflatex
-pdftex
-tar
-tex
-yacc
-.EE
-
-SCons supports the following tool specifications out of the box on
-.B os2
-platforms:
-
-.ES
-dvipdf
-dvips
-g77
-icc
-ifl
-ilink
-latex
-lex
-nasm
-pdflatex
-pdftex
-tex
-yacc
-.EE
-
-SCons supports the following tool specifications out of the box on
-.B win32
-platforms:
-
-.ES
-dvipdf
-dvips
-g77
 icc
 ifl
 ilink
+gas
+gcc
+gnulink
 latex
 lex
-lib
+masm
 mslink
 msvc
-masm
 nasm
 pdflatex
 pdftex
@@ -782,6 +744,10 @@ tex
 yacc
 .EE
 
+On posix and cygwin platforms the GNU tools (e.g. gcc) are preferred by SCons, 
+on win32 the Microsoft tools (e.g. msvc) are preferred by SCons, and in OS/2 the IBM
+tools (e.g. icc) are preferred by SCons.
+
 .SS Builder Methods
 
 Build rules are specified by calling a construction
index aae24a6369608ea981bd302ebc4c938e8ceed902..a4635d9947bd0d29927b3b7ab9edc9dadd66c28e 100644 (file)
@@ -1,5 +1,5 @@
 %define name scons
-%define version 0.08
+%define version 0.09
 %define release 1
 
 Summary: an Open Source software construction tool
@@ -102,6 +102,8 @@ rm -rf $RPM_BUILD_ROOT
 /usr/lib/scons/SCons/Tool/__init__.pyc
 /usr/lib/scons/SCons/Tool/ar.py
 /usr/lib/scons/SCons/Tool/ar.pyc
+/usr/lib/scons/SCons/Tool/default.py
+/usr/lib/scons/SCons/Tool/default.pyc
 /usr/lib/scons/SCons/Tool/dvipdf.py
 /usr/lib/scons/SCons/Tool/dvipdf.pyc
 /usr/lib/scons/SCons/Tool/dvips.py
@@ -118,6 +120,8 @@ rm -rf $RPM_BUILD_ROOT
 /usr/lib/scons/SCons/Tool/gnulink.pyc
 /usr/lib/scons/SCons/Tool/icc.py
 /usr/lib/scons/SCons/Tool/icc.pyc
+/usr/lib/scons/SCons/Tool/ifl.py
+/usr/lib/scons/SCons/Tool/ifl.pyc
 /usr/lib/scons/SCons/Tool/ilink.py
 /usr/lib/scons/SCons/Tool/ilink.pyc
 /usr/lib/scons/SCons/Tool/latex.py
index 811390440b8df71fd532d0cb89557299abccf78b..4441f5a0dcea88ec3fdd485d1e57ffb0948cda3e 100644 (file)
@@ -26,6 +26,7 @@ SCons/Sig/TimeStamp.py
 SCons/Taskmaster.py
 SCons/Tool/__init__.py
 SCons/Tool/ar.py
+SCons/Tool/default.py
 SCons/Tool/dvipdf.py
 SCons/Tool/dvips.py
 SCons/Tool/g++.py
index 99927f6f1ff939541950b316cc4143236df757b3..6566427bb33261682f71ae6a94a72d9a95a4fd24 100644 (file)
@@ -129,7 +129,7 @@ class Environment:
             platform = SCons.Platform.Platform(platform)
         platform(self)
         if tools is None:
-            tools = SCons.Platform.DefaultToolList(platform)
+            tools = ['default']
         for tool in tools:
             if SCons.Util.is_String(tool):
                 tool = SCons.Tool.Tool(tool)
index 9d73cd721ec20a843b3db3121687752bac43c5f2..6401433e72ee4022d6da8cb847b8113a4e9d6aa0 100644 (file)
@@ -85,10 +85,10 @@ def platform_module(name = platform_default()):
             file.close()
     return sys.modules[full_name]
 
-def DefaultToolList(platform):
+def DefaultToolList(platform, env):
     """Select a default tool list for the specified platform.
     """
-    return SCons.Tool.tool_list(platform)
+    return SCons.Tool.tool_list(platform, env)
 
 class PlatformSpec:
     def __init__(self, name):
index 0095cdf8f85326c1391b88ecf297ef3a59d120b6..6b78fafa9f8540055d8edbbbf2ab564355f61cf9 100644 (file)
@@ -116,29 +116,30 @@ def createCFileBuilders(env):
     except KeyError:
         c_file = SCons.Defaults.CFile()
         env['BUILDERS']['CFile'] = c_file
+        env['CFILESUFFIX'] = '.c'
 
     try:
         cxx_file = env['BUILDERS']['CXXFile']
     except KeyError:
         cxx_file = SCons.Defaults.CXXFile()
         env['BUILDERS']['CXXFile'] = cxx_file
+        env['CXXFILESUFFIX'] = '.cc'
 
     return (c_file, cxx_file)
 
-def FindTool(tools):
+def FindTool(tools, env):
     for tool in tools:
         t = Tool(tool)
-        if t.exists():
+        if t.exists(env):
             return tool
     return None
 
-def _ToolExists(tool):
-    return Tool(tool).exists()
-
-def FindAllTools(tools):
-    return filter (_ToolExists, tools)
+def FindAllTools(tools, env):
+    def ToolExists(tool, env=env):
+        return Tool(tool).exists(env)
+    return filter (ToolExists, tools)
              
-def tool_list(platform):
+def tool_list(platform, env):
     if str(platform) == 'win32':
         "prefer Microsoft tools on Windows"
         linkers = ['mslink', 'gnulink', 'ilink']
@@ -161,22 +162,22 @@ def tool_list(platform):
         fortran_compilers = ['g77', 'ifl']
         ars = ['ar', 'lib']
 
-    linker = FindTool(linkers)
-    c_compiler = FindTool(c_compilers)
-    assembler = FindTool(assemblers)
-    fortran_compiler = FindTool(fortran_compilers)
-    ar = FindTool(ars)
+    linker = FindTool(linkers, env) or linkers[0]
+    c_compiler = FindTool(c_compilers, env) or c_compilers[0]
+    assembler = FindTool(assemblers, env) or assemblers[0]
+    fortran_compiler = FindTool(fortran_compilers, env) or fortran_compilers[0]
+    ar = FindTool(ars, env) or ars[0]
 
     # Don't use g++ if the C compiler has built-in C++ support:
     if c_compiler and (c_compiler == 'msvc' or c_compiler == 'icc'):
         cxx_compiler = None
     else:
-        cxx_compiler = FindTool(['g++'])
+        cxx_compiler = FindTool(['g++'], env)
         
     other_tools = FindAllTools(['dvipdf', 'dvips',
                                 'latex', 'lex',
                                 'pdflatex', 'pdftex',
-                                'tar', 'tex', 'yacc'])
+                                'tar', 'tex', 'yacc'], env)
 
     tools = ([linker, c_compiler, cxx_compiler,
               fortran_compiler, assembler, ar]
index da66413581f23a71703400d314091d7a1b361248..0535b23b8c190549fc3eef255449a4e7206a3ae3 100644 (file)
@@ -44,7 +44,7 @@ def generate(env, platform):
     
     arcom = '$AR $ARFLAGS $TARGET $SOURCES'
     ranlib = 'ranlib'
-    if SCons.Util.WhereIs(ranlib):
+    if SCons.Util.Detect([ranlib], env):
         arcom = arcom + '\n$RANLIB $RANLIBFLAGS $TARGET'
 
     env['AR']          = 'ar'
@@ -56,5 +56,5 @@ def generate(env, platform):
     env['SHLINKFLAGS'] = '$LINKFLAGS -shared'
     env['SHLINKCOM']   = '$SHLINK $SHLINKFLAGS -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
 
-def exists():
-    return SCons.Util.WhereIs('ar')
+def exists(env):
+    return SCons.Util.Detect(['ar'], env)
diff --git a/src/engine/SCons/Tool/default.py b/src/engine/SCons/Tool/default.py
new file mode 100644 (file)
index 0000000..e72b5b1
--- /dev/null
@@ -0,0 +1,44 @@
+"""SCons.Tool.default
+
+Initialization with a default tool list.
+
+There normally shouldn't be any need to import this module directly.
+It will usually be imported through the generic SCons.Tool.Tool()
+selection method.
+
+"""
+
+#
+# Copyright (c) 2001, 2002 Steven Knight
+#
+# 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.Tool
+
+def generate(env, platform):
+    """Add default tools."""
+    for t in SCons.Tool.tool_list(platform, env):
+        SCons.Tool.Tool(t, platform)(env, platform)
+
+def exists(env):
+    return 1
index 6de52f1c326a72d7f383cd315f05c8323d835172..c99c333f762fb8283c1c300bf96d2263d6a85350 100644 (file)
@@ -48,5 +48,5 @@ def generate(env, platform):
     env['DVIPDFFLAGS'] = ''
     env['PDFCOM']      = '$DVIPDF $DVIPDFFLAGS $SOURCES $TARGET'
 
-def exists():
-    return SCons.Util.WhereIs('dvipdf')
+def exists(env):
+    return SCons.Util.Detect(['dvipdf'], env)
index 7da853dd380b0299e7e9c425569d490523bcd1d0..dc8ad0d7c9bfd55e3dc0f5acda2c18b4305fac8f 100644 (file)
@@ -50,5 +50,5 @@ def generate(env, platform):
     env['DVIPSFLAGS'] = ''
     env['PSCOM']      = '$DVIPS $DVIPSFLAGS -o $TARGET $SOURCES'
 
-def exists():
-    return SCons.Util.WhereIs('dvips')
+def exists(env):
+    return SCons.Util.Detect(['dvips'], env)
index 3c6dd3656518d5e972ae2ce1fc203bde079a69aa..9dba2c2a6a1d3baa4630224c5ad3165ccdcff356 100644 (file)
@@ -41,12 +41,6 @@ import SCons.Util
 
 compilers = ['c++', 'g++']
 
-for i in compilers:
-    if SCons.Util.WhereIs(i):
-        cxx = i
-        break
-    cxx = None
-
 CXXSuffixes = ['.cc', '.cpp', '.cxx', '.c++', '.C++']
 if os.path.normcase('.c') != os.path.normcase('.C'):
     CXXSuffixes.append('.C')
@@ -59,7 +53,7 @@ def generate(env, platform):
         static_obj.add_action(suffix, SCons.Defaults.CXXAction)
         shared_obj.add_action(suffix, SCons.Defaults.ShCXXAction)
 
-    env['CXX']        = cxx
+    env['CXX']        = SCons.Util.Detect(compilers, env) or 'c++'
     env['CXXFLAGS']   = '$CCFLAGS'
     env['CXXCOM']     = '$CXX $CXXFLAGS $CPPFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
     env['SHCXX']      = '$CXX'
@@ -70,5 +64,5 @@ def generate(env, platform):
 
     env['CXXFILESUFFIX'] = '.cc'
 
-def exists():
-    return cxx
+def exists(env):
+    return SCons.Util.Detect(compilers, env)
index 1066c0f5598cc0a6ab52bb0228e288c122890d06..c3ddcbf2a784242149820e12b2c60f73b0815b11 100644 (file)
@@ -40,12 +40,6 @@ import SCons.Tool
 import SCons.Util
 
 compilers = ['g77', 'f77']
-for i in compilers:
-    if SCons.Util.WhereIs(i):
-        compiler = i
-        break
-    compiler = None
-
 
 F77Suffixes = ['.f', '.for', '.FOR']
 F77PPSuffixes = ['.fpp', '.FPP']
@@ -66,7 +60,7 @@ def generate(env, platform):
         static_obj.add_action(suffix, SCons.Defaults.F77PPAction)
         shared_obj.add_action(suffix, SCons.Defaults.ShF77PPAction)
 
-    env['F77']        = 'g77'
+    env['F77']        = SCons.Util.Detect(compilers, env) or 'g77'
     env['F77FLAGS']   = ''
     env['F77COM']     = '$F77 $F77FLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
     env['F77PPCOM']   = '$F77 $F77FLAGS $CPPFLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
@@ -75,5 +69,5 @@ def generate(env, platform):
     env['SHF77COM']   = '$SHF77 $SHF77FLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
     env['SHF77PPCOM'] = '$SHF77 $SHF77FLAGS $CPPFLAGS $_F77INCFLAGS -c -o $TARGET $SOURCES'
 
-def exists():
-    return compiler
+def exists(env):
+    return SCons.Util.Detect(compilers, env)
index 36672a1a33910455e3c400b833ec258b5392a195..a8c2864b54fed29502d693e68a92e464b5d13737 100644 (file)
@@ -41,13 +41,6 @@ import SCons.Util
 
 assemblers = ['as', 'gas']
 
-for i in assemblers:
-    if SCons.Util.WhereIs(i):
-        as = i
-        break
-    as = None
-
-
 ASSuffixes = ['.s', '.asm', '.ASM']
 ASPPSuffixes = ['.spp', '.SPP']
 if os.path.normcase('.s') == os.path.normcase('.S'):
@@ -65,10 +58,10 @@ def generate(env, platform):
     for suffix in ASPPSuffixes:
         static_obj.add_action(suffix, SCons.Defaults.ASPPAction)
 
-    env['AS']        = as
+    env['AS']        = SCons.Util.Detect(assemblers, env) or 'as'
     env['ASFLAGS']   = ''
     env['ASCOM']     = '$AS $ASFLAGS -o $TARGET $SOURCES'
     env['ASPPCOM']   = '$CC $ASFLAGS $CPPFLAGS -o $TARGET $SOURCES'
 
-def exists():
-    return as
+def exists(env):
+    return SCons.Util.Detect(assemblers, env)
index 8eae17f717acd6fc588156d3e6966f3f8ebc6cf5..6dbe0afaa0a4d6e1da4e948bbf6b79cc775cc2e7 100644 (file)
@@ -41,13 +41,6 @@ import SCons.Util
 
 compilers = ['cc', 'gcc']
 
-for i in compilers:
-    if SCons.Util.WhereIs(i):
-        cc = i
-        break
-    cc = None
-
-
 CSuffixes = ['.c']
 if os.path.normcase('.c') == os.path.normcase('.C'):
     CSuffixes.append('.C')
@@ -60,7 +53,7 @@ def generate(env, platform):
         static_obj.add_action(suffix, SCons.Defaults.CAction)
         shared_obj.add_action(suffix, SCons.Defaults.ShCAction)
 
-    env['CC']        = cc
+    env['CC']        = SCons.Util.Detect(compilers, env) or 'cc'
     env['CCFLAGS']   = ''
     env['CCCOM']     = '$CC $CCFLAGS $CPPFLAGS $_CPPINCFLAGS -c -o $TARGET $SOURCES'
     env['SHCC']      = '$CC'
@@ -72,5 +65,5 @@ def generate(env, platform):
 
     env['CFILESUFFIX'] = '.c'
 
-def exists():
-    return cc
+def exists(env):
+    return SCons.Util.Detect(compilers, env)
index 3fc78b1082f0c8888b930eb6f0fb6f15b809b419..0a6b22e8d0264ec6fb7e95a524af46ee7c7c1a53 100644 (file)
@@ -38,12 +38,6 @@ import SCons.Util
 
 linkers = ['c++', 'cc', 'g++', 'gcc']
 
-for i in linkers:
-    if SCons.Util.WhereIs(i):
-        linker = i
-        break
-    linker = None
-
 def generate(env, platform):
     """Add Builders and construction variables for gnulink to an Environment."""
     env['BUILDERS']['SharedLibrary'] = SCons.Defaults.SharedLibrary
@@ -53,7 +47,7 @@ def generate(env, platform):
     env['SHLINKFLAGS'] = '$LINKFLAGS -shared'
     env['SHLINKCOM']   = '$SHLINK $SHLINKFLAGS -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
     env['SHLIBEMITTER']= None
-    env['LINK']        = linker
+    env['LINK']        = SCons.Util.Detect(linkers, env) or 'c++'
     env['LINKFLAGS']   = ''
     env['LINKCOM']     = '$LINK $LINKFLAGS -o $TARGET $SOURCES $_LIBDIRFLAGS $_LIBFLAGS'
     env['LIBDIRPREFIX']='-L'
@@ -61,5 +55,5 @@ def generate(env, platform):
     env['LIBLINKPREFIX']='-l'
     env['LIBLINKSUFFIX']=''
 
-def exists():
-    return linker
+def exists(env):
+    return SCons.Util.Detect(linkers, env)
index df1eb00ce1c0b41cfbbddae5087a455a4f3d3b29..5a09cb8834714afbc4dc6705fae3272cd249ea8b 100644 (file)
@@ -63,9 +63,9 @@ def generate(env, platform):
     env['CXXCOM']     = '$CXX $CXXFLAGS $CPPFLAGS $_CPPINCFLAGS /c $SOURCES /Fo$TARGET'
     env['INCPREFIX']  = '/I'
     env['INCSUFFIX']  = '' 
-    
+
     env['CFILESUFFIX'] = '.c'
     env['CXXFILESUFFIX'] = '.cc'
-    
-def exists():
-    return SCons.Util.WhereIs('icc')
+
+def exists(env):
+    return SCons.Util.Detect(['icc'], env)
index 1f4f8f4d0ae476d0305fa300a35394bd911ca5b0..69a1ffde26bc56d5a59bb503b124e733578f3027 100644 (file)
@@ -34,7 +34,6 @@ selection method.
 __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__"
 
 import os.path
-import string
 
 import SCons.Action
 import SCons.Tool
@@ -68,5 +67,5 @@ def generate(env, platform):
     env['SHF77COM']   = '$SHF77 $SHF77FLAGS $_F77INCFLAGS /c $SOURCES /Fo$TARGET'
     env['SHF77PPCOM'] = '$SHF77 $SHF77FLAGS $CPPFLAGS $_F77INCFLAGS /c $SOURCES /Fo$TARGET'
 
-def exists():
-    return SCons.Util.WhereIs('ifl')
+def exists(env):
+    return SCons.Util.Detect(['ifl'], env)
index 323f808e561207ac51e2ba40edafacff712935f4..f3e565974d005d37e1020150925b7aff318fa582 100644 (file)
@@ -47,5 +47,5 @@ def generate(env, platform):
     env['LIBLINKPREFIX']=''
     env['LIBLINKSUFFIX']='$LIBSUFFIX'
 
-def exists():
-    return SCons.Util.WhereIs('ilink')
+def exists(env):
+    return SCons.Util.Detect(['ilink'], env)
index 65235803185967dc2d14e4175a78b63b3f271190..192ccf086eaa8966f82e1eee5c27502886b994a3 100644 (file)
@@ -54,5 +54,5 @@ def generate(env, platform):
     env['LATEXFLAGS'] = ''
     env['LATEXCOM']   = '$LATEX $LATEXFLAGS $SOURCES'
 
-def exists():
-    return SCons.Util.WhereIs('latex')
+def exists(env):
+    return SCons.Util.Detect(['latex'], env)
index 0dda1288c8c521275fdb5e69ffd698571fc1a099..2a936e57d5abee56ef481bdfbf0928abf0500426 100644 (file)
@@ -47,5 +47,5 @@ def generate(env, platform):
     env['LEXFLAGS'] = ''
     env['LEXCOM']   = '$LEX $LEXFLAGS -t $SOURCES > $TARGET'
     
-def exists():
-    return SCons.Util.WhereIs('lex')
+def exists(env):
+    return SCons.Util.Detect(['lex'], env)
index 477bf9eedb5d5b20763d800c5e3db4b84bd950c9..7b5e0cd0ed3c7847d6d3331f571c92922ae5fb2b 100644 (file)
@@ -44,5 +44,5 @@ def generate(env, platform):
     env['ARFLAGS']     = '/nologo'
     env['ARCOM']       = '$AR $ARFLAGS /OUT:$TARGET $SOURCES'
 
-def exists():
-    return SCons.Util.WhereIs('lib')
+def exists(env):
+    return SCons.Util.Detect(['lib'], env)
index 9d95913f6105636895d498219c0a3d98b2eda13e..6581e4298528d52b0e32da3f583ab94feca3d6e5 100644 (file)
@@ -60,5 +60,5 @@ def generate(env, platform):
     env['ASCOM']     = '$AS $ASFLAGS /c /Fo$TARGET $SOURCES'
     env['ASPPCOM']   = '$CC $ASFLAGS $CPPFLAGS /c /Fo$TARGET $SOURCES'
 
-def exists():
-    return SCons.Util.WhereIs('ml')
+def exists(env):
+    return SCons.Util.Detect(['ml'], env)
index 1bc9ce3e3749b324f7351654b2c75708d136f024..eb8fa26b87f082e6b0236cf4d0bb28b68e8f06bf 100644 (file)
@@ -152,5 +152,5 @@ def generate(env, platform):
     env['ENV']['LIB']            = lib_path
     env['ENV']['PATH']           = exe_path
 
-def exists():
-    return SCons.Util.WhereIs('link')
+def exists(env):
+    return SCons.Util.Detect(['link'], env)
index 33da2ece75772965e73fa9285c84f999bc076967..fadebc6e8974504700e36e20ce53b32f81e5cb0b 100644 (file)
@@ -217,9 +217,9 @@ def generate(env, platform):
     include_path, lib_path, exe_path = get_msdev_paths()
     env['ENV']['INCLUDE'] = include_path
     env['ENV']['PATH']    = exe_path
-    
+
     env['CFILESUFFIX'] = '.c'
     env['CXXFILESUFFIX'] = '.cc'
-    
-def exists():
-    return SCons.Util.WhereIs('cl')
+
+def exists(env):
+    return SCons.Util.Detect(['cl'], env)
index e341ddee92574efddd1ec4cd00da9fcd76a7ffaa..7be709165c116d596e99236373f17b1c697d75be 100644 (file)
@@ -60,5 +60,5 @@ def generate(env, platform):
     env['ASCOM']     = '$AS $ASFLAGS -o $TARGET $SOURCES'
     env['ASPPCOM']   = '$CC $ASFLAGS $CPPFLAGS -c -o $TARGET $SOURCES'
 
-def exists():
-    return SCons.Util.WhereIs('nasm')
+def exists(env):
+    return SCons.Util.Detect(['nasm'], env)
index 1e9e733f2587c51cd5bc3611ed6da1b819c47427..20517177c1c0925634ec2151ef7063663b9efe87 100644 (file)
@@ -53,5 +53,5 @@ def generate(env, platform):
     env['PDFLATEXFLAGS'] = ''
     env['PDFLATEXCOM']   = '$PDFLATEX $PDFLATEXFLAGS $SOURCES $TARGET'
 
-def exists():
-    return SCons.Util.WhereIs('pdflatex')
+def exists(env):
+    return SCons.Util.Detect(['pdflatex'], env)
index f7dc60c3903bb09f9637fd276e5f625f2bc516ac..2d538b7b149fae5f5922ab47c3e4cbb4539a3ca5 100644 (file)
@@ -49,5 +49,5 @@ def generate(env, platform):
     env['PDFTEXFLAGS'] = ''
     env['PDFTEXCOM']   = '$PDFTEX $PDFTEXFLAGS $SOURCES $TARGET'
 
-def exists():
-    return SCons.Util.WhereIs('pdftex')
+def exists(env):
+    return SCons.Util.Detect(['pdftex'], env)
index 0acfd56aa98e33f953c424bf6e9a3fafe9a1862c..4cf88ba23344566987d372f31ee8475fbd372fff 100644 (file)
@@ -39,12 +39,6 @@ import SCons.Util
 
 tars = ['gtar', 'tar']
 
-for i in tars:
-    if SCons.Util.WhereIs(i):
-        tar = i
-        break
-    tar = None
-
 TarBuilder = SCons.Builder.Builder(action = '$TARCOM',
                                    source_factory = SCons.Node.FS.default_fs.Entry,
                                   suffix = '$TARSUFFIX',
@@ -59,10 +53,10 @@ def generate(env, platform):
         bld = TarBuilder
         env['BUILDERS']['Tar'] = bld
 
-    env['TAR']        = tar
+    env['TAR']        = SCons.Util.Detect(tars, env) or 'gtar'
     env['TARFLAGS']   = '-c'
     env['TARCOM']     = '$TAR $TARFLAGS -f $TARGET $SOURCES'
     env['TARSUFFIX']  = '.tar'
 
-def exists():
-    return tar
+def exists(env):
+    return SCons.Util.Detect(tars, env)
index 9e0d9629f4c602effe01463c12b8a6e92ef19a88..deed4cb41e21c5aeb032741643572c254c5363cf 100644 (file)
@@ -49,5 +49,5 @@ def generate(env, platform):
     env['TEXFLAGS'] = ''
     env['TEXCOM']   = '$TEX $TEXFLAGS $SOURCES'
 
-def exists():
-    return SCons.Util.WhereIs('tex')
+def exists(env):
+    return SCons.Util.Detect(['tex'], env)
index bce4a39fc6717caa131069ce3e05dc82e17af3c0..4e63c19de7ffc416d3eed18e890eb6d53ad032a2 100644 (file)
@@ -46,5 +46,5 @@ def generate(env, platform):
     env['YACCFLAGS'] = ''
     env['YACCCOM']   = '$YACC $YACCFLAGS -o $TARGET $SOURCES'
 
-def exists():
-    return SCons.Util.WhereIs('yacc')
+def exists(env):
+    return SCons.Util.Detect(['yacc'], env)
index 63c992e33d3d8874e3168e61e9748547e52e1ff5..bcf0e14891ec4529583c0d77162cd13a0feb29e5 100644 (file)
@@ -489,3 +489,17 @@ else:
                 if stat.S_IMODE(st[stat.ST_MODE]) & 0111:
                     return f
         return None
+
+def Detect(progs, env=None):
+    "Return the first available program in progs"
+    path = None
+    pathext = None
+    if env and env.has_key('ENV'):
+        if env['ENV'].has_key('PATH'):
+            path = env['ENV']['PATH']
+        if env['ENV'].has_key('PATHEXT'):
+            pathext = env['ENV']['PATHEXT']
+    for prog in progs:
+        path = WhereIs(prog, path, pathext)
+        if path: return prog
+    return None
index 5c046865a718da271285783bd2e2260470dfbb84..c5eb6cbaf84b550c51c3e3b2be1c809276df0fc5 100644 (file)
@@ -46,7 +46,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(LEX = r'%s mylex.py')
+env = Environment(LEX = r'%s mylex.py', tools = ['lex'])
 env.CFile(target = 'foo', source = 'foo.l')
 env.Copy(CFILESUFFIX = '.xyz').CFile(target = 'bar', source = 'bar.l')
 """ % python)
index 48c62a9812f6d604ad799be1bc2688d33c0e485e..e15824056d5e5b6ebba8d7145e92bcabe629bd6b 100644 (file)
@@ -46,7 +46,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(LEX = r'%s mylex.py')
+env = Environment(LEX = r'%s mylex.py', tools = ['lex'])
 env.CXXFile(target = 'foo', source = 'foo.ll')
 env.Copy(CXXFILESUFFIX = '.xyz').CXXFile(target = 'bar', source = 'bar.ll')
 """ % python)
index 25856dcab2776b30602f3aabfb5878a69449266f..26b6b9416fdb695bcdfa51139e25f80563c285d3 100644 (file)
@@ -74,7 +74,8 @@ sys.exit(0)
 test.write('SConstruct', """
 env = Environment(TEX = r'%s mytex.py',
                   LATEX = r'%s mylatex.py',
-                  DVIPDF = r'%s mydvipdf.py')
+                  DVIPDF = r'%s mydvipdf.py',
+                  tools=['latex', 'tex', 'dvipdf'])
 dvi = env.DVI(target = 'test1.dvi', source = 'test1.tex')
 env.DVI(target = 'test2.dvi', source = 'test2.tex')
 env.PDF(target = 'test1.pdf', source = dvi)
index 9962253646fc4a9b1259536c9b1102ff936f6d48..1548360814fea55d91d25ebba85f0b9a08288ab2 100644 (file)
@@ -80,7 +80,8 @@ sys.exit(0)
 test.write('SConstruct', """
 env = Environment(TEX = r'%s mytex.py',
                   LATEX = r'%s mylatex.py',
-                  DVIPDF = r'%s mydvipdf.py', DVIPDFFLAGS = '-x')
+                  DVIPDF = r'%s mydvipdf.py', DVIPDFFLAGS = '-x',
+                  tools = ['tex', 'latex', 'dvipdf'])
 dvi = env.DVI(target = 'test1.dvi', source = 'test1.tex')
 env.DVI(target = 'test2.dvi', source = 'test2.tex')
 env.PDF(target = 'test1.pdf', source = dvi)
index b3bdebc31932d39fc413a2791c1528f96d91208b..9cb6d5f1264592ef805d933f1477a4d9d0b36387 100644 (file)
@@ -74,7 +74,8 @@ sys.exit(0)
 test.write('SConstruct', """
 env = Environment(TEX = r'%s mytex.py',
                   LATEX = r'%s mylatex.py',
-                  DVIPS = r'%s mydvips.py')
+                  DVIPS = r'%s mydvips.py',
+                  tools=['tex', 'latex', 'dvips'])
 dvi = env.DVI(target = 'test1.dvi', source = 'test1.tex')
 env.PostScript(target = 'test1.ps', source = dvi)
 env.PostScript(target = 'test2.ps', source = 'test2.tex')
index 664b532937b9e4bfc2372f5954970bb414635861..a67a05869fdbde4c476f79dfeb435f137e7bf12d 100644 (file)
@@ -81,7 +81,8 @@ sys.exit(0)
 test.write('SConstruct', """
 env = Environment(TEX = r'%s mytex.py',
                   LATEX = r'%s mylatex.py',
-                  DVIPS = r'%s mydvips.py', DVIPSFLAGS = '-x')
+                  DVIPS = r'%s mydvips.py', DVIPSFLAGS = '-x',
+                  tools=['tex', 'latex', 'dvips'])
 dvi = env.DVI(target = 'test1.dvi', source = 'test1.tex')
 env.PostScript(target = 'test1.ps', source = dvi)
 env.PostScript(target = 'test2.ps', source = 'test2.tex')
index 440054d26a3c0e2b87d46247212e2fbdd79eea92..7aa81876dd528e99a2b3f8f98951caf019246fa8 100644 (file)
@@ -49,7 +49,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(LATEX = r'%s mylatex.py')
+env = Environment(LATEX = r'%s mylatex.py', tools=['latex'])
 env.DVI(target = 'test1.dvi', source = 'test1.ltx')
 env.DVI(target = 'test2.dvi', source = 'test2.latex')
 """ % python)
index 5ad4d9553741fa8d78b0acc9be4e86b5b3a5e3ee..a4419346e9531ab9f3d20ea356a2f1d3d319c06e 100644 (file)
@@ -55,7 +55,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(LATEX = r'%s mylatex.py', LATEXFLAGS = '-x')
+env = Environment(LATEX = r'%s mylatex.py', LATEXFLAGS = '-x', tools=['latex'])
 env.DVI(target = 'test1.dvi', source = 'test1.ltx')
 env.Copy(LATEXFLAGS = '-t').DVI(target = 'test2.dvi', source = 'test2.latex')
 """ % python)
index 88c0a2deabf882b27a0fdf65e853aedb348bce42..28cbdec0afdce38d1f1e5a0f2aacb75860cc7bad 100644 (file)
@@ -53,7 +53,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(LEX = r'%s mylex.py')
+env = Environment(LEX = r'%s mylex.py', tools=['default', 'lex'])
 env.Program(target = 'aaa', source = 'aaa.l')
 """ % python)
 
index e807774c2f4f7851f3736a99a30a33f7bbacb186..169ae8045923ef20e6722ddbcc9ce2e11e65c5fd 100644 (file)
@@ -56,7 +56,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(LEX = r'%s mylex.py', LEXFLAGS = '-x')
+env = Environment(LEX = r'%s mylex.py', LEXFLAGS = '-x', tools=['default', 'lex'])
 env.Program(target = 'aaa', source = 'aaa.l')
 """ % python)
 
index f665d0f8ae6fdef7d4955468e2b6e35ab5667a2a..b49ac89ce7337e83e09c31ae1748745467adb0b2 100644 (file)
@@ -49,7 +49,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(PDFLATEX = r'%s mypdflatex.py')
+env = Environment(PDFLATEX = r'%s mypdflatex.py', tools=['pdflatex'])
 env.PDF(target = 'test1.pdf', source = 'test1.ltx')
 env.PDF(target = 'test2.pdf', source = 'test2.latex')
 """ % python)
index 6ddd41a73b74d551d17b9f0ce4e8643e018da6ce..67e1627515580102c37a7f82a24d117d7193684b 100644 (file)
@@ -55,7 +55,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(PDFLATEX = r'%s mypdflatex.py', PDFLATEXFLAGS = '-x')
+env = Environment(PDFLATEX = r'%s mypdflatex.py', PDFLATEXFLAGS = '-x', tools=['pdflatex'])
 env.PDF(target = 'test1.pdf', source = 'test1.ltx')
 env.Copy(PDFLATEXFLAGS = '-t').PDF(target = 'test2.pdf', source = 'test2.latex')
 """ % python)
index 4fe534160ca82a6ec3f996887976c8c9081fd616..47fdc9d957d51ee0a9547be90df37c34442bccb1 100644 (file)
@@ -49,7 +49,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(PDFTEX = r'%s mypdftex.py')
+env = Environment(PDFTEX = r'%s mypdftex.py', tools=['pdftex'])
 env.PDF(target = 'test.pdf', source = 'test.tex')
 """ % python)
 
index aa5cc9f2cb3e07a4282e4cc0c8901e794e858884..34647df1b44d749e0098573f251cdfa93f388b74 100644 (file)
@@ -55,7 +55,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(PDFTEX = r'%s mypdftex.py', PDFTEXFLAGS = '-x')
+env = Environment(PDFTEX = r'%s mypdftex.py', PDFTEXFLAGS = '-x', tools=['pdftex'])
 env.PDF(target = 'test.pdf', source = 'test.tex')
 """ % python)
 
index bcdd62e0181b9e2e69c4a3945703f7312f5a5d2a..a5f981efe7382a0b6506f958fb17578408fa5dc0 100644 (file)
@@ -49,7 +49,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(TEX = r'%s mytex.py')
+env = Environment(TEX = r'%s mytex.py', tools=['tex'])
 env.DVI(target = 'test.dvi', source = 'test.tex')
 """ % python)
 
index 1f7121f4a25dda5820207bdb71ebfe1faecd9701..075750c3603e160ad2b9fca146a4f666e4c5162f 100644 (file)
@@ -55,7 +55,7 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(TEX = r'%s mytex.py', TEXFLAGS = '-x')
+env = Environment(TEX = r'%s mytex.py', TEXFLAGS = '-x', tools=['tex'])
 env.DVI(target = 'test.dvi', source = 'test.tex')
 """ % python)
 
index 2868085ecc594c7a84c3adc68c88b07fcb8c53de..1df8cc54ff899208863762862339c98a2c72f266 100644 (file)
@@ -34,8 +34,12 @@ python = sys.executable
 
 if sys.platform == 'win32':
     _exe = '.exe'
+    compiler = 'msvc'
+    linker = 'mslink'
 else:
     _exe = ''
+    compiler = 'gcc'
+    linker = 'gnulink'
 
 test = TestSCons.TestSCons()
 
@@ -58,8 +62,10 @@ output.close()
 sys.exit(0)
 """)
 
+
+
 test.write('SConstruct', """
-env = Environment(YACC = r'%s myyacc.py')
+env = Environment(YACC = r'%s myyacc.py', tools=['default', 'yacc'])
 env.Program(target = 'aaa', source = 'aaa.y')
 """ % python)
 
index 288696ba2f14513c23d697a1eb0e451522e77cec..ba382098c0300ecb3a043a1698b2d56b48aec1f0 100644 (file)
@@ -34,8 +34,12 @@ python = sys.executable
 
 if sys.platform == 'win32':
     _exe = '.exe'
+    compiler = 'msvc'
+    linker = 'mslink'
 else:
     _exe = ''
+    compiler = 'gcc'
+    linker = 'gnulink'
 
 test = TestSCons.TestSCons()
 
@@ -59,9 +63,9 @@ sys.exit(0)
 """)
 
 test.write('SConstruct', """
-env = Environment(YACC = r'%s myyacc.py', YACCFLAGS = '-x')
+env = Environment(YACC = r'%s myyacc.py', YACCFLAGS = '-x', tools=['yacc', '%s', '%s'])
 env.Program(target = 'aaa', source = 'aaa.y')
-""" % python)
+""" % (python, linker, compiler))
 
 test.write('aaa.y', r"""
 int