summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2019-12-27 09:24:37 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2019-12-27 09:24:37 +0100
commit57f8e3b0a87f64b41168b46512e1dc670ac98850 (patch)
tree8c82677383ee329301e24f1e72f096a1a673b6e6
parent5dcfdef50f9721ffaa466bf23721b823141c1e0d (diff)
parent257ef5bf6b309099d29421eca428df9ff43fc646 (diff)
Merge branch 'feature/upstream' into develop
-rwxr-xr-xCHANGES.txt66
-rw-r--r--LICENSE.txt2
-rw-r--r--PKG-INFO2
-rwxr-xr-xRELEASE.txt107
-rw-r--r--engine/SCons/Action.py2
-rw-r--r--engine/SCons/Builder.py17
-rw-r--r--engine/SCons/CacheDir.py2
-rw-r--r--engine/SCons/Conftest.py4
-rw-r--r--engine/SCons/Debug.py2
-rw-r--r--engine/SCons/Defaults.py2
-rw-r--r--engine/SCons/Environment.py220
-rw-r--r--engine/SCons/Errors.py2
-rw-r--r--engine/SCons/Executor.py2
-rw-r--r--engine/SCons/Job.py2
-rw-r--r--engine/SCons/Memoize.py2
-rw-r--r--engine/SCons/Node/Alias.py2
-rw-r--r--engine/SCons/Node/FS.py12
-rw-r--r--engine/SCons/Node/Python.py2
-rw-r--r--engine/SCons/Node/__init__.py10
-rw-r--r--engine/SCons/PathList.py2
-rw-r--r--engine/SCons/Platform/__init__.py2
-rw-r--r--engine/SCons/Platform/aix.py2
-rw-r--r--engine/SCons/Platform/cygwin.py2
-rw-r--r--engine/SCons/Platform/darwin.py2
-rw-r--r--engine/SCons/Platform/hpux.py2
-rw-r--r--engine/SCons/Platform/irix.py2
-rw-r--r--engine/SCons/Platform/mingw.py2
-rw-r--r--engine/SCons/Platform/os2.py2
-rw-r--r--engine/SCons/Platform/posix.py2
-rw-r--r--engine/SCons/Platform/sunos.py2
-rw-r--r--engine/SCons/Platform/virtualenv.py2
-rw-r--r--engine/SCons/Platform/win32.py60
-rw-r--r--engine/SCons/SConf.py2
-rw-r--r--engine/SCons/SConsign.py2
-rw-r--r--engine/SCons/Scanner/C.py2
-rw-r--r--engine/SCons/Scanner/D.py2
-rw-r--r--engine/SCons/Scanner/Dir.py2
-rw-r--r--engine/SCons/Scanner/Fortran.py2
-rw-r--r--engine/SCons/Scanner/IDL.py2
-rw-r--r--engine/SCons/Scanner/LaTeX.py2
-rw-r--r--engine/SCons/Scanner/Prog.py2
-rw-r--r--engine/SCons/Scanner/RC.py2
-rw-r--r--engine/SCons/Scanner/SWIG.py2
-rw-r--r--engine/SCons/Scanner/__init__.py2
-rw-r--r--engine/SCons/Script/Interactive.py2
-rw-r--r--engine/SCons/Script/Main.py11
-rw-r--r--engine/SCons/Script/SConsOptions.py24
-rw-r--r--engine/SCons/Script/SConscript.py26
-rw-r--r--engine/SCons/Script/__init__.py5
-rw-r--r--engine/SCons/Subst.py4
-rw-r--r--engine/SCons/Taskmaster.py8
-rw-r--r--engine/SCons/Tool/386asm.py2
-rw-r--r--engine/SCons/Tool/DCommon.py2
-rw-r--r--engine/SCons/Tool/FortranCommon.py2
-rw-r--r--engine/SCons/Tool/GettextCommon.py2
-rw-r--r--engine/SCons/Tool/JavaCommon.py2
-rw-r--r--engine/SCons/Tool/MSCommon/__init__.py2
-rw-r--r--engine/SCons/Tool/MSCommon/arch.py2
-rw-r--r--engine/SCons/Tool/MSCommon/common.py60
-rw-r--r--engine/SCons/Tool/MSCommon/netframework.py2
-rw-r--r--engine/SCons/Tool/MSCommon/sdk.py32
-rw-r--r--engine/SCons/Tool/MSCommon/vc.py129
-rw-r--r--engine/SCons/Tool/MSCommon/vs.py6
-rw-r--r--engine/SCons/Tool/PharLapCommon.py2
-rw-r--r--engine/SCons/Tool/__init__.py4
-rw-r--r--engine/SCons/Tool/aixc++.py2
-rw-r--r--engine/SCons/Tool/aixcc.py2
-rw-r--r--engine/SCons/Tool/aixcxx.py2
-rw-r--r--engine/SCons/Tool/aixf77.py2
-rw-r--r--engine/SCons/Tool/aixlink.py2
-rw-r--r--engine/SCons/Tool/applelink.py2
-rw-r--r--engine/SCons/Tool/ar.py2
-rw-r--r--engine/SCons/Tool/as.py2
-rw-r--r--engine/SCons/Tool/bcc32.py2
-rw-r--r--engine/SCons/Tool/c++.py2
-rw-r--r--engine/SCons/Tool/cc.py2
-rw-r--r--engine/SCons/Tool/clang.py2
-rw-r--r--engine/SCons/Tool/clangxx.py2
-rw-r--r--engine/SCons/Tool/cvf.py2
-rw-r--r--engine/SCons/Tool/cxx.py2
-rw-r--r--engine/SCons/Tool/default.py2
-rw-r--r--engine/SCons/Tool/dmd.py2
-rw-r--r--engine/SCons/Tool/dvi.py2
-rw-r--r--engine/SCons/Tool/dvipdf.py2
-rw-r--r--engine/SCons/Tool/dvips.py2
-rw-r--r--engine/SCons/Tool/f03.py2
-rw-r--r--engine/SCons/Tool/f08.py2
-rw-r--r--engine/SCons/Tool/f77.py2
-rw-r--r--engine/SCons/Tool/f90.py2
-rw-r--r--engine/SCons/Tool/f95.py2
-rw-r--r--engine/SCons/Tool/filesystem.py2
-rw-r--r--engine/SCons/Tool/fortran.py2
-rw-r--r--engine/SCons/Tool/g++.py2
-rw-r--r--engine/SCons/Tool/g77.py2
-rw-r--r--engine/SCons/Tool/gas.py2
-rw-r--r--engine/SCons/Tool/gcc.py2
-rw-r--r--engine/SCons/Tool/gdc.py2
-rw-r--r--engine/SCons/Tool/gettext_tool.py2
-rw-r--r--engine/SCons/Tool/gfortran.py2
-rw-r--r--engine/SCons/Tool/gnulink.py2
-rw-r--r--engine/SCons/Tool/gs.py2
-rw-r--r--engine/SCons/Tool/gxx.py2
-rw-r--r--engine/SCons/Tool/hpc++.py2
-rw-r--r--engine/SCons/Tool/hpcc.py2
-rw-r--r--engine/SCons/Tool/hpcxx.py2
-rw-r--r--engine/SCons/Tool/hplink.py2
-rw-r--r--engine/SCons/Tool/icc.py2
-rw-r--r--engine/SCons/Tool/icl.py2
-rw-r--r--engine/SCons/Tool/ifl.py2
-rw-r--r--engine/SCons/Tool/ifort.py2
-rw-r--r--engine/SCons/Tool/ilink.py2
-rw-r--r--engine/SCons/Tool/ilink32.py2
-rw-r--r--engine/SCons/Tool/install.py2
-rw-r--r--engine/SCons/Tool/intelc.py6
-rw-r--r--engine/SCons/Tool/ipkg.py2
-rw-r--r--engine/SCons/Tool/jar.py2
-rw-r--r--engine/SCons/Tool/javac.py2
-rw-r--r--engine/SCons/Tool/javah.py2
-rw-r--r--engine/SCons/Tool/latex.py2
-rw-r--r--engine/SCons/Tool/ldc.py2
-rw-r--r--engine/SCons/Tool/lex.py2
-rw-r--r--engine/SCons/Tool/link.py2
-rw-r--r--engine/SCons/Tool/linkloc.py2
-rw-r--r--engine/SCons/Tool/m4.py2
-rw-r--r--engine/SCons/Tool/masm.py2
-rw-r--r--engine/SCons/Tool/midl.py2
-rw-r--r--engine/SCons/Tool/mingw.py2
-rw-r--r--engine/SCons/Tool/msgfmt.py2
-rw-r--r--engine/SCons/Tool/msginit.py2
-rw-r--r--engine/SCons/Tool/msgmerge.py2
-rw-r--r--engine/SCons/Tool/mslib.py2
-rw-r--r--engine/SCons/Tool/mslink.py2
-rw-r--r--engine/SCons/Tool/mssdk.py2
-rw-r--r--engine/SCons/Tool/msvc.py2
-rw-r--r--engine/SCons/Tool/msvs.py8
-rw-r--r--engine/SCons/Tool/mwcc.py2
-rw-r--r--engine/SCons/Tool/mwld.py2
-rw-r--r--engine/SCons/Tool/nasm.py2
-rw-r--r--engine/SCons/Tool/packaging/__init__.py2
-rw-r--r--engine/SCons/Tool/packaging/ipk.py2
-rw-r--r--engine/SCons/Tool/packaging/msi.py4
-rw-r--r--engine/SCons/Tool/packaging/rpm.py2
-rw-r--r--engine/SCons/Tool/packaging/src_tarbz2.py2
-rw-r--r--engine/SCons/Tool/packaging/src_targz.py2
-rw-r--r--engine/SCons/Tool/packaging/src_tarxz.py2
-rw-r--r--engine/SCons/Tool/packaging/src_zip.py2
-rw-r--r--engine/SCons/Tool/packaging/tarbz2.py2
-rw-r--r--engine/SCons/Tool/packaging/targz.py2
-rw-r--r--engine/SCons/Tool/packaging/tarxz.py2
-rw-r--r--engine/SCons/Tool/packaging/zip.py2
-rw-r--r--engine/SCons/Tool/pdf.py2
-rw-r--r--engine/SCons/Tool/pdflatex.py2
-rw-r--r--engine/SCons/Tool/pdftex.py2
-rw-r--r--engine/SCons/Tool/qt.py2
-rw-r--r--engine/SCons/Tool/rmic.py2
-rw-r--r--engine/SCons/Tool/rpcgen.py2
-rw-r--r--engine/SCons/Tool/rpm.py2
-rw-r--r--engine/SCons/Tool/rpmutils.py2
-rw-r--r--engine/SCons/Tool/sgiar.py2
-rw-r--r--engine/SCons/Tool/sgic++.py2
-rw-r--r--engine/SCons/Tool/sgicc.py2
-rw-r--r--engine/SCons/Tool/sgicxx.py2
-rw-r--r--engine/SCons/Tool/sgilink.py2
-rw-r--r--engine/SCons/Tool/sunar.py2
-rw-r--r--engine/SCons/Tool/sunc++.py2
-rw-r--r--engine/SCons/Tool/suncc.py2
-rw-r--r--engine/SCons/Tool/suncxx.py39
-rw-r--r--engine/SCons/Tool/sunf77.py2
-rw-r--r--engine/SCons/Tool/sunf90.py2
-rw-r--r--engine/SCons/Tool/sunf95.py2
-rw-r--r--engine/SCons/Tool/sunlink.py2
-rw-r--r--engine/SCons/Tool/swig.py4
-rw-r--r--engine/SCons/Tool/tar.py2
-rw-r--r--engine/SCons/Tool/tex.py6
-rw-r--r--engine/SCons/Tool/textfile.py2
-rw-r--r--engine/SCons/Tool/tlib.py2
-rw-r--r--engine/SCons/Tool/wix.py2
-rw-r--r--engine/SCons/Tool/xgettext.py2
-rw-r--r--engine/SCons/Tool/yacc.py2
-rw-r--r--engine/SCons/Tool/zip.py2
-rw-r--r--engine/SCons/Util.py2
-rw-r--r--engine/SCons/Variables/BoolVariable.py2
-rw-r--r--engine/SCons/Variables/EnumVariable.py2
-rw-r--r--engine/SCons/Variables/ListVariable.py2
-rw-r--r--engine/SCons/Variables/PackageVariable.py2
-rw-r--r--engine/SCons/Variables/PathVariable.py2
-rw-r--r--engine/SCons/Variables/__init__.py2
-rw-r--r--engine/SCons/Warnings.py20
-rw-r--r--engine/SCons/__init__.py8
-rw-r--r--engine/SCons/compat/__init__.py2
-rw-r--r--engine/SCons/compat/_scons_dbm.py2
-rw-r--r--engine/SCons/cpp.py2
-rw-r--r--engine/SCons/exitfuncs.py2
-rw-r--r--scons-time.148
-rw-r--r--scons.11154
-rw-r--r--sconsign.18
-rwxr-xr-xscript/scons8
-rw-r--r--script/scons-configure-cache8
-rw-r--r--script/scons-time26
-rw-r--r--script/scons.bat4
-rw-r--r--script/sconsign8
-rwxr-xr-xsetup.py4
202 files changed, 1284 insertions, 1216 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 953931b..745bcba 100755
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -4,6 +4,72 @@
Change Log
+NOTE: The 4.0.0 Release of SCons will drop Python 2.7 Support
+
+RELEASE 3.1.2 - Mon, 17 Dec 2019 02:06:27 +0000
+
+ From Edoardo Bezzeccheri
+ - Added debug option "action_timestamps" which outputs to stdout the absolute start and end time for each target.
+
+ From Rob Boehne
+ - Fix suncxx tool (Oracle Studio compiler) when using Python 3. Previously would throw an exception.
+ Resolved by properly handling tool version string output as unicode.
+
+ From Tim Gates
+ - Resolved a typo in engine.SCons.Tool
+
+ From Adam Gross:
+ - Resolved a race condition in multithreaded Windows builds with Python 2
+ in the case where a child process is spawned while a Python action has a
+ file open. Original author: Ryan Beasley.
+
+ From Jason Kenny
+ - Update Command() function to accept target_scanner, source_factory, and target_factory arguments.
+ This makes Command act more like a one-off builder.
+
+ From Ivan Kravets
+ - Added support for "-imacros" to ParseFlags
+
+ From Jacek Kuczera:
+ - Fix CheckFunc detection code for Visual 2019. Some functions
+ (e.g. memmove) were incorrectly recognized as not available.
+
+ From Jakub Kulik
+ - Fix stacktrace when using SCons with Python 3.5+ and SunOS/Solaris related tools.
+
+ From Philipp Maierhöfer:
+ - Avoid crash with UnicodeDecodeError on Python 3 when a Latex log file in
+ non-UTF-8 encoding (e.g. containing umlauts in Latin-1 encoding when
+ the fontenc package is included with \usepackage[T1]{fontenc}) is read.
+
+ From Mathew Robinson:
+ - Improved threading performance by ensuring NodeInfo is shared
+ across threads. Results in ~13% improvement for parallel builds
+ (-j# > 1) with many shared nodes.
+ - Improve performance of Entry.disambiguate() by making check for
+ most common case first, preventing unnecessary IO.
+ - Improved DAG walk performance by reducing unnecessary work when
+ there are no un-visited children.
+
+ From Mats Wichmann
+ - Replace instances of string find method with "in" checks where
+ the index from find() was not used.
+ - CmdStringHolder fix from issue #3428
+ - Turn previously deprecated debug options into failures:
+ --debug=tree, --debug=dtree, --debug=stree, --debug=nomemoizer.
+ - Experimental New Feature: Enable caching MSVC configuration
+ If SCONS_CACHE_MSVC_CONFIG shell environment variable is set,
+ SCons will cache the results of past calls to vcvarsall.bat to
+ a file; integrates with existing memoizing of such vars.
+ On vs2019 saves 5+ seconds per SCons invocation, which really
+ helps test suite runs.
+ - Remove deprecated SourceSignatures, TargetSignatures
+ - Remove deprecated Builder keywords: overrides and scanner
+ - Remove deprecated env.Copy
+ - Remove deprecated BuildDir plus SConscript keyword build_dir
+ - A number of documentation improvements.
+
+
RELEASE 3.1.1 - Mon, 07 Aug 2019 20:09:12 -0500
From William Deegan:
diff --git a/LICENSE.txt b/LICENSE.txt
index 6b6cd6c..67e0e2f 100644
--- a/LICENSE.txt
+++ b/LICENSE.txt
@@ -1,3 +1,5 @@
+MIT License
+
Copyright (c) 2001 - 2019 The SCons Foundation
Permission is hereby granted, free of charge, to any person obtaining
diff --git a/PKG-INFO b/PKG-INFO
index fc3f83e..321323e 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,6 +1,6 @@
Metadata-Version: 1.0
Name: scons
-Version: 3.1.1
+Version: 3.1.2
Summary: Open Source next-generation build tool.
Home-page: http://www.scons.org/
Author: William Deegan
diff --git a/RELEASE.txt b/RELEASE.txt
index db86a71..5f84c9e 100755
--- a/RELEASE.txt
+++ b/RELEASE.txt
@@ -1,73 +1,90 @@
- A new SCons checkpoint release, 3.1.1, is now available
+ A new SCons checkpoint release, 3.1.2, is now available
on the SCons download page:
https://scons.org/pages/download.html
- XXX The primary purpose of this release ... XXX
+ Here is a summary of the changes since 3.1.1:
- A SCons "checkpoint release" is intended to provide early access to
- new features so they can be tested in the field before being released
- for adoption by other software distributions.
-
- Note that a checkpoint release is developed using the same test-driven
- development methodology as all SCons releases. Existing SCons
- functionality should all work as it does in previous releases (except
- for any changes identified in the release notes) and early adopters
- should be able to use a checkpoint release safely for production work
- with existing SConscript files. If not, it represents not only a bug
- in SCons but also a hole in the regression test suite, and we want to
- hear about it.
-
- New features may be more lightly tested than in past releases,
- especially as concerns their interaction with all of the other
- functionality in SCons. We are especially interested in hearing bug
- reports about new functionality.
-
- We do not recommend that downstream distributions (Debian, Fedora,
- etc.) package a checkpoint release, mainly to avoid confusing the
- "public" release numbering with the long checkpoint release names.
-
- Here is a summary of the changes since 1.3.0:
+ NOTE: The 4.0.0 Release of SCons will drop Python 2.7 Support
NEW FUNCTIONALITY
+ - Added debug option "action_timestamps" which outputs to stdout the absolute start and end time for each target.
- - List new features (presumably why a checkpoint is being released)
-
- DEPRECATED FUNCTIONALITY
+ REMOVED FUNCTIONALITY
+ - Turn previously deprecated debug options into failures:
+ --debug=tree, --debug=dtree, --debug=stree, --debug=nomemoizer.
+ - Remove deprecated SourceSignatures, TargetSignatures
+ - Remove deprecated Builder keywords: overrides and scanner
+ - Remove deprecated env.Copy
+ - Remove deprecated BuildDir plus SConscript keyword build_dir
- - List anything that's been deprecated since the last release
CHANGED/ENHANCED EXISTING FUNCTIONALITY
-
- - List modifications to existing features, where the previous behavior
- wouldn't actually be considered a bug
+ - Update Command() function to accept target_scanner, source_factory, and target_factory arguments.
+ This makes Command act more like a one-off builder.
+ - Added support for "-imacros" to ParseFlags
+ - EXPERIMENTAL NEW FEATURE: Enable caching MSVC configuration
+ If SCONS_CACHE_MSVC_CONFIG shell environment variable is set,
+ SCons will cache the results of past calls to vcvarsall.bat to
+ a file; integrates with existing memoizing of such vars.
+ On vs2019 saves 5+ seconds per SCons invocation, which really
+ helps test suite runs.
FIXES
-
- - List fixes of outright bugs
+ - Fix suncxx tool (Oracle Studio compiler) when using Python 3. Previously would throw an exception.
+ Resolved by properly handling tool version string output as unicode.
+ - Resolved a race condition in multithreaded Windows builds with Python 2
+ in the case where a child process is spawned while a Python action has a
+ file open. Original author: Ryan Beasley.
+ - Fix CheckFunc detection code for Visual 2019. Some functions
+ (e.g. memmove) were incorrectly recognized as not available.
+ - Fix stacktrace when using SCons with Python 3.5+ and SunOS/Solaris related tools.
+ - Latex: Avoid crash with UnicodeDecodeError on Python 3 when a Latex log file in
+ non-UTF-8 encoding (e.g. containing umlauts in Latin-1 encoding when
+ the fontenc package is included with \usepackage[T1]{fontenc}) is read.
+ - CmdStringHolder fix from issue #3428
IMPROVEMENTS
+ - Improved threading performance by ensuring NodeInfo is shared
+ across threads. Results in ~13% improvement for parallel builds
+ (-j# > 1) with many shared nodes.
+ - Improve performance of Entry.disambiguate() by making check for
+ most common case first, preventing unnecessary IO.
+ - Improved DAG walk performance by reducing unnecessary work when
+ there are no un-visited children.
- - List improvements that wouldn't be visible to the user in the
- documentation: performance improvements (describe the circumstances
- under which they would be observed), or major code cleanups
PACKAGING
- - List changes in the way SCons is packaged and/or released
+ - N/A
DOCUMENTATION
- - List any significant changes to the documentation (not individual
- typo fixes, even if they're mentioned in src/CHANGES.txt to give
- the contributor credit)
+ - N/A
DEVELOPMENT
- - List visible changes in the way SCons is developed
+ - N/A
+
+
+Thanks to the following developers for their contributions to this release.
+git shortlog --no-merges -ns 3.1.1..HEAD
+ 59 Mats Wichmann
+ 21 William Deegan
+ 8 Edoardo Bezzeccheri
+ 5 Adam Gross
+ 5 maiphi
+ 4 Ivan Kravets
+ 4 Mathew Robinson
+ 2 Jakub Kulík
+ 2 Jacek Kuczera
+ 2 Rob Boehne
+ 2 Jason Kenny
+ 2 Tim Gates
+ 1 Jakub Kulik
+ 1 Theogen Ratkin
+ 1 jw0k
- Thanks to CURLY, LARRY, and MOE for their contributions to this release.
- Contributors are listed alphabetically by their last name.
Copyright (c) 2001 - 2019 The SCons Foundation
-src/RELEASE.txt 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan
+src/RELEASE.txt bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan
diff --git a/engine/SCons/Action.py b/engine/SCons/Action.py
index be4a5ff..b4310f6 100644
--- a/engine/SCons/Action.py
+++ b/engine/SCons/Action.py
@@ -98,7 +98,7 @@ way for wrapping up the functions.
# 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__ = "src/engine/SCons/Action.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Action.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import pickle
diff --git a/engine/SCons/Builder.py b/engine/SCons/Builder.py
index c3bdf5c..e4e5215 100644
--- a/engine/SCons/Builder.py
+++ b/engine/SCons/Builder.py
@@ -98,7 +98,7 @@ There are the following methods for internal use within this module:
# 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__ = "src/engine/SCons/Builder.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Builder.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import collections
@@ -396,16 +396,13 @@ class BuilderBase(object):
self.env = env
self.single_source = single_source
if 'overrides' in overrides:
- SCons.Warnings.warn(SCons.Warnings.DeprecatedBuilderKeywordsWarning,
- "The \"overrides\" keyword to Builder() creation has been deprecated;\n" +\
- "\tspecify the items as keyword arguments to the Builder() call instead.")
- overrides.update(overrides['overrides'])
- del overrides['overrides']
+ msg = "The \"overrides\" keyword to Builder() creation has been removed;\n" +\
+ "\tspecify the items as keyword arguments to the Builder() call instead."
+ raise TypeError(msg)
if 'scanner' in overrides:
- SCons.Warnings.warn(SCons.Warnings.DeprecatedBuilderKeywordsWarning,
- "The \"scanner\" keyword to Builder() creation has been deprecated;\n"
- "\tuse: source_scanner or target_scanner as appropriate.")
- del overrides['scanner']
+ msg = "The \"scanner\" keyword to Builder() creation has been removed;\n" +\
+ "\tuse: source_scanner or target_scanner as appropriate."
+ raise TypeError(msg)
self.overrides = overrides
self.set_suffix(suffix)
diff --git a/engine/SCons/CacheDir.py b/engine/SCons/CacheDir.py
index a1133ae..20a7df4 100644
--- a/engine/SCons/CacheDir.py
+++ b/engine/SCons/CacheDir.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/CacheDir.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/CacheDir.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
CacheDir support
diff --git a/engine/SCons/Conftest.py b/engine/SCons/Conftest.py
index 1163aa3..c24adf8 100644
--- a/engine/SCons/Conftest.py
+++ b/engine/SCons/Conftest.py
@@ -290,6 +290,10 @@ char %s();""" % function_name
#include <assert.h>
%(hdr)s
+#if _MSC_VER && !__INTEL_COMPILER
+ #pragma function(%(name)s)
+#endif
+
int main(void) {
#if defined (__stub_%(name)s) || defined (__stub___%(name)s)
fail fail fail
diff --git a/engine/SCons/Debug.py b/engine/SCons/Debug.py
index 12d07fd..ef7dfff 100644
--- a/engine/SCons/Debug.py
+++ b/engine/SCons/Debug.py
@@ -31,7 +31,7 @@ caller_trace()
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Debug.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Debug.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/engine/SCons/Defaults.py b/engine/SCons/Defaults.py
index 63ba450..c39c417 100644
--- a/engine/SCons/Defaults.py
+++ b/engine/SCons/Defaults.py
@@ -33,7 +33,7 @@ from distutils.msvccompiler.
#
from __future__ import division
-__revision__ = "src/engine/SCons/Defaults.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Defaults.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/engine/SCons/Environment.py b/engine/SCons/Environment.py
index 7a0954d..c51df40 100644
--- a/engine/SCons/Environment.py
+++ b/engine/SCons/Environment.py
@@ -31,7 +31,7 @@ Environment
# 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__ = "src/engine/SCons/Environment.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Environment.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import copy
@@ -46,7 +46,7 @@ import SCons.Builder
import SCons.Debug
from SCons.Debug import logInstanceCreation
import SCons.Defaults
-import SCons.Errors
+from SCons.Errors import UserError, BuildError
import SCons.Memoize
import SCons.Node
import SCons.Node.Alias
@@ -75,11 +75,6 @@ CalculatorArgs = {}
semi_deepcopy = SCons.Util.semi_deepcopy
semi_deepcopy_dict = SCons.Util.semi_deepcopy_dict
-# Pull UserError into the global name space for the benefit of
-# Environment().SourceSignatures(), which has some import statements
-# which seem to mess up its ability to reference SCons directly.
-UserError = SCons.Errors.UserError
-
def alias_builder(env, target, source):
pass
@@ -154,7 +149,7 @@ def _set_BUILDERS(env, key, value):
env._dict[key] = bd
for k, v in value.items():
if not SCons.Builder.is_a_Builder(v):
- raise SCons.Errors.UserError('%s is not a Builder.' % repr(v))
+ raise UserError('%s is not a Builder.' % repr(v))
bd.update(value)
def _del_SCANNERS(env, key):
@@ -431,7 +426,7 @@ class SubstitutionEnvironment(object):
# efficient than calling another function or a method.
if key not in self._dict \
and not _is_valid_var.match(key):
- raise SCons.Errors.UserError("Illegal construction variable `%s'" % key)
+ raise UserError("Illegal construction variable `%s'" % key)
self._dict[key] = value
def get(self, key, default=None):
@@ -707,31 +702,34 @@ class SubstitutionEnvironment(object):
append_next_arg_to = None # for multi-word args
for arg in params:
if append_next_arg_to:
- if append_next_arg_to == 'CPPDEFINES':
- append_define(arg)
- elif append_next_arg_to == '-include':
- t = ('-include', self.fs.File(arg))
- dict['CCFLAGS'].append(t)
- elif append_next_arg_to == '-isysroot':
- t = ('-isysroot', arg)
- dict['CCFLAGS'].append(t)
- dict['LINKFLAGS'].append(t)
- elif append_next_arg_to == '-isystem':
- t = ('-isystem', arg)
- dict['CCFLAGS'].append(t)
- elif append_next_arg_to == '-iquote':
- t = ('-iquote', arg)
- dict['CCFLAGS'].append(t)
- elif append_next_arg_to == '-idirafter':
- t = ('-idirafter', arg)
- dict['CCFLAGS'].append(t)
- elif append_next_arg_to == '-arch':
- t = ('-arch', arg)
- dict['CCFLAGS'].append(t)
- dict['LINKFLAGS'].append(t)
- else:
- dict[append_next_arg_to].append(arg)
- append_next_arg_to = None
+ if append_next_arg_to == 'CPPDEFINES':
+ append_define(arg)
+ elif append_next_arg_to == '-include':
+ t = ('-include', self.fs.File(arg))
+ dict['CCFLAGS'].append(t)
+ elif append_next_arg_to == '-imacros':
+ t = ('-imacros', self.fs.File(arg))
+ dict['CCFLAGS'].append(t)
+ elif append_next_arg_to == '-isysroot':
+ t = ('-isysroot', arg)
+ dict['CCFLAGS'].append(t)
+ dict['LINKFLAGS'].append(t)
+ elif append_next_arg_to == '-isystem':
+ t = ('-isystem', arg)
+ dict['CCFLAGS'].append(t)
+ elif append_next_arg_to == '-iquote':
+ t = ('-iquote', arg)
+ dict['CCFLAGS'].append(t)
+ elif append_next_arg_to == '-idirafter':
+ t = ('-idirafter', arg)
+ dict['CCFLAGS'].append(t)
+ elif append_next_arg_to == '-arch':
+ t = ('-arch', arg)
+ dict['CCFLAGS'].append(t)
+ dict['LINKFLAGS'].append(t)
+ else:
+ dict[append_next_arg_to].append(arg)
+ append_next_arg_to = None
elif not arg[0] in ['-', '+']:
dict['LIBS'].append(self.fs.File(arg))
elif arg == '-dylib_file':
@@ -790,7 +788,7 @@ class SubstitutionEnvironment(object):
elif arg == '-mwindows':
dict['LINKFLAGS'].append(arg)
elif arg[:5] == '-std=':
- if arg[5:].find('++')!=-1:
+ if '++' in arg[5:]:
key='CXXFLAGS'
else:
key='CFLAGS'
@@ -798,7 +796,7 @@ class SubstitutionEnvironment(object):
elif arg[0] == '+':
dict['CCFLAGS'].append(arg)
dict['LINKFLAGS'].append(arg)
- elif arg in ['-include', '-isysroot', '-isystem', '-iquote', '-idirafter', '-arch']:
+ elif arg in ['-include', '-imacros', '-isysroot', '-isystem', '-iquote', '-idirafter', '-arch']:
append_next_arg_to = arg
else:
dict['CCFLAGS'].append(arg)
@@ -1430,14 +1428,6 @@ class Base(SubstitutionEnvironment):
if SCons.Debug.track_instances: logInstanceCreation(self, 'Environment.EnvironmentClone')
return clone
- def Copy(self, *args, **kw):
- global _warn_copy_deprecated
- if _warn_copy_deprecated:
- msg = "The env.Copy() method is deprecated; use the env.Clone() method instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedCopyWarning, msg)
- _warn_copy_deprecated = False
- return self.Clone(*args, **kw)
-
def _changed_build(self, dependency, target, prev_ni, repo_node=None):
if dependency.changed_state(target, prev_ni, repo_node):
return 1
@@ -1493,8 +1483,14 @@ class Base(SubstitutionEnvironment):
self.copy_from_cache = copy_function
+
def Detect(self, progs):
"""Return the first available program in progs.
+
+ :param progs: one or more command names to check for
+ :type progs: str or list
+ :returns str: first name from progs that can be found.
+
"""
if not SCons.Util.is_List(progs):
progs = [ progs ]
@@ -1503,7 +1499,17 @@ class Base(SubstitutionEnvironment):
if path: return prog
return None
+
def Dictionary(self, *args):
+ """Return construction variables from an environment.
+
+ :param *args: (optional) variable names to look up
+ :returns: if args omitted, the dictionary of all constr. vars.
+ If one arg, the corresponding value is returned.
+ If more than one arg, a list of values is returned.
+ :raises KeyError: if any of *args is not in the construction env.
+
+ """
if not args:
return self._dict
dlist = [self._dict[x] for x in args]
@@ -1511,23 +1517,28 @@ class Base(SubstitutionEnvironment):
dlist = dlist[0]
return dlist
- def Dump(self, key = None):
- """
- Using the standard Python pretty printer, return the contents of the
- scons build environment as a string.
- If the key passed in is anything other than None, then that will
- be used as an index into the build environment dictionary and
- whatever is found there will be fed into the pretty printer. Note
- that this key is case sensitive.
+ def Dump(self, key=None):
+ """ Return pretty-printed string of construction variables.
+
+ :param key: if None, format the whole dict of variables.
+ Else look up and format just the value for key.
+
"""
import pprint
pp = pprint.PrettyPrinter(indent=2)
if key:
- dict = self.Dictionary(key)
+ cvars = self.Dictionary(key)
else:
- dict = self.Dictionary()
- return pp.pformat(dict)
+ cvars = self.Dictionary()
+
+ # TODO: pprint doesn't do a nice job on path-style values
+ # if the paths contain spaces (i.e. Windows), because the
+ # algorithm tries to break lines on spaces, while breaking
+ # on the path-separator would be more "natural". Is there
+ # a better way to format those?
+ return pp.pformat(cvars)
+
def FindIxes(self, paths, prefix, suffix):
"""
@@ -1600,7 +1611,7 @@ class Base(SubstitutionEnvironment):
for td in tdlist:
targets.extend(td[0])
if len(targets) > 1:
- raise SCons.Errors.UserError(
+ raise UserError(
"More than one dependency target found in `%s': %s"
% (filename, targets))
for target, depends in tdlist:
@@ -1918,14 +1929,6 @@ class Base(SubstitutionEnvironment):
t.set_always_build()
return tlist
- def BuildDir(self, *args, **kw):
- msg = """BuildDir() and the build_dir keyword have been deprecated;\n\tuse VariantDir() and the variant_dir keyword instead."""
- SCons.Warnings.warn(SCons.Warnings.DeprecatedBuildDirWarning, msg)
- if 'build_dir' in kw:
- kw['variant_dir'] = kw['build_dir']
- del kw['build_dir']
- return self.VariantDir(*args, **kw)
-
def Builder(self, **kw):
nkw = self.subst_kw(kw)
return SCons.Builder.Builder(**nkw)
@@ -1964,13 +1967,42 @@ class Base(SubstitutionEnvironment):
be any type that the Builder constructor will accept
for an action."""
bkw = {
- 'action' : action,
- 'target_factory' : self.fs.Entry,
- 'source_factory' : self.fs.Entry,
+ 'action': action,
+ 'target_factory': self.fs.Entry,
+ 'source_factory': self.fs.Entry,
}
- try: bkw['source_scanner'] = kw['source_scanner']
- except KeyError: pass
- else: del kw['source_scanner']
+ # source scanner
+ try:
+ bkw['source_scanner'] = kw['source_scanner']
+ except KeyError:
+ pass
+ else:
+ del kw['source_scanner']
+
+ # target scanner
+ try:
+ bkw['target_scanner'] = kw['target_scanner']
+ except KeyError:
+ pass
+ else:
+ del kw['target_scanner']
+
+ # source factory
+ try:
+ bkw['source_factory'] = kw['source_factory']
+ except KeyError:
+ pass
+ else:
+ del kw['source_factory']
+
+ # target factory
+ try:
+ bkw['target_factory'] = kw['target_factory']
+ except KeyError:
+ pass
+ else:
+ del kw['target_factory']
+
bld = SCons.Builder.Builder(**bkw)
return bld(self, target, source, **kw)
@@ -2039,7 +2071,7 @@ class Base(SubstitutionEnvironment):
"""
action = self.Action(action, *args, **kw)
result = action([], [], self)
- if isinstance(result, SCons.Errors.BuildError):
+ if isinstance(result, BuildError):
errstr = result.errstr
if result.filename:
errstr = result.filename + ': ' + errstr
@@ -2159,7 +2191,7 @@ class Base(SubstitutionEnvironment):
for side_effect in side_effects:
if side_effect.multiple_side_effect_has_builder():
- raise SCons.Errors.UserError("Multiple ways to build the same target were specified for: %s" % str(side_effect))
+ raise UserError("Multiple ways to build the same target were specified for: %s" % str(side_effect))
side_effect.add_source(targets)
side_effect.side_effect = 1
self.Precious(side_effect)
@@ -2177,24 +2209,6 @@ class Base(SubstitutionEnvironment):
entry.set_src_builder(builder)
return entries
- def SourceSignatures(self, type):
- global _warn_source_signatures_deprecated
- if _warn_source_signatures_deprecated:
- msg = "The env.SourceSignatures() method is deprecated;\n" + \
- "\tconvert your build to use the env.Decider() method instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedSourceSignaturesWarning, msg)
- _warn_source_signatures_deprecated = False
- type = self.subst(type)
- self.src_sig_type = type
- if type == 'MD5':
- if not SCons.Util.md5:
- raise UserError("MD5 signatures are not available in this version of Python.")
- self.decide_source = self._changed_content
- elif type == 'timestamp':
- self.decide_source = self._changed_timestamp_match
- else:
- raise UserError("Unknown source signature type '%s'" % type)
-
def Split(self, arg):
"""This function converts a string or list into a list of strings
or Nodes. This makes things easier for users by allowing files to
@@ -2216,28 +2230,6 @@ class Base(SubstitutionEnvironment):
else:
return [self.subst(arg)]
- def TargetSignatures(self, type):
- global _warn_target_signatures_deprecated
- if _warn_target_signatures_deprecated:
- msg = "The env.TargetSignatures() method is deprecated;\n" + \
- "\tconvert your build to use the env.Decider() method instead."
- SCons.Warnings.warn(SCons.Warnings.DeprecatedTargetSignaturesWarning, msg)
- _warn_target_signatures_deprecated = False
- type = self.subst(type)
- self.tgt_sig_type = type
- if type in ('MD5', 'content'):
- if not SCons.Util.md5:
- raise UserError("MD5 signatures are not available in this version of Python.")
- self.decide_target = self._changed_content
- elif type == 'timestamp':
- self.decide_target = self._changed_timestamp_match
- elif type == 'build':
- self.decide_target = self._changed_build
- elif type == 'source':
- self.decide_target = self._changed_source
- else:
- raise UserError("Unknown target signature type '%s'"%type)
-
def Value(self, value, built_value=None):
"""
"""
@@ -2322,7 +2314,7 @@ class OverrideEnvironment(Base):
return attr.clone(self)
else:
return attr
-
+
def __setattr__(self, name, value):
setattr(self.__dict__['__subject'], name, value)
@@ -2334,7 +2326,7 @@ class OverrideEnvironment(Base):
return self.__dict__['__subject'].__getitem__(key)
def __setitem__(self, key, value):
if not is_valid_construction_var(key):
- raise SCons.Errors.UserError("Illegal construction variable `%s'" % key)
+ raise UserError("Illegal construction variable `%s'" % key)
self.__dict__['overrides'][key] = value
def __delitem__(self, key):
try:
diff --git a/engine/SCons/Errors.py b/engine/SCons/Errors.py
index d6e1d4a..0bad46d 100644
--- a/engine/SCons/Errors.py
+++ b/engine/SCons/Errors.py
@@ -28,7 +28,7 @@ and user errors in SCons.
"""
-__revision__ = "src/engine/SCons/Errors.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Errors.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import shutil
import SCons.Util
diff --git a/engine/SCons/Executor.py b/engine/SCons/Executor.py
index c3e22f5..5c95e95 100644
--- a/engine/SCons/Executor.py
+++ b/engine/SCons/Executor.py
@@ -28,7 +28,7 @@ Nodes.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
-__revision__ = "src/engine/SCons/Executor.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Executor.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import collections
diff --git a/engine/SCons/Job.py b/engine/SCons/Job.py
index a126d1c..214a0c9 100644
--- a/engine/SCons/Job.py
+++ b/engine/SCons/Job.py
@@ -29,7 +29,7 @@ stop, and wait on jobs.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Job.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Job.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/engine/SCons/Memoize.py b/engine/SCons/Memoize.py
index 6bef437..8f33a1b 100644
--- a/engine/SCons/Memoize.py
+++ b/engine/SCons/Memoize.py
@@ -22,7 +22,7 @@
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Memoize.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Memoize.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """Memoizer
diff --git a/engine/SCons/Node/Alias.py b/engine/SCons/Node/Alias.py
index 302a704..5c62677 100644
--- a/engine/SCons/Node/Alias.py
+++ b/engine/SCons/Node/Alias.py
@@ -30,7 +30,7 @@ This creates a hash of global Aliases (dummy targets).
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Node/Alias.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Node/Alias.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import collections
diff --git a/engine/SCons/Node/FS.py b/engine/SCons/Node/FS.py
index 0d903de..65d1ac1 100644
--- a/engine/SCons/Node/FS.py
+++ b/engine/SCons/Node/FS.py
@@ -33,7 +33,7 @@ that can be used by scripts or modules looking for the canonical default.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
-__revision__ = "src/engine/SCons/Node/FS.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Node/FS.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import fnmatch
import os
@@ -963,14 +963,14 @@ class Entry(Base):
def disambiguate(self, must_exist=None):
"""
- """
- if self.isdir():
- self.__class__ = Dir
- self._morph()
- elif self.isfile():
+ """
+ if self.isfile():
self.__class__ = File
self._morph()
self.clear()
+ elif self.isdir():
+ self.__class__ = Dir
+ self._morph()
else:
# There was nothing on-disk at this location, so look in
# the src directory.
diff --git a/engine/SCons/Node/Python.py b/engine/SCons/Node/Python.py
index 8726332..ec23b3f 100644
--- a/engine/SCons/Node/Python.py
+++ b/engine/SCons/Node/Python.py
@@ -27,7 +27,7 @@ Python nodes.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Node/Python.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Node/Python.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Node
diff --git a/engine/SCons/Node/__init__.py b/engine/SCons/Node/__init__.py
index c1f8d89..32f4bba 100644
--- a/engine/SCons/Node/__init__.py
+++ b/engine/SCons/Node/__init__.py
@@ -43,7 +43,7 @@ from __future__ import print_function
# 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__ = "src/engine/SCons/Node/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Node/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import collections
@@ -614,6 +614,7 @@ class Node(object, with_metaclass(NoSlotsPyPy)):
self._func_rexists = 1
self._func_get_contents = 0
self._func_target_from_source = 0
+ self.ninfo = None
self.clear_memoized_values()
@@ -1131,11 +1132,10 @@ class Node(object, with_metaclass(NoSlotsPyPy)):
return ninfo
def get_ninfo(self):
- try:
- return self.ninfo
- except AttributeError:
- self.ninfo = self.new_ninfo()
+ if self.ninfo is not None:
return self.ninfo
+ self.ninfo = self.new_ninfo()
+ return self.ninfo
def new_binfo(self):
binfo = self.BuildInfo()
diff --git a/engine/SCons/PathList.py b/engine/SCons/PathList.py
index 8de79df..ad02936 100644
--- a/engine/SCons/PathList.py
+++ b/engine/SCons/PathList.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/PathList.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/PathList.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """SCons.PathList
diff --git a/engine/SCons/Platform/__init__.py b/engine/SCons/Platform/__init__.py
index 66bff49..2e3d6cd 100644
--- a/engine/SCons/Platform/__init__.py
+++ b/engine/SCons/Platform/__init__.py
@@ -43,7 +43,7 @@ their own platform definition.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Platform/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/engine/SCons/Platform/aix.py b/engine/SCons/Platform/aix.py
index de61c16..c5964b6 100644
--- a/engine/SCons/Platform/aix.py
+++ b/engine/SCons/Platform/aix.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/aix.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/aix.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import subprocess
diff --git a/engine/SCons/Platform/cygwin.py b/engine/SCons/Platform/cygwin.py
index d630be3..fe71ea9 100644
--- a/engine/SCons/Platform/cygwin.py
+++ b/engine/SCons/Platform/cygwin.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/cygwin.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/cygwin.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
diff --git a/engine/SCons/Platform/darwin.py b/engine/SCons/Platform/darwin.py
index a5bfc52..ff0d50d 100644
--- a/engine/SCons/Platform/darwin.py
+++ b/engine/SCons/Platform/darwin.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/darwin.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/darwin.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
import os
diff --git a/engine/SCons/Platform/hpux.py b/engine/SCons/Platform/hpux.py
index d49d1a8..3158438 100644
--- a/engine/SCons/Platform/hpux.py
+++ b/engine/SCons/Platform/hpux.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/hpux.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/hpux.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
diff --git a/engine/SCons/Platform/irix.py b/engine/SCons/Platform/irix.py
index 687f3e1..8643b14 100644
--- a/engine/SCons/Platform/irix.py
+++ b/engine/SCons/Platform/irix.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/irix.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/irix.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
diff --git a/engine/SCons/Platform/mingw.py b/engine/SCons/Platform/mingw.py
index 010e72a..1961606 100644
--- a/engine/SCons/Platform/mingw.py
+++ b/engine/SCons/Platform/mingw.py
@@ -27,7 +27,7 @@ Platform-specific initialization for the MinGW system.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/mingw.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/mingw.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
diff --git a/engine/SCons/Platform/os2.py b/engine/SCons/Platform/os2.py
index bd414cf..eb2c679 100644
--- a/engine/SCons/Platform/os2.py
+++ b/engine/SCons/Platform/os2.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/os2.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/os2.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import win32
def generate(env):
diff --git a/engine/SCons/Platform/posix.py b/engine/SCons/Platform/posix.py
index c1e43ca..c9f9a2d 100644
--- a/engine/SCons/Platform/posix.py
+++ b/engine/SCons/Platform/posix.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/posix.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/posix.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import errno
import os
diff --git a/engine/SCons/Platform/sunos.py b/engine/SCons/Platform/sunos.py
index a9a7d97..90418d5 100644
--- a/engine/SCons/Platform/sunos.py
+++ b/engine/SCons/Platform/sunos.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/sunos.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/sunos.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
diff --git a/engine/SCons/Platform/virtualenv.py b/engine/SCons/Platform/virtualenv.py
index ae3068d..3416b41 100644
--- a/engine/SCons/Platform/virtualenv.py
+++ b/engine/SCons/Platform/virtualenv.py
@@ -26,7 +26,7 @@ Support for virtualenv.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/virtualenv.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/virtualenv.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/engine/SCons/Platform/win32.py b/engine/SCons/Platform/win32.py
index 3eff40f..b386afa 100644
--- a/engine/SCons/Platform/win32.py
+++ b/engine/SCons/Platform/win32.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/win32.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Platform/win32.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
@@ -51,10 +51,6 @@ try:
import msvcrt
import win32api
import win32con
-
- msvcrt.get_osfhandle
- win32api.SetHandleInformation
- win32con.HANDLE_FLAG_INHERIT
except ImportError:
parallel_msg = \
"you do not seem to have the pywin32 extensions installed;\n" + \
@@ -66,28 +62,44 @@ except AttributeError:
else:
parallel_msg = None
- _builtin_open = open
+ if sys.version_info.major == 2:
+ import __builtin__
+
+ _builtin_file = __builtin__.file
+ _builtin_open = __builtin__.open
+
+ def _scons_fixup_mode(mode):
+ """Adjust 'mode' to mark handle as non-inheritable.
+
+ SCons is multithreaded, so allowing handles to be inherited by
+ children opens us up to races, where (e.g.) processes spawned by
+ the Taskmaster may inherit and retain references to files opened
+ by other threads. This may lead to sharing violations and,
+ ultimately, build failures.
+
+ By including 'N' as part of fopen's 'mode' parameter, all file
+ handles returned from these functions are atomically marked as
+ non-inheritable.
+ """
+ if not mode:
+ # Python's default is 'r'.
+ # https://docs.python.org/2/library/functions.html#open
+ mode = 'rN'
+ elif 'N' not in mode:
+ mode += 'N'
+ return mode
- def _scons_open(*args, **kw):
- fp = _builtin_open(*args, **kw)
- win32api.SetHandleInformation(msvcrt.get_osfhandle(fp.fileno()),
- win32con.HANDLE_FLAG_INHERIT,
- 0)
- return fp
+ class _scons_file(_builtin_file):
+ def __init__(self, name, mode=None, *args, **kwargs):
+ _builtin_file.__init__(self, name, _scons_fixup_mode(mode),
+ *args, **kwargs)
- open = _scons_open
+ def _scons_open(name, mode=None, *args, **kwargs):
+ return _builtin_open(name, _scons_fixup_mode(mode),
+ *args, **kwargs)
- if sys.version_info.major == 2:
- _builtin_file = file
- class _scons_file(_builtin_file):
- def __init__(self, *args, **kw):
- _builtin_file.__init__(self, *args, **kw)
- win32api.SetHandleInformation(msvcrt.get_osfhandle(self.fileno()),
- win32con.HANDLE_FLAG_INHERIT, 0)
- file = _scons_file
- else:
- # No longer needed for python 3.4 and above. Files are opened non sharable
- pass
+ __builtin__.file = _scons_file
+ __builtin__.open = _scons_open
diff --git a/engine/SCons/SConf.py b/engine/SCons/SConf.py
index c6bbda6..e714636 100644
--- a/engine/SCons/SConf.py
+++ b/engine/SCons/SConf.py
@@ -35,7 +35,7 @@ libraries are installed, if some command line options are supported etc.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/SConf.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/SConf.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/engine/SCons/SConsign.py b/engine/SCons/SConsign.py
index 157468f..24bfd21 100644
--- a/engine/SCons/SConsign.py
+++ b/engine/SCons/SConsign.py
@@ -29,7 +29,7 @@ Writing and reading information to the .sconsign file or files.
from __future__ import print_function
-__revision__ = "src/engine/SCons/SConsign.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/SConsign.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/engine/SCons/Scanner/C.py b/engine/SCons/Scanner/C.py
index d3df545..32e0499 100644
--- a/engine/SCons/Scanner/C.py
+++ b/engine/SCons/Scanner/C.py
@@ -27,7 +27,7 @@ This module implements the dependency scanner for C/C++ code.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/C.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/C.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Node.FS
import SCons.Scanner
diff --git a/engine/SCons/Scanner/D.py b/engine/SCons/Scanner/D.py
index aa018d6..427c596 100644
--- a/engine/SCons/Scanner/D.py
+++ b/engine/SCons/Scanner/D.py
@@ -30,7 +30,7 @@ Coded by Andy Friesen
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/D.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/D.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Scanner
diff --git a/engine/SCons/Scanner/Dir.py b/engine/SCons/Scanner/Dir.py
index 0c08820..c3e825c 100644
--- a/engine/SCons/Scanner/Dir.py
+++ b/engine/SCons/Scanner/Dir.py
@@ -20,7 +20,7 @@
# 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__ = "src/engine/SCons/Scanner/Dir.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/Dir.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Node.FS
import SCons.Scanner
diff --git a/engine/SCons/Scanner/Fortran.py b/engine/SCons/Scanner/Fortran.py
index 50cc16e..93be76c 100644
--- a/engine/SCons/Scanner/Fortran.py
+++ b/engine/SCons/Scanner/Fortran.py
@@ -26,7 +26,7 @@ This module implements the dependency scanner for Fortran code.
# 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__ = "src/engine/SCons/Scanner/Fortran.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/Fortran.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/engine/SCons/Scanner/IDL.py b/engine/SCons/Scanner/IDL.py
index 65704d8..6569c1f 100644
--- a/engine/SCons/Scanner/IDL.py
+++ b/engine/SCons/Scanner/IDL.py
@@ -28,7 +28,7 @@ Definition Language) files.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/IDL.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/IDL.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Node.FS
import SCons.Scanner
diff --git a/engine/SCons/Scanner/LaTeX.py b/engine/SCons/Scanner/LaTeX.py
index 37970d0..4e43eaa 100644
--- a/engine/SCons/Scanner/LaTeX.py
+++ b/engine/SCons/Scanner/LaTeX.py
@@ -27,7 +27,7 @@ This module implements the dependency scanner for LaTeX code.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/LaTeX.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/LaTeX.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/engine/SCons/Scanner/Prog.py b/engine/SCons/Scanner/Prog.py
index 4a5e478..5f9015d 100644
--- a/engine/SCons/Scanner/Prog.py
+++ b/engine/SCons/Scanner/Prog.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/Prog.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/Prog.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Node
import SCons.Node.FS
diff --git a/engine/SCons/Scanner/RC.py b/engine/SCons/Scanner/RC.py
index 2bfdfc9..47c6ca2 100644
--- a/engine/SCons/Scanner/RC.py
+++ b/engine/SCons/Scanner/RC.py
@@ -28,7 +28,7 @@ Definition Language) files.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/RC.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/RC.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/engine/SCons/Scanner/SWIG.py b/engine/SCons/Scanner/SWIG.py
index 26f5080..7ff78a6 100644
--- a/engine/SCons/Scanner/SWIG.py
+++ b/engine/SCons/Scanner/SWIG.py
@@ -27,7 +27,7 @@ This module implements the dependency scanner for SWIG code.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/SWIG.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/SWIG.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Scanner
diff --git a/engine/SCons/Scanner/__init__.py b/engine/SCons/Scanner/__init__.py
index f2fa418..9884533 100644
--- a/engine/SCons/Scanner/__init__.py
+++ b/engine/SCons/Scanner/__init__.py
@@ -27,7 +27,7 @@ The Scanner package for the SCons software construction utility.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/engine/SCons/Script/Interactive.py b/engine/SCons/Script/Interactive.py
index c756461..b2c134c 100644
--- a/engine/SCons/Script/Interactive.py
+++ b/engine/SCons/Script/Interactive.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
-__revision__ = "src/engine/SCons/Script/Interactive.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Script/Interactive.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
SCons interactive mode
diff --git a/engine/SCons/Script/Main.py b/engine/SCons/Script/Main.py
index 663e337..5b7406c 100644
--- a/engine/SCons/Script/Main.py
+++ b/engine/SCons/Script/Main.py
@@ -38,7 +38,7 @@ deprecated_python_version = (2, 7, 0)
# 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__ = "src/engine/SCons/Script/Main.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Script/Main.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
@@ -75,6 +75,7 @@ print_objects = 0
print_memoizer = 0
print_stacktrace = 0
print_time = 0
+print_action_timestamps = 0
sconscript_time = 0
cumulative_command_time = 0
exit_status = 0 # final exit status, assume success by default
@@ -209,6 +210,9 @@ class BuildTask(SCons.Taskmaster.OutOfDateTask):
finish_time = time.time()
last_command_end = finish_time
cumulative_command_time = cumulative_command_time+finish_time-start_time
+ if print_action_timestamps:
+ sys.stdout.write("Command execution start timestamp: %s: %f\n"%(str(self.node), start_time))
+ sys.stdout.write("Command execution end timestamp: %s: %f\n"%(str(self.node), finish_time))
sys.stdout.write("Command execution time: %s: %f seconds\n"%(str(self.node), finish_time-start_time))
def do_failed(self, status=2):
@@ -636,7 +640,7 @@ def _SConstruct_exists(dirname='', repositories=[], filelist=None):
return None
def _set_debug_values(options):
- global print_memoizer, print_objects, print_stacktrace, print_time
+ global print_memoizer, print_objects, print_stacktrace, print_time, print_action_timestamps
debug_values = options.debug
@@ -674,6 +678,9 @@ def _set_debug_values(options):
options.tree_printers.append(TreePrinter(status=True))
if "time" in debug_values:
print_time = 1
+ if "action-timestamps" in debug_values:
+ print_time = 1
+ print_action_timestamps = 1
if "tree" in debug_values:
options.tree_printers.append(TreePrinter())
if "prepare" in debug_values:
diff --git a/engine/SCons/Script/SConsOptions.py b/engine/SCons/Script/SConsOptions.py
index ae08d41..e7a3fc1 100644
--- a/engine/SCons/Script/SConsOptions.py
+++ b/engine/SCons/Script/SConsOptions.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Script/SConsOptions.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Script/SConsOptions.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import optparse
import re
@@ -584,9 +584,15 @@ def Parser(version):
help="Print build actions for files from CacheDir.")
def opt_invalid(group, value, options):
+ """report an invalid option from a group"""
errmsg = "`%s' is not a valid %s option type, try:\n" % (value, group)
return errmsg + " %s" % ", ".join(options)
+ def opt_invalid_rm(group, value, msg):
+ """report an invalid option from a group: recognized but removed"""
+ errmsg = "`%s' is not a valid %s option type " % (value, group)
+ return errmsg + msg
+
config_options = ["auto", "force" ,"cache"]
opt_config_help = "Controls Configure subsystem: %s." \
@@ -604,9 +610,11 @@ def Parser(version):
help="Search up directory tree for SConstruct, "
"build all Default() targets.")
- deprecated_debug_options = {
+ deprecated_debug_options = {}
+
+ removed_debug_options = {
"dtree" : '; please use --tree=derived instead',
- "nomemoizer" : ' and has no effect',
+ "nomemoizer" : '; there is no replacement',
"stree" : '; please use --tree=all,status instead',
"tree" : '; please use --tree=all instead',
}
@@ -614,15 +622,16 @@ def Parser(version):
debug_options = ["count", "duplicate", "explain", "findlibs",
"includes", "memoizer", "memory", "objects",
"pdb", "prepare", "presub", "stacktrace",
- "time"]
+ "time", "action-timestamps"]
def opt_debug(option, opt, value__, parser,
debug_options=debug_options,
- deprecated_debug_options=deprecated_debug_options):
+ deprecated_debug_options=deprecated_debug_options,
+ removed_debug_options=removed_debug_options):
for value in value__.split(','):
if value in debug_options:
parser.values.debug.append(value)
- elif value in list(deprecated_debug_options.keys()):
+ elif value in deprecated_debug_options:
parser.values.debug.append(value)
try:
parser.values.delayed_warnings
@@ -632,6 +641,9 @@ def Parser(version):
w = "The --debug=%s option is deprecated%s." % (value, msg)
t = (SCons.Warnings.DeprecatedDebugOptionsWarning, w)
parser.values.delayed_warnings.append(t)
+ elif value in removed_debug_options:
+ msg = removed_debug_options[value]
+ raise OptionValueError(opt_invalid_rm('debug', value, msg))
else:
raise OptionValueError(opt_invalid('debug', value, debug_options))
diff --git a/engine/SCons/Script/SConscript.py b/engine/SCons/Script/SConscript.py
index c0a75f2..97073ba 100644
--- a/engine/SCons/Script/SConscript.py
+++ b/engine/SCons/Script/SConscript.py
@@ -27,7 +27,7 @@ files.
# 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__ = "src/engine/SCons/Script/SConscript.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Script/SConscript.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons
import SCons.Action
@@ -42,7 +42,7 @@ import SCons.Platform
import SCons.SConf
import SCons.Script.Main
import SCons.Tool
-import SCons.Util
+from SCons.Util import is_List, is_String, is_Dict, flatten
from . import Main
@@ -98,7 +98,7 @@ def compute_exports(exports):
retval = {}
try:
for export in exports:
- if SCons.Util.is_Dict(export):
+ if is_Dict(export):
retval.update(export)
else:
try:
@@ -133,7 +133,7 @@ call_stack = []
def Return(*vars, **kw):
retval = []
try:
- fvars = SCons.Util.flatten(vars)
+ fvars = flatten(vars)
for var in fvars:
for v in var.split():
retval.append(call_stack[-1].globals[v])
@@ -420,7 +420,7 @@ class SConsEnvironment(SCons.Environment.Base):
except KeyError:
raise SCons.Errors.UserError("Invalid SConscript usage - no parameters")
- if not SCons.Util.is_List(dirs):
+ if not is_List(dirs):
dirs = [ dirs ]
dirs = list(map(str, dirs))
@@ -441,13 +441,13 @@ class SConsEnvironment(SCons.Environment.Base):
raise SCons.Errors.UserError("Invalid SConscript() usage - too many arguments")
- if not SCons.Util.is_List(files):
+ if not is_List(files):
files = [ files ]
if kw.get('exports'):
exports.extend(self.Split(kw['exports']))
- variant_dir = kw.get('variant_dir') or kw.get('build_dir')
+ variant_dir = kw.get('variant_dir')
if variant_dir:
if len(files) != 1:
raise SCons.Errors.UserError("Invalid SConscript() usage - can only specify one SConscript with a variant_dir")
@@ -577,9 +577,6 @@ class SConsEnvironment(SCons.Environment.Base):
UserError: a script is not found and such exceptions are enabled.
"""
- if 'build_dir' in kw:
- msg = """The build_dir keyword has been deprecated; use the variant_dir keyword instead."""
- SCons.Warnings.warn(SCons.Warnings.DeprecatedBuildDirWarning, msg)
def subst_element(x, subst=self.subst):
if SCons.Util.is_List(x):
x = list(map(subst, x))
@@ -589,15 +586,10 @@ class SConsEnvironment(SCons.Environment.Base):
ls = list(map(subst_element, ls))
subst_kw = {}
for key, val in kw.items():
- if SCons.Util.is_String(val):
+ if is_String(val):
val = self.subst(val)
elif SCons.Util.is_List(val):
- result = []
- for v in val:
- if SCons.Util.is_String(v):
- v = self.subst(v)
- result.append(v)
- val = result
+ val = [self.subst(v) if is_String(v) else v for v in val]
subst_kw[key] = val
files, exports = self._get_SConscript_filenames(ls, subst_kw)
diff --git a/engine/SCons/Script/__init__.py b/engine/SCons/Script/__init__.py
index cb44f2b..5292c10 100644
--- a/engine/SCons/Script/__init__.py
+++ b/engine/SCons/Script/__init__.py
@@ -34,7 +34,7 @@ it goes here.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Script/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Script/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import time
start_time = time.time()
@@ -314,7 +314,6 @@ GlobalDefaultEnvironmentFunctions = [
'AddPreAction',
'Alias',
'AlwaysBuild',
- 'BuildDir',
'CacheDir',
'Clean',
#The Command() method is handled separately, below.
@@ -346,10 +345,8 @@ GlobalDefaultEnvironmentFunctions = [
'SConsignFile',
'SideEffect',
'SourceCode',
- 'SourceSignatures',
'Split',
'Tag',
- 'TargetSignatures',
'Value',
'VariantDir',
]
diff --git a/engine/SCons/Subst.py b/engine/SCons/Subst.py
index 618adf5..23030f4 100644
--- a/engine/SCons/Subst.py
+++ b/engine/SCons/Subst.py
@@ -26,7 +26,7 @@ SCons string substitution.
# 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__ = "src/engine/SCons/Subst.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Subst.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import collections
import re
@@ -409,7 +409,7 @@ def scons_subst(strSubst, env, mode=SUBST_RAW, target=None, source=None, gvars={
handles separating command lines into lists of arguments, so see
that function if that's what you're looking for.
"""
- if isinstance(strSubst, str) and strSubst.find('$') < 0:
+ if (isinstance(strSubst, str) and '$' not in strSubst) or isinstance(strSubst, CmdStringHolder):
return strSubst
class StringSubber(object):
diff --git a/engine/SCons/Taskmaster.py b/engine/SCons/Taskmaster.py
index 421e2b2..60d2ac3 100644
--- a/engine/SCons/Taskmaster.py
+++ b/engine/SCons/Taskmaster.py
@@ -54,7 +54,7 @@ __doc__ = """
target(s) that it decides need to be evaluated and/or built.
"""
-__revision__ = "src/engine/SCons/Taskmaster.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Taskmaster.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from itertools import chain
import operator
@@ -874,8 +874,10 @@ class Taskmaster(object):
# These nodes have not even been visited yet. Add
# them to the list so that on some next pass we can
# take a stab at evaluating them (or their children).
- children_not_visited.reverse()
- self.candidates.extend(self.order(children_not_visited))
+ if children_not_visited:
+ if len(children_not_visited) > 1:
+ children_not_visited.reverse()
+ self.candidates.extend(self.order(children_not_visited))
# if T and children_not_visited:
# T.write(self.trace_message(' adding to candidates: %s' % map(str, children_not_visited)))
diff --git a/engine/SCons/Tool/386asm.py b/engine/SCons/Tool/386asm.py
index 16f5beb..d398f07 100644
--- a/engine/SCons/Tool/386asm.py
+++ b/engine/SCons/Tool/386asm.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/386asm.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/386asm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.PharLapCommon import addPharLapPaths
import SCons.Util
diff --git a/engine/SCons/Tool/DCommon.py b/engine/SCons/Tool/DCommon.py
index fca89a1..0e0cf09 100644
--- a/engine/SCons/Tool/DCommon.py
+++ b/engine/SCons/Tool/DCommon.py
@@ -31,7 +31,7 @@ Coded by Russel Winder (russel@winder.org.uk)
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/DCommon.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/DCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/FortranCommon.py b/engine/SCons/Tool/FortranCommon.py
index a5201bb..af573fa 100644
--- a/engine/SCons/Tool/FortranCommon.py
+++ b/engine/SCons/Tool/FortranCommon.py
@@ -28,7 +28,7 @@ Stuff for processing Fortran, common to all fortran dialects.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/FortranCommon.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/FortranCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
import os.path
diff --git a/engine/SCons/Tool/GettextCommon.py b/engine/SCons/Tool/GettextCommon.py
index 0578108..f03c256 100644
--- a/engine/SCons/Tool/GettextCommon.py
+++ b/engine/SCons/Tool/GettextCommon.py
@@ -24,7 +24,7 @@ Used by several tools of `gettext` toolset.
# 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__ = "src/engine/SCons/Tool/GettextCommon.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/GettextCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Warnings
import re
diff --git a/engine/SCons/Tool/JavaCommon.py b/engine/SCons/Tool/JavaCommon.py
index 6091fdf..f9e3684 100644
--- a/engine/SCons/Tool/JavaCommon.py
+++ b/engine/SCons/Tool/JavaCommon.py
@@ -27,7 +27,7 @@ Stuff for processing Java.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/JavaCommon.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/JavaCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/MSCommon/__init__.py b/engine/SCons/Tool/MSCommon/__init__.py
index 67b5be8..c184aad 100644
--- a/engine/SCons/Tool/MSCommon/__init__.py
+++ b/engine/SCons/Tool/MSCommon/__init__.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/MSCommon/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
Common functions for Microsoft Visual Studio and Visual C/C++.
diff --git a/engine/SCons/Tool/MSCommon/arch.py b/engine/SCons/Tool/MSCommon/arch.py
index 4475af1..75e7264 100644
--- a/engine/SCons/Tool/MSCommon/arch.py
+++ b/engine/SCons/Tool/MSCommon/arch.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/MSCommon/arch.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/arch.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """Module to define supported Windows chip architectures.
"""
diff --git a/engine/SCons/Tool/MSCommon/common.py b/engine/SCons/Tool/MSCommon/common.py
index 428eaba..6f979e6 100644
--- a/engine/SCons/Tool/MSCommon/common.py
+++ b/engine/SCons/Tool/MSCommon/common.py
@@ -25,31 +25,67 @@ Common helper functions for working with the Microsoft tool chain.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/MSCommon/common.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/common.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import copy
+import json
import os
-import subprocess
import re
+import subprocess
+import sys
import SCons.Util
+# SCONS_MSCOMMON_DEBUG is internal-use so undocumented:
+# set to '-' to print to console, else set to filename to log to
LOGFILE = os.environ.get('SCONS_MSCOMMON_DEBUG')
if LOGFILE == '-':
def debug(message):
print(message)
elif LOGFILE:
- try:
- import logging
- except ImportError:
- debug = lambda message: open(LOGFILE, 'a').write(message + '\n')
- else:
- logging.basicConfig(filename=LOGFILE, level=logging.DEBUG)
- debug = logging.getLogger(name=__name__).debug
+ import logging
+ logging.basicConfig(
+ format='%(relativeCreated)05dms:pid%(process)05d:MSCommon/%(filename)s:%(message)s',
+ filename=LOGFILE,
+ level=logging.DEBUG)
+ debug = logging.getLogger(name=__name__).debug
else:
debug = lambda x: None
+# SCONS_CACHE_MSVC_CONFIG is public, and is documented.
+CONFIG_CACHE = os.environ.get('SCONS_CACHE_MSVC_CONFIG')
+if CONFIG_CACHE in ('1', 'true', 'True'):
+ CONFIG_CACHE = os.path.join(os.path.expanduser('~'), '.scons_msvc_cache')
+
+def read_script_env_cache():
+ """ fetch cached msvc env vars if requested, else return empty dict """
+ envcache = {}
+ if CONFIG_CACHE:
+ try:
+ with open(CONFIG_CACHE, 'r') as f:
+ envcache = json.load(f)
+ #TODO can use more specific FileNotFoundError when py2 dropped
+ except IOError:
+ # don't fail if no cache file, just proceed without it
+ pass
+ return envcache
+
+
+def write_script_env_cache(cache):
+ """ write out cache of msvc env vars if requested """
+ if CONFIG_CACHE:
+ try:
+ with open(CONFIG_CACHE, 'w') as f:
+ json.dump(cache, f, indent=2)
+ except TypeError:
+ # data can't serialize to json, don't leave partial file
+ os.remove(CONFIG_CACHE)
+ except IOError:
+ # can't write the file, just skip
+ pass
+
+
_is_win64 = None
def is_win64():
@@ -199,7 +235,6 @@ def get_output(vcbat, args = None, env = None):
if stderr:
# TODO: find something better to do with stderr;
# this at least prevents errors from getting swallowed.
- import sys
sys.stderr.write(stderr)
if popen.wait() != 0:
raise IOError(stderr.decode("mbcs"))
@@ -207,14 +242,15 @@ def get_output(vcbat, args = None, env = None):
output = stdout.decode("mbcs")
return output
-def parse_output(output, keep=("INCLUDE", "LIB", "LIBPATH", "PATH", 'VSCMD_ARG_app_plat')):
+KEEPLIST = ("INCLUDE", "LIB", "LIBPATH", "PATH", 'VSCMD_ARG_app_plat')
+def parse_output(output, keep=KEEPLIST):
"""
Parse output from running visual c++/studios vcvarsall.bat and running set
To capture the values listed in keep
"""
# dkeep is a dict associating key: path_list, where key is one item from
- # keep, and pat_list the associated list of paths
+ # keep, and path_list the associated list of paths
dkeep = dict([(i, []) for i in keep])
# rdk will keep the regex to match the .bat file output line starts
diff --git a/engine/SCons/Tool/MSCommon/netframework.py b/engine/SCons/Tool/MSCommon/netframework.py
index 0ba84a5..c2d5d7c 100644
--- a/engine/SCons/Tool/MSCommon/netframework.py
+++ b/engine/SCons/Tool/MSCommon/netframework.py
@@ -20,7 +20,7 @@
# 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__ = "src/engine/SCons/Tool/MSCommon/netframework.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/netframework.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
"""
diff --git a/engine/SCons/Tool/MSCommon/sdk.py b/engine/SCons/Tool/MSCommon/sdk.py
index a2adf3d..811ee24 100644
--- a/engine/SCons/Tool/MSCommon/sdk.py
+++ b/engine/SCons/Tool/MSCommon/sdk.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-__revision__ = "src/engine/SCons/Tool/MSCommon/sdk.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/sdk.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """Module to detect the Platform/Windows SDK
@@ -118,11 +118,11 @@ class SDKDefinition(object):
if (host_arch != target_arch):
arch_string='%s_%s'%(host_arch,target_arch)
- debug("sdk.py: get_sdk_vc_script():arch_string:%s host_arch:%s target_arch:%s"%(arch_string,
+ debug("get_sdk_vc_script():arch_string:%s host_arch:%s target_arch:%s"%(arch_string,
host_arch,
target_arch))
file=self.vc_setup_scripts.get(arch_string,None)
- debug("sdk.py: get_sdk_vc_script():file:%s"%file)
+ debug("get_sdk_vc_script():file:%s"%file)
return file
class WindowsSDK(SDKDefinition):
@@ -286,14 +286,14 @@ InstalledSDKMap = None
def get_installed_sdks():
global InstalledSDKList
global InstalledSDKMap
- debug('sdk.py:get_installed_sdks()')
+ debug('get_installed_sdks()')
if InstalledSDKList is None:
InstalledSDKList = []
InstalledSDKMap = {}
for sdk in SupportedSDKList:
- debug('MSCommon/sdk.py: trying to find SDK %s' % sdk.version)
+ debug('trying to find SDK %s' % sdk.version)
if sdk.get_sdk_dir():
- debug('MSCommon/sdk.py:found SDK %s' % sdk.version)
+ debug('found SDK %s' % sdk.version)
InstalledSDKList.append(sdk)
InstalledSDKMap[sdk.version] = sdk
return InstalledSDKList
@@ -346,13 +346,13 @@ def get_default_sdk():
return InstalledSDKList[0]
def mssdk_setup_env(env):
- debug('sdk.py:mssdk_setup_env()')
+ debug('mssdk_setup_env()')
if 'MSSDK_DIR' in env:
sdk_dir = env['MSSDK_DIR']
if sdk_dir is None:
return
sdk_dir = env.subst(sdk_dir)
- debug('sdk.py:mssdk_setup_env: Using MSSDK_DIR:{}'.format(sdk_dir))
+ debug('mssdk_setup_env: Using MSSDK_DIR:{}'.format(sdk_dir))
elif 'MSSDK_VERSION' in env:
sdk_version = env['MSSDK_VERSION']
if sdk_version is None:
@@ -364,22 +364,22 @@ def mssdk_setup_env(env):
msg = "SDK version %s is not installed" % sdk_version
raise SCons.Errors.UserError(msg)
sdk_dir = mssdk.get_sdk_dir()
- debug('sdk.py:mssdk_setup_env: Using MSSDK_VERSION:%s'%sdk_dir)
+ debug('mssdk_setup_env: Using MSSDK_VERSION:%s'%sdk_dir)
elif 'MSVS_VERSION' in env:
msvs_version = env['MSVS_VERSION']
- debug('sdk.py:mssdk_setup_env:Getting MSVS_VERSION from env:%s'%msvs_version)
+ debug('mssdk_setup_env:Getting MSVS_VERSION from env:%s'%msvs_version)
if msvs_version is None:
- debug('sdk.py:mssdk_setup_env thinks msvs_version is None')
+ debug('mssdk_setup_env thinks msvs_version is None')
return
msvs_version = env.subst(msvs_version)
from . import vs
msvs = vs.get_vs_by_version(msvs_version)
- debug('sdk.py:mssdk_setup_env:msvs is :%s'%msvs)
+ debug('mssdk_setup_env:msvs is :%s'%msvs)
if not msvs:
- debug('sdk.py:mssdk_setup_env: no VS version detected, bailingout:%s'%msvs)
+ debug('mssdk_setup_env: no VS version detected, bailingout:%s'%msvs)
return
sdk_version = msvs.sdk_version
- debug('sdk.py:msvs.sdk_version is %s'%sdk_version)
+ debug('msvs.sdk_version is %s'%sdk_version)
if not sdk_version:
return
mssdk = get_sdk_by_version(sdk_version)
@@ -388,13 +388,13 @@ def mssdk_setup_env(env):
if not mssdk:
return
sdk_dir = mssdk.get_sdk_dir()
- debug('sdk.py:mssdk_setup_env: Using MSVS_VERSION:%s'%sdk_dir)
+ debug('mssdk_setup_env: Using MSVS_VERSION:%s'%sdk_dir)
else:
mssdk = get_default_sdk()
if not mssdk:
return
sdk_dir = mssdk.get_sdk_dir()
- debug('sdk.py:mssdk_setup_env: not using any env values. sdk_dir:%s'%sdk_dir)
+ debug('mssdk_setup_env: not using any env values. sdk_dir:%s'%sdk_dir)
set_sdk_by_directory(env, sdk_dir)
diff --git a/engine/SCons/Tool/MSCommon/vc.py b/engine/SCons/Tool/MSCommon/vc.py
index f0ae946..6d0a7ec 100644
--- a/engine/SCons/Tool/MSCommon/vc.py
+++ b/engine/SCons/Tool/MSCommon/vc.py
@@ -30,7 +30,7 @@
# * test on 64 bits XP + VS 2005 (and VS 6 if possible)
# * SDK
# * Assembly
-__revision__ = "src/engine/SCons/Tool/MSCommon/vc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/vc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """Module for Visual C/C++ detection and configuration.
"""
@@ -40,7 +40,10 @@ import SCons.Util
import subprocess
import os
import platform
+import sys
from string import digits as string_digits
+if sys.version_info[0] == 2:
+ import collections
import SCons.Warnings
from SCons.Tool import find_program_path
@@ -152,22 +155,24 @@ def get_msvc_version_numeric(msvc_version):
return ''.join([x for x in msvc_version if x in string_digits + '.'])
def get_host_target(env):
- debug('vc.py:get_host_target()')
+ debug('get_host_target()')
host_platform = env.get('HOST_ARCH')
if not host_platform:
host_platform = platform.machine()
- # TODO(2.5): the native Python platform.machine() function returns
- # '' on all Python versions before 2.6, after which it also uses
- # PROCESSOR_ARCHITECTURE.
- if not host_platform:
- host_platform = os.environ.get('PROCESSOR_ARCHITECTURE', '')
+
+ # Solaris returns i86pc for both 32 and 64 bit architectures
+ if host_platform == "i86pc":
+ if platform.architecture()[0] == "64bit":
+ host_platform = "amd64"
+ else:
+ host_platform = "x86"
# Retain user requested TARGET_ARCH
req_target_platform = env.get('TARGET_ARCH')
- debug('vc.py:get_host_target() req_target_platform:%s'%req_target_platform)
+ debug('get_host_target() req_target_platform:%s'%req_target_platform)
- if req_target_platform:
+ if req_target_platform:
# If user requested a specific platform then only try that one.
target_platform = req_target_platform
else:
@@ -403,7 +408,7 @@ def find_batch_file(env,msvc_version,host_arch,target_arch):
if pdir is None:
raise NoVersionFound("No version of Visual Studio found")
- debug('vc.py: find_batch_file() in {}'.format(pdir))
+ debug('find_batch_file() in {}'.format(pdir))
# filter out e.g. "Exp" from the version name
msvc_ver_numeric = get_msvc_version_numeric(msvc_version)
@@ -423,17 +428,17 @@ def find_batch_file(env,msvc_version,host_arch,target_arch):
debug("Not found: %s" % batfilename)
batfilename = None
- installed_sdks=get_installed_sdks()
+ installed_sdks = get_installed_sdks()
for _sdk in installed_sdks:
sdk_bat_file = _sdk.get_sdk_vc_script(host_arch,target_arch)
if not sdk_bat_file:
- debug("vc.py:find_batch_file() not found:%s"%_sdk)
+ debug("find_batch_file() not found:%s"%_sdk)
else:
sdk_bat_file_path = os.path.join(pdir,sdk_bat_file)
if os.path.exists(sdk_bat_file_path):
- debug('vc.py:find_batch_file() sdk_bat_file_path:%s'%sdk_bat_file_path)
- return (batfilename,sdk_bat_file_path)
- return (batfilename,None)
+ debug('find_batch_file() sdk_bat_file_path:%s'%sdk_bat_file_path)
+ return (batfilename, sdk_bat_file_path)
+ return (batfilename, None)
__INSTALLED_VCS_RUN = None
@@ -592,21 +597,57 @@ def reset_installed_vcs():
# env2 = Environment(tools='msvs')
# we can greatly improve the speed of the second and subsequent Environment
# (or Clone) calls by memoizing the environment variables set by vcvars*.bat.
-script_env_stdout_cache = {}
+#
+# Updated: by 2018, vcvarsall.bat had gotten so expensive (vs2017 era)
+# it was breaking CI builds because the test suite starts scons so many
+# times and the existing memo logic only helped with repeated calls
+# within the same scons run. Windows builds on the CI system were split
+# into chunks to get around single-build time limits.
+# With VS2019 it got even slower and an optional persistent cache file
+# was introduced. The cache now also stores only the parsed vars,
+# not the entire output of running the batch file - saves a bit
+# of time not parsing every time.
+
+script_env_cache = None
+
def script_env(script, args=None):
- cache_key = (script, args)
- stdout = script_env_stdout_cache.get(cache_key, None)
- if stdout is None:
+ global script_env_cache
+
+ if script_env_cache is None:
+ script_env_cache = common.read_script_env_cache()
+ cache_key = "{}--{}".format(script, args)
+ cache_data = script_env_cache.get(cache_key, None)
+ if cache_data is None:
stdout = common.get_output(script, args)
- script_env_stdout_cache[cache_key] = stdout
- # Stupid batch files do not set return code: we take a look at the
- # beginning of the output for an error message instead
- olines = stdout.splitlines()
- if olines[0].startswith("The specified configuration type is missing"):
- raise BatchFileExecutionError("\n".join(olines[:2]))
+ # Stupid batch files do not set return code: we take a look at the
+ # beginning of the output for an error message instead
+ olines = stdout.splitlines()
+ if olines[0].startswith("The specified configuration type is missing"):
+ raise BatchFileExecutionError("\n".join(olines[:2]))
+
+ cache_data = common.parse_output(stdout)
+ script_env_cache[cache_key] = cache_data
+ # once we updated cache, give a chance to write out if user wanted
+ common.write_script_env_cache(script_env_cache)
+ else:
+ #TODO: Python 2 cleanup
+ # If we "hit" data from the json file, we have a Py2 problem:
+ # keys & values will be unicode. don't detect, just convert.
+ if sys.version_info[0] == 2:
+ def convert(data):
+ if isinstance(data, basestring):
+ return str(data)
+ elif isinstance(data, collections.Mapping):
+ return dict(map(convert, data.iteritems()))
+ elif isinstance(data, collections.Iterable):
+ return type(data)(map(convert, data))
+ else:
+ return data
- return common.parse_output(stdout)
+ cache_data = convert(cache_data)
+
+ return cache_data
def get_default_version(env):
debug('get_default_version()')
@@ -635,12 +676,12 @@ def get_default_version(env):
debug('installed_vcs:%s' % installed_vcs)
if not installed_vcs:
#msg = 'No installed VCs'
- #debug('msv %s\n' % repr(msg))
+ #debug('msv %s' % repr(msg))
#SCons.Warnings.warn(SCons.Warnings.VisualCMissingWarning, msg)
debug('msvc_setup_env: No installed VCs')
return None
msvc_version = installed_vcs[0]
- debug('msvc_setup_env: using default installed MSVC version %s\n' % repr(msvc_version))
+ debug('msvc_setup_env: using default installed MSVC version %s' % repr(msvc_version))
return msvc_version
@@ -654,12 +695,12 @@ def msvc_setup_env_once(env):
msvc_setup_env(env)
env["MSVC_SETUP_RUN"] = True
-def msvc_find_valid_batch_script(env,version):
- debug('vc.py:msvc_find_valid_batch_script()')
+def msvc_find_valid_batch_script(env, version):
+ debug('msvc_find_valid_batch_script()')
# Find the host platform, target platform, and if present the requested
# target platform
platforms = get_host_target(env)
- debug("vc.py: msvs_find_valid_batch_script(): host_platform %s, target_platform %s req_target_platform:%s" % platforms)
+ debug(" msvs_find_valid_batch_script(): host_platform %s, target_platform %s req_target_platform:%s" % platforms)
host_platform, target_platform, req_target_platform = platforms
try_target_archs = [target_platform]
@@ -683,7 +724,7 @@ def msvc_find_valid_batch_script(env,version):
# Set to current arch.
env['TARGET_ARCH']=tp
- debug("vc.py:msvc_find_valid_batch_script() trying target_platform:%s"%tp)
+ debug("msvc_find_valid_batch_script() trying target_platform:%s"%tp)
host_target = (host_platform, tp)
if not is_host_target_supported(host_target, version):
warn_msg = "host, target = %s not supported for MSVC version %s" % \
@@ -701,8 +742,8 @@ def msvc_find_valid_batch_script(env,version):
# Try to locate a batch file for this host/target platform combo
try:
- (vc_script,sdk_script) = find_batch_file(env,version,host_platform,tp)
- debug('vc.py:msvc_find_valid_batch_script() vc_script:%s sdk_script:%s'%(vc_script,sdk_script))
+ (vc_script, sdk_script) = find_batch_file(env, version, host_platform, tp)
+ debug('msvc_find_valid_batch_script() vc_script:%s sdk_script:%s'%(vc_script,sdk_script))
except VisualCException as e:
msg = str(e)
debug('Caught exception while looking for batch file (%s)' % msg)
@@ -714,29 +755,29 @@ def msvc_find_valid_batch_script(env,version):
continue
# Try to use the located batch file for this host/target platform combo
- debug('vc.py:msvc_find_valid_batch_script() use_script 2 %s, args:%s\n' % (repr(vc_script), arg))
+ debug('msvc_find_valid_batch_script() use_script 2 %s, args:%s' % (repr(vc_script), arg))
found = None
if vc_script:
try:
d = script_env(vc_script, args=arg)
found = vc_script
except BatchFileExecutionError as e:
- debug('vc.py:msvc_find_valid_batch_script() use_script 3: failed running VC script %s: %s: Error:%s'%(repr(vc_script),arg,e))
+ debug('msvc_find_valid_batch_script() use_script 3: failed running VC script %s: %s: Error:%s'%(repr(vc_script),arg,e))
vc_script=None
continue
if not vc_script and sdk_script:
- debug('vc.py:msvc_find_valid_batch_script() use_script 4: trying sdk script: %s'%(sdk_script))
+ debug('msvc_find_valid_batch_script() use_script 4: trying sdk script: %s'%(sdk_script))
try:
d = script_env(sdk_script)
found = sdk_script
except BatchFileExecutionError as e:
- debug('vc.py:msvc_find_valid_batch_script() use_script 5: failed running SDK script %s: Error:%s'%(repr(sdk_script),e))
+ debug('msvc_find_valid_batch_script() use_script 5: failed running SDK script %s: Error:%s'%(repr(sdk_script),e))
continue
elif not vc_script and not sdk_script:
- debug('vc.py:msvc_find_valid_batch_script() use_script 6: Neither VC script nor SDK script found')
+ debug('msvc_find_valid_batch_script() use_script 6: Neither VC script nor SDK script found')
continue
- debug("vc.py:msvc_find_valid_batch_script() Found a working script/target: %s/%s"%(repr(found),arg))
+ debug("msvc_find_valid_batch_script() Found a working script/target: %s/%s"%(repr(found),arg))
break # We've found a working target_platform, so stop looking
# If we cannot find a viable installed compiler, reset the TARGET_ARCH
@@ -756,7 +797,7 @@ def msvc_setup_env(env):
"compilers most likely not set correctly"
SCons.Warnings.warn(SCons.Warnings.VisualCMissingWarning, warn_msg)
return None
- debug('msvc_setup_env: using specified MSVC version %s\n' % repr(version))
+ debug('msvc_setup_env: using specified MSVC version %s' % repr(version))
# XXX: we set-up both MSVS version for backward
# compatibility with the msvs tool
@@ -767,11 +808,11 @@ def msvc_setup_env(env):
use_script = env.get('MSVC_USE_SCRIPT', True)
if SCons.Util.is_String(use_script):
- debug('vc.py:msvc_setup_env() use_script 1 %s\n' % repr(use_script))
+ debug('msvc_setup_env() use_script 1 %s' % repr(use_script))
d = script_env(use_script)
elif use_script:
d = msvc_find_valid_batch_script(env,version)
- debug('vc.py:msvc_setup_env() use_script 2 %s\n' % d)
+ debug('msvc_setup_env() use_script 2 %s' % d)
if not d:
return d
else:
@@ -782,7 +823,7 @@ def msvc_setup_env(env):
return None
for k, v in d.items():
- debug('vc.py:msvc_setup_env() env:%s -> %s'%(k,v))
+ debug('msvc_setup_env() env:%s -> %s'%(k,v))
env.PrependENVPath(k, v, delete_existing=True)
# final check to issue a warning if the compiler is not present
diff --git a/engine/SCons/Tool/MSCommon/vs.py b/engine/SCons/Tool/MSCommon/vs.py
index d719301..972c4f8 100644
--- a/engine/SCons/Tool/MSCommon/vs.py
+++ b/engine/SCons/Tool/MSCommon/vs.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/MSCommon/vs.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/vs.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """Module to detect Visual Studio and/or Visual C/C++
"""
@@ -465,14 +465,14 @@ def get_vs_by_version(msvs):
global InstalledVSMap
global SupportedVSMap
- debug('vs.py:get_vs_by_version()')
+ debug('get_vs_by_version()')
if msvs not in SupportedVSMap:
msg = "Visual Studio version %s is not supported" % repr(msvs)
raise SCons.Errors.UserError(msg)
get_installed_visual_studios()
vs = InstalledVSMap.get(msvs)
debug('InstalledVSMap:%s'%InstalledVSMap)
- debug('vs.py:get_vs_by_version: found vs:%s'%vs)
+ debug('get_vs_by_version: found vs:%s'%vs)
# Some check like this would let us provide a useful error message
# if they try to set a Visual Studio version that's not installed.
# However, we also want to be able to run tests (like the unit
diff --git a/engine/SCons/Tool/PharLapCommon.py b/engine/SCons/Tool/PharLapCommon.py
index d699b7e..09751d1 100644
--- a/engine/SCons/Tool/PharLapCommon.py
+++ b/engine/SCons/Tool/PharLapCommon.py
@@ -29,7 +29,7 @@ Phar Lap ETS tool chain. Right now, this is linkloc and
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/PharLapCommon.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/PharLapCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/__init__.py b/engine/SCons/Tool/__init__.py
index ea64b78..a75693f 100644
--- a/engine/SCons/Tool/__init__.py
+++ b/engine/SCons/Tool/__init__.py
@@ -35,7 +35,7 @@ tool definition.
# 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__ = "src/engine/SCons/Tool/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import re
@@ -99,7 +99,7 @@ for suffix in LaTeXSuffixes:
SourceFileScanner.add_scanner(suffix, LaTeXScanner)
SourceFileScanner.add_scanner(suffix, PDFLaTeXScanner)
-# Tool aliases are needed for those tools whos module names also
+# Tool aliases are needed for those tools whose module names also
# occur in the python standard library. This causes module shadowing and
# can break using python library functions under python3
TOOL_ALIASES = {
diff --git a/engine/SCons/Tool/aixc++.py b/engine/SCons/Tool/aixc++.py
index 90a3e01..4a78eda 100644
--- a/engine/SCons/Tool/aixc++.py
+++ b/engine/SCons/Tool/aixc++.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/aixc++.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixc++.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#forward proxy to the preffered cxx version
from SCons.Tool.aixcxx import *
diff --git a/engine/SCons/Tool/aixcc.py b/engine/SCons/Tool/aixcc.py
index 2cc35bc..e7bc1ca 100644
--- a/engine/SCons/Tool/aixcc.py
+++ b/engine/SCons/Tool/aixcc.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/aixcc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/aixcxx.py b/engine/SCons/Tool/aixcxx.py
index 7e7ff3a..f4ee5fe 100644
--- a/engine/SCons/Tool/aixcxx.py
+++ b/engine/SCons/Tool/aixcxx.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/aixcxx.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixcxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/aixf77.py b/engine/SCons/Tool/aixf77.py
index c7129e5..908e8ad 100644
--- a/engine/SCons/Tool/aixf77.py
+++ b/engine/SCons/Tool/aixf77.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/aixf77.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixf77.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/aixlink.py b/engine/SCons/Tool/aixlink.py
index a82f570..67d65e8 100644
--- a/engine/SCons/Tool/aixlink.py
+++ b/engine/SCons/Tool/aixlink.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/aixlink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixlink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/applelink.py b/engine/SCons/Tool/applelink.py
index 2c165ee..f432d61 100644
--- a/engine/SCons/Tool/applelink.py
+++ b/engine/SCons/Tool/applelink.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/applelink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/applelink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/ar.py b/engine/SCons/Tool/ar.py
index e0e89a7..3d8cc8a 100644
--- a/engine/SCons/Tool/ar.py
+++ b/engine/SCons/Tool/ar.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ar.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ar.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/as.py b/engine/SCons/Tool/as.py
index 37186d7..3986a44 100644
--- a/engine/SCons/Tool/as.py
+++ b/engine/SCons/Tool/as.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/as.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/as.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/bcc32.py b/engine/SCons/Tool/bcc32.py
index bb74d4d..7e0b47f 100644
--- a/engine/SCons/Tool/bcc32.py
+++ b/engine/SCons/Tool/bcc32.py
@@ -27,7 +27,7 @@ XXX
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/bcc32.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/bcc32.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/c++.py b/engine/SCons/Tool/c++.py
index 9cd420b..00aee5d 100644
--- a/engine/SCons/Tool/c++.py
+++ b/engine/SCons/Tool/c++.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/c++.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/c++.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#forward proxy to the preffered cxx version
diff --git a/engine/SCons/Tool/cc.py b/engine/SCons/Tool/cc.py
index 12e2b68..ffcb6e8 100644
--- a/engine/SCons/Tool/cc.py
+++ b/engine/SCons/Tool/cc.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/cc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/cc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool
import SCons.Defaults
diff --git a/engine/SCons/Tool/clang.py b/engine/SCons/Tool/clang.py
index 8d913d1..35347b4 100644
--- a/engine/SCons/Tool/clang.py
+++ b/engine/SCons/Tool/clang.py
@@ -33,7 +33,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-# __revision__ = "src/engine/SCons/Tool/clang.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+# __revision__ = "src/engine/SCons/Tool/clang.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
# Based on SCons/Tool/gcc.py by Paweł Tomulik 2014 as a separate tool.
# Brought into the SCons mainline by Russel Winder 2017.
diff --git a/engine/SCons/Tool/clangxx.py b/engine/SCons/Tool/clangxx.py
index 8afda08..9292c21 100644
--- a/engine/SCons/Tool/clangxx.py
+++ b/engine/SCons/Tool/clangxx.py
@@ -33,7 +33,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-# __revision__ = "src/engine/SCons/Tool/clangxx.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+# __revision__ = "src/engine/SCons/Tool/clangxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
# Based on SCons/Tool/g++.py by Paweł Tomulik 2014 as a separate tool.
# Brought into the SCons mainline by Russel Winder 2017.
diff --git a/engine/SCons/Tool/cvf.py b/engine/SCons/Tool/cvf.py
index 22ec02f..60d5a3d 100644
--- a/engine/SCons/Tool/cvf.py
+++ b/engine/SCons/Tool/cvf.py
@@ -27,7 +27,7 @@ Tool-specific initialization for the Compaq Visual Fortran compiler.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/cvf.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/cvf.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import fortran
diff --git a/engine/SCons/Tool/cxx.py b/engine/SCons/Tool/cxx.py
index 7e34850..aced177 100644
--- a/engine/SCons/Tool/cxx.py
+++ b/engine/SCons/Tool/cxx.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/cxx.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/cxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/default.py b/engine/SCons/Tool/default.py
index a401d25..355538f 100644
--- a/engine/SCons/Tool/default.py
+++ b/engine/SCons/Tool/default.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/default.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/default.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool
diff --git a/engine/SCons/Tool/dmd.py b/engine/SCons/Tool/dmd.py
index e87d791..74c8673 100644
--- a/engine/SCons/Tool/dmd.py
+++ b/engine/SCons/Tool/dmd.py
@@ -53,7 +53,7 @@ Lib tool variables:
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/dmd.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/dmd.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import subprocess
diff --git a/engine/SCons/Tool/dvi.py b/engine/SCons/Tool/dvi.py
index 2152817..1a7f7af 100644
--- a/engine/SCons/Tool/dvi.py
+++ b/engine/SCons/Tool/dvi.py
@@ -27,7 +27,7 @@ Common DVI Builder definition for various other Tool modules that use it.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/dvi.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/dvi.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Builder
import SCons.Tool
diff --git a/engine/SCons/Tool/dvipdf.py b/engine/SCons/Tool/dvipdf.py
index 2b66658..6012e5b 100644
--- a/engine/SCons/Tool/dvipdf.py
+++ b/engine/SCons/Tool/dvipdf.py
@@ -30,7 +30,7 @@ selection method.
# 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__ = "src/engine/SCons/Tool/dvipdf.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/dvipdf.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Defaults
diff --git a/engine/SCons/Tool/dvips.py b/engine/SCons/Tool/dvips.py
index ccc882c..9fce42c 100644
--- a/engine/SCons/Tool/dvips.py
+++ b/engine/SCons/Tool/dvips.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/dvips.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/dvips.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Builder
diff --git a/engine/SCons/Tool/f03.py b/engine/SCons/Tool/f03.py
index 0a30381..77a37b9 100644
--- a/engine/SCons/Tool/f03.py
+++ b/engine/SCons/Tool/f03.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/f03.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/f03.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/f08.py b/engine/SCons/Tool/f08.py
index 1d2b84d..e7318b9 100644
--- a/engine/SCons/Tool/f08.py
+++ b/engine/SCons/Tool/f08.py
@@ -33,7 +33,7 @@ from __future__ import absolute_import
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/f08.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/f08.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/f77.py b/engine/SCons/Tool/f77.py
index c52904e..0777822 100644
--- a/engine/SCons/Tool/f77.py
+++ b/engine/SCons/Tool/f77.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/f77.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/f77.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Scanner.Fortran
diff --git a/engine/SCons/Tool/f90.py b/engine/SCons/Tool/f90.py
index 1095c1c..6a370bd 100644
--- a/engine/SCons/Tool/f90.py
+++ b/engine/SCons/Tool/f90.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/f90.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/f90.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Scanner.Fortran
diff --git a/engine/SCons/Tool/f95.py b/engine/SCons/Tool/f95.py
index 44e9e39..fca7d62 100644
--- a/engine/SCons/Tool/f95.py
+++ b/engine/SCons/Tool/f95.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/f95.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/f95.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/filesystem.py b/engine/SCons/Tool/filesystem.py
index b004782..ea16abf 100644
--- a/engine/SCons/Tool/filesystem.py
+++ b/engine/SCons/Tool/filesystem.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/filesystem.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/filesystem.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons
from SCons.Tool.install import copyFunc
diff --git a/engine/SCons/Tool/fortran.py b/engine/SCons/Tool/fortran.py
index 2e84e49..7b332c9 100644
--- a/engine/SCons/Tool/fortran.py
+++ b/engine/SCons/Tool/fortran.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/fortran.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/fortran.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/engine/SCons/Tool/g++.py b/engine/SCons/Tool/g++.py
index ecaf0ab..eace13c 100644
--- a/engine/SCons/Tool/g++.py
+++ b/engine/SCons/Tool/g++.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/g++.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/g++.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#forward proxy to the preffered cxx version
diff --git a/engine/SCons/Tool/g77.py b/engine/SCons/Tool/g77.py
index 6d7d4ed..f3f935d 100644
--- a/engine/SCons/Tool/g77.py
+++ b/engine/SCons/Tool/g77.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/g77.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/g77.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
from SCons.Tool.FortranCommon import add_all_to_env, add_f77_to_env
diff --git a/engine/SCons/Tool/gas.py b/engine/SCons/Tool/gas.py
index add6f7c..9b60201 100644
--- a/engine/SCons/Tool/gas.py
+++ b/engine/SCons/Tool/gas.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/gas.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gas.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
try:
as_module = __import__('as', globals(), locals(), [])
diff --git a/engine/SCons/Tool/gcc.py b/engine/SCons/Tool/gcc.py
index 4f70be5..65b9f57 100644
--- a/engine/SCons/Tool/gcc.py
+++ b/engine/SCons/Tool/gcc.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/gcc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import cc
import os
diff --git a/engine/SCons/Tool/gdc.py b/engine/SCons/Tool/gdc.py
index ebb9b06..4c392e8 100644
--- a/engine/SCons/Tool/gdc.py
+++ b/engine/SCons/Tool/gdc.py
@@ -48,7 +48,7 @@ Lib tool variables:
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/gdc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gdc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Defaults
diff --git a/engine/SCons/Tool/gettext_tool.py b/engine/SCons/Tool/gettext_tool.py
index 9f20a6f..5891e40 100644
--- a/engine/SCons/Tool/gettext_tool.py
+++ b/engine/SCons/Tool/gettext_tool.py
@@ -23,7 +23,7 @@
# 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__ = "src/engine/SCons/Tool/gettext_tool.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gettext_tool.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#############################################################################
def generate(env,**kw):
diff --git a/engine/SCons/Tool/gfortran.py b/engine/SCons/Tool/gfortran.py
index ca143c5..986ebc6 100644
--- a/engine/SCons/Tool/gfortran.py
+++ b/engine/SCons/Tool/gfortran.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/gfortran.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gfortran.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/gnulink.py b/engine/SCons/Tool/gnulink.py
index 2ed5d34..0715ffc 100644
--- a/engine/SCons/Tool/gnulink.py
+++ b/engine/SCons/Tool/gnulink.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/gnulink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gnulink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
import SCons.Tool
diff --git a/engine/SCons/Tool/gs.py b/engine/SCons/Tool/gs.py
index ca85585..3e9543f 100644
--- a/engine/SCons/Tool/gs.py
+++ b/engine/SCons/Tool/gs.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/gs.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gs.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Builder
diff --git a/engine/SCons/Tool/gxx.py b/engine/SCons/Tool/gxx.py
index b9c35f7..2eb678d 100644
--- a/engine/SCons/Tool/gxx.py
+++ b/engine/SCons/Tool/gxx.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/gxx.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/engine/SCons/Tool/hpc++.py b/engine/SCons/Tool/hpc++.py
index 6da62ae..ee94e22 100644
--- a/engine/SCons/Tool/hpc++.py
+++ b/engine/SCons/Tool/hpc++.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/hpc++.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/hpc++.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#forward proxy to the preffered cxx version
diff --git a/engine/SCons/Tool/hpcc.py b/engine/SCons/Tool/hpcc.py
index 7e2d748..f118cf3 100644
--- a/engine/SCons/Tool/hpcc.py
+++ b/engine/SCons/Tool/hpcc.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/hpcc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/hpcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/hpcxx.py b/engine/SCons/Tool/hpcxx.py
index ccda329..e4dcb97 100644
--- a/engine/SCons/Tool/hpcxx.py
+++ b/engine/SCons/Tool/hpcxx.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/hpcxx.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/hpcxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/hplink.py b/engine/SCons/Tool/hplink.py
index be83074..9f90071 100644
--- a/engine/SCons/Tool/hplink.py
+++ b/engine/SCons/Tool/hplink.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/hplink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/hplink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/icc.py b/engine/SCons/Tool/icc.py
index 97f30bd..877a212 100644
--- a/engine/SCons/Tool/icc.py
+++ b/engine/SCons/Tool/icc.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/icc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/icc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import cc
diff --git a/engine/SCons/Tool/icl.py b/engine/SCons/Tool/icl.py
index ad9305a..be67bdc 100644
--- a/engine/SCons/Tool/icl.py
+++ b/engine/SCons/Tool/icl.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/icl.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/icl.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool.intelc
diff --git a/engine/SCons/Tool/ifl.py b/engine/SCons/Tool/ifl.py
index 1e98df4..2139b9f 100644
--- a/engine/SCons/Tool/ifl.py
+++ b/engine/SCons/Tool/ifl.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ifl.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ifl.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
from SCons.Scanner.Fortran import FortranScan
diff --git a/engine/SCons/Tool/ifort.py b/engine/SCons/Tool/ifort.py
index d1886ce..a248b3e 100644
--- a/engine/SCons/Tool/ifort.py
+++ b/engine/SCons/Tool/ifort.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ifort.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ifort.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
from SCons.Scanner.Fortran import FortranScan
diff --git a/engine/SCons/Tool/ilink.py b/engine/SCons/Tool/ilink.py
index 4e848dc..289235c 100644
--- a/engine/SCons/Tool/ilink.py
+++ b/engine/SCons/Tool/ilink.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ilink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ilink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/ilink32.py b/engine/SCons/Tool/ilink32.py
index ecb6e7b..33df790 100644
--- a/engine/SCons/Tool/ilink32.py
+++ b/engine/SCons/Tool/ilink32.py
@@ -27,7 +27,7 @@ XXX
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ilink32.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ilink32.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool
import SCons.Tool.bcc32
diff --git a/engine/SCons/Tool/install.py b/engine/SCons/Tool/install.py
index 8f80bc2..f998baa 100644
--- a/engine/SCons/Tool/install.py
+++ b/engine/SCons/Tool/install.py
@@ -31,7 +31,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/install.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/install.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import re
diff --git a/engine/SCons/Tool/intelc.py b/engine/SCons/Tool/intelc.py
index ee8b4f4..c45c71a 100644
--- a/engine/SCons/Tool/intelc.py
+++ b/engine/SCons/Tool/intelc.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import division, print_function
-__revision__ = "src/engine/SCons/Tool/intelc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/intelc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import math, sys, os.path, glob, string, re
@@ -387,7 +387,7 @@ def get_intel_compiler_top(version, abi):
def generate(env, version=None, abi=None, topdir=None, verbose=0):
- """Add Builders and construction variables for Intel C/C++ compiler
+ r"""Add Builders and construction variables for Intel C/C++ compiler
to an Environment.
args:
version: (string) compiler version to use, like "80"
@@ -551,7 +551,7 @@ def generate(env, version=None, abi=None, topdir=None, verbose=0):
# Look for license file dir
# in system environment, registry, and default location.
envlicdir = os.environ.get("INTEL_LICENSE_FILE", '')
- K = ('SOFTWARE\Intel\Licenses')
+ K = r'SOFTWARE\Intel\Licenses'
try:
k = SCons.Util.RegOpenKeyEx(SCons.Util.HKEY_LOCAL_MACHINE, K)
reglicdir = SCons.Util.RegQueryValueEx(k, "w_cpp")[0]
diff --git a/engine/SCons/Tool/ipkg.py b/engine/SCons/Tool/ipkg.py
index 60096af..e1fad35 100644
--- a/engine/SCons/Tool/ipkg.py
+++ b/engine/SCons/Tool/ipkg.py
@@ -33,7 +33,7 @@ packages fake_root.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ipkg.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ipkg.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/engine/SCons/Tool/jar.py b/engine/SCons/Tool/jar.py
index 212a105..f2a328b 100644
--- a/engine/SCons/Tool/jar.py
+++ b/engine/SCons/Tool/jar.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/jar.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/jar.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import SCons.Subst
diff --git a/engine/SCons/Tool/javac.py b/engine/SCons/Tool/javac.py
index 849ac09..aeb52ce 100644
--- a/engine/SCons/Tool/javac.py
+++ b/engine/SCons/Tool/javac.py
@@ -30,7 +30,7 @@ selection method.
# 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__ = "src/engine/SCons/Tool/javac.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/javac.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/javah.py b/engine/SCons/Tool/javah.py
index 8ec3cf8..b41c742 100644
--- a/engine/SCons/Tool/javah.py
+++ b/engine/SCons/Tool/javah.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/javah.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/javah.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/latex.py b/engine/SCons/Tool/latex.py
index 242aa62..6cfd93a 100644
--- a/engine/SCons/Tool/latex.py
+++ b/engine/SCons/Tool/latex.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/latex.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/latex.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Defaults
diff --git a/engine/SCons/Tool/ldc.py b/engine/SCons/Tool/ldc.py
index 6f6a899..639dd48 100644
--- a/engine/SCons/Tool/ldc.py
+++ b/engine/SCons/Tool/ldc.py
@@ -48,7 +48,7 @@ Lib tool variables:
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ldc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ldc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import subprocess
diff --git a/engine/SCons/Tool/lex.py b/engine/SCons/Tool/lex.py
index 155e2d9..db1ca6d 100644
--- a/engine/SCons/Tool/lex.py
+++ b/engine/SCons/Tool/lex.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/lex.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/lex.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/engine/SCons/Tool/link.py b/engine/SCons/Tool/link.py
index 2347c94..c712732 100644
--- a/engine/SCons/Tool/link.py
+++ b/engine/SCons/Tool/link.py
@@ -32,7 +32,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/link.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/link.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import re
diff --git a/engine/SCons/Tool/linkloc.py b/engine/SCons/Tool/linkloc.py
index e3b16fc..508b09a 100644
--- a/engine/SCons/Tool/linkloc.py
+++ b/engine/SCons/Tool/linkloc.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/linkloc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/linkloc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/engine/SCons/Tool/m4.py b/engine/SCons/Tool/m4.py
index 0c345f3..b71f6be 100644
--- a/engine/SCons/Tool/m4.py
+++ b/engine/SCons/Tool/m4.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/m4.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/m4.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Builder
diff --git a/engine/SCons/Tool/masm.py b/engine/SCons/Tool/masm.py
index 26e2e0a..0897714 100644
--- a/engine/SCons/Tool/masm.py
+++ b/engine/SCons/Tool/masm.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/masm.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/masm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/midl.py b/engine/SCons/Tool/midl.py
index b2120c6..5ec5974 100644
--- a/engine/SCons/Tool/midl.py
+++ b/engine/SCons/Tool/midl.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/midl.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/midl.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Builder
diff --git a/engine/SCons/Tool/mingw.py b/engine/SCons/Tool/mingw.py
index 4d6533b..3152bf2 100644
--- a/engine/SCons/Tool/mingw.py
+++ b/engine/SCons/Tool/mingw.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/mingw.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mingw.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/msgfmt.py b/engine/SCons/Tool/msgfmt.py
index a66af36..1ee45e7 100644
--- a/engine/SCons/Tool/msgfmt.py
+++ b/engine/SCons/Tool/msgfmt.py
@@ -21,7 +21,7 @@
# 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__ = "src/engine/SCons/Tool/msgfmt.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msgfmt.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Builder import BuilderBase
#############################################################################
diff --git a/engine/SCons/Tool/msginit.py b/engine/SCons/Tool/msginit.py
index 96c2732..8ce9f02 100644
--- a/engine/SCons/Tool/msginit.py
+++ b/engine/SCons/Tool/msginit.py
@@ -24,7 +24,7 @@ Tool specific initialization of msginit tool.
# 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__ = "src/engine/SCons/Tool/msginit.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msginit.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Warnings
import SCons.Builder
diff --git a/engine/SCons/Tool/msgmerge.py b/engine/SCons/Tool/msgmerge.py
index 42cb18a..748041d 100644
--- a/engine/SCons/Tool/msgmerge.py
+++ b/engine/SCons/Tool/msgmerge.py
@@ -24,7 +24,7 @@ Tool specific initialization for `msgmerge` tool.
# 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__ = "src/engine/SCons/Tool/msgmerge.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msgmerge.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#############################################################################
def _update_or_init_po_files(target, source, env):
diff --git a/engine/SCons/Tool/mslib.py b/engine/SCons/Tool/mslib.py
index 01ea3ff..88b5b1e 100644
--- a/engine/SCons/Tool/mslib.py
+++ b/engine/SCons/Tool/mslib.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/mslib.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mslib.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/engine/SCons/Tool/mslink.py b/engine/SCons/Tool/mslink.py
index 43bcb3d..d995d3b 100644
--- a/engine/SCons/Tool/mslink.py
+++ b/engine/SCons/Tool/mslink.py
@@ -32,7 +32,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/mslink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mslink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/mssdk.py b/engine/SCons/Tool/mssdk.py
index 8dfdbeb..55cb54a 100644
--- a/engine/SCons/Tool/mssdk.py
+++ b/engine/SCons/Tool/mssdk.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/mssdk.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mssdk.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
"""engine.SCons.Tool.mssdk
diff --git a/engine/SCons/Tool/msvc.py b/engine/SCons/Tool/msvc.py
index d94a037..0013015 100644
--- a/engine/SCons/Tool/msvc.py
+++ b/engine/SCons/Tool/msvc.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/msvc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msvc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import os
diff --git a/engine/SCons/Tool/msvs.py b/engine/SCons/Tool/msvs.py
index 7d60097..4a4b390 100644
--- a/engine/SCons/Tool/msvs.py
+++ b/engine/SCons/Tool/msvs.py
@@ -32,7 +32,7 @@ selection method.
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/msvs.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msvs.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
@@ -652,7 +652,7 @@ class _GenerateV6DSP(_DSPGenerator):
for base in ("BASE ",""):
self.file.write('# PROP %sUse_MFC 0\n'
'# PROP %sUse_Debug_Libraries ' % (base, base))
- if kind.lower().find('debug') < 0:
+ if 'debug' not in kind.lower():
self.file.write('0\n')
else:
self.file.write('1\n')
@@ -731,7 +731,7 @@ class _GenerateV6DSP(_DSPGenerator):
line = dspfile.readline()
# skip until marker
while line:
- if line.find("# End Project") > -1:
+ if "# End Project" in line:
break
line = dspfile.readline()
@@ -1049,7 +1049,7 @@ class _GenerateV7DSP(_DSPGenerator, _GenerateV7User):
line = dspfile.readline()
# skip until marker
while line:
- if line.find('<!-- SCons Data:') > -1:
+ if '<!-- SCons Data:' in line:
break
line = dspfile.readline()
diff --git a/engine/SCons/Tool/mwcc.py b/engine/SCons/Tool/mwcc.py
index 1820ddb..341a3ef 100644
--- a/engine/SCons/Tool/mwcc.py
+++ b/engine/SCons/Tool/mwcc.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/mwcc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mwcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/mwld.py b/engine/SCons/Tool/mwld.py
index 3792b16..5af02a6 100644
--- a/engine/SCons/Tool/mwld.py
+++ b/engine/SCons/Tool/mwld.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/mwld.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mwld.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool
diff --git a/engine/SCons/Tool/nasm.py b/engine/SCons/Tool/nasm.py
index bc1e446..f08930e 100644
--- a/engine/SCons/Tool/nasm.py
+++ b/engine/SCons/Tool/nasm.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/nasm.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/nasm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/packaging/__init__.py b/engine/SCons/Tool/packaging/__init__.py
index 02f1acd..4b947f9 100644
--- a/engine/SCons/Tool/packaging/__init__.py
+++ b/engine/SCons/Tool/packaging/__init__.py
@@ -25,7 +25,7 @@ SCons Packaging Tool.
# 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__ = "src/engine/SCons/Tool/packaging/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Environment
diff --git a/engine/SCons/Tool/packaging/ipk.py b/engine/SCons/Tool/packaging/ipk.py
index 27657eb..8b4d79c 100644
--- a/engine/SCons/Tool/packaging/ipk.py
+++ b/engine/SCons/Tool/packaging/ipk.py
@@ -24,7 +24,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/ipk.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/ipk.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/engine/SCons/Tool/packaging/msi.py b/engine/SCons/Tool/packaging/msi.py
index 1038a95..1d47268 100644
--- a/engine/SCons/Tool/packaging/msi.py
+++ b/engine/SCons/Tool/packaging/msi.py
@@ -25,7 +25,7 @@ The msi packager.
# 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__ = "src/engine/SCons/Tool/packaging/msi.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/msi.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import SCons
@@ -224,7 +224,7 @@ def build_wxsfile(target, source, env):
# setup function
#
def create_default_directory_layout(root, NAME, VERSION, VENDOR, filename_set):
- """ Create the wix default target directory layout and return the innermost
+ r""" Create the wix default target directory layout and return the innermost
directory.
We assume that the XML tree delivered in the root argument already contains
diff --git a/engine/SCons/Tool/packaging/rpm.py b/engine/SCons/Tool/packaging/rpm.py
index aa15061..1554d09 100644
--- a/engine/SCons/Tool/packaging/rpm.py
+++ b/engine/SCons/Tool/packaging/rpm.py
@@ -25,7 +25,7 @@ The rpm packager.
# 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__ = "src/engine/SCons/Tool/packaging/rpm.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/rpm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/engine/SCons/Tool/packaging/src_tarbz2.py b/engine/SCons/Tool/packaging/src_tarbz2.py
index 2089142..1889ec9 100644
--- a/engine/SCons/Tool/packaging/src_tarbz2.py
+++ b/engine/SCons/Tool/packaging/src_tarbz2.py
@@ -26,7 +26,7 @@ The tarbz2 SRC packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/src_tarbz2.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/src_tarbz2.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import putintopackageroot
diff --git a/engine/SCons/Tool/packaging/src_targz.py b/engine/SCons/Tool/packaging/src_targz.py
index f7be89c..0d3a3db 100644
--- a/engine/SCons/Tool/packaging/src_targz.py
+++ b/engine/SCons/Tool/packaging/src_targz.py
@@ -26,7 +26,7 @@ The targz SRC packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/src_targz.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/src_targz.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import putintopackageroot
diff --git a/engine/SCons/Tool/packaging/src_tarxz.py b/engine/SCons/Tool/packaging/src_tarxz.py
index 9093d27..3042cac 100644
--- a/engine/SCons/Tool/packaging/src_tarxz.py
+++ b/engine/SCons/Tool/packaging/src_tarxz.py
@@ -26,7 +26,7 @@ The tarxz SRC packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/src_tarxz.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/src_tarxz.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import putintopackageroot
diff --git a/engine/SCons/Tool/packaging/src_zip.py b/engine/SCons/Tool/packaging/src_zip.py
index 51859ec..207fb1c 100644
--- a/engine/SCons/Tool/packaging/src_zip.py
+++ b/engine/SCons/Tool/packaging/src_zip.py
@@ -26,7 +26,7 @@ The zip SRC packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/src_zip.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/src_zip.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import putintopackageroot
diff --git a/engine/SCons/Tool/packaging/tarbz2.py b/engine/SCons/Tool/packaging/tarbz2.py
index 6adae3b..f34813b 100644
--- a/engine/SCons/Tool/packaging/tarbz2.py
+++ b/engine/SCons/Tool/packaging/tarbz2.py
@@ -26,7 +26,7 @@ The tarbz2 packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/tarbz2.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/tarbz2.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
diff --git a/engine/SCons/Tool/packaging/targz.py b/engine/SCons/Tool/packaging/targz.py
index 402063f..8c694af 100644
--- a/engine/SCons/Tool/packaging/targz.py
+++ b/engine/SCons/Tool/packaging/targz.py
@@ -26,7 +26,7 @@ The targz packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/targz.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/targz.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
diff --git a/engine/SCons/Tool/packaging/tarxz.py b/engine/SCons/Tool/packaging/tarxz.py
index 0e3e44d..dc52aa9 100644
--- a/engine/SCons/Tool/packaging/tarxz.py
+++ b/engine/SCons/Tool/packaging/tarxz.py
@@ -26,7 +26,7 @@ The tarxz packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/tarxz.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/tarxz.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
diff --git a/engine/SCons/Tool/packaging/zip.py b/engine/SCons/Tool/packaging/zip.py
index 04bb246..c7da7e9 100644
--- a/engine/SCons/Tool/packaging/zip.py
+++ b/engine/SCons/Tool/packaging/zip.py
@@ -26,7 +26,7 @@ The zip SRC packager.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/packaging/zip.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/zip.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Tool.packaging import stripinstallbuilder, putintopackageroot
diff --git a/engine/SCons/Tool/pdf.py b/engine/SCons/Tool/pdf.py
index c2b8d72..6d6310f 100644
--- a/engine/SCons/Tool/pdf.py
+++ b/engine/SCons/Tool/pdf.py
@@ -28,7 +28,7 @@ Add an explicit action to run epstopdf to convert .eps files to .pdf
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/pdf.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/pdf.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Builder
import SCons.Tool
diff --git a/engine/SCons/Tool/pdflatex.py b/engine/SCons/Tool/pdflatex.py
index 92edf6a..7550365 100644
--- a/engine/SCons/Tool/pdflatex.py
+++ b/engine/SCons/Tool/pdflatex.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/pdflatex.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/pdflatex.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Util
diff --git a/engine/SCons/Tool/pdftex.py b/engine/SCons/Tool/pdftex.py
index 3a4c8e1..b6595c1 100644
--- a/engine/SCons/Tool/pdftex.py
+++ b/engine/SCons/Tool/pdftex.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/pdftex.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/pdftex.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import SCons.Action
diff --git a/engine/SCons/Tool/qt.py b/engine/SCons/Tool/qt.py
index 0829224..351d487 100644
--- a/engine/SCons/Tool/qt.py
+++ b/engine/SCons/Tool/qt.py
@@ -33,7 +33,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/qt.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/qt.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/engine/SCons/Tool/rmic.py b/engine/SCons/Tool/rmic.py
index ddf12e2..9ff1674 100644
--- a/engine/SCons/Tool/rmic.py
+++ b/engine/SCons/Tool/rmic.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/rmic.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/rmic.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Tool/rpcgen.py b/engine/SCons/Tool/rpcgen.py
index f1eebea..1fb22f1 100644
--- a/engine/SCons/Tool/rpcgen.py
+++ b/engine/SCons/Tool/rpcgen.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/rpcgen.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/rpcgen.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Builder import Builder
import SCons.Util
diff --git a/engine/SCons/Tool/rpm.py b/engine/SCons/Tool/rpm.py
index 7de20cc..39e7b59 100644
--- a/engine/SCons/Tool/rpm.py
+++ b/engine/SCons/Tool/rpm.py
@@ -33,7 +33,7 @@ tar.gz consisting of the source file and a specfile.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/rpm.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/rpm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import re
diff --git a/engine/SCons/Tool/rpmutils.py b/engine/SCons/Tool/rpmutils.py
index bacfe50..4d8b9be 100644
--- a/engine/SCons/Tool/rpmutils.py
+++ b/engine/SCons/Tool/rpmutils.py
@@ -36,7 +36,7 @@ exact syntax.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/rpmutils.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/rpmutils.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import platform
diff --git a/engine/SCons/Tool/sgiar.py b/engine/SCons/Tool/sgiar.py
index a2f86cb..c249815 100644
--- a/engine/SCons/Tool/sgiar.py
+++ b/engine/SCons/Tool/sgiar.py
@@ -33,7 +33,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sgiar.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgiar.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/sgic++.py b/engine/SCons/Tool/sgic++.py
index 9d7da76..0cb7a4a 100644
--- a/engine/SCons/Tool/sgic++.py
+++ b/engine/SCons/Tool/sgic++.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sgic++.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgic++.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#forward proxy to the preffered cxx version
from SCons.Tool.sgicxx import *
diff --git a/engine/SCons/Tool/sgicc.py b/engine/SCons/Tool/sgicc.py
index df4cf2c..b602be8 100644
--- a/engine/SCons/Tool/sgicc.py
+++ b/engine/SCons/Tool/sgicc.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sgicc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgicc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import cc
diff --git a/engine/SCons/Tool/sgicxx.py b/engine/SCons/Tool/sgicxx.py
index 3270faa..8fe0441 100644
--- a/engine/SCons/Tool/sgicxx.py
+++ b/engine/SCons/Tool/sgicxx.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sgicxx.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgicxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/sgilink.py b/engine/SCons/Tool/sgilink.py
index 402c28b..d5d6556 100644
--- a/engine/SCons/Tool/sgilink.py
+++ b/engine/SCons/Tool/sgilink.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sgilink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgilink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/sunar.py b/engine/SCons/Tool/sunar.py
index 2fab888..af3d685 100644
--- a/engine/SCons/Tool/sunar.py
+++ b/engine/SCons/Tool/sunar.py
@@ -32,7 +32,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sunar.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunar.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Defaults
import SCons.Tool
diff --git a/engine/SCons/Tool/sunc++.py b/engine/SCons/Tool/sunc++.py
index d33fcdf..5f09d94 100644
--- a/engine/SCons/Tool/sunc++.py
+++ b/engine/SCons/Tool/sunc++.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sunc++.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunc++.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#forward proxy to the preffered cxx version
diff --git a/engine/SCons/Tool/suncc.py b/engine/SCons/Tool/suncc.py
index bc6bc9a..f40b6d3 100644
--- a/engine/SCons/Tool/suncc.py
+++ b/engine/SCons/Tool/suncc.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/suncc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/suncc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/suncxx.py b/engine/SCons/Tool/suncxx.py
index b0e343b..0c70b68 100644
--- a/engine/SCons/Tool/suncxx.py
+++ b/engine/SCons/Tool/suncxx.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/suncxx.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/suncxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons
@@ -39,12 +39,14 @@ import os
import re
import subprocess
+from SCons.Util import PY3
import SCons.Tool.cxx
cplusplus = SCons.Tool.cxx
-#cplusplus = __import__('c++', globals(), locals(), [])
+# cplusplus = __import__('c++', globals(), locals(), [])
package_info = {}
+
def get_package_info(package_name, pkginfo, pkgchk):
try:
return package_info[package_name]
@@ -52,7 +54,7 @@ def get_package_info(package_name, pkginfo, pkgchk):
version = None
pathname = None
try:
- from subprocess import DEVNULL # py3k
+ from subprocess import DEVNULL # py3k
except ImportError:
DEVNULL = open(os.devnull, 'wb')
@@ -68,13 +70,18 @@ def get_package_info(package_name, pkginfo, pkgchk):
pathname = os.path.dirname(sadm_match.group(1))
try:
+ popen_args = {'stdout': subprocess.PIPE,
+ 'stderr': DEVNULL}
+ if PY3:
+ popen_args['universal_newlines'] = True
p = subprocess.Popen([pkginfo, '-l', package_name],
- stdout=subprocess.PIPE,
- stderr=DEVNULL)
+ **popen_args)
except EnvironmentError:
pass
else:
pkginfo_contents = p.communicate()[0]
+ if not PY3:
+ pkginfo_contents.decode()
version_re = re.compile(r'^ *VERSION:\s*(.*)$', re.M)
version_match = version_re.search(pkginfo_contents)
if version_match:
@@ -82,13 +89,18 @@ def get_package_info(package_name, pkginfo, pkgchk):
if pathname is None:
try:
+ popen_args = {'stdout': subprocess.PIPE,
+ 'stderr': DEVNULL}
+ if PY3:
+ popen_args['universal_newlines'] = True
p = subprocess.Popen([pkgchk, '-l', package_name],
- stdout=subprocess.PIPE,
- stderr=DEVNULL)
+ **popen_args)
except EnvironmentError:
pass
else:
pkgchk_contents = p.communicate()[0]
+ if not PY3:
+ pkgchk_contents.decode()
pathname_re = re.compile(r'^Pathname:\s*(.*/bin/CC)$', re.M)
pathname_match = pathname_re.search(pkgchk_contents)
if pathname_match:
@@ -97,7 +109,8 @@ def get_package_info(package_name, pkginfo, pkgchk):
package_info[package_name] = (pathname, version)
return package_info[package_name]
-# use the package installer tool lslpp to figure out where cppc and what
+
+# use the package installer tool "pkg" to figure out where cppc and what
# version of it is installed
def get_cppc(env):
cxx = env.subst('$CXX')
@@ -119,6 +132,7 @@ def get_cppc(env):
return (cppcPath, 'CC', 'CC', cppcVersion)
+
def generate(env):
"""Add Builders and construction variables for SunPRO C++."""
path, cxx, shcxx, version = get_cppc(env)
@@ -131,10 +145,11 @@ def generate(env):
env['CXX'] = cxx
env['SHCXX'] = shcxx
env['CXXVERSION'] = version
- env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS -KPIC')
- env['SHOBJPREFIX'] = 'so_'
- env['SHOBJSUFFIX'] = '.o'
-
+ env['SHCXXFLAGS'] = SCons.Util.CLVar('$CXXFLAGS -KPIC')
+ env['SHOBJPREFIX'] = 'so_'
+ env['SHOBJSUFFIX'] = '.o'
+
+
def exists(env):
path, cxx, shcxx, version = get_cppc(env)
if path and cxx:
diff --git a/engine/SCons/Tool/sunf77.py b/engine/SCons/Tool/sunf77.py
index 0bbb52f..2ea5447 100644
--- a/engine/SCons/Tool/sunf77.py
+++ b/engine/SCons/Tool/sunf77.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sunf77.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunf77.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/sunf90.py b/engine/SCons/Tool/sunf90.py
index 5c34a08..d69f8d1 100644
--- a/engine/SCons/Tool/sunf90.py
+++ b/engine/SCons/Tool/sunf90.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sunf90.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunf90.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/sunf95.py b/engine/SCons/Tool/sunf95.py
index 71a6840..f03c43f 100644
--- a/engine/SCons/Tool/sunf95.py
+++ b/engine/SCons/Tool/sunf95.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sunf95.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunf95.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/engine/SCons/Tool/sunlink.py b/engine/SCons/Tool/sunlink.py
index 39a921a..25ab4d4 100644
--- a/engine/SCons/Tool/sunlink.py
+++ b/engine/SCons/Tool/sunlink.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/sunlink.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunlink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/engine/SCons/Tool/swig.py b/engine/SCons/Tool/swig.py
index a6ab3de..d724500 100644
--- a/engine/SCons/Tool/swig.py
+++ b/engine/SCons/Tool/swig.py
@@ -32,7 +32,7 @@ from __future__ import print_function
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/swig.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/swig.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
@@ -80,7 +80,7 @@ def _find_modules(src):
for m in matches:
mnames.append(m[2])
- directors = directors or m[0].find('directors') >= 0
+ directors = directors or 'directors' in m[0]
return mnames, directors
def _add_director_header_targets(target, env):
diff --git a/engine/SCons/Tool/tar.py b/engine/SCons/Tool/tar.py
index 6a59683..564ea0f 100644
--- a/engine/SCons/Tool/tar.py
+++ b/engine/SCons/Tool/tar.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/tar.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/tar.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Action
import SCons.Builder
diff --git a/engine/SCons/Tool/tex.py b/engine/SCons/Tool/tex.py
index 8c4ee96..c9d9f55 100644
--- a/engine/SCons/Tool/tex.py
+++ b/engine/SCons/Tool/tex.py
@@ -33,7 +33,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/tex.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/tex.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
@@ -297,8 +297,8 @@ def InternalLaTeXAuxAction(XXXLaTeXAction, target = None, source= None, env=None
logfilename = targetbase + '.log'
logContent = ''
if os.path.isfile(logfilename):
- with open(logfilename, "r") as f:
- logContent = f.read()
+ with open(logfilename, "rb") as f:
+ logContent = f.read().decode(errors='replace')
# Read the fls file to find all .aux files
diff --git a/engine/SCons/Tool/textfile.py b/engine/SCons/Tool/textfile.py
index 8d19649..906c1ac 100644
--- a/engine/SCons/Tool/textfile.py
+++ b/engine/SCons/Tool/textfile.py
@@ -44,7 +44,7 @@ Textfile/Substfile builder for SCons.
is unpredictable whether the expansion will occur.
"""
-__revision__ = "src/engine/SCons/Tool/textfile.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/textfile.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons
diff --git a/engine/SCons/Tool/tlib.py b/engine/SCons/Tool/tlib.py
index 0e83c17..935b83f 100644
--- a/engine/SCons/Tool/tlib.py
+++ b/engine/SCons/Tool/tlib.py
@@ -27,7 +27,7 @@ XXX
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/tlib.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/tlib.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool
import SCons.Tool.bcc32
diff --git a/engine/SCons/Tool/wix.py b/engine/SCons/Tool/wix.py
index 6ee1784..093cbcd 100644
--- a/engine/SCons/Tool/wix.py
+++ b/engine/SCons/Tool/wix.py
@@ -30,7 +30,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/wix.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/wix.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Builder
import SCons.Action
diff --git a/engine/SCons/Tool/xgettext.py b/engine/SCons/Tool/xgettext.py
index 920255a..1544a62 100644
--- a/engine/SCons/Tool/xgettext.py
+++ b/engine/SCons/Tool/xgettext.py
@@ -24,7 +24,7 @@ Tool specific initialization of `xgettext` tool.
# 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__ = "src/engine/SCons/Tool/xgettext.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/xgettext.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import re
diff --git a/engine/SCons/Tool/yacc.py b/engine/SCons/Tool/yacc.py
index aaf9a8a..0fdd5dd 100644
--- a/engine/SCons/Tool/yacc.py
+++ b/engine/SCons/Tool/yacc.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/yacc.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/yacc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/engine/SCons/Tool/zip.py b/engine/SCons/Tool/zip.py
index 1c482eb..8b7ab76 100644
--- a/engine/SCons/Tool/zip.py
+++ b/engine/SCons/Tool/zip.py
@@ -31,7 +31,7 @@ selection method.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/zip.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Tool/zip.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/engine/SCons/Util.py b/engine/SCons/Util.py
index 7bb22cd..2bc129a 100644
--- a/engine/SCons/Util.py
+++ b/engine/SCons/Util.py
@@ -24,7 +24,7 @@ Various utility functions go here.
# 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__ = "src/engine/SCons/Util.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Util.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/engine/SCons/Variables/BoolVariable.py b/engine/SCons/Variables/BoolVariable.py
index 287a72a..629faaf 100644
--- a/engine/SCons/Variables/BoolVariable.py
+++ b/engine/SCons/Variables/BoolVariable.py
@@ -34,7 +34,7 @@ Usage example::
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/BoolVariable.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Variables/BoolVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['BoolVariable',]
diff --git a/engine/SCons/Variables/EnumVariable.py b/engine/SCons/Variables/EnumVariable.py
index 19cd908..22630a4 100644
--- a/engine/SCons/Variables/EnumVariable.py
+++ b/engine/SCons/Variables/EnumVariable.py
@@ -37,7 +37,7 @@ Usage example::
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/EnumVariable.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Variables/EnumVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['EnumVariable',]
diff --git a/engine/SCons/Variables/ListVariable.py b/engine/SCons/Variables/ListVariable.py
index 89b04d3..bf0f856 100644
--- a/engine/SCons/Variables/ListVariable.py
+++ b/engine/SCons/Variables/ListVariable.py
@@ -46,7 +46,7 @@ Usage example::
# 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__ = "src/engine/SCons/Variables/ListVariable.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Variables/ListVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
# Known Bug: This should behave like a Set-Type, but does not really,
# since elements can occur twice.
diff --git a/engine/SCons/Variables/PackageVariable.py b/engine/SCons/Variables/PackageVariable.py
index 2100314..12b8974 100644
--- a/engine/SCons/Variables/PackageVariable.py
+++ b/engine/SCons/Variables/PackageVariable.py
@@ -50,7 +50,7 @@ Usage example:
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/PackageVariable.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Variables/PackageVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['PackageVariable',]
diff --git a/engine/SCons/Variables/PathVariable.py b/engine/SCons/Variables/PathVariable.py
index 88d277e..5b3059d 100644
--- a/engine/SCons/Variables/PathVariable.py
+++ b/engine/SCons/Variables/PathVariable.py
@@ -67,7 +67,7 @@ Usage example::
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/PathVariable.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Variables/PathVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['PathVariable',]
diff --git a/engine/SCons/Variables/__init__.py b/engine/SCons/Variables/__init__.py
index 9daad3f..31d6621 100644
--- a/engine/SCons/Variables/__init__.py
+++ b/engine/SCons/Variables/__init__.py
@@ -26,7 +26,7 @@ customizable variables to an SCons build.
# 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__ = "src/engine/SCons/Variables/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Variables/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/engine/SCons/Warnings.py b/engine/SCons/Warnings.py
index 064076e..49a35a9 100644
--- a/engine/SCons/Warnings.py
+++ b/engine/SCons/Warnings.py
@@ -27,7 +27,7 @@ This file implements the warnings framework for SCons.
"""
-__revision__ = "src/engine/SCons/Warnings.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/Warnings.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
@@ -120,33 +120,15 @@ class PythonVersionWarning(DeprecatedWarning):
class DeprecatedSourceCodeWarning(FutureDeprecatedWarning):
pass
-class DeprecatedBuildDirWarning(DeprecatedWarning):
- pass
-
class TaskmasterNeedsExecuteWarning(DeprecatedWarning):
pass
-class DeprecatedCopyWarning(MandatoryDeprecatedWarning):
- pass
-
class DeprecatedOptionsWarning(MandatoryDeprecatedWarning):
pass
-class DeprecatedSourceSignaturesWarning(MandatoryDeprecatedWarning):
- pass
-
-class DeprecatedTargetSignaturesWarning(MandatoryDeprecatedWarning):
- pass
-
class DeprecatedDebugOptionsWarning(MandatoryDeprecatedWarning):
pass
-class DeprecatedSigModuleWarning(MandatoryDeprecatedWarning):
- pass
-
-class DeprecatedBuilderKeywordsWarning(MandatoryDeprecatedWarning):
- pass
-
class DeprecatedMissingSConscriptWarning(DeprecatedWarning):
pass
diff --git a/engine/SCons/__init__.py b/engine/SCons/__init__.py
index 7ffc3bb..42582b1 100644
--- a/engine/SCons/__init__.py
+++ b/engine/SCons/__init__.py
@@ -27,15 +27,15 @@ The main package for the SCons software construction utility.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.1"
+__version__ = "3.1.2"
-__build__ = "72ae09dc35ac2626f8ff711d8c4b30b6138e08e3"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
__buildsys__ = "octodog"
-__date__ = "2019-08-08 14:50:06"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/engine/SCons/compat/__init__.py b/engine/SCons/compat/__init__.py
index 439d3f6..a3935c3 100644
--- a/engine/SCons/compat/__init__.py
+++ b/engine/SCons/compat/__init__.py
@@ -57,7 +57,7 @@ function defined below loads the module as the "real" name (without the
rest of our code will find our pre-loaded compatibility module.
"""
-__revision__ = "src/engine/SCons/compat/__init__.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/compat/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/engine/SCons/compat/_scons_dbm.py b/engine/SCons/compat/_scons_dbm.py
index c9682f8..c5da402 100644
--- a/engine/SCons/compat/_scons_dbm.py
+++ b/engine/SCons/compat/_scons_dbm.py
@@ -30,7 +30,7 @@ that the whichdb.whichdb() implementstation in the various 2.X versions of
Python won't blow up even if dbm wasn't compiled in.
"""
-__revision__ = "src/engine/SCons/compat/_scons_dbm.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/compat/_scons_dbm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
class error(Exception):
pass
diff --git a/engine/SCons/cpp.py b/engine/SCons/cpp.py
index d9b3a2c..17a92e1 100644
--- a/engine/SCons/cpp.py
+++ b/engine/SCons/cpp.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/cpp.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/cpp.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
SCons C Pre-Processor module
diff --git a/engine/SCons/exitfuncs.py b/engine/SCons/exitfuncs.py
index 8f5207d..43ae73b 100644
--- a/engine/SCons/exitfuncs.py
+++ b/engine/SCons/exitfuncs.py
@@ -27,7 +27,7 @@ Register functions which are executed when SCons exits for any reason.
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/exitfuncs.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/engine/SCons/exitfuncs.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import atexit
diff --git a/scons-time.1 b/scons-time.1
index 2b456e6..6c139b3 100644
--- a/scons-time.1
+++ b/scons-time.1
@@ -2,12 +2,12 @@
.\" Title: SCONS-TIME
.\" Author: [see the "AUTHORS" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\" Date: 08/08/2019
-.\" Manual: SCons 3.1.1
-.\" Source: SCons 3.1.1
+.\" Date: 12/17/2019
+.\" Manual: SCons 3.1.2
+.\" Source: SCons 3.1.2
.\" Language: English
.\"
-.TH "SCONS\-TIME" "1" "08/08/2019" "SCons 3\&.1\&.1" "SCons 3\&.1\&.1"
+.TH "SCONS\-TIME" "1" "12/17/2019" "SCons 3\&.1\&.2" "SCons 3\&.1\&.2"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -35,7 +35,7 @@ scons-time \- generate and display SCons timing information
.SH "GENERATING TIMING INFORMATION"
.PP
\fBscons\-time run\fR
-[\fB\-hnqv\fR] [\fB\-\-aegis=\fR\fIPROJECT\fR] [\fB\-f \fR\fIFILE\fR] [\fB\-\-number=\fR\fINUMBER\fR] [\fB\-\-outdir=\fR\fIOUTDIR\fR] [\fB\-p \fR\fISTRING\fR] [\fB\-\-python=\fR\fIPYTHON\fR] [\fB\-s \fR\fIDIR\fR] [\fB\-\-scons=\fR\fISCONS\fR] [\fB\-\-svn=\fR\fIURL\fR] [\fIARGUMENTS\fR]
+[\fB\-hnqv\fR] [\fB\-f \fR\fIFILE\fR] [\fB\-\-number=\fR\fINUMBER\fR] [\fB\-\-outdir=\fR\fIOUTDIR\fR] [\fB\-p \fR\fISTRING\fR] [\fB\-\-python=\fR\fIPYTHON\fR] [\fB\-s \fR\fIDIR\fR] [\fB\-\-scons=\fR\fISCONS\fR] [\fB\-\-svn=\fR\fIURL\fR] [\fIARGUMENTS\fR]
.SS "Extracting Function Timings"
.PP
\fBscons\-time func\fR
@@ -377,7 +377,7 @@ files\&.
.SS "The run Subcommand"
.PP
\fBscons\-time run\fR
-[\fB\-hnqv\fR] [\fB\-\-aegis=\fR\fIPROJECT\fR] [\fB\-f \fR\fIFILE\fR] [\fB\-\-number=\fR\fINUMBER\fR] [\fB\-\-outdir=\fR\fIOUTDIR\fR] [\fB\-p \fR\fISTRING\fR] [\fB\-\-python=\fR\fIPYTHON\fR] [\fB\-s \fR\fIDIR\fR] [\fB\-\-scons=\fR\fISCONS\fR] [\fB\-\-svn=\fR\fIURL\fR] [\fIARGUMENTS\fR] The
+[\fB\-hnqv\fR] [\fB\-f \fR\fIFILE\fR] [\fB\-\-number=\fR\fINUMBER\fR] [\fB\-\-outdir=\fR\fIOUTDIR\fR] [\fB\-p \fR\fISTRING\fR] [\fB\-\-python=\fR\fIPYTHON\fR] [\fB\-s \fR\fIDIR\fR] [\fB\-\-scons=\fR\fISCONS\fR] [\fB\-\-svn=\fR\fIURL\fR] [\fIARGUMENTS\fR] The
\fBscons\-time run\fR
subcommand is the basic subcommand for profiling a specific configuration against a version of SCons\&.
.PP
@@ -420,22 +420,6 @@ The
\fBscons\-time run\fR
subcommand supports the following options:
.PP
-\-\-aegis=PROJECT
-.RS 4
-Specifies the Aegis
-\fIPROJECT\fR
-from which the version(s) of
-\fBscons\fR
-being timed will be extracted\&. When
-\fB\-\-aegis\fR
-is specified, the
-\fB\-\-number=\fR\fINUMBER\fR
-option specifies delta numbers that will be tested\&. Output from each invocation run will be placed in file names that match the Aegis delta numbers\&. If the
-\fB\-\-number=\fR
-option is not specified, then the default behavior is to time the tip of the specified
-\fIPROJECT\fR\&.
-.RE
-.PP
\-f FILE, \-\-file=FILE
.RS 4
Reads configuration information from the specified
@@ -466,13 +450,6 @@ Specifies the run number to be used in the names of the log files and profile ou
.RE
.PP
When used in conjunction with the
-\fB\-\-aegis=\fR\fIPROJECT\fR
-option,
-\fINUMBER\fR
-specifies one or more comma\-separated Aegis delta numbers that will be retrieved automatically from the specified Aegis
-\fIPROJECT\fR\&.
-.PP
-When used in conjunction with the
\fB\-\-svn=\fR\fIURL\fR
option,
\fINUMBER\fR
@@ -640,19 +617,6 @@ options\&. The configuration file is actually executed as a Python script\&. Set
\fBscons\-time\fR
script more conveniently than having to specify command\-line options or arguments for every run, and provides a handy way to "shrink\-wrap" the necessary information for producing (and reporting) consistent timing runs for a given configuration\&.
.PP
-\fBaegis\fR
-.RS 4
-The Aegis executable for extracting deltas\&. The default is simply
-\fBaegis\fR\&.
-.RE
-.PP
-\fBaegis_project\fR
-.RS 4
-The Aegis project from which deltas should be extracted\&. The default is whatever is specified with the
-\fB\-\-aegis=\fR
-command\-line option\&.
-.RE
-.PP
\fBarchive_list\fR
.RS 4
A list of archives (files or directories) that will be copied to the temporary directory in which SCons will be invoked\&.
diff --git a/scons.1 b/scons.1
index 255f056..dd9467e 100644
--- a/scons.1
+++ b/scons.1
@@ -3,11 +3,11 @@
.\" Author: Steven Knight
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
.\" Date: <pubdate>2004 - 2019</pubdate>
-.\" Manual: SCons 3.1.1
-.\" Source: SCons 3.1.1 version 3.1.1
+.\" Manual: SCons 3.1.2
+.\" Source: SCons 3.1.2 version 3.1.2
.\" Language: English
.\"
-.TH "SCONS" "1" "<pubdate>2004 - 2019</pubdate>" "SCons 3\&.1\&.1 version 3.1.1" "SCons 3\&.1\&.1"
+.TH "SCONS" "1" "<pubdate>2004 - 2019</pubdate>" "SCons 3\&.1\&.2 version 3.1.2" "SCons 3\&.1\&.2"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -116,9 +116,13 @@ to the commands used to build target files\&. This is so that builds will be gua
\fBscons\fR
is invoked\&. This also means that if the compiler or other commands that you want to use to build your target files are not in standard system locations,
\fBscons\fR
-will not find them unless you explicitly set the PATH to include those locations\&. Whenever you create an
+will not find them unless you explicitly set the
+\fBPATH\fR
+to include those locations\&. Whenever you create an
\fBscons\fR
-construction environment, you can propagate the value of PATH from your external environment as follows:
+construction environment, you can propagate the value of
+\fBPATH\fR
+from your external environment as follows:
.sp
.if n \{\
.RS 4
@@ -131,15 +135,21 @@ env = Environment(ENV = {\*(AqPATH\*(Aq : os\&.environ[\*(AqPATH\*(Aq]})
.RE
.\}
.PP
-Similarly, if the commands use external environment variables like $PATH, $HOME, $JAVA_HOME, $LANG, $SHELL, $TERM, etc\&., these variables can also be explicitly propagated:
+Similarly, if the commands use external environment variables like
+\fBPATH\fR,
+\fBHOME\fR,
+\fBJAVA_HOME\fR,
+\fBLANG\fR,
+\fBSHELL\fR,
+\fBTERM\fR, etc\&., these variables can also be explicitly propagated:
.sp
.if n \{\
.RS 4
.\}
.nf
import os
-env = Environment(ENV = {\*(AqPATH\*(Aq : os\&.environ[\*(AqPATH\*(Aq],
- \*(AqHOME\*(Aq : os\&.environ[\*(AqHOME\*(Aq]})
+env = Environment(ENV = {\*(AqPATH\*(Aq: os\&.environ[\*(AqPATH\*(Aq],
+ \*(AqHOME\*(Aq: os\&.environ[\*(AqHOME\*(Aq]})
.fi
.if n \{\
.RE
@@ -495,11 +505,22 @@ Works exactly the same way as the
option except for the way default targets are handled\&. When this option is used and no targets are specified on the command line, all default targets are built, whether or not they are below the current directory\&.
.RE
.PP
-\-\-debug=\fItype\fR
+\-\-debug=\fItype\fR[\fI,type\fR\&.\&.\&.]
.RS 4
Debug the build process\&.
-\fItype[,type\&.\&.\&.]\fR
-specifies what type of debugging\&. Multiple types may be specified, separated by commas\&. The following types are valid:
+\fItype\fR
+specifies the kind of debugging info to emit\&. Multiple types may be specified, separated by commas\&. The following entries show the recognized types:
+.RE
+.PP
+\-\-debug=action\-timestamps
+.RS 4
+Prints additional time profiling information\&. For each command, shows the absolute start and end times\&. This may be useful in debugging parallel builds\&. Implies the
+\fB\-\-debug=time\fR
+option\&.
+.sp
+Since
+scons
+3\&.1\&.
.RE
.PP
\-\-debug=count
@@ -516,13 +537,6 @@ files)\&.
Print a line for each unlink/relink (or copy) of a variant file from its source file\&. Includes debugging info for unlinking stale variant files, as well as unlinking old targets before building them\&.
.RE
.PP
-\-\-debug=dtree
-.RS 4
-A synonym for the newer
-\fB\-\-tree=derived\fR
-option\&. This will be deprecated in some future release and ultimately removed\&.
-.RE
-.PP
\-\-debug=explain
.RS 4
Print an explanation of precisely why
@@ -562,11 +576,6 @@ Prints a summary of hits and misses using the Memoizer, an internal subsystem th
Prints how much memory SCons uses before and after reading the SConscript files and before and after building targets\&.
.RE
.PP
-\-\-debug=nomemoizer
-.RS 4
-A deprecated option preserved for backwards compatibility\&.
-.RE
-.PP
\-\-debug=objects
.RS 4
Prints a list of the various objects of the various classes used internally by SCons\&.
@@ -609,13 +618,6 @@ Building myprog\&.o with action(s):
Prints an internal Python stack trace when encountering an otherwise unexplained error\&.
.RE
.PP
-\-\-debug=stree
-.RS 4
-A synonym for the newer
-\fB\-\-tree=all,status\fR
-option\&. This will be deprecated in some future release and ultimately removed\&.
-.RE
-.PP
\-\-debug=time
.RS 4
Prints various time profiling information:
@@ -712,13 +714,6 @@ the
option, and your build configuration allows good parallelization, the elapsed wall\-clock time should be significantly smaller than the total time spent executing all the build commands, since multiple build commands and intervening SCons processing should take place in parallel\&.)
.RE
.PP
-\-\-debug=tree
-.RS 4
-A synonym for the newer
-\fB\-\-tree=all\fR
-option\&. This will be deprecated in some future release and ultimately removed\&.
-.RE
-.PP
\-\-diskcheck=\fItypes\fR
.RS 4
Enable specific checks for whether or not there is a file on disk where the SCons configuration expects a directory (or vice versa), and whether or not RCS or SCCS sources exist when searching for source and include files\&. The
@@ -823,6 +818,16 @@ Force SCons to ignore changes in the implicit dependencies\&. This causes cached
\fB\-\-implicit\-cache\fR\&.
.RE
.PP
+\-\-install\-sandbox=\fIpath\fR
+.RS 4
+When using the
+\fBInstall\fR
+functions, prepend
+\fIpath\fR
+to the installation paths such that all installed files will be placed underneath
+\fIpath\fR\&.
+.RE
+.PP
\-\-interactive
.RS 4
Starts SCons in interactive mode\&. The SConscript files are read once and a
@@ -1257,31 +1262,6 @@ Enables or disables warnings about dependencies\&. These warnings are disabled b
Enables or disables all warnings about use of currently deprecated features\&. These warnings are enabled by default\&. Note that the
\fB\-\-warn=no\-deprecated\fR
option does not disable warnings about absolutely all deprecated features\&. Warnings for some deprecated features that have already been through several releases with deprecation warnings may be mandatory for a release or two before they are officially no longer supported by SCons\&. Warnings for some specific deprecated features may be enabled or disabled individually; see below\&.
-.PP
-\-\-warn=deprecated\-copy, \-\-warn=no\-deprecated\-copy
-.RS 4
-Enables or disables warnings about use of the deprecated
-\fBenv\&.Copy()\fR
-method\&.
-.RE
-.PP
-\-\-warn=deprecated\-source\-signatures, \-\-warn=no\-deprecated\-source\-signatures
-.RS 4
-Enables or disables warnings about use of the deprecated
-\fBSourceSignatures()\fR
-function or
-\fBenv\&.SourceSignatures()\fR
-method\&.
-.RE
-.PP
-\-\-warn=deprecated\-target\-signatures, \-\-warn=no\-deprecated\-target\-signatures
-.RS 4
-Enables or disables warnings about use of the deprecated
-\fBTargetSignatures()\fR
-function or
-\fBenv\&.TargetSignatures()\fR
-method\&.
-.RE
.RE
.PP
\-\-warn=duplicate\-environment, \-\-warn=no\-duplicate\-environment
@@ -1330,7 +1310,7 @@ Enables or disables warnings about the
\fB\-\-debug=object\fR
feature not working when
\fBscons\fR
-is run with the python
+is run with the Python
\fB\-O\fR
option or from optimized Python (\&.pyo) modules\&.
.RE
@@ -1411,7 +1391,7 @@ env[\*(AqBAR\*(Aq] = \*(Aqbar\*(Aq
.\}
.PP
As a convenience, construction variables may also be set or modified by the
-\fIparse_flags\fR
+\fBparse_flags\fR
keyword argument, which applies the
\fBenv\&.MergeFlags\fR
method (described below) to the argument value after all other processing is completed\&. This is useful either if the exact content of the flags is unknown (for example, read from a control file) or if the flags are distributed to a number of construction variables\&.
@@ -1474,35 +1454,60 @@ env = Environment(platform = my_platform)
.RE
.\}
.PP
-Additionally, a specific set of tools with which to initialize the environment may be specified as an optional keyword argument:
+Additionally, a specific set of tools with which to initialize the environment may be specified using the optional keyword argument
+\fItools\fR:
.sp
.if n \{\
.RS 4
.\}
.nf
-env = Environment(tools = [\*(Aqmsvc\*(Aq, \*(Aqlex\*(Aq])
+env = Environment(tools=[\*(Aqmsvc\*(Aq, \*(Aqlex\*(Aq])
.fi
.if n \{\
.RE
.\}
.PP
-Non\-built\-in tools may be specified using the toolpath argument:
+The
+\fItools\fR
+argument overrides the tool list, it does not add to it, so be sure to include all the tools you need\&. For example if you are building a c/c++ program you must add a tool for both compiler and linker, as in
+tools=[\*(Aqclang\*(Aq, \*(Aqlink\*(Aq]\&. The tool name
+\*(Aqdefault\*(Aq
+can be used to retain the default list\&.
+.PP
+Non\-built\-in tools may be specified using the optional
+\fItoolpath\fR
+keyword argument:
.sp
.if n \{\
.RS 4
.\}
.nf
-env = Environment(tools = [\*(Aqdefault\*(Aq, \*(Aqfoo\*(Aq], toolpath = [\*(Aqtools\*(Aq])
+env = Environment(tools=[\*(Aqdefault\*(Aq, \*(Aqfoo\*(Aq], toolpath=[\*(Aqtools\*(Aq])
.fi
.if n \{\
.RE
.\}
.PP
-This looks for a tool specification in tools/foo\&.py (as well as using the ordinary default tools for the platform)\&. foo\&.py should have two functions: generate(env, **kw) and exists(env)\&. The
-\fBgenerate()\fR
-function modifies the passed\-in environment to set up variables so that the tool can be executed; it may use any keyword arguments that the user supplies (see below) to vary its initialization\&. The
-\fBexists()\fR
-function should return a true value if the tool is available\&. Tools in the toolpath are used before any of the built\-in ones\&. For example, adding gcc\&.py to the toolpath would override the built\-in gcc tool\&. Also note that the toolpath is stored in the environment for use by later calls to
+This looks for a tool specification in
+tools/foo\&.py
+as well as using the ordinary default tools for the platform\&.
+.PP
+A tool specification must include two functions:
+\fBgenerate(env, **kw)\fR
+and
+\fBexists(env)\fR\&. The
+\fBgenerate\fR
+function modifies the environment referenced by
+\fIenv\fR
+to set up variables so that the tool can be executed; it may use any keyword arguments that the user supplies in
+\fIkw\fR
+(see below) to vary its initialization\&. The
+\fBexists\fR
+function should return a true value if the tool is available\&.
+.PP
+Tools in the toolpath are used before any of the built\-in ones\&. For example, adding
+gcc\&.py
+to the toolpath would override the built\-in gcc tool\&. Also note that the toolpath is stored in the environment for use by later calls to
\fBClone\fR() and
\fBTool\fR() methods:
.sp
@@ -1551,11 +1556,12 @@ function can use the arguments to modify the tool\*(Aqs behavior by setting up t
def generate(env, **kw):
# Sets MY_TOOL to the value of keyword argument \*(Aqarg1\*(Aq or 1\&.
env[\*(AqMY_TOOL\*(Aq] = kw\&.get(\*(Aqarg1\*(Aq, \*(Aq1\*(Aq)
+
def exists(env):
- return 1
+ return True
# in SConstruct:
-env = Environment(tools = [\*(Aqdefault\*(Aq, (\*(Aqmy_tool\*(Aq, {\*(Aqarg1\*(Aq: \*(Aqabc\*(Aq})],
+env = Environment(tools=[\*(Aqdefault\*(Aq, (\*(Aqmy_tool\*(Aq, {\*(Aqarg1\*(Aq: \*(Aqabc\*(Aq})],
toolpath=[\*(Aqtools\*(Aq])
.fi
.if n \{\
@@ -1573,7 +1579,7 @@ One feature now present within Scons is the ability to have nested tools\&. Tool
.\}
.nf
# namespaced builder
-env = Environment(ENV = os\&.environ, tools = [\*(AqSubDir1\&.SubDir2\&.SomeTool\*(Aq])
+env = Environment(ENV=os\&.environ, tools=[\*(AqSubDir1\&.SubDir2\&.SomeTool\*(Aq])
env\&.SomeTool(targets, sources)
# Search Paths
@@ -1736,7 +1742,7 @@ Uses:
.PP
cc
.RS 4
-Sets construction variables for generic POSIX C copmilers\&.
+Sets construction variables for generic POSIX C compilers\&.
.sp
Sets:
\fB$CC\fR,
@@ -1851,7 +1857,33 @@ Sets:
.PP
default
.RS 4
-Sets variables by calling a default list of Tool modules for the platform on which SCons is running\&.
+Sets
+construction variables
+for a default list of Tool modules\&. Use
+\fBdefault\fR
+in the tools list to retain the original defaults, since the
+\fItools\fR
+parameter is treated as a literal statement of the tools to be made available in that
+construction environment, not an addition\&.
+.sp
+The list of tools selected by default is not static, but is dependent both on the platform and on the software installed on the platform\&. Some tools will not initialize if an underlying command is not found, and some tools are selected from a list of choices on a first\-found basis\&. The finished tool list can be examined by inspecting the
+\fBTOOLS\fR
+construction variable
+in the
+construction environment\&.
+.sp
+On all platforms, all tools from the following list are selected whose respective conditions are met: filesystem, wix, lex, yacc, rpcgen, swig, jar, javac, javah, rmic, dvipdf, dvips, gs, tex, latex, pdflatex, pdftex, tar, zip, textfile\&.
+.sp
+On Linux systems, the default tools list selects (first\-found): a C compiler from gcc, intelc, icc, cc; a C++ compiler from g++, intelc, icc, cxx; an assembler from gas, nasm, masm; a linker from gnulink, ilink; a Fortran compiler from gfortran, g77, ifort, ifl, f95, f90, f77; and a static archiver \*(Aqar\*(Aq\&. It also selects all found from the list m4, rpm\&.
+.sp
+On Windows systems, the default tools list selects (first\-found): a C compiler from msvc, mingw, gcc, intelc, icl, icc, cc, bcc32; a C++ compiler from msvc, intelc, icc, g++, cxx, bcc32; an assembler from masm, nasm, gas, 386asm; a linker from mslink, gnulink, ilink, linkloc, ilink32; a Fortran compiler from gfortran, g77, ifl, cvf, f95, f90, fortran; and a static archiver from mslib, ar, tlib; It also selects all found from the list msvs, midl\&.
+.sp
+On MacOS systems, the default tools list selects (first\-found): a C compiler from gcc, cc; a C++ compiler from g++, cxx; an assembler \*(Aqas\*(Aq; a linker from applelink, gnulink; a Fortran compiler from gfortran, f95, f90, g77; and a static archiver ar\&. It also selects all found from the list m4, rpm\&.
+.sp
+Default lists for other platforms can be found by examining the
+scons
+source code (see
+SCons/Tool/__init__\&.py)\&.
.RE
.PP
dmd
@@ -2877,7 +2909,7 @@ Uses:
.PP
link
.RS 4
-Sets construction variables for generic POSIX linkers\&.
+Sets construction variables for generic POSIX linkers\&. This is a "smart" linker tool which selects a compiler to complete the linking based on the types of source files\&.
.sp
Sets:
\fB$LDMODULE\fR,
@@ -3719,27 +3751,49 @@ Sets:
Uses:
\fB$ZIPCOMSTR\fR\&.
.RE
-.PP
-Additionally, there is a "tool" named
-\fBdefault\fR
-which configures the environment with a default set of tools for the current platform\&.
-.PP
-On posix and cygwin platforms the GNU tools (e\&.g\&. gcc) are preferred by SCons, on Windows the Microsoft tools (e\&.g\&. msvc) followed by MinGW are preferred by SCons, and in OS/2 the IBM tools (e\&.g\&. icc) are preferred by SCons\&.
.SS "Builder Methods"
.PP
-Build rules are specified by calling a construction environment\*(Aqs builder methods\&. The arguments to the builder methods are
-\fBtarget\fR
-(a list of targets to be built, usually file names) and
-\fBsource\fR
-(a list of sources to be built, usually file names)\&.
+You tell
+\fBscons\fR
+what to build by calling Builders, functions which know to take a particular action when given files of a particular type to produce a particular result type\&.
+\fBscons\fR
+defines a number of builders, and you can also write your own\&. Builders are attached to a
+construction environment
+as methods, and the available builder methods are listed as key\-value pairs in the
+\fBBUILDERS\fR
+attribute of the
+construction environment\&. The available builders can be displayed like this for debugging purposes:
+.sp
+.if n \{\
+.RS 4
+.\}
+.nf
+print("Builders:", list(env[\*(AqBUILDERS\*(Aq]))
+.fi
+.if n \{\
+.RE
+.\}
+.PP
+Builder methods always take two arguments:
+\fItarget\fR
+(a target or a list of targets to be built) and
+\fIsource\fR
+(a source or list of sources to be used as input when building), although in some circumstances, the target argument can actually be omitted (see below)\&. Builder methods also take a variety of keyword arguments, described below\&.
.PP
Because long lists of file names can lead to a lot of quoting,
\fBscons\fR
supplies a
-\fBSplit()\fR
-global function and a same\-named environment method that split a single string into a list, separated on strings of white\-space characters\&. (These are similar to the split() member function of Python strings but work even if the input isn\*(Aqt a string\&.)
+\fBSplit\fR
+global function and a same\-named environment method that split a single string into a list, separated on strings of white\-space characters\&. (These are similar to the Python string
+\fBsplit\fR
+method, but work even if the input isn\*(Aqt a string\&.)
.PP
-Like all Python arguments, the target and source arguments to a builder method can be specified either with or without the "target" and "source" keywords\&. When the keywords are omitted, the target is first, followed by the source\&. The following are equivalent examples of calling the Program builder method:
+The target and source arguments to a builder method can be specified either as positional arguments, in which case the target comes first, or as keyword arguments, using
+\fItarget=\fR
+and
+\fIsource=\fR\&. The following are equivalent examples of calling the
+\fBProgram\fR
+builder method:
.sp
.if n \{\
.RS 4
@@ -3748,28 +3802,30 @@ Like all Python arguments, the target and source arguments to a builder method c
env\&.Program(\*(Aqbar\*(Aq, [\*(Aqbar\&.c\*(Aq, \*(Aqfoo\&.c\*(Aq])
env\&.Program(\*(Aqbar\*(Aq, Split(\*(Aqbar\&.c foo\&.c\*(Aq))
env\&.Program(\*(Aqbar\*(Aq, env\&.Split(\*(Aqbar\&.c foo\&.c\*(Aq))
-env\&.Program(source = [\*(Aqbar\&.c\*(Aq, \*(Aqfoo\&.c\*(Aq], target = \*(Aqbar\*(Aq)
-env\&.Program(target = \*(Aqbar\*(Aq, Split(\*(Aqbar\&.c foo\&.c\*(Aq))
-env\&.Program(target = \*(Aqbar\*(Aq, env\&.Split(\*(Aqbar\&.c foo\&.c\*(Aq))
-env\&.Program(\*(Aqbar\*(Aq, source = \*(Aqbar\&.c foo\&.c\*(Aq\&.split())
+env\&.Program(source=[\*(Aqbar\&.c\*(Aq, \*(Aqfoo\&.c\*(Aq], target=\*(Aqbar\*(Aq)
+env\&.Program(target=\*(Aqbar\*(Aq, source=Split(\*(Aqbar\&.c foo\&.c\*(Aq))
+env\&.Program(target=\*(Aqbar\*(Aq, source=env\&.Split(\*(Aqbar\&.c foo\&.c\*(Aq))
+env\&.Program(\*(Aqbar\*(Aq, source=\*(Aqbar\&.c foo\&.c\*(Aq\&.split())
.fi
.if n \{\
.RE
.\}
.PP
-Target and source file names that are not absolute path names (that is, do not begin with
-\fB/\fR
-on POSIX systems or
-\fB\e\fR
-on Windows systems, with or without an optional drive letter) are interpreted relative to the directory containing the
-\fBSConscript\fR
-file being read\&. An initial
+Python follows the POSIX pathname convention for path strings: if a string begins with the operating system pathname separator (on Windows both the slash and backslash separator work, and any leading drive specifier is ignored for the determination) it is considered an absolute path, otherwise it is a relative path\&. If the path string contains no separator characters, it is searched for as a file in the current directory\&. If it contains separator characters, the search follows down from the starting point, which is the top of the directory tree for an absolute path and the current directory for a relative path\&.
+.PP
+
+\fBscons\fR
+recognizes a third way to specify path strings: if the string begins with the
\fB#\fR
-(hash mark) on a path name means that the rest of the file name is interpreted relative to the directory containing the top\-level
+character it is top\-relative \- it works like a relative path but the search follows down from the directory containing the top\-level
\fBSConstruct\fR
-file, even if the
-\fB#\fR
-is followed by a directory separator character (slash or backslash)\&.
+rather than from the current directory (the # is allowed to be followed by a pathname separator, which is ignored if found in that position)\&. Top\-relative paths only work in places where
+scons
+will interpret the path (see some examples below)\&. To be used in other contexts the string will need to be converted to a relative or absolute path first\&.
+.PP
+Target and source pathnames can be absolute, relative, or top\-relative\&. Relative pathnames are searched considering the directory of the
+\fBSConscript\fR
+file currently being processed as the "current directory"\&.
.PP
Examples:
.sp
@@ -3808,15 +3864,17 @@ will deduce the target file name from the source file name\&. The following exam
\fBbar\fR
(on POSIX systems) or
\fBbar\&.exe\fR
-(on Windows systems) from the bar\&.c source file:
+(on Windows systems) from the
+bar\&.c
+source file:
.sp
.if n \{\
.RS 4
.\}
.nf
-env\&.Program(target = \*(Aqbar\*(Aq, source = \*(Aqbar\&.c\*(Aq)
-env\&.Program(\*(Aqbar\*(Aq, source = \*(Aqbar\&.c\*(Aq)
-env\&.Program(source = \*(Aqbar\&.c\*(Aq)
+env\&.Program(target=\*(Aqbar\*(Aq, source=\*(Aqbar\&.c\*(Aq)
+env\&.Program(\*(Aqbar\*(Aq, source=\*(Aqbar\&.c\*(Aq)
+env\&.Program(source=\*(Aqbar\&.c\*(Aq)
env\&.Program(\*(Aqbar\&.c\*(Aq)
.fi
.if n \{\
@@ -3825,15 +3883,15 @@ env\&.Program(\*(Aqbar\&.c\*(Aq)
.PP
As a convenience, a
\fBsrcdir\fR
-keyword argument may be specified when calling a Builder\&. When specified, all source file strings that are not absolute paths will be interpreted relative to the specified
+keyword argument may be specified when calling a Builder\&. When specified, all source file strings that are not absolute paths or top\-relative paths will be interpreted relative to the specified
\fBsrcdir\fR\&. The following example will build the
-\fBbuild/prog\fR
+build/prog
(or
-\fBbuild/prog\&.exe\fR
+build/prog\&.exe
on Windows) program from the files
-\fBsrc/f1\&.c\fR
+src/f1\&.c
and
-\fBsrc/f2\&.c\fR:
+src/f2\&.c:
.sp
.if n \{\
.RS 4
@@ -3845,7 +3903,9 @@ env\&.Program(\*(Aqbuild/prog\*(Aq, [\*(Aqf1\&.c\*(Aq, \*(Aqf2\&.c\*(Aq], srcdir
.RE
.\}
.PP
-It is possible to override or add construction variables when calling a builder method by passing additional keyword arguments\&. These overridden or added variables will only be in effect when building the target, so they will not affect other parts of the build\&. For example, if you want to add additional libraries for just one program:
+It is possible to
+\fIoverride\fR
+(replace or add) construction variables when calling a builder method by passing them as keyword arguments\&. These overrides will only be in effect when building that target, and will not affect other parts of the build\&. For example, if you want to specify some libraries needed by just one program:
.sp
.if n \{\
.RS 4
@@ -3874,7 +3934,7 @@ env\&.SharedLibrary(\*(Aqword\*(Aq, \*(Aqword\&.cpp\*(Aq,
(Note that both the $SHLIBSUFFIX and $LIBSUFFIXES variables must be set if you want SCons to search automatically for dependencies on the non\-standard library names; see the descriptions of these variables, below, for more information\&.)
.PP
It is also possible to use the
-\fIparse_flags\fR
+\fBparse_flags\fR
keyword argument in an override, to merge command\-line style arguments into the appropriate construction variables (see
\fBenv\&.MergeFlags\fR)\&.
.sp
@@ -3924,13 +3984,11 @@ from SCons\&.Script import *
.RE
.\}
.PP
-All builder methods return a list\-like object containing Nodes that represent the target or targets that will be built\&. A
+All builder methods return a list\-like object containing Nodes that will be built\&. A
\fINode\fR
is an internal SCons object which represents build targets or sources\&.
.PP
-The returned Node\-list object can be passed to other builder methods as source(s) or passed to any SCons function or method where a filename would normally be accepted\&. For example, if it were necessary to add a specific
-\fB\-D\fR
-flag when compiling one specific object file:
+The returned Node\-list object can be passed to other builder methods as source(s) or passed to any SCons function or method where a filename would normally be accepted\&. For example, if it were necessary to add a specific preprocessor define when compiling one specific object file:
.sp
.if n \{\
.RS 4
@@ -3943,9 +4001,15 @@ env\&.Program(source = [\*(Aqfoo\&.c\*(Aq, bar_obj_list, \*(Aqmain\&.c\*(Aq])
.RE
.\}
.PP
-Using a Node in this way makes for a more portable build by avoiding having to specify a platform\-specific object suffix when calling the Program() builder method\&.
+Using a Node in this way makes for a more portable build by avoiding having to specify a platform\-specific object suffix when calling the
+\fBProgram\fR
+builder method\&.
.PP
-Note that Builder calls will automatically "flatten" the source and target file lists, so it\*(Aqs all right to have the bar_obj list return by the StaticObject() call in the middle of the source file list\&. If you need to manipulate a list of lists returned by Builders directly using Python, you can either build the list by hand:
+Note that builder calls will automatically "flatten" the source and target file lists, so it\*(Aqs all right to have the
+bar_obj_list
+returned by the
+\fBStaticObject\fR
+call in the middle of the source file list\&. If you need to manipulate a list of lists returned by builders directly using Python, you can either build the list by hand:
.sp
.if n \{\
.RS 4
@@ -3962,7 +4026,8 @@ for object in objects:
.\}
.PP
Or you can use the
-\fBFlatten\fR() function supplied by scons to create a list containing just the Nodes, which may be more convenient:
+\fBFlatten\fR
+function supplied by scons to create a list containing just the Nodes, which may be more convenient:
.sp
.if n \{\
.RS 4
@@ -3978,12 +4043,12 @@ for object in objects:
.RE
.\}
.PP
-Note also that because Builder calls return a list\-like object, not an actual Python list, you should
+Note also that because builder calls return a list\-like object, not an actual Python list, you should
\fInot\fR
-use the Python
-\fB+=\fR
-operator to append Builder results to a Python list\&. Because the list and the object are different types, Python will not update the original list in place, but will instead create a new Node\-list object containing the concatenation of the list elements and the Builder results\&. This will cause problems for any other Python variables in your SCons configuration that still hold on to a reference to the original list\&. Instead, use the Python
-\fB\&.extend()\fR
+use the Python add operator (+
+or
++=) to append builder results to a Python list\&. Because the list and the object are different types, Python will not update the original list in place, but will instead create a new Node\-list object containing the concatenation of the list elements and the builder results\&. This will cause problems for any other Python variables in your SCons configuration that still hold on to a reference to the original list\&. Instead, use the Python list
+\fBextend\fR
method to make sure the list is updated in\-place\&. Example:
.sp
.if n \{\
@@ -3998,7 +4063,7 @@ object_files = []
#
# It will not update the object_files list in place\&.
#
-# Instead, use the \&.extend() method:
+# Instead, use the list extend method:
object_files\&.extend(Object(\*(Aqbar\&.c\*(Aq))
.fi
@@ -4006,8 +4071,8 @@ object_files\&.extend(Object(\*(Aqbar\&.c\*(Aq))
.RE
.\}
.PP
-The path name for a Node\*(Aqs file may be used by passing the Node to the Python\-builtin
-\fBstr()\fR
+The path name for a Node\*(Aqs file may be used by passing the Node to Python\*(Aqs builtin
+\fBstr\fR
function:
.sp
.if n \{\
@@ -4021,9 +4086,7 @@ print("The path to bar_obj is:", str(bar_obj_list[0]))
.RE
.\}
.PP
-Note again that because the Builder call returns a list, we have to access the first element in the list
-\fB(bar_obj_list[0])\fR
-to get at the Node that actually represents the object file\&.
+Note again that because the Builder call returns a list, we have to access the first element in the list ((bar_obj_list[0])) to get at the Node that actually represents the object file\&.
.PP
Builder calls support a
\fBchdir\fR
@@ -4067,7 +4130,10 @@ and
to use just the filename portion of the targets and source\&.
.PP
\fBscons\fR
-provides the following builder methods:
+predefined the following builder methods\&. Depending on the setup of a particular
+construction environment
+and on the type and software installation status of the underlying system, not all builders may be available to that
+construction environment\&.
.PP
\fBCFile()\fR, \fBenv\&.CFile()\fR
.RS 4
@@ -4094,7 +4160,7 @@ env\&.CFile(target = \*(Aqbar\*(Aq, source = \*(Aqbar\&.y\*(Aq)
.RS 4
The
\fBCommand\fR
-"Builder" is actually implemented as a function that looks like a Builder, but actually takes an additional argument of the action from which the Builder should be made\&. See the
+"Builder" is actually a function that looks like a Builder, but takes a required third argument, which is the action to take to construct the target from the source, used for "one\-off" builds where a full builder is not needed\&. Thus it does not follow the builder calling rules described at the start of this section\&. See instead the
\fBCommand\fR
function description for the calling syntax and details\&.
.RE
@@ -4555,6 +4621,13 @@ env\&.Install(\*(Aq/usr/local/bin\*(Aq, source = [\*(Aqfoo\*(Aq, \*(Aqbar\*(Aq])
.if n \{\
.RE
.\}
+.sp
+If the
+\fB\-\-install\-sandbox\fR
+command line option is given, the target directory will be prefixed by the directory path specified\&. This is useful to test installs without installing to a "live" location in the system\&.
+.sp
+See also
+\fBFindInstalledFiles\fR\&. For more thoughts on installation, see the User Guide (particularly the section on Command\-Line Targets and the chapters on Installing Files and on Alias Targets)\&.
.RE
.PP
\fBInstallAs()\fR, \fBenv\&.InstallAs()\fR
@@ -6049,52 +6122,14 @@ Builds an executable from D sources without first creating individual objects fo
.sp
D sources can be compiled file\-by\-file as C and C++ source are, and D is integrated into the
scons
-Object and Program builders for this model of build\&. D codes can though do whole source meta\-programming (some of the testing frameworks do this)\&. For this it is imperative that all sources are compiled and linked in a single call of the D compiler\&. This builder serves that purpose\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- env\&.ProgramAllAtOnce(\*(Aqexecutable\*(Aq, [\*(Aqmod_a\&.d, mod_b\&.d\*(Aq, \*(Aqmod_c\&.d\*(Aq])
-
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-This command will compile the modules mod_a, mod_b, and mod_c in a single compilation process without first creating object files for the modules\&. Some of the D compilers will create executable\&.o others will not\&.
-.sp
-Builds an executable from D sources without first creating individual objects for each file\&.
-.sp
-D sources can be compiled file\-by\-file as C and C++ source are, and D is integrated into the
-scons
-Object and Program builders for this model of build\&. D codes can though do whole source meta\-programming (some of the testing frameworks do this)\&. For this it is imperative that all sources are compiled and linked in a single call of the D compiler\&. This builder serves that purpose\&.
-.sp
-.if n \{\
-.RS 4
-.\}
-.nf
- env\&.ProgramAllAtOnce(\*(Aqexecutable\*(Aq, [\*(Aqmod_a\&.d, mod_b\&.d\*(Aq, \*(Aqmod_c\&.d\*(Aq])
-
-.fi
-.if n \{\
-.RE
-.\}
-.sp
-This command will compile the modules mod_a, mod_b, and mod_c in a single compilation process without first creating object files for the modules\&. Some of the D compilers will create executable\&.o others will not\&.
-.sp
-Builds an executable from D sources without first creating individual objects for each file\&.
-.sp
-D sources can be compiled file\-by\-file as C and C++ source are, and D is integrated into the
-scons
-Object and Program builders for this model of build\&. D codes can though do whole source meta\-programming (some of the testing frameworks do this)\&. For this it is imperative that all sources are compiled and linked in a single call of the D compiler\&. This builder serves that purpose\&.
+Object and Program builders for this model of build\&. D codes can though do whole source meta\-programming (some of the testing frameworks do this)\&. For this it is imperative that all sources are compiled and linked in a single call to the D compiler\&. This builder serves that purpose\&.
.sp
.if n \{\
.RS 4
.\}
.nf
- env\&.ProgramAllAtOnce(\*(Aqexecutable\*(Aq, [\*(Aqmod_a\&.d, mod_b\&.d\*(Aq, \*(Aqmod_c\&.d\*(Aq])
-
+ env\&.ProgramAllAtOnce(\*(Aqexecutable\*(Aq, [\*(Aqmod_a\&.d, mod_b\&.d\*(Aq, \*(Aqmod_c\&.d\*(Aq])
+
.fi
.if n \{\
.RE
@@ -7040,7 +7075,7 @@ include:
Action(action, [cmd/str/fun, [var, \&.\&.\&.]] [option=value, \&.\&.\&.]), env\&.Action(action, [cmd/str/fun, [var, \&.\&.\&.]] [option=value, \&.\&.\&.])
.RS 4
Creates an Action object for the specified
-\fIaction\fR\&. See the section "Action Objects," below, for a complete explanation of the arguments and behavior\&.
+\fIaction\fR\&. See the manpage section "Action Objects" for a complete explanation of the arguments and behavior\&.
.sp
Note that the
\fBenv\&.Action\fR() form of the invocation will expand construction variables in any argument strings, including the
@@ -7107,9 +7142,11 @@ AddOption(arguments)
.RS 4
This function adds a new command\-line option to be recognized\&. The specified
\fIarguments\fR
-are the same as supported by the standard Python
-\fBoptparse\&.add_option\fR() method (with a few additional capabilities noted below); see the documentation for
-optparse
+are the same as supported by the
+\fBadd_option\fR
+method in the standard Python library module
+\fIoptparse\fR, with a few additional capabilities noted below; see the documentation for
+\fIoptparse\fR
for a thorough discussion of its option\-processing capabities\&.
.sp
In addition to the arguments and values supported by the
@@ -7135,18 +7172,22 @@ keyword argument is supplied when calling
\fBAddOption\fR, the option will have a default value of
None\&.
.sp
+Unlike regular
+\fIoptparse\fR, option names added via
+\fBAddOption\fR
+must be matched exactly, the automatic matching of abbreviations on the command line for long options is not supported\&. To allow specific abbreviations, include them in the
+\fBAddOption\fR
+call\&.
+.sp
Once a new command\-line option has been added with
\fBAddOption\fR, the option value may be accessed using
\fBGetOption\fR
or
-\fBenv\&.GetOption\fR()\&. The value may also be set, using
+\fBenv\&.GetOption\fR()\&.
+
\fBSetOption\fR
-or
-\fBenv\&.SetOption\fR(), if conditions in a
-SConscript
-require overriding any default value\&. Note, however, that a value specified on the command line will
-\fIalways\fR
-override a value set by any SConscript file\&.
+is not currently supported for options added with
+\fBAddOption\fR\&.
.sp
Any specified
help=
@@ -7179,6 +7220,32 @@ env = Environment(PREFIX = GetOption(\*(Aqprefix\*(Aq))
.if n \{\
.RE
.\}
+.if n \{\
+.sp
+.\}
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBNote\fR
+.ps -1
+.br
+While
+\fBAddOption\fR
+behaves like
+\fBadd_option\fR, from the
+\fIoptparse\fR
+module, the behavior of options added by
+\fBAddOption\fR
+which take arguments is underfined in
+\fBscons\fR
+if whitespace (rather than an
+=
+sign) is used as the separator on the command line when the option is invoked\&. Such usage should be avoided\&.
+.sp .5v
+.RE
.RE
.PP
AddPostAction(target, action), env\&.AddPostAction(target, action)
@@ -7187,7 +7254,7 @@ Arranges for the specified
\fIaction\fR
to be performed after the specified
\fItarget\fR
-has been built\&. The specified action(s) may be an Action object, or anything that can be converted into an Action object (see below)\&.
+has been built\&. The specified action(s) may be an Action object, or anything that can be converted into an Action object See the manpage section "Action Objects" for a complete explanation\&.
.sp
When multiple targets are supplied, the action may be called multiple times, once after each action that generates one or more targets in the list\&.
.RE
@@ -7198,7 +7265,7 @@ Arranges for the specified
\fIaction\fR
to be performed before the specified
\fItarget\fR
-is built\&. The specified action(s) may be an Action object, or anything that can be converted into an Action object (see below)\&.
+is built\&. The specified action(s) may be an Action object, or anything that can be converted into an Action object See the manpage section "Action Objects" for a complete explanation\&.
.sp
When multiple targets are specified, the action(s) may be called multiple times, once before each action that generates one or more targets in the list\&.
.sp
@@ -7303,7 +7370,9 @@ be built if so specified\&. Multiple targets can be passed in to a single call t
.PP
env\&.Append(key=val, [\&.\&.\&.])
.RS 4
-Appends the specified keyword arguments to the end of construction variables in the environment\&. If the Environment does not have the specified construction variable, it is simply added to the environment\&. If the values of the construction variable and the keyword argument are the same type, then the two values will be simply added together\&. Otherwise, the construction variable and the value of the keyword argument are both coerced to lists, and the lists are added together\&. (See also the Prepend method, below\&.)
+Appends the specified keyword arguments to the end of construction variables in the environment\&. If the Environment does not have the specified construction variable, it is simply added to the environment\&. If the values of the construction variable and the keyword argument are the same type, then the two values will be simply added together\&. Otherwise, the construction variable and the value of the keyword argument are both coerced to lists, and the lists are added together\&. (See also the
+\fBPrepend\fR
+method)\&.
.sp
Example:
.sp
@@ -7369,25 +7438,10 @@ env\&.AppendUnique(CCFLAGS = \*(Aq\-g\*(Aq, FOO = [\*(Aqfoo\&.yyy\*(Aq])
.\}
.RE
.PP
-BuildDir(build_dir, src_dir, [duplicate]), env\&.BuildDir(build_dir, src_dir, [duplicate])
-.RS 4
-Deprecated synonyms for
-\fBVariantDir\fR
-and
-\fBenv\&.VariantDir\fR()\&. The
-\fIbuild_dir\fR
-argument becomes the
-\fIvariant_dir\fR
-argument of
-\fBVariantDir\fR
-or
-\fBenv\&.VariantDir\fR()\&.
-.RE
-.PP
Builder(action, [arguments]), env\&.Builder(action, [arguments])
.RS 4
Creates a Builder object for the specified
-\fIaction\fR\&. See the section "Builder Objects," below, for a complete explanation of the arguments and behavior\&.
+\fIaction\fR\&. See the manpage section "Builder Objects" for a complete explanation of the arguments and behavior\&.
.sp
Note that the
\fBenv\&.Builder\fR() form of the invocation will expand construction variables in any arguments strings, including the
@@ -7568,15 +7622,20 @@ Command(target, source, action, [key=val, \&.\&.\&.]), env\&.Command(target, sou
.RS 4
Executes a specific action (or list of actions) to build a target file or files\&. This is more convenient than defining a separate Builder object for a single special\-case build\&.
.sp
-As a special case, the
-\fIsource_scanner\fR
-keyword argument can be used to specify a Scanner object that will be used to scan the sources\&. (The global
+
+\fBCommand\fR
+builder accepts
+\fIsource_scanner\fR,
+\fItarget_scanner\fR,
+\fIsource_factory\fR, and
+\fItarget_factory\fR
+keyword arguments\&. The *_scanner args can be used to specify a Scanner object that will be used to apply a custom scanner for a source or target\&. For example, the global
DirScanner
-object can be used if any of the sources will be directories that must be scanned on\-disk for changes to files that aren\*(Aqt already specified in other Builder of function calls\&.)
+object can be used if any of the sources will be directories that must be scanned on\-disk for changes to files that aren\*(Aqt already specified in other Builder of function calls\&. The *_factory args take a factory function that the Command will use to turn any sources or targets specified as strings into SCons Nodes\&. See the sections "Builder Objects" below, for more information about how these args work in a Builder\&.
.sp
Any other keyword arguments specified override any same\-named existing construction variables\&.
.sp
-An action can be an external command, specified as a string, or a callable Python object; see "Action Objects," below, for more complete information\&. Also note that a string specifying an external command may be preceded by an
+An action can be an external command, specified as a string, or a callable Python object; see the manpage section "Action Objects" for more complete information\&. Also note that a string specifying an external command may be preceded by an
@
(at\-sign) to suppress printing the command in question, or by a
\-
@@ -7594,7 +7653,7 @@ env\&.Command(\*(Aqfoo\&.out\*(Aq, \*(Aqfoo\&.in\*(Aq,
env\&.Command(\*(Aqbar\&.out\*(Aq, \*(Aqbar\&.in\*(Aq,
["rm \-f $TARGET",
"$BAR_BUILD < $SOURCES > $TARGET"],
- ENV = {\*(AqPATH\*(Aq : \*(Aq/usr/local/bin/\*(Aq})
+ ENV={\*(AqPATH\*(Aq: \*(Aq/usr/local/bin/\*(Aq})
def rename(env, target, source):
import os
@@ -7602,7 +7661,7 @@ def rename(env, target, source):
env\&.Command(\*(Aqbaz\&.out\*(Aq, \*(Aqbaz\&.in\*(Aq,
["$BAZ_BUILD < $SOURCES > \&.tmp",
- rename ])
+ rename])
.fi
.if n \{\
.RE
@@ -7610,10 +7669,11 @@ env\&.Command(\*(Aqbaz\&.out\*(Aq, \*(Aqbaz\&.in\*(Aq,
.sp
Note that the
\fBCommand\fR
-function will usually assume, by default, that the specified targets and/or sources are Files, if no other part of the configuration identifies what type of entry it is\&. If necessary, you can explicitly specify that targets or source nodes should be treated as directoriese by using the
+function will usually assume, by default, that the specified targets and/or sources are Files, if no other part of the configuration identifies what type of entries they are\&. If necessary, you can explicitly specify that targets or source nodes should be treated as directories by using the
\fBDir\fR
or
-\fBenv\&.Dir\fR() functions\&.
+\fBenv\&.Dir\fR
+functions\&.
.sp
Examples:
.sp
@@ -7630,12 +7690,12 @@ env\&.Command(env\&.Dir(\*(Aq$DISTDIR\*(Aq)), None, make_distdir)
.RE
.\}
.sp
-(Also note that SCons will usually automatically create any directory necessary to hold a target file, so you normally don\*(Aqt need to create directories by hand\&.)
+Also note that SCons will usually automatically create any directory necessary to hold a target file, so you normally don\*(Aqt need to create directories by hand\&.
.RE
.PP
Configure(env, [custom_tests, conf_dir, log_file, config_h]), env\&.Configure([custom_tests, conf_dir, log_file, config_h])
.RS 4
-Creates a Configure object for integrated functionality similar to GNU autoconf\&. See the section "Configure Contexts," below, for a complete explanation of the arguments and behavior\&.
+Creates a Configure object for integrated functionality similar to GNU autoconf\&. See the manpage section "Configure Contexts" for a complete explanation of the arguments and behavior\&.
.RE
.PP
env\&.Copy([key=val, \&.\&.\&.])
@@ -7814,9 +7874,15 @@ DEFAULT_TARGETS
list; see below\&.
.RE
.PP
-DefaultEnvironment([args])
+DefaultEnvironment([**kwargs])
.RS 4
-Creates and returns a default construction environment object\&. This construction environment is used internally by SCons in order to execute many of the global functions in this list, and to fetch source files transparently from source code management systems\&.
+Creates and returns the default
+construction environment
+object\&. The default
+construction environment
+is used internally by SCons in order to execute many of the global functions in this list (i\&.e\&. those not called as methods of a specific
+construction environment), and to fetch source files transparently from source code management systems\&. The default environment is a singleton, so the keyword arguments affect it only on the first call, on subsequent calls the already\-constructed object is returned\&. The default environment can be modified in the same way as any
+construction environment\&.
.RE
.PP
Depends(target, dependency), env\&.Depends(target, dependency)
@@ -7858,7 +7924,12 @@ env\&.Depends(bar, installed_lib)
.PP
env\&.Dictionary([vars])
.RS 4
-Returns a dictionary object containing copies of all of the construction variables in the environment\&. If there are any variable names specified, only the specified construction variables are returned in the dictionary\&.
+Returns a dictionary object containing the
+construction variables
+in the
+construction environment\&. If there are any arguments specified, the values of the specified
+construction variables
+are returned as a string (if one argument) or as a list of strings\&.
.sp
Example:
.sp
@@ -7866,8 +7937,8 @@ Example:
.RS 4
.\}
.nf
-dict = env\&.Dictionary()
-cc_dict = env\&.Dictionary(\*(AqCC\*(Aq, \*(AqCCFLAGS\*(Aq, \*(AqCCCOM\*(Aq)
+cvars = env\&.Dictionary()
+cc_values = env\&.Dictionary(\*(AqCC\*(Aq, \*(AqCCFLAGS\*(Aq, \*(AqCCCOM\*(Aq)
.fi
.if n \{\
.RE
@@ -7890,7 +7961,7 @@ If
is a list, SCons returns a list of Dir nodes\&. Construction variables are expanded in
\fIname\fR\&.
.sp
-Directory Nodes can be used anywhere you would supply a string as a directory name to a Builder method or function\&. Directory Nodes have attributes and methods that are useful in many situations; see "File and Directory Nodes," below\&.
+Directory Nodes can be used anywhere you would supply a string as a directory name to a Builder method or function\&. Directory Nodes have attributes and methods that are useful in many situations; see manpage section "File and Directory Nodes" for more information\&.
.RE
.PP
env\&.Dump([key])
@@ -7906,7 +7977,7 @@ This SConstruct:
.\}
.nf
env=Environment()
-print env\&.Dump(\*(AqCCCOM\*(Aq)
+print(env\&.Dump(\*(AqCCCOM\*(Aq))
.fi
.if n \{\
.RE
@@ -7931,7 +8002,7 @@ While this SConstruct:
.\}
.nf
env=Environment()
-print env\&.Dump()
+print(env\&.Dump())
.fi
.if n \{\
.RE
@@ -8008,7 +8079,7 @@ Execute(action, [strfunction, varlist]), env\&.Execute(action, [strfunction, var
.RS 4
Executes an Action object\&. The specified
\fIaction\fR
-may be an Action object (see the section "Action Objects," below, for a complete explanation of the arguments and behavior), or it may be a command\-line string, list of commands, or executable Python function, each of which will be converted into an Action object and then executed\&. The exit value of the command or return value of the Python function will be returned\&.
+may be an Action object (see manpage section "Action Objects" for a complete explanation of the arguments and behavior), or it may be a command\-line string, list of commands, or executable Python function, each of which will be converted into an Action object and then executed\&. The exit value of the command or return value of the Python function will be returned\&.
.sp
Note that
scons
@@ -8108,7 +8179,7 @@ If
is a list, SCons returns a list of File nodes\&. Construction variables are expanded in
\fIname\fR\&.
.sp
-File Nodes can be used anywhere you would supply a string as a file name to a Builder method or function\&. File Nodes have attributes and methods that are useful in many situations; see "File and Directory Nodes," below\&.
+File Nodes can be used anywhere you would supply a string as a file name to a Builder method or function\&. File Nodes have attributes and methods that are useful in many situations; see manpage section "File and Directory Nodes" for more information\&.
.RE
.PP
FindFile(file, dirs), env\&.FindFile(file, dirs)
@@ -8842,7 +8913,7 @@ to allow duplicate values to be added\&.
.sp
Interpreted options and the construction variables they affect are as specified for the
\fBenv\&.ParseFlags\fR
-method (which this method calls)\&. See that method\*(Aqs description, below, for a table of options and construction variables\&.
+method (which this method calls)\&. See that method\*(Aqs description for a table of options and construction variables\&.
.RE
.PP
ParseDepends(filename, [must_exist, only_one]), env\&.ParseDepends(filename, [must_exist, only_one])
@@ -8902,6 +8973,7 @@ Flag values are translated accordig to the prefix found, and added to the follow
\-fmerge\-all\-constants CCFLAGS, LINKFLAGS
\-fopenmp CCFLAGS, LINKFLAGS
\-include CCFLAGS
+\-imacros CCFLAGS
\-isysroot CCFLAGS, LINKFLAGS
\-isystem CCFLAGS
\-iquote CCFLAGS
@@ -9309,7 +9381,7 @@ Return(\*(Aqval1 val2\*(Aq)
Scanner(function, [argument, keys, path_function, node_class, node_factory, scan_check, recursive]), env\&.Scanner(function, [argument, keys, path_function, node_class, node_factory, scan_check, recursive])
.RS 4
Creates a Scanner object for the specified
-\fIfunction\fR\&. See the section "Scanner Objects," below, for a complete explanation of the arguments and behavior\&.
+\fIfunction\fR\&. See manpage section "Scanner Objects" for a complete explanation of the arguments and behavior\&.
.RE
.PP
SConscript(scripts, [exports, variant_dir, duplicate, must_exist]), env\&.SConscript(scripts, [exports, variant_dir, duplicate, must_exist]), SConscript(dirs=subdirs, [name=script, exports, variant_dir, duplicate, must_exist]), env\&.SConscript(dirs=subdirs, [name=script, exports, variant_dir, duplicate, must_exist])
@@ -9819,59 +9891,6 @@ env\&.SourceCode(\*(Aqno_source\&.c\*(Aq, None)
.RE
.PP
-SourceSignatures(type), env\&.SourceSignatures(type)
-.RS 4
-Note: Although it is not yet officially deprecated, use of this function is discouraged\&. See the
-\fBDecider\fR
-function for a more flexible and straightforward way to configure SCons\*(Aq decision\-making\&.
-.sp
-The
-\fBSourceSignatures\fR
-function tells
-scons
-how to decide if a source file (a file that is not built from any other files) has changed since the last time it was used to build a particular target file\&. Legal values are
-MD5
-or
-timestamp\&.
-.sp
-If the environment method is used, the specified type of source signature is only used when deciding whether targets built with that environment are up\-to\-date or must be rebuilt\&. If the global function is used, the specified type of source signature becomes the default used for all decisions about whether targets are up\-to\-date\&.
-.sp
-
-MD5
-means
-scons
-decides that a source file has changed if the MD5 checksum of its contents has changed since the last time it was used to rebuild a particular target file\&.
-.sp
-
-timestamp
-means
-scons
-decides that a source file has changed if its timestamp (modification time) has changed since the last time it was used to rebuild a particular target file\&. (Note that although this is similar to the behavior of Make, by default it will also rebuild if the dependency is
-\fIolder\fR
-than the last time it was used to rebuild the target file\&.)
-.sp
-There is no different between the two behaviors for Python
-\fBValue\fR
-node objects\&.
-.sp
-
-MD5
-signatures take longer to compute, but are more accurate than
-timestamp
-signatures\&. The default value is
-MD5\&.
-.sp
-Note that the default
-\fBTargetSignatures\fR
-setting (see below) is to use this
-\fBSourceSignatures\fR
-setting for any target files that are used to build other target files\&. Consequently, changing the value of
-\fBSourceSignatures\fR
-will, by default, affect the up\-to\-date decision for all files in the build (or all files built with a specific construction environment when
-\fBenv\&.SourceSignatures\fR
-is used)\&.
-.RE
-.PP
Split(arg), env\&.Split(arg)
.RS 4
Returns a list of file names or other objects\&. If arg is a string, it will be split on strings of white\-space characters within the string, making it easier to write long lists of file names\&. If arg is already a list, the list will be returned untouched\&. If arg is any other type of object, it will be returned as a list containing just the object\&.
@@ -9946,7 +9965,7 @@ Example:
.RS 4
.\}
.nf
-print env\&.subst("The C compiler is: $CC")
+print(env\&.subst("The C compiler is: $CC"))
def compile(target, source, env):
sourceDir = env\&.subst("${SOURCE\&.srcdir}",
@@ -9973,9 +9992,9 @@ Examples:
.RS 4
.\}
.nf
-# makes sure the built library will be installed with 0644 file
+# makes sure the built library will be installed with 0o644 file
# access mode
-Tag( Library( \*(Aqlib\&.c\*(Aq ), UNIX_ATTR="0644" )
+Tag( Library( \*(Aqlib\&.c\*(Aq ), UNIX_ATTR="0o644" )
# marks file2\&.txt to be a documentation file
Tag( \*(Aqfile2\&.txt\*(Aq, DOC )
@@ -9985,86 +10004,6 @@ Tag( \*(Aqfile2\&.txt\*(Aq, DOC )
.\}
.RE
.PP
-TargetSignatures(type), env\&.TargetSignatures(type)
-.RS 4
-Note: Although it is not yet officially deprecated, use of this function is discouraged\&. See the
-\fBDecider\fR
-function for a more flexible and straightforward way to configure SCons\*(Aq decision\-making\&.
-.sp
-The
-\fBTargetSignatures\fR
-function tells
-scons
-how to decide if a target file (a file that
-\fIis\fR
-built from any other files) has changed since the last time it was used to build some other target file\&. Legal values are
-"build";
-"content"
-(or its synonym
-"MD5");
-"timestamp"; or
-"source"\&.
-.sp
-If the environment method is used, the specified type of target signature is only used for targets built with that environment\&. If the global function is used, the specified type of signature becomes the default used for all target files that don\*(Aqt have an explicit target signature type specified for their environments\&.
-.sp
-
-"content"
-(or its synonym
-"MD5") means
-scons
-decides that a target file has changed if the MD5 checksum of its contents has changed since the last time it was used to rebuild some other target file\&. This means
-scons
-will open up MD5 sum the contents of target files after they\*(Aqre built, and may decide that it does not need to rebuild "downstream" target files if a file was rebuilt with exactly the same contents as the last time\&.
-.sp
-
-"timestamp"
-means
-scons
-decides that a target file has changed if its timestamp (modification time) has changed since the last time it was used to rebuild some other target file\&. (Note that although this is similar to the behavior of Make, by default it will also rebuild if the dependency is
-\fIolder\fR
-than the last time it was used to rebuild the target file\&.)
-.sp
-
-"source"
-means
-scons
-decides that a target file has changed as specified by the corresponding
-\fBSourceSignatures\fR
-setting ("MD5"
-or
-"timestamp")\&. This means that
-scons
-will treat all input files to a target the same way, regardless of whether they are source files or have been built from other files\&.
-.sp
-
-"build"
-means
-scons
-decides that a target file has changed if it has been rebuilt in this invocation or if its content or timestamp have changed as specified by the corresponding
-\fBSourceSignatures\fR
-setting\&. This "propagates" the status of a rebuilt file so that other "downstream" target files will always be rebuilt, even if the contents or the timestamp have not changed\&.
-.sp
-
-"build"
-signatures are fastest because
-"content"
-(or
-"MD5") signatures take longer to compute, but are more accurate than
-"timestamp"
-signatures, and can prevent unnecessary "downstream" rebuilds when a target file is rebuilt to the exact same contents as the previous build\&. The
-"source"
-setting provides the most consistent behavior when other target files may be rebuilt from both source and target input files\&. The default value is
-"source"\&.
-.sp
-Because the default setting is
-"source", using
-\fBSourceSignatures\fR
-is generally preferable to
-\fBTargetSignatures\fR, so that the up\-to\-date decision will be consistent for all files (or all files built with a specific construction environment)\&. Use of
-\fBTargetSignatures\fR
-provides specific control for how built target files affect their "downstream" dependencies\&.
-.RE
-.PP
Tool(string, [toolpath, **kw]), env\&.Tool(string, [toolpath, **kw])
.RS 4
The
@@ -10280,11 +10219,65 @@ SConscript(dirs=\*(Aqdoc\*(Aq, variant_dir=\*(Aqbuild/doc\*(Aq, duplicate=0)
WhereIs(program, [path, pathext, reject]), env\&.WhereIs(program, [path, pathext, reject])
.RS 4
Searches for the specified executable
-\fIprogram\fR, returning the full path name to the program if it is found, and returning None if not\&. Searches the specified
-\fIpath\fR, the value of the calling environment\*(Aqs PATH (env[\*(AqENV\*(Aq][\*(AqPATH\*(Aq]), or the user\*(Aqs current external PATH (os\&.environ[\*(AqPATH\*(Aq]) by default\&. On Windows systems, searches for executable programs with any of the file extensions listed in the specified
-\fIpathext\fR, the calling environment\*(Aqs PATHEXT (env[\*(AqENV\*(Aq][\*(AqPATHEXT\*(Aq]) or the user\*(Aqs current PATHEXT (os\&.environ[\*(AqPATHEXT\*(Aq]) by default\&. Will not select any path name or names in the specified
+\fIprogram\fR, returning the full path name to the program if it is found, else
+None\&. Searches the value of the
+\fIpath\fR
+keyword argument, or if
+None
+(the default) the value of the calling environment\*(Aqs
+\fBPATH\fR
+(env[\*(AqENV\*(Aq][\*(AqPATH\*(Aq])\&. If
+\fIpath\fR
+is
+None
+and the
+env[\*(AqENV\*(Aq][\*(AqPATH\*(Aq]
+key does not exist, the user\*(Aqs current external
+\fBPATH\fR
+(os\&.environ[\*(AqPATH\*(Aq]) is used as fallback\&.
+.sp
+On Windows systems, searches for executable programs with any of the file extensions listed in the
+\fIpathext\fR
+keyword argument, or if
+None
+(the default) the calling environment\*(Aqs
+\fBPATHEXT\fR
+(env[\*(AqENV\*(Aq][\*(AqPATHEXT\*(Aq])\&. The user\*(Aqs current external
+\fBPATHEXT\fR
+(os\&.environ[\*(AqPATHEXT\*(Aq]) is used as a fallback if
+\fIpathext\fR
+is
+None
+and the key
+env[\*(AqENV\*(Aq][\*(AqPATHEXT\*(Aq]
+does not exist\&.
+.sp
+Will not select any path name or names in the specified
\fIreject\fR
list, if any\&.
+.if n \{\
+.sp
+.\}
+.RS 4
+.it 1 an-trap
+.nr an-no-space-flag 1
+.nr an-break-flag 1
+.br
+.ps +1
+\fBNote\fR
+.ps -1
+.br
+If you would prefer to search the user\*(Aqs current external
+\fBPATH\fR
+(os\&.environ[\*(AqPATH\*(Aq]) by default, consider using the function
+SCons\&.Util\&.WhereIs
+instead\&. Note that
+SCons\&.Util\&.WhereIs
+does not expand environment variables automatically (no implicit
+env\&.subst
+for its arguments)\&.
+.sp .5v
+.RE
.RE
.SS "SConscript Variables"
.PP
@@ -10865,12 +10858,12 @@ for MSI)\&. If set, the function will be called after the SCons template for the
.PP
CHANGED_SOURCES
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
CHANGED_TARGETS
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
CHANGELOG
@@ -11188,10 +11181,6 @@ The version number of the C++ compiler\&. This may or may not be set, depending
DC
.RS 4
The D compiler to use\&.
-.sp
-The D compiler to use\&.
-.sp
-The D compiler to use\&.
.RE
.PP
DCOM
@@ -11199,41 +11188,21 @@ DCOM
The command line used to compile a D file to an object file\&. Any options specified in the
\fB$DFLAGS\fR
construction variable is included on this command line\&.
-.sp
-The command line used to compile a D file to an object file\&. Any options specified in the
-\fB$DFLAGS\fR
-construction variable is included on this command line\&.
-.sp
-The command line used to compile a D file to an object file\&. Any options specified in the
-\fB$DFLAGS\fR
-construction variable is included on this command line\&.
.RE
.PP
DDEBUG
.RS 4
List of debug tags to enable when compiling\&.
-.sp
-List of debug tags to enable when compiling\&.
-.sp
-List of debug tags to enable when compiling\&.
.RE
.PP
DDEBUGPREFIX
.RS 4
DDEBUGPREFIX\&.
-.sp
-DDEBUGPREFIX\&.
-.sp
-DDEBUGPREFIX\&.
.RE
.PP
DDEBUGSUFFIX
.RS 4
DDEBUGSUFFIX\&.
-.sp
-DDEBUGSUFFIX\&.
-.sp
-DDEBUGSUFFIX\&.
.RE
.PP
DESCRIPTION
@@ -11254,55 +11223,31 @@ file\&.
DFILESUFFIX
.RS 4
DFILESUFFIX\&.
-.sp
-DFILESUFFIX\&.
-.sp
-DFILESUFFIX\&.
.RE
.PP
DFLAGPREFIX
.RS 4
DFLAGPREFIX\&.
-.sp
-DFLAGPREFIX\&.
-.sp
-DFLAGPREFIX\&.
.RE
.PP
DFLAGS
.RS 4
General options that are passed to the D compiler\&.
-.sp
-General options that are passed to the D compiler\&.
-.sp
-General options that are passed to the D compiler\&.
.RE
.PP
DFLAGSUFFIX
.RS 4
DFLAGSUFFIX\&.
-.sp
-DFLAGSUFFIX\&.
-.sp
-DFLAGSUFFIX\&.
.RE
.PP
DINCPREFIX
.RS 4
DINCPREFIX\&.
-.sp
-DINCPREFIX\&.
-.sp
-DINCPREFIX\&.
.RE
.PP
DINCSUFFIX
.RS 4
DLIBFLAGSUFFIX\&.
-.sp
-DLIBFLAGSUFFIX\&.
-.sp
-DLIBFLAGSUFFIX\&.
.RE
.PP
Dir
@@ -11320,118 +11265,66 @@ A function that converts a list of strings into a list of Dir instances relative
DLIB
.RS 4
Name of the lib tool to use for D codes\&.
-.sp
-Name of the lib tool to use for D codes\&.
-.sp
-Name of the lib tool to use for D codes\&.
.RE
.PP
DLIBCOM
.RS 4
The command line to use when creating libraries\&.
-.sp
-The command line to use when creating libraries\&.
-.sp
-The command line to use when creating libraries\&.
.RE
.PP
DLIBDIRPREFIX
.RS 4
DLIBLINKPREFIX\&.
-.sp
-DLIBLINKPREFIX\&.
-.sp
-DLIBLINKPREFIX\&.
.RE
.PP
DLIBDIRSUFFIX
.RS 4
DLIBLINKSUFFIX\&.
-.sp
-DLIBLINKSUFFIX\&.
-.sp
-DLIBLINKSUFFIX\&.
.RE
.PP
DLIBFLAGPREFIX
.RS 4
DLIBFLAGPREFIX\&.
-.sp
-DLIBFLAGPREFIX\&.
-.sp
-DLIBFLAGPREFIX\&.
.RE
.PP
DLIBFLAGSUFFIX
.RS 4
DLIBFLAGSUFFIX\&.
-.sp
-DLIBFLAGSUFFIX\&.
-.sp
-DLIBFLAGSUFFIX\&.
.RE
.PP
DLIBLINKPREFIX
.RS 4
DLIBLINKPREFIX\&.
-.sp
-DLIBLINKPREFIX\&.
-.sp
-DLIBLINKPREFIX\&.
.RE
.PP
DLIBLINKSUFFIX
.RS 4
DLIBLINKSUFFIX\&.
-.sp
-DLIBLINKSUFFIX\&.
-.sp
-DLIBLINKSUFFIX\&.
.RE
.PP
DLINK
.RS 4
Name of the linker to use for linking systems including D sources\&.
-.sp
-Name of the linker to use for linking systems including D sources\&.
-.sp
-Name of the linker to use for linking systems including D sources\&.
.RE
.PP
DLINKCOM
.RS 4
The command line to use when linking systems including D sources\&.
-.sp
-The command line to use when linking systems including D sources\&.
-.sp
-The command line to use when linking systems including D sources\&.
.RE
.PP
DLINKFLAGPREFIX
.RS 4
DLINKFLAGPREFIX\&.
-.sp
-DLINKFLAGPREFIX\&.
-.sp
-DLINKFLAGPREFIX\&.
.RE
.PP
DLINKFLAGS
.RS 4
List of linker flags\&.
-.sp
-List of linker flags\&.
-.sp
-List of linker flags\&.
.RE
.PP
DLINKFLAGSUFFIX
.RS 4
DLINKFLAGSUFFIX\&.
-.sp
-DLINKFLAGSUFFIX\&.
-.sp
-DLINKFLAGSUFFIX\&.
.RE
.PP
DOCBOOK_DEFAULT_XSL_EPUB
@@ -11594,10 +11487,6 @@ saxon\-xslt, respectively\&.
DPATH
.RS 4
List of paths to search for import modules\&.
-.sp
-List of paths to search for import modules\&.
-.sp
-List of paths to search for import modules\&.
.RE
.PP
DRPATHPREFIX
@@ -11633,28 +11522,16 @@ The list of suffixes of files that will be scanned for imported D package files\
DVERPREFIX
.RS 4
DVERPREFIX\&.
-.sp
-DVERPREFIX\&.
-.sp
-DVERPREFIX\&.
.RE
.PP
DVERSIONS
.RS 4
List of version tags to enable when compiling\&.
-.sp
-List of version tags to enable when compiling\&.
-.sp
-List of version tags to enable when compiling\&.
.RE
.PP
DVERSUFFIX
.RS 4
DVERSUFFIX\&.
-.sp
-DVERSUFFIX\&.
-.sp
-DVERSUFFIX\&.
.RE
.PP
DVIPDF
@@ -13295,6 +13172,13 @@ The string displayed when building loadable modules\&. If this is not set, then
(the command line) is displayed\&.
.RE
.PP
+LDMODULEEMITTER
+.RS 4
+Contains the emitter specification for the
+\fBLoadableModule\fR
+builder\&. The manpage section "Builder Objects" contains general information on specifying emitters\&.
+.RE
+.PP
LDMODULEFLAGS
.RS 4
General user options passed to the linker for building loadable modules\&.
@@ -13436,7 +13320,9 @@ variable is automatically generated\&.
.PP
LIBEMITTER
.RS 4
-TODO
+Contains the emitter specification for the
+\fBStaticLibrary\fR
+builder\&. The manpage section "Builder Objects" contains general information on specifying emitters\&.
.RE
.PP
_LIBFLAGS
@@ -13733,7 +13619,7 @@ The command line used to pass files to the Microsoft IDL compiler\&.
.PP
MIDLCOMSTR
.RS 4
-The string displayed when the Microsoft IDL copmiler is called\&. If this is not set, then
+The string displayed when the Microsoft IDL compiler is called\&. If this is not set, then
\fB$MIDLCOM\fR
(the command line) is displayed\&.
.RE
@@ -14659,7 +14545,9 @@ from
.PP
PROGEMITTER
.RS 4
-TODO
+Contains the emitter specification for the
+\fBProgram\fR
+builder\&. The manpage section "Builder Objects" contains general information on specifying emitters\&.
.RE
.PP
PROGPREFIX
@@ -15115,7 +15003,7 @@ construction variable\&.
.PP
SCANNERS
.RS 4
-A list of the available implicit dependency scanners\&. New file scanners may be added by appending to this list, although the more flexible approach is to associate scanners with a specific Builder\&. See the sections "Builder Objects" and "Scanner Objects," below, for more information\&.
+A list of the available implicit dependency scanners\&. New file scanners may be added by appending to this list, although the more flexible approach is to associate scanners with a specific Builder\&. See the manpage sections "Builder Objects" and "Scanner Objects" for more information\&.
.RE
.PP
SCONS_HOME
@@ -15206,19 +15094,11 @@ Options that are passed to the C++ compiler to generate shared\-library objects\
SHDC
.RS 4
The name of the compiler to use when compiling D source destined to be in a shared objects\&.
-.sp
-The name of the compiler to use when compiling D source destined to be in a shared objects\&.
-.sp
-The name of the compiler to use when compiling D source destined to be in a shared objects\&.
.RE
.PP
SHDCOM
.RS 4
The command line to use when compiling code to be part of shared objects\&.
-.sp
-The command line to use when compiling code to be part of shared objects\&.
-.sp
-The command line to use when compiling code to be part of shared objects\&.
.RE
.PP
SHDLIBVERSION
@@ -15234,28 +15114,16 @@ SHDLIBVERSIONFLAGS\&.
SHDLINK
.RS 4
The linker to use when creating shared objects for code bases include D sources\&.
-.sp
-The linker to use when creating shared objects for code bases include D sources\&.
-.sp
-The linker to use when creating shared objects for code bases include D sources\&.
.RE
.PP
SHDLINKCOM
.RS 4
The command line to use when generating shared objects\&.
-.sp
-The command line to use when generating shared objects\&.
-.sp
-The command line to use when generating shared objects\&.
.RE
.PP
SHDLINKFLAGS
.RS 4
The list of flags to use when generating a shared object\&.
-.sp
-The list of flags to use when generating a shared object\&.
-.sp
-The list of flags to use when generating a shared object\&.
.RE
.PP
SHELL
@@ -15597,7 +15465,9 @@ The string displayed when a Fortran source file is compiled to a shared\-library
.PP
SHLIBEMITTER
.RS 4
-TODO
+Contains the emitter specification for the
+\fBSharedLibrary\fR
+builder\&. The manpage section "Builder Objects" contains general information on specifying emitters\&.
.RE
.PP
SHLIBNOVERSIONSYMLINKS
@@ -15627,7 +15497,7 @@ The suffix used for shared library file names\&.
.PP
SHLIBVERSION
.RS 4
-When this construction variable is defined, a versioned shared library is created by
+When this construction variable is defined, a versioned shared library is created by the
\fBSharedLibrary\fR
builder\&. This activates the
\fB$_SHLIBVERSIONFLAGS\fR
@@ -15640,16 +15510,6 @@ versions should exist as alpha\-numeric, decimal\-delimited values as defined by
values include \*(Aq1\*(Aq, \*(Aq1\&.2\&.3\*(Aq, and \*(Aq1\&.2\&.gitaa412c8b\*(Aq\&.
.RE
.PP
-SHLIBVERSIONFLAGS
-.RS 4
-Extra flags added to
-\fB$SHLINKCOM\fR
-when building versioned
-\fBSharedLibrary\fR\&. These flags are only used when
-\fB$SHLIBVERSION\fR
-is set\&.
-.RE
-.PP
_SHLIBVERSIONFLAGS
.RS 4
This macro automatically introduces extra flags to
@@ -15666,6 +15526,16 @@ and some extra dynamically generated options (such as
\-Wl,\-soname=$_SHLIBSONAME\&. It is unused by "plain" (unversioned) shared libraries\&.
.RE
.PP
+SHLIBVERSIONFLAGS
+.RS 4
+Extra flags added to
+\fB$SHLINKCOM\fR
+when building versioned
+\fBSharedLibrary\fR\&. These flags are only used when
+\fB$SHLIBVERSION\fR
+is set\&.
+.RE
+.PP
SHLINK
.RS 4
The linker for programs that use shared libraries\&.
@@ -15741,7 +15611,7 @@ linker tool\&.
.PP
SOURCE
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
SOURCE_URL
@@ -15753,7 +15623,7 @@ field in the controlling information for Ipkg and RPM packages\&.
.PP
SOURCES
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
SPAWN
@@ -16010,7 +15880,7 @@ General options passed to the tar archiver\&.
.PP
TARGET
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
TARGET_ARCH
@@ -16043,7 +15913,7 @@ The name of the target operating system for the compiled objects created by this
.PP
TARGETS
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
TARSUFFIX
@@ -16127,12 +15997,12 @@ A list of the names of the Tool specifications that are part of this constructio
.PP
UNCHANGED_SOURCES
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
UNCHANGED_TARGETS
.RS 4
-A reserved variable name that may not be set or used in a construction environment\&. (See "Variable Substitution," below\&.)
+A reserved variable name that may not be set or used in a construction environment\&. (See the manpage section "Variable Substitution" for more information)\&.
.RE
.PP
VENDOR
@@ -16847,14 +16717,16 @@ method of the construction environment:
.RS 4
.\}
.nf
-dict = env\&.Dictionary()
-dict["CC"] = "cc"
+cvars = env\&.Dictionary()
+cvars["CC"] = "cc"
.fi
.if n \{\
.RE
.\}
.PP
-or using the [] operator:
+or using the key lookup operator
+[]
+directly on the construction environment:
.sp
.if n \{\
.RS 4
@@ -17789,7 +17661,7 @@ The
\fIFile\fR
and
\fIDir\fR
-Nodes, respectively\&. python objects, respectively\&. Those objects have several user\-visible attributes and methods that are often useful:
+Nodes, respectively\&. Python objects, respectively\&. Those objects have several user\-visible attributes and methods that are often useful:
.PP
path
.RS 4
@@ -17917,7 +17789,7 @@ incl = Dir(\*(Aqinclude\*(Aq)
f = incl\&.File(\*(Aqheader\&.h\*(Aq)
# Get a Node for a subdirectory within a directory
-dist = Dir(\*(Aqproject\-3\&.2\&.1)
+dist = Dir(\*(Aqproject\-3\&.2\&.1\*(Aq)
src = dist\&.Dir(\*(Aqsrc\*(Aq)
# Get a Node for a file in the same directory
@@ -18187,7 +18059,7 @@ b = Builder("my_build < $TARGET > $SOURCE",
.PP
multi
.RS 4
-Specifies whether this builder is allowed to be called multiple times for the same target file(s)\&. The default is 0, which means the builder can not be called multiple times for the same target file(s)\&. Calling a builder multiple times for the same target simply adds additional source files to the target; it is not allowed to change the environment associated with the target, specify addition environment overrides, or associate a different builder with the target\&.
+Specifies whether this builder is allowed to be called multiple times for the same target file(s)\&. The default is 0, which means the builder can not be called multiple times for the same target file(s)\&. Calling a builder multiple times for the same target simply adds additional source files to the target; it is not allowed to change the environment associated with the target, specify additional environment overrides, or associate a different builder with the target\&.
.RE
.PP
env
@@ -18534,12 +18406,12 @@ a = Action(build_it, varlist=[\*(AqXXX\*(Aq])
.\}
.PP
The
-\fBAction\fR() global function can be passed the following optional keyword arguments to modify the Action object\*(Aqs behavior:
+Action
+global function can be passed the following optional keyword arguments to modify the Action object\*(Aqs behavior:
.PP
-\fBchdir\fR
-The
-\fBchdir\fR
-keyword argument specifies that scons will execute the action after changing to the specified directory\&. If the
+
+\fIchdir\fR
+specifies that scons will execute the action after changing to the specified directory\&. If the
\fBchdir\fR
argument is a string or a directory Node, scons will change to the specified directory\&. If the
\fBchdir\fR
@@ -18568,11 +18440,9 @@ a = Action("build < ${SOURCE\&.file} > ${TARGET\&.file}",
.RE
.\}
.PP
-\fBexitstatfunc\fR
-The
-\fBAction\fR() global function also takes an
-\fBexitstatfunc\fR
-keyword argument which specifies a function that is passed the exit status (or return value) from the specified action and can return an arbitrary or modified value\&. This can be used, for example, to specify that an Action object\*(Aqs return value should be ignored under special conditions and SCons should, therefore, consider that the action always suceeds:
+
+\fIexitstatfunc\fR
+specifies a function that is passed the exit status (or return value) from the specified action and can return an arbitrary or modified value\&. This can be used, for example, to specify that an Action object\*(Aqs return value should be ignored under special conditions and SCons should, therefore, consider that the action always suceeds:
.sp
.if n \{\
.RS 4
@@ -18588,12 +18458,11 @@ a = Action("build < ${SOURCE\&.file} > ${TARGET\&.file}",
.RE
.\}
.PP
+
+\fIbatch_key\fR
+specifies that the Action can create multiple target files by processing multiple independent source files simultaneously\&. (The canonical example is "batch compilation" of multiple object files by passing multiple source files to a single invocation of a compiler such as Microsoft\*(Aqs Visual C / C++ compiler\&.) If the
\fBbatch_key\fR
-The
-\fBbatch_key\fR
-keyword argument can be used to specify that the Action can create multiple target files by processing multiple independent source files simultaneously\&. (The canonical example is "batch compilation" of multiple object files by passing multiple source files to a single invocation of a compiler such as Microsoft\*(Aqs Visual C / C++ compiler\&.) If the
-\fBbatch_key\fR
-argument is any non\-False, non\-callable Python value, the configured Action object will cause
+argument evaluates True and is not a callable object, the configured Action object will cause
\fBscons\fR
to collect all targets built with the Action object and configured with the same construction environment into single invocations of the Action object\*(Aqs command line or function\&. Command lines will typically want to use the
\fBCHANGED_SOURCES\fR
@@ -18617,7 +18486,7 @@ The
\fBbatch_key\fR
argument may also be a callable function that returns a key that will be used to identify different "batches" of target files to be collected for batch building\&. A
\fBbatch_key\fR
-function must take the following arguments:
+function must accept the following arguments:
.PP
action
.RS 4
@@ -18695,7 +18564,7 @@ Execute(Touch(\*(Aqfile\*(Aq))
.PP
Second, you can use these functions to supply Actions in a list for use by the
\fBCommand\fR
-method\&. This can allow you to perform more complicated sequences of file manipulation without relying on platform\-specific external commands: that
+method\&. This can allow you to perform more complicated sequences of file manipulation without relying on platform\-specific external commands:
.sp
.if n \{\
.RS 4
@@ -18724,11 +18593,11 @@ which can be octal or string, similar to the bash command\&. Examples:
.RS 4
.\}
.nf
-Execute(Chmod(\*(Aqfile\*(Aq, 0755))
+Execute(Chmod(\*(Aqfile\*(Aq, 0o755))
env\&.Command(\*(Aqfoo\&.out\*(Aq, \*(Aqfoo\&.in\*(Aq,
[Copy(\*(Aq$TARGET\*(Aq, \*(Aq$SOURCE\*(Aq),
- Chmod(\*(Aq$TARGET\*(Aq, 0755)])
+ Chmod(\*(Aq$TARGET\*(Aq, 0o755)])
Execute(Chmod(\*(Aqfile\*(Aq, "ugo+w"))
@@ -18857,9 +18726,9 @@ env\&.Command(\*(Aqmarker\*(Aq, \*(Aqinput_file\*(Aq,
.PP
Before executing a command,
\fBscons\fR
-performs construction variable interpolation on the strings that make up the command line of builders\&. Variables are introduced by a
-\fB$\fR
-prefix\&. Besides construction variables, scons provides the following variables for each command execution:
+performs construction variable interpolation on the string that makes up the command line of the builder\&. Variables are introduced in such strings by a
+$
+prefix\&. Besides regular construction variables, scons provides the following special variables for each command execution:
.PP
CHANGED_SOURCES
.RS 4
@@ -18903,11 +18772,15 @@ UNCHANGED_TARGETS
The file names of all targets that would be built from sources that have
\fInot\fR
changed since the target was last built\&.
-.sp
-(Note that the above variables are reserved and may not be set in a construction environment\&.)
.RE
.PP
-For example, given the construction variable CC=\*(Aqcc\*(Aq, targets=[\*(Aqfoo\*(Aq], and sources=[\*(Aqfoo\&.c\*(Aq, \*(Aqbar\&.c\*(Aq]:
+Note that the above variables are reserved and may not be set in a construction environment\&.
+.PP
+For example, given the construction variables
+CC=\*(Aqcc\*(Aq,
+targets=[\*(Aqfoo\*(Aq]
+and
+sources=[\*(Aqfoo\&.c\*(Aq, \*(Aqbar\&.c\*(Aq]:
.sp
.if n \{\
.RS 4
@@ -18931,7 +18804,9 @@ cc \-c \-o foo foo\&.c bar\&.c
.RE
.\}
.PP
-Variable names may be surrounded by curly braces ({}) to separate the name from the trailing characters\&. Within the curly braces, a variable name may have a Python slice subscript appended to select one or more items from a list\&. In the previous example, the string:
+Variable names may be surrounded by curly braces
+\fB{ }\fR
+to separate the name from surrounding characters which are not part of the name\&. Within the curly braces, a variable name may have a Python slice subscript appended to select one or more items from a list\&. In the previous example, the string:
.sp
.if n \{\
.RS 4
@@ -19048,15 +18923,29 @@ ${SOURCE\&.rsrcdir} => /usr/repository/src
.PP
Note that curly braces braces may also be used to enclose arbitrary Python code to be evaluated\&. (In fact, this is how the above modifiers are substituted, they are simply attributes of the Python objects that represent TARGET, SOURCES, etc\&.) See the section "Python Code Substitution" below, for more thorough examples of how this can be used\&.
.PP
-Lastly, a variable name may be a callable Python function associated with a construction variable in the environment\&. The function should take four arguments:
+Lastly, a variable name may be a callable Python function associated with a construction variable in the environment\&. The function should accept four arguments:
+.PP
\fItarget\fR
-\- a list of target nodes,
+.RS 4
+a list of target nodes
+.RE
+.PP
\fIsource\fR
-\- a list of source nodes,
+.RS 4
+a list of source nodes
+.RE
+.PP
\fIenv\fR
-\- the construction environment,
+.RS 4
+the construction environment
+.RE
+.PP
\fIfor_signature\fR
-\- a Boolean value that specifies whether the function is being called for generating a build signature\&. SCons will insert whatever the called function returns into the expanded string:
+.RS 4
+a Boolean value that specifies whether the function is being called for generating a build signature\&.
+.RE
+.PP
+SCons will insert whatever the called function returns into the expanded string:
.sp
.if n \{\
.RS 4
@@ -19145,9 +19034,13 @@ echo Last build occurred \&. > $TARGET
.\}
.SS "Python Code Substitution"
.PP
-Any python code within
-\fB${\fR\-\fB}\fR
-pairs gets evaluated by python \*(Aqeval\*(Aq, with the python globals set to the current environment\*(Aqs set of construction variables\&. So in the following case:
+Any Python code within curly braces
+\fB{ }\fR
+and introduced by the variable prefix
+\fB$\fR
+gets evaluated by the Python
+\fBeval\fR
+statement, with the Python globals set to the current environment\*(Aqs set of construction variables\&. So in the following case:
.sp
.if n \{\
.RS 4
@@ -19185,9 +19078,19 @@ echo BAR > foo\&.out
.RE
.\}
.PP
-according to the current value of env[\*(AqCOND\*(Aq] when the command is executed\&. The evaluation occurs when the target is being built, not when the SConscript is being read\&. So if env[\*(AqCOND\*(Aq] is changed later in the SConscript, the final value will be used\&.
+according to the current value of
+env[\*(AqCOND\*(Aq]
+when the command is executed\&. The evaluation takes place when the target is being built, not when the SConscript is being read\&. So if
+env[\*(AqCOND\*(Aq]
+is changed later in the SConscript, the final value will be used\&.
.PP
-Here\*(Aqs a more interesting example\&. Note that all of COND, FOO, and BAR are environment variables, and their values are substituted into the final command\&. FOO is a list, so its elements are interpolated separated by spaces\&.
+Here\*(Aqs a more interesting example\&. Note that all of
+\fBCOND\fR,
+\fBFOO\fR, and
+\fBBAR\fR
+are construction variables, and their values are substituted into the final command\&.
+\fBFOO\fR
+is a list, so its elements are interpolated separated by spaces\&.
.sp
.if n \{\
.RS 4
@@ -19260,7 +19163,7 @@ The
\fBenv\fR
argument is the construction environment for the scan\&. Fetch values from it using the
\fBenv\&.Dictionary()\fR
-method\&.
+method or using the key lookup operator directly on the construction environment\&.
.sp
The
\fBpath\fR
@@ -19376,9 +19279,17 @@ suffix as a Fortran source file that should
be run through the C preprocessor\&.
.SS "Windows: Cygwin Tools and Cygwin Python vs\&. Windows Pythons"
.PP
-Cygwin supplies a set of tools and utilities that let users work on a Windows system using a more POSIX\-like environment\&. The Cygwin tools, including Cygwin Python, do this, in part, by sharing an ability to interpret UNIX\-like path names\&. For example, the Cygwin tools will internally translate a Cygwin path name like /cygdrive/c/mydir to an equivalent Windows pathname of C:/mydir (equivalent to C:\emydir)\&.
+Cygwin supplies a set of tools and utilities that let users work on a Windows system using a more POSIX\-like environment\&. The Cygwin tools, including Cygwin Python, do this, in part, by sharing an ability to interpret UNIX\-like path names\&. For example, the Cygwin tools will internally translate a Cygwin path name like
+/cygdrive/c/mydir
+to an equivalent Windows pathname of
+C:/mydir
+(equivalent to
+C:\emydir)\&.
.PP
-Versions of Python that are built for native Windows execution, such as the python\&.org and ActiveState versions, do not have the Cygwin path name semantics\&. This means that using a native Windows version of Python to build compiled programs using Cygwin tools (such as gcc, bison, and flex) may yield unpredictable results\&. "Mixing and matching" in this way can be made to work, but it requires careful attention to the use of path names in your SConscript files\&.
+Versions of Python that are built for native Windows execution, such as the python\&.org and ActiveState versions, do not have the Cygwin path name semantics\&. This means that using a native Windows version of Python to build compiled programs using Cygwin tools (such as
+\fBgcc\fR,
+\fBbison\fR, and
+\fBflex\fR) may yield unpredictable results\&. "Mixing and matching" in this way can be made to work, but it requires careful attention to the use of path names in your SConscript files\&.
.PP
In practice, users can sidestep the issue by adopting the following rules: When using gcc, use the Cygwin\-supplied Python interpreter to run SCons; when using Microsoft Visual C/C++ (or some other Windows compiler) use the python\&.org or ActiveState version of Python to run SCons\&.
.SS "Windows: scons\&.bat file"
@@ -19582,7 +19493,7 @@ env[\*(AqBUILDERS][\*(AqPDFBuilder\*(Aq] = bld
.\}
.SS "Defining Your Own Scanner Object"
.PP
-The following example shows an extremely simple scanner (the
+The following example shows adding an extremely simple scanner (the
\fBkfile_scan\fR() function) that doesn\*(Aqt use a search path at all and simply returns the file names present on any
\fBinclude\fR
lines in the scanned file\&. This would implicitly assume that all included files live in the top\-level directory:
@@ -19604,8 +19515,10 @@ kscan = Scanner(name = \*(Aqkfile\*(Aq,
function = kfile_scan,
argument = None,
skeys = [\*(Aq\&.k\*(Aq])
-scanners = Environment()\&.Dictionary(\*(AqSCANNERS\*(Aq)
-env = Environment(SCANNERS = scanners + [kscan])
+
+scanners = DefaultEnvironment()[\*(AqSCANNERS\*(Aq]
+scanners\&.append(kscan)
+env = Environment(SCANNERS=scanners)
env\&.Command(\*(Aqfoo\*(Aq, \*(Aqfoo\&.k\*(Aq, \*(Aqkprocess < $SOURCES > $TARGET\*(Aq)
@@ -19621,7 +19534,7 @@ It is important to note that you have to return a list of File nodes from the sc
\fBFile()\fR
function of your current Environment in order to create nodes on the fly from a sequence of file names with relative paths\&.
.PP
-Here is a similar but more complete example that searches a path of directories (specified as the
+Here is a similar but more complete example that adds a scanner which searches a path of directories (specified as the
\fBMYPATH\fR
construction variable) for files that actually exist:
.sp
@@ -19647,15 +19560,16 @@ def my_scan(node, env, path, arg):
break
return env\&.File(results)
-scanner = Scanner(name = \*(Aqmyscanner\*(Aq,
- function = my_scan,
- argument = None,
- skeys = [\*(Aq\&.x\*(Aq],
- path_function = FindPathDirs(\*(AqMYPATH\*(Aq)
+scanner = Scanner(name=\*(Aqmyscanner\*(Aq,
+ function=my_scan,
+ argument=None,
+ skeys=[\*(Aq\&.x\*(Aq],
+ path_function=FindPathDirs(\*(AqMYPATH\*(Aq)
)
-scanners = Environment()\&.Dictionary(\*(AqSCANNERS\*(Aq)
-env = Environment(SCANNERS = scanners + [scanner],
- MYPATH = [\*(Aqincs\*(Aq])
+
+scanners = DefaultEnvironment()[\*(AqSCANNERS\*(Aq]
+scanners\&.append(scanner)
+env = Environment(SCANNERS=scanners, MYPATH=[\*(Aqincs\*(Aq])
env\&.Command(\*(Aqfoo\*(Aq, \*(Aqfoo\&.x\*(Aq, \*(Aqxprocess < $SOURCES > $TARGET\*(Aq)
.fi
@@ -19667,8 +19581,7 @@ The
\fBFindPathDirs\fR() function used in the previous example returns a function (actually a callable Python object) that will return a list of directories specified in the
\fB$MYPATH\fR
construction variable\&. It lets SCons detect the file
-\fBincs/foo\&.inc\fR
-, even if
+\fBincs/foo\&.inc\fR, even if
\fBfoo\&.x\fR
contains the line
\fBinclude foo\&.inc\fR
@@ -19689,11 +19602,11 @@ def pf(env, dir, target, source, arg):
results\&.append(top_dir + os\&.sep + p)
return results
-scanner = Scanner(name = \*(Aqmyscanner\*(Aq,
- function = my_scan,
- argument = None,
- skeys = [\*(Aq\&.x\*(Aq],
- path_function = pf
+scanner = Scanner(name=\*(Aqmyscanner\*(Aq,
+ function=my_scan,
+ argument=None,
+ skeys=[\*(Aq\&.x\*(Aq],
+ path_function=pf
)
.fi
.if n \{\
@@ -19792,7 +19705,7 @@ Note the use of the Export() method to set the "cppdefines" variable to a differ
.nf
SConstruct:
- env = Environment(LIBPATH = [\*(Aq#libA\*(Aq, \*(Aq#libB\*(Aq])
+ env = Environment(LIBPATH=[\*(Aq#libA\*(Aq, \*(Aq#libB\*(Aq])
Export(\*(Aqenv\*(Aq)
SConscript(\*(AqlibA/SConscript\*(Aq)
SConscript(\*(AqlibB/SConscript\*(Aq)
@@ -19811,7 +19724,7 @@ libB/SConscript:
Main/SConscript:
Import(\*(Aqenv\*(Aq)
- e = env\&.Copy(LIBS = [\*(Aqa\*(Aq, \*(Aqb\*(Aq])
+ e = env\&.Clone(LIBS=[\*(Aqa\*(Aq, \*(Aqb\*(Aq])
e\&.Program(\*(Aqfoo\*(Aq, Split(\*(Aqm1\&.c m2\&.c m3\&.c\*(Aq))
.fi
.if n \{\
@@ -19972,14 +19885,49 @@ env\&.Program(\*(AqMyApp\*(Aq, [\*(AqFoo\&.cpp\*(Aq, \*(AqBar\&.cpp\*(Aq])
For more information see the document for the PDB construction variable\&.
.SH "ENVIRONMENT"
.PP
+In general,
+scons
+is not controlled by environment variables set in the shell used to invoke it, leaving it up to the SConscript file author to import those if desired\&. However the following variables are imported by
+scons
+itself if set:
+.PP
SCONS_LIB_DIR
.RS 4
-Specifies the directory that contains the SCons Python module directory (e\&.g\&. /home/aroach/scons\-src\-0\&.01/src/engine)\&.
+Specifies the directory that contains the
+scons
+Python module directory (for example,
+/home/aroach/scons\-src\-0\&.01/src/engine)\&.
.RE
.PP
SCONSFLAGS
.RS 4
-A string of options that will be used by scons in addition to those passed on the command line\&.
+A string of options that will be used by
+scons
+in addition to those passed on the command line\&.
+.RE
+.PP
+SCONS_CACHE_MSVC_CONFIG
+.RS 4
+(Windows only)\&. If set, save the shell environment variables generated when setting up the Microsoft Visual C++ compiler (and/or Build Tools) to a file to give these settings, which are expensive to generate, persistence across
+scons
+invocations\&. Use of this option is primarily intended to aid performance in tightly controlled Continuous Integration setups\&.
+.sp
+If set to a True\-like value ("1",
+"true"
+or
+"True") will cache to a file named
+\&.scons_msvc_cache
+in the user\*(Aqs home directory\&. If set to a pathname, will use that pathname for the cache\&.
+.sp
+Note: use this cache with caution as it might be somewhat fragile: while each major toolset version (e\&.g\&. Visual Studio 2017 vs 2019) and architecture pair will get separate cache entries, if toolset updates cause a change to settings within a given release series,
+scons
+will not detect the change and will reuse old settings\&. Remove the cache file in case of problems with this\&.
+scons
+will ignore failures reading or writing the file and will silently revert to non\-cached behavior in such cases\&.
+.sp
+Since
+scons
+3\&.1\&.
.RE
.SH "SEE ALSO"
.PP
@@ -19991,7 +19939,11 @@ Design Document,
source code\&.
.SH "AUTHORS"
.PP
-Originally: Steven Knight <knight@baldmt\&.com> and Anthony Roach <aroach@electriceyeball\&.com> Since 2010: The SCons Development Team <scons\-dev@scons\&.org>
+Originally: Steven Knight
+knight@baldmt\&.com
+and Anthony Roach
+aroach@electriceyeball\&.com\&. Since 2010: The SCons Development Team
+scons\-dev@scons\&.org\&.
.SH "AUTHORS"
.PP
\fBSteven Knight\fR
diff --git a/sconsign.1 b/sconsign.1
index e8a3de2..7b241e6 100644
--- a/sconsign.1
+++ b/sconsign.1
@@ -2,12 +2,12 @@
.\" Title: SCONSIGN
.\" Author: [see the "AUTHORS" section]
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\" Date: 08/08/2019
-.\" Manual: SCons 3.1.1
-.\" Source: SCons 3.1.1
+.\" Date: 12/17/2019
+.\" Manual: SCons 3.1.2
+.\" Source: SCons 3.1.2
.\" Language: English
.\"
-.TH "SCONSIGN" "1" "08/08/2019" "SCons 3\&.1\&.1" "SCons 3\&.1\&.1"
+.TH "SCONSIGN" "1" "12/17/2019" "SCons 3\&.1\&.2" "SCons 3\&.1\&.2"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
diff --git a/script/scons b/script/scons
index 1d9595e..d889e74 100755
--- a/script/scons
+++ b/script/scons
@@ -25,15 +25,15 @@
from __future__ import print_function
-__revision__ = "src/script/scons.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/script/scons.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.1"
+__version__ = "3.1.2"
-__build__ = "72ae09dc35ac2626f8ff711d8c4b30b6138e08e3"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
__buildsys__ = "octodog"
-__date__ = "2019-08-08 14:50:06"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/script/scons-configure-cache b/script/scons-configure-cache
index 8bce553..ee11943 100644
--- a/script/scons-configure-cache
+++ b/script/scons-configure-cache
@@ -37,15 +37,15 @@ import glob
import json
import os
-__revision__ = "src/script/scons-configure-cache.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/script/scons-configure-cache.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.1"
+__version__ = "3.1.2"
-__build__ = "72ae09dc35ac2626f8ff711d8c4b30b6138e08e3"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
__buildsys__ = "octodog"
-__date__ = "2019-08-08 14:50:06"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/script/scons-time b/script/scons-time
index 15e3700..c371d59 100644
--- a/script/scons-time
+++ b/script/scons-time
@@ -31,7 +31,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import division, print_function
-__revision__ = "src/script/scons-time.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/script/scons-time.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import getopt
import glob
@@ -274,8 +274,6 @@ class SConsTimer(object):
return kw
default_settings = makedict(
- aegis = 'aegis',
- aegis_project = None,
chdir = None,
config_file = None,
initial_commands = [],
@@ -1113,7 +1111,6 @@ class SConsTimer(object):
help = """\
Usage: scons-time run [OPTIONS] [FILE ...]
- --aegis=PROJECT Use SCons from the Aegis PROJECT
--chdir=DIR Name of unpacked directory for chdir
-f FILE, --file=FILE Read configuration from specified FILE
-h, --help Print this help and exit
@@ -1138,7 +1135,6 @@ class SConsTimer(object):
short_opts = '?f:hnp:qs:v'
long_opts = [
- 'aegis=',
'file=',
'help',
'no-exec',
@@ -1157,9 +1153,7 @@ class SConsTimer(object):
opts, args = getopt.getopt(argv[1:], short_opts, long_opts)
for o, a in opts:
- if o in ('--aegis',):
- self.aegis_project = a
- elif o in ('-f', '--file'):
+ if o in ('-f', '--file'):
self.config_file = a
elif o in ('-?', '-h', '--help'):
self.do_help(['help', 'run'])
@@ -1211,8 +1205,6 @@ class SConsTimer(object):
prepare = None
if self.subversion_url:
prepare = self.prep_subversion_run
- elif self.aegis_project:
- prepare = self.prep_aegis_run
for run_number in run_number_list:
self.individual_run(run_number, self.archive_list, prepare)
@@ -1234,20 +1226,6 @@ class SConsTimer(object):
def scons_lib_dir_path(self, dir):
return os.path.join(dir, 'src', 'engine')
- def prep_aegis_run(self, commands, removals):
- self.aegis_tmpdir = tempfile.mkdtemp(prefix=self.name + '-aegis-')
- removals.append((shutil.rmtree, 'rm -rf %%s', self.aegis_tmpdir))
-
- self.aegis_parent_project = os.path.splitext(self.aegis_project)[0]
- self.scons = self.scons_path(self.aegis_tmpdir)
- self.scons_lib_dir = self.scons_lib_dir_path(self.aegis_tmpdir)
-
- commands.extend([
- (lambda: os.chdir(self.aegis_tmpdir), 'cd %(aegis_tmpdir)s'),
- '%(aegis)s -cp -ind -p %(aegis_parent_project)s .',
- '%(aegis)s -cp -ind -p %(aegis_project)s -delta %(run_number)s .',
- ])
-
def prep_subversion_run(self, commands, removals):
self.svn_tmpdir = tempfile.mkdtemp(prefix=self.name + '-svn-')
removals.append((shutil.rmtree, 'rm -rf %%s', self.svn_tmpdir))
diff --git a/script/scons.bat b/script/scons.bat
index a5b1b6e..dc67188 100644
--- a/script/scons.bat
+++ b/script/scons.bat
@@ -1,11 +1,11 @@
@REM Copyright (c) 2001 - 2019 The SCons Foundation
-@REM src/script/scons.bat 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan
+@REM src/script/scons.bat bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan
@echo off
set SCONS_ERRORLEVEL=
if "%OS%" == "Windows_NT" goto WinNT
@REM for 9x/Me you better not have more than 9 args
-python -c "from os.path import join; import sys; sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-3.1.1'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons-3.1.1'), join(sys.prefix, 'scons')] + sys.path; import SCons.Script; SCons.Script.main()" %1 %2 %3 %4 %5 %6 %7 %8 %9
+python -c "from os.path import join; import sys; sys.path = [ join(sys.prefix, 'Lib', 'site-packages', 'scons-3.1.2'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons-3.1.2'), join(sys.prefix, 'scons')] + sys.path; import SCons.Script; SCons.Script.main()" %1 %2 %3 %4 %5 %6 %7 %8 %9
@REM no way to set exit status of this script for 9x/Me
goto endscons
diff --git a/script/sconsign b/script/sconsign
index 7c5dda5..b1f7cd0 100644
--- a/script/sconsign
+++ b/script/sconsign
@@ -25,15 +25,15 @@
from __future__ import print_function
-__revision__ = "src/script/sconsign.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/script/sconsign.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.1"
+__version__ = "3.1.2"
-__build__ = "72ae09dc35ac2626f8ff711d8c4b30b6138e08e3"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
__buildsys__ = "octodog"
-__date__ = "2019-08-08 14:50:06"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/setup.py b/setup.py
index 922aee4..0d4b62e 100755
--- a/setup.py
+++ b/setup.py
@@ -44,13 +44,13 @@ NOTE: Installed SCons is not importable like usual Python packages. It is
"""
-__revision__ = "src/setup.py 72ae09dc35ac2626f8ff711d8c4b30b6138e08e3 2019-08-08 14:50:06 bdeegan"
+__revision__ = "src/setup.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import stat
import sys
-Version = "3.1.1"
+Version = "3.1.2"
man_pages = [
'scons.1',