summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/man/scons.164
-rw-r--r--rpm/scons.spec6
-rw-r--r--src/engine/MANIFEST.in1
-rw-r--r--src/engine/SCons/Environment.py2
-rw-r--r--src/engine/SCons/Platform/__init__.py4
-rw-r--r--src/engine/SCons/Tool/__init__.py31
-rw-r--r--src/engine/SCons/Tool/ar.py6
-rw-r--r--src/engine/SCons/Tool/default.py44
-rw-r--r--src/engine/SCons/Tool/dvipdf.py4
-rw-r--r--src/engine/SCons/Tool/dvips.py4
-rw-r--r--src/engine/SCons/Tool/g++.py12
-rw-r--r--src/engine/SCons/Tool/g77.py12
-rw-r--r--src/engine/SCons/Tool/gas.py13
-rw-r--r--src/engine/SCons/Tool/gcc.py13
-rw-r--r--src/engine/SCons/Tool/gnulink.py12
-rw-r--r--src/engine/SCons/Tool/icc.py8
-rw-r--r--src/engine/SCons/Tool/ifl.py5
-rw-r--r--src/engine/SCons/Tool/ilink.py4
-rw-r--r--src/engine/SCons/Tool/latex.py4
-rw-r--r--src/engine/SCons/Tool/lex.py4
-rw-r--r--src/engine/SCons/Tool/lib.py4
-rw-r--r--src/engine/SCons/Tool/masm.py4
-rw-r--r--src/engine/SCons/Tool/mslink.py4
-rw-r--r--src/engine/SCons/Tool/msvc.py8
-rw-r--r--src/engine/SCons/Tool/nasm.py4
-rw-r--r--src/engine/SCons/Tool/pdflatex.py4
-rw-r--r--src/engine/SCons/Tool/pdftex.py4
-rw-r--r--src/engine/SCons/Tool/tar.py12
-rw-r--r--src/engine/SCons/Tool/tex.py4
-rw-r--r--src/engine/SCons/Tool/yacc.py4
-rw-r--r--src/engine/SCons/Util.py14
-rw-r--r--test/CFILESUFFIX.py2
-rw-r--r--test/CXXFILESUFFIX.py2
-rw-r--r--test/DVIPDF.py3
-rw-r--r--test/DVIPDFFLAGS.py3
-rw-r--r--test/DVIPS.py3
-rw-r--r--test/DVIPSFLAGS.py3
-rw-r--r--test/LATEX.py2
-rw-r--r--test/LATEXFLAGS.py2
-rw-r--r--test/LEX.py2
-rw-r--r--test/LEXFLAGS.py2
-rw-r--r--test/PDFLATEX.py2
-rw-r--r--test/PDFLATEXFLAGS.py2
-rw-r--r--test/PDFTEX.py2
-rw-r--r--test/PDFTEXFLAGS.py2
-rw-r--r--test/TEX.py2
-rw-r--r--test/TEXFLAGS.py2
-rw-r--r--test/YACC.py8
-rw-r--r--test/YACCFLAGS.py8
49 files changed, 188 insertions, 183 deletions
diff --git a/doc/man/scons.1 b/doc/man/scons.1
index eb0954c3..dfed6c34 100644
--- a/doc/man/scons.1
+++ b/doc/man/scons.1
@@ -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
diff --git a/rpm/scons.spec b/rpm/scons.spec
index aae24a63..a4635d99 100644
--- a/rpm/scons.spec
+++ b/rpm/scons.spec
@@ -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
diff --git a/src/engine/MANIFEST.in b/src/engine/MANIFEST.in
index 81139044..4441f5a0 100644
--- a/src/engine/MANIFEST.in
+++ b/src/engine/MANIFEST.in
@@ -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
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 99927f6f..6566427b 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/engine/SCons/Environment.py
@@ -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)
diff --git a/src/engine/SCons/Platform/__init__.py b/src/engine/SCons/Platform/__init__.py
index 9d73cd72..6401433e 100644
--- a/src/engine/SCons/Platform/__init__.py
+++ b/src/engine/SCons/Platform/__init__.py
@@ -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):
diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py
index 0095cdf8..6b78fafa 100644
--- a/src/engine/SCons/Tool/__init__.py
+++ b/src/engine/SCons/Tool/__init__.py
@@ -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]
diff --git a/src/engine/SCons/Tool/ar.py b/src/engine/SCons/Tool/ar.py
index da664135..0535b23b 100644
--- a/src/engine/SCons/Tool/ar.py
+++ b/src/engine/SCons/Tool/ar.py
@@ -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
index 00000000..e72b5b1d
--- /dev/null
+++ b/src/engine/SCons/Tool/default.py
@@ -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
diff --git a/src/engine/SCons/Tool/dvipdf.py b/src/engine/SCons/Tool/dvipdf.py
index 6de52f1c..c99c333f 100644
--- a/src/engine/SCons/Tool/dvipdf.py
+++ b/src/engine/SCons/Tool/dvipdf.py
@@ -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)
diff --git a/src/engine/SCons/Tool/dvips.py b/src/engine/SCons/Tool/dvips.py
index 7da853dd..dc8ad0d7 100644
--- a/src/engine/SCons/Tool/dvips.py
+++ b/src/engine/SCons/Tool/dvips.py
@@ -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)
diff --git a/src/engine/SCons/Tool/g++.py b/src/engine/SCons/Tool/g++.py
index 3c6dd365..9dba2c2a 100644
--- a/src/engine/SCons/Tool/g++.py
+++ b/src/engine/SCons/Tool/g++.py
@@ -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)
diff --git a/src/engine/SCons/Tool/g77.py b/src/engine/SCons/Tool/g77.py
index 1066c0f5..c3ddcbf2 100644
--- a/src/engine/SCons/Tool/g77.py
+++ b/src/engine/SCons/Tool/g77.py
@@ -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)
diff --git a/src/engine/SCons/Tool/gas.py b/src/engine/SCons/Tool/gas.py
index 36672a1a..a8c2864b 100644
--- a/src/engine/SCons/Tool/gas.py
+++ b/src/engine/SCons/Tool/gas.py
@@ -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)
diff --git a/src/engine/SCons/Tool/gcc.py b/src/engine/SCons/Tool/gcc.py
index 8eae17f7..6dbe0afa 100644
--- a/src/engine/SCons/Tool/gcc.py
+++ b/src/engine/SCons/Tool/gcc.py
@@ -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)
diff --git a/src/engine/SCons/Tool/gnulink.py b/src/engine/SCons/Tool/gnulink.py
index 3fc78b10..0a6b22e8 100644
--- a/src/engine/SCons/Tool/gnulink.py
+++ b/src/engine/SCons/Tool/gnulink.py
@@ -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)
diff --git a/src/engine/SCons/Tool/icc.py b/src/engine/SCons/Tool/icc.py
index df1eb00c..5a09cb88 100644
--- a/src/engine/SCons/Tool/icc.py
+++ b/src/engine/SCons/Tool/icc.py
@@ -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)
diff --git a/src/engine/SCons/Tool/ifl.py b/src/engine/SCons/Tool/ifl.py
index 1f4f8f4d..69a1ffde 100644
--- a/src/engine/SCons/Tool/ifl.py
+++ b/src/engine/SCons/Tool/ifl.py
@@ -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)
diff --git a/src/engine/SCons/Tool/ilink.py b/src/engine/SCons/Tool/ilink.py
index 323f808e..f3e56597 100644
--- a/src/engine/SCons/Tool/ilink.py
+++ b/src/engine/SCons/Tool/ilink.py
@@ -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)
diff --git a/src/engine/SCons/Tool/latex.py b/src/engine/SCons/Tool/latex.py
index 65235803..192ccf08 100644
--- a/src/engine/SCons/Tool/latex.py
+++ b/src/engine/SCons/Tool/latex.py
@@ -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)
diff --git a/src/engine/SCons/Tool/lex.py b/src/engine/SCons/Tool/lex.py
index 0dda1288..2a936e57 100644
--- a/src/engine/SCons/Tool/lex.py
+++ b/src/engine/SCons/Tool/lex.py
@@ -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)
diff --git a/src/engine/SCons/Tool/lib.py b/src/engine/SCons/Tool/lib.py
index 477bf9ee..7b5e0cd0 100644
--- a/src/engine/SCons/Tool/lib.py
+++ b/src/engine/SCons/Tool/lib.py
@@ -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)
diff --git a/src/engine/SCons/Tool/masm.py b/src/engine/SCons/Tool/masm.py
index 9d95913f..6581e429 100644
--- a/src/engine/SCons/Tool/masm.py
+++ b/src/engine/SCons/Tool/masm.py
@@ -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)
diff --git a/src/engine/SCons/Tool/mslink.py b/src/engine/SCons/Tool/mslink.py
index 1bc9ce3e..eb8fa26b 100644
--- a/src/engine/SCons/Tool/mslink.py
+++ b/src/engine/SCons/Tool/mslink.py
@@ -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)
diff --git a/src/engine/SCons/Tool/msvc.py b/src/engine/SCons/Tool/msvc.py
index 33da2ece..fadebc6e 100644
--- a/src/engine/SCons/Tool/msvc.py
+++ b/src/engine/SCons/Tool/msvc.py
@@ -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)
diff --git a/src/engine/SCons/Tool/nasm.py b/src/engine/SCons/Tool/nasm.py
index e341ddee..7be70916 100644
--- a/src/engine/SCons/Tool/nasm.py
+++ b/src/engine/SCons/Tool/nasm.py
@@ -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)
diff --git a/src/engine/SCons/Tool/pdflatex.py b/src/engine/SCons/Tool/pdflatex.py
index 1e9e733f..20517177 100644
--- a/src/engine/SCons/Tool/pdflatex.py
+++ b/src/engine/SCons/Tool/pdflatex.py
@@ -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)
diff --git a/src/engine/SCons/Tool/pdftex.py b/src/engine/SCons/Tool/pdftex.py
index f7dc60c3..2d538b7b 100644
--- a/src/engine/SCons/Tool/pdftex.py
+++ b/src/engine/SCons/Tool/pdftex.py
@@ -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)
diff --git a/src/engine/SCons/Tool/tar.py b/src/engine/SCons/Tool/tar.py
index 0acfd56a..4cf88ba2 100644
--- a/src/engine/SCons/Tool/tar.py
+++ b/src/engine/SCons/Tool/tar.py
@@ -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)
diff --git a/src/engine/SCons/Tool/tex.py b/src/engine/SCons/Tool/tex.py
index 9e0d9629..deed4cb4 100644
--- a/src/engine/SCons/Tool/tex.py
+++ b/src/engine/SCons/Tool/tex.py
@@ -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)
diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py
index bce4a39f..4e63c19d 100644
--- a/src/engine/SCons/Tool/yacc.py
+++ b/src/engine/SCons/Tool/yacc.py
@@ -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)
diff --git a/src/engine/SCons/Util.py b/src/engine/SCons/Util.py
index 63c992e3..bcf0e148 100644
--- a/src/engine/SCons/Util.py
+++ b/src/engine/SCons/Util.py
@@ -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
diff --git a/test/CFILESUFFIX.py b/test/CFILESUFFIX.py
index 5c046865..c5eb6cba 100644
--- a/test/CFILESUFFIX.py
+++ b/test/CFILESUFFIX.py
@@ -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)
diff --git a/test/CXXFILESUFFIX.py b/test/CXXFILESUFFIX.py
index 48c62a98..e1582405 100644
--- a/test/CXXFILESUFFIX.py
+++ b/test/CXXFILESUFFIX.py
@@ -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)
diff --git a/test/DVIPDF.py b/test/DVIPDF.py
index 25856dca..26b6b941 100644
--- a/test/DVIPDF.py
+++ b/test/DVIPDF.py
@@ -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)
diff --git a/test/DVIPDFFLAGS.py b/test/DVIPDFFLAGS.py
index 99622536..15483608 100644
--- a/test/DVIPDFFLAGS.py
+++ b/test/DVIPDFFLAGS.py
@@ -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)
diff --git a/test/DVIPS.py b/test/DVIPS.py
index b3bdebc3..9cb6d5f1 100644
--- a/test/DVIPS.py
+++ b/test/DVIPS.py
@@ -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')
diff --git a/test/DVIPSFLAGS.py b/test/DVIPSFLAGS.py
index 664b5329..a67a0586 100644
--- a/test/DVIPSFLAGS.py
+++ b/test/DVIPSFLAGS.py
@@ -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')
diff --git a/test/LATEX.py b/test/LATEX.py
index 440054d2..7aa81876 100644
--- a/test/LATEX.py
+++ b/test/LATEX.py
@@ -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)
diff --git a/test/LATEXFLAGS.py b/test/LATEXFLAGS.py
index 5ad4d955..a4419346 100644
--- a/test/LATEXFLAGS.py
+++ b/test/LATEXFLAGS.py
@@ -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)
diff --git a/test/LEX.py b/test/LEX.py
index 88c0a2de..28cbdec0 100644
--- a/test/LEX.py
+++ b/test/LEX.py
@@ -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)
diff --git a/test/LEXFLAGS.py b/test/LEXFLAGS.py
index e807774c..169ae804 100644
--- a/test/LEXFLAGS.py
+++ b/test/LEXFLAGS.py
@@ -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)
diff --git a/test/PDFLATEX.py b/test/PDFLATEX.py
index f665d0f8..b49ac89c 100644
--- a/test/PDFLATEX.py
+++ b/test/PDFLATEX.py
@@ -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)
diff --git a/test/PDFLATEXFLAGS.py b/test/PDFLATEXFLAGS.py
index 6ddd41a7..67e16275 100644
--- a/test/PDFLATEXFLAGS.py
+++ b/test/PDFLATEXFLAGS.py
@@ -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)
diff --git a/test/PDFTEX.py b/test/PDFTEX.py
index 4fe53416..47fdc9d9 100644
--- a/test/PDFTEX.py
+++ b/test/PDFTEX.py
@@ -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)
diff --git a/test/PDFTEXFLAGS.py b/test/PDFTEXFLAGS.py
index aa5cc9f2..34647df1 100644
--- a/test/PDFTEXFLAGS.py
+++ b/test/PDFTEXFLAGS.py
@@ -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)
diff --git a/test/TEX.py b/test/TEX.py
index bcdd62e0..a5f981ef 100644
--- a/test/TEX.py
+++ b/test/TEX.py
@@ -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)
diff --git a/test/TEXFLAGS.py b/test/TEXFLAGS.py
index 1f7121f4..075750c3 100644
--- a/test/TEXFLAGS.py
+++ b/test/TEXFLAGS.py
@@ -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)
diff --git a/test/YACC.py b/test/YACC.py
index 2868085e..1df8cc54 100644
--- a/test/YACC.py
+++ b/test/YACC.py
@@ -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)
diff --git a/test/YACCFLAGS.py b/test/YACCFLAGS.py
index 288696ba..ba382098 100644
--- a/test/YACCFLAGS.py
+++ b/test/YACCFLAGS.py
@@ -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