summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJörg Frings-Fürst <debian@jff-webhosting.net>2019-12-29 15:50:38 +0100
committerJörg Frings-Fürst <debian@jff-webhosting.net>2019-12-29 15:50:38 +0100
commitc7ed3af5765539e212ecd5f93bd7ea5f9785bc25 (patch)
tree586ea369a93cb817c45c47dc2609ab58648f94ab
parentc7665433b2004d2b404d6fb9d6fd064998486f63 (diff)
parente2cfc8f485631bfd5f61d4af1921c7346a062875 (diff)
Merge branch 'release/debian/3.1.2+repack-1'debian/3.1.2+repack-1
-rw-r--r--.appveyor.yml125
-rw-r--r--.gitattributes6
-rw-r--r--CONTRIBUTING.md13
-rw-r--r--LICENSE2
-rwxr-xr-xREADME.rst14
-rw-r--r--SConstruct6
-rw-r--r--bin/SConsDoc.py218
-rw-r--r--bin/SConsExamples.py77
-rw-r--r--bin/calibrate.py10
-rw-r--r--bin/docs-update-generated.py17
-rw-r--r--bin/import-test.py2
-rw-r--r--bin/linecount.py2
-rw-r--r--bin/restore.sh20
-rw-r--r--bin/rsync-sourceforge32
-rw-r--r--bin/scons-proc.py14
-rwxr-xr-xbin/scons-review.sh24
-rwxr-xr-x[-rw-r--r--]bin/scons_dev_master.py2
-rw-r--r--bin/sfsum148
-rw-r--r--bin/timebuild65
-rw-r--r--bin/update-release-info.py2
-rw-r--r--config299
-rw-r--r--debian/changelog20
-rw-r--r--debian/compat1
-rw-r--r--debian/control13
-rw-r--r--doc/generated/builders.gen118
-rw-r--r--doc/generated/examples/caching_ex-random_1.xml4
-rw-r--r--doc/generated/examples/troubleshoot_Dump_1.xml31
-rw-r--r--doc/generated/examples/troubleshoot_Dump_2.xml39
-rw-r--r--doc/generated/examples/troubleshoot_explain1_3.xml2
-rw-r--r--doc/generated/examples/troubleshoot_stacktrace_2.xml4
-rw-r--r--doc/generated/functions.gen540
-rw-r--r--doc/generated/functions.mod12
-rw-r--r--doc/generated/tools.gen104
-rw-r--r--doc/generated/tools.mod4
-rw-r--r--doc/generated/variables.gen544
-rw-r--r--doc/generated/variables.mod2
-rw-r--r--doc/man/scons-time.xml57
-rw-r--r--doc/man/scons.xml699
-rw-r--r--doc/man/sconsign.xml4
-rw-r--r--doc/scons.mod4
-rw-r--r--doc/user/README2
-rw-r--r--doc/user/builders-writing.xml33
-rw-r--r--doc/user/command-line.xml63
-rw-r--r--doc/user/depends.xml179
-rw-r--r--doc/user/environments.xml93
-rw-r--r--doc/user/factories.xml10
-rw-r--r--doc/user/file-removal.xml2
-rw-r--r--doc/user/install.xml70
-rw-r--r--doc/user/mergeflags.xml8
-rw-r--r--doc/user/output.xml2
-rw-r--r--doc/user/parseconfig.xml4
-rw-r--r--doc/user/parseflags.xml12
-rw-r--r--doc/user/separate.xml6
-rw-r--r--doc/user/sideeffect.xml2
-rw-r--r--doc/user/troubleshoot.xml4
-rwxr-xr-xsrc/Announce.txt33
-rwxr-xr-xsrc/CHANGES.txt106
-rw-r--r--src/LICENSE.txt2
-rwxr-xr-xsrc/RELEASE.txt139
-rw-r--r--src/engine/SCons/Action.py2
-rw-r--r--src/engine/SCons/Action.xml2
-rw-r--r--src/engine/SCons/ActionTests.py6
-rw-r--r--src/engine/SCons/Builder.py17
-rw-r--r--src/engine/SCons/BuilderTests.py2
-rw-r--r--src/engine/SCons/CacheDir.py9
-rw-r--r--src/engine/SCons/CacheDirTests.py83
-rw-r--r--src/engine/SCons/Conftest.py4
-rw-r--r--src/engine/SCons/Debug.py2
-rw-r--r--src/engine/SCons/Defaults.py2
-rw-r--r--src/engine/SCons/Defaults.xml18
-rw-r--r--src/engine/SCons/DefaultsTests.py2
-rw-r--r--src/engine/SCons/Environment.py221
-rw-r--r--src/engine/SCons/Environment.xml519
-rw-r--r--src/engine/SCons/EnvironmentTests.py117
-rw-r--r--src/engine/SCons/Errors.py2
-rw-r--r--src/engine/SCons/ErrorsTests.py2
-rw-r--r--src/engine/SCons/Executor.py2
-rw-r--r--src/engine/SCons/ExecutorTests.py2
-rw-r--r--src/engine/SCons/Job.py2
-rw-r--r--src/engine/SCons/JobTests.py2
-rw-r--r--src/engine/SCons/Memoize.py2
-rw-r--r--src/engine/SCons/MemoizeTests.py2
-rw-r--r--src/engine/SCons/Node/Alias.py2
-rw-r--r--src/engine/SCons/Node/AliasTests.py2
-rw-r--r--src/engine/SCons/Node/FS.py14
-rw-r--r--src/engine/SCons/Node/FSTests.py9
-rw-r--r--src/engine/SCons/Node/NodeTests.py2
-rw-r--r--src/engine/SCons/Node/Python.py2
-rw-r--r--src/engine/SCons/Node/PythonTests.py2
-rw-r--r--src/engine/SCons/Node/__init__.py15
-rw-r--r--src/engine/SCons/PathList.py2
-rw-r--r--src/engine/SCons/PathListTests.py2
-rw-r--r--src/engine/SCons/Platform/PlatformTests.py2
-rw-r--r--src/engine/SCons/Platform/__init__.py2
-rw-r--r--src/engine/SCons/Platform/__init__.xml2
-rw-r--r--src/engine/SCons/Platform/aix.py2
-rw-r--r--src/engine/SCons/Platform/cygwin.py2
-rw-r--r--src/engine/SCons/Platform/darwin.py2
-rw-r--r--src/engine/SCons/Platform/hpux.py2
-rw-r--r--src/engine/SCons/Platform/irix.py2
-rw-r--r--src/engine/SCons/Platform/mingw.py2
-rw-r--r--src/engine/SCons/Platform/os2.py2
-rw-r--r--src/engine/SCons/Platform/posix.py2
-rw-r--r--src/engine/SCons/Platform/posix.xml2
-rw-r--r--src/engine/SCons/Platform/sunos.py2
-rw-r--r--src/engine/SCons/Platform/sunos.xml2
-rw-r--r--src/engine/SCons/Platform/virtualenv.py2
-rw-r--r--src/engine/SCons/Platform/virtualenvTests.py2
-rw-r--r--src/engine/SCons/Platform/win32.py60
-rw-r--r--src/engine/SCons/Platform/win32.xml2
-rw-r--r--src/engine/SCons/SConf.py2
-rw-r--r--src/engine/SCons/SConfTests.py30
-rw-r--r--src/engine/SCons/SConsign.py2
-rw-r--r--src/engine/SCons/SConsignTests.py2
-rw-r--r--src/engine/SCons/Scanner/C.py2
-rw-r--r--src/engine/SCons/Scanner/CTests.py2
-rw-r--r--src/engine/SCons/Scanner/D.py2
-rw-r--r--src/engine/SCons/Scanner/DTests.py2
-rw-r--r--src/engine/SCons/Scanner/Dir.py2
-rw-r--r--src/engine/SCons/Scanner/DirTests.py2
-rw-r--r--src/engine/SCons/Scanner/Fortran.py2
-rw-r--r--src/engine/SCons/Scanner/FortranTests.py2
-rw-r--r--src/engine/SCons/Scanner/IDL.py2
-rw-r--r--src/engine/SCons/Scanner/IDLTests.py2
-rw-r--r--src/engine/SCons/Scanner/LaTeX.py2
-rw-r--r--src/engine/SCons/Scanner/LaTeXTests.py2
-rw-r--r--src/engine/SCons/Scanner/Prog.py2
-rw-r--r--src/engine/SCons/Scanner/ProgTests.py2
-rw-r--r--src/engine/SCons/Scanner/RC.py2
-rw-r--r--src/engine/SCons/Scanner/RCTests.py2
-rw-r--r--src/engine/SCons/Scanner/SWIG.py2
-rw-r--r--src/engine/SCons/Scanner/ScannerTests.py2
-rw-r--r--src/engine/SCons/Scanner/__init__.py2
-rw-r--r--src/engine/SCons/Scanner/__init__.xml2
-rw-r--r--src/engine/SCons/Script/Interactive.py2
-rw-r--r--src/engine/SCons/Script/Main.py11
-rw-r--r--src/engine/SCons/Script/Main.xml39
-rw-r--r--src/engine/SCons/Script/MainTests.py2
-rw-r--r--src/engine/SCons/Script/SConsOptions.py24
-rw-r--r--src/engine/SCons/Script/SConscript.py26
-rw-r--r--src/engine/SCons/Script/SConscript.xml2
-rw-r--r--src/engine/SCons/Script/SConscriptTests.py2
-rw-r--r--src/engine/SCons/Script/__init__.py5
-rw-r--r--src/engine/SCons/Subst.py4
-rw-r--r--src/engine/SCons/Subst.xml2
-rw-r--r--src/engine/SCons/SubstTests.py2
-rw-r--r--src/engine/SCons/Taskmaster.py8
-rw-r--r--src/engine/SCons/TaskmasterTests.py2
-rw-r--r--src/engine/SCons/Tool/386asm.py2
-rw-r--r--src/engine/SCons/Tool/386asm.xml2
-rw-r--r--src/engine/SCons/Tool/DCommon.py2
-rw-r--r--src/engine/SCons/Tool/DCommon.xml370
-rw-r--r--src/engine/SCons/Tool/FortranCommon.py2
-rw-r--r--src/engine/SCons/Tool/FortranCommonTests.py2
-rw-r--r--src/engine/SCons/Tool/GettextCommon.py2
-rw-r--r--src/engine/SCons/Tool/JavaCommon.py2
-rw-r--r--src/engine/SCons/Tool/JavaCommonTests.py2
-rw-r--r--src/engine/SCons/Tool/MSCommon/__init__.py2
-rw-r--r--src/engine/SCons/Tool/MSCommon/arch.py2
-rw-r--r--src/engine/SCons/Tool/MSCommon/common.py60
-rw-r--r--src/engine/SCons/Tool/MSCommon/netframework.py2
-rw-r--r--src/engine/SCons/Tool/MSCommon/sdk.py32
-rw-r--r--src/engine/SCons/Tool/MSCommon/vc.py129
-rw-r--r--src/engine/SCons/Tool/MSCommon/vcTests.py2
-rw-r--r--src/engine/SCons/Tool/MSCommon/vs.py6
-rw-r--r--src/engine/SCons/Tool/PharLapCommon.py2
-rw-r--r--src/engine/SCons/Tool/ToolTests.py2
-rw-r--r--src/engine/SCons/Tool/__init__.py4
-rw-r--r--src/engine/SCons/Tool/__init__.xml32
-rw-r--r--src/engine/SCons/Tool/aixc++.py2
-rw-r--r--src/engine/SCons/Tool/aixc++.xml2
-rw-r--r--src/engine/SCons/Tool/aixcc.py2
-rw-r--r--src/engine/SCons/Tool/aixcc.xml2
-rw-r--r--src/engine/SCons/Tool/aixcxx.py2
-rw-r--r--src/engine/SCons/Tool/aixf77.py2
-rw-r--r--src/engine/SCons/Tool/aixf77.xml2
-rw-r--r--src/engine/SCons/Tool/aixlink.py2
-rw-r--r--src/engine/SCons/Tool/aixlink.xml2
-rw-r--r--src/engine/SCons/Tool/applelink.py2
-rw-r--r--src/engine/SCons/Tool/applelink.xml2
-rw-r--r--src/engine/SCons/Tool/ar.py2
-rw-r--r--src/engine/SCons/Tool/ar.xml2
-rw-r--r--src/engine/SCons/Tool/as.py2
-rw-r--r--src/engine/SCons/Tool/as.xml2
-rw-r--r--src/engine/SCons/Tool/bcc32.py2
-rw-r--r--src/engine/SCons/Tool/bcc32.xml2
-rw-r--r--src/engine/SCons/Tool/c++.py2
-rw-r--r--src/engine/SCons/Tool/c++.xml2
-rw-r--r--src/engine/SCons/Tool/cc.py2
-rw-r--r--src/engine/SCons/Tool/cc.xml4
-rw-r--r--src/engine/SCons/Tool/clang.py2
-rw-r--r--src/engine/SCons/Tool/clang.xml2
-rw-r--r--src/engine/SCons/Tool/clangxx.py2
-rw-r--r--src/engine/SCons/Tool/clangxx.xml2
-rw-r--r--src/engine/SCons/Tool/cvf.py2
-rw-r--r--src/engine/SCons/Tool/cvf.xml2
-rw-r--r--src/engine/SCons/Tool/cxx.py2
-rw-r--r--src/engine/SCons/Tool/cyglink.xml2
-rw-r--r--src/engine/SCons/Tool/default.py2
-rw-r--r--src/engine/SCons/Tool/default.xml89
-rw-r--r--src/engine/SCons/Tool/dmd.py2
-rw-r--r--src/engine/SCons/Tool/dmd.xml297
-rw-r--r--src/engine/SCons/Tool/docbook/__init__.xml2
-rw-r--r--src/engine/SCons/Tool/dvi.py2
-rw-r--r--src/engine/SCons/Tool/dvi.xml2
-rw-r--r--src/engine/SCons/Tool/dvipdf.py2
-rw-r--r--src/engine/SCons/Tool/dvipdf.xml2
-rw-r--r--src/engine/SCons/Tool/dvips.py2
-rw-r--r--src/engine/SCons/Tool/dvips.xml2
-rw-r--r--src/engine/SCons/Tool/f03.py2
-rw-r--r--src/engine/SCons/Tool/f03.xml2
-rw-r--r--src/engine/SCons/Tool/f08.py2
-rw-r--r--src/engine/SCons/Tool/f08.xml2
-rw-r--r--src/engine/SCons/Tool/f77.py2
-rw-r--r--src/engine/SCons/Tool/f77.xml2
-rw-r--r--src/engine/SCons/Tool/f90.py2
-rw-r--r--src/engine/SCons/Tool/f90.xml2
-rw-r--r--src/engine/SCons/Tool/f95.py2
-rw-r--r--src/engine/SCons/Tool/f95.xml2
-rw-r--r--src/engine/SCons/Tool/filesystem.py2
-rw-r--r--src/engine/SCons/Tool/fortran.py2
-rw-r--r--src/engine/SCons/Tool/fortran.xml2
-rw-r--r--src/engine/SCons/Tool/g++.py2
-rw-r--r--src/engine/SCons/Tool/g++.xml2
-rw-r--r--src/engine/SCons/Tool/g77.py2
-rw-r--r--src/engine/SCons/Tool/g77.xml2
-rw-r--r--src/engine/SCons/Tool/gas.py2
-rw-r--r--src/engine/SCons/Tool/gas.xml2
-rw-r--r--src/engine/SCons/Tool/gcc.py2
-rw-r--r--src/engine/SCons/Tool/gcc.xml2
-rw-r--r--src/engine/SCons/Tool/gdc.py2
-rw-r--r--src/engine/SCons/Tool/gdc.xml297
-rw-r--r--src/engine/SCons/Tool/gettext.xml2
-rw-r--r--src/engine/SCons/Tool/gettext_tool.py2
-rw-r--r--src/engine/SCons/Tool/gfortran.py2
-rw-r--r--src/engine/SCons/Tool/gfortran.xml2
-rw-r--r--src/engine/SCons/Tool/gnulink.py2
-rw-r--r--src/engine/SCons/Tool/gnulink.xml2
-rw-r--r--src/engine/SCons/Tool/gs.py2
-rw-r--r--src/engine/SCons/Tool/gs.xml2
-rw-r--r--src/engine/SCons/Tool/gxx.py2
-rw-r--r--src/engine/SCons/Tool/hpc++.py2
-rw-r--r--src/engine/SCons/Tool/hpc++.xml2
-rw-r--r--src/engine/SCons/Tool/hpcc.py2
-rw-r--r--src/engine/SCons/Tool/hpcc.xml2
-rw-r--r--src/engine/SCons/Tool/hpcxx.py2
-rw-r--r--src/engine/SCons/Tool/hplink.py2
-rw-r--r--src/engine/SCons/Tool/hplink.xml2
-rw-r--r--src/engine/SCons/Tool/icc.py2
-rw-r--r--src/engine/SCons/Tool/icc.xml2
-rw-r--r--src/engine/SCons/Tool/icl.py2
-rw-r--r--src/engine/SCons/Tool/icl.xml2
-rw-r--r--src/engine/SCons/Tool/ifl.py2
-rw-r--r--src/engine/SCons/Tool/ifl.xml2
-rw-r--r--src/engine/SCons/Tool/ifort.py2
-rw-r--r--src/engine/SCons/Tool/ifort.xml2
-rw-r--r--src/engine/SCons/Tool/ilink.py2
-rw-r--r--src/engine/SCons/Tool/ilink.xml2
-rw-r--r--src/engine/SCons/Tool/ilink32.py2
-rw-r--r--src/engine/SCons/Tool/ilink32.xml2
-rw-r--r--src/engine/SCons/Tool/install.py2
-rw-r--r--src/engine/SCons/Tool/install.xml18
-rw-r--r--src/engine/SCons/Tool/intelc.py6
-rw-r--r--src/engine/SCons/Tool/intelc.xml2
-rw-r--r--src/engine/SCons/Tool/ipkg.py2
-rw-r--r--src/engine/SCons/Tool/jar.py2
-rw-r--r--src/engine/SCons/Tool/jar.xml2
-rw-r--r--src/engine/SCons/Tool/javac.py2
-rw-r--r--src/engine/SCons/Tool/javac.xml2
-rw-r--r--src/engine/SCons/Tool/javah.py2
-rw-r--r--src/engine/SCons/Tool/javah.xml2
-rw-r--r--src/engine/SCons/Tool/latex.py2
-rw-r--r--src/engine/SCons/Tool/latex.xml2
-rw-r--r--src/engine/SCons/Tool/ldc.py2
-rw-r--r--src/engine/SCons/Tool/ldc.xml297
-rw-r--r--src/engine/SCons/Tool/lex.py2
-rw-r--r--src/engine/SCons/Tool/lex.xml2
-rw-r--r--src/engine/SCons/Tool/link.py2
-rw-r--r--src/engine/SCons/Tool/link.xml6
-rw-r--r--src/engine/SCons/Tool/linkloc.py2
-rw-r--r--src/engine/SCons/Tool/linkloc.xml2
-rw-r--r--src/engine/SCons/Tool/m4.py2
-rw-r--r--src/engine/SCons/Tool/m4.xml2
-rw-r--r--src/engine/SCons/Tool/masm.py2
-rw-r--r--src/engine/SCons/Tool/masm.xml2
-rw-r--r--src/engine/SCons/Tool/midl.py2
-rw-r--r--src/engine/SCons/Tool/midl.xml4
-rw-r--r--src/engine/SCons/Tool/mingw.py2
-rw-r--r--src/engine/SCons/Tool/mingw.xml2
-rw-r--r--src/engine/SCons/Tool/msgfmt.py2
-rw-r--r--src/engine/SCons/Tool/msgfmt.xml2
-rw-r--r--src/engine/SCons/Tool/msginit.py2
-rw-r--r--src/engine/SCons/Tool/msginit.xml2
-rw-r--r--src/engine/SCons/Tool/msgmerge.py2
-rw-r--r--src/engine/SCons/Tool/msgmerge.xml2
-rw-r--r--src/engine/SCons/Tool/mslib.py2
-rw-r--r--src/engine/SCons/Tool/mslib.xml2
-rw-r--r--src/engine/SCons/Tool/mslink.py2
-rw-r--r--src/engine/SCons/Tool/mslink.xml2
-rw-r--r--src/engine/SCons/Tool/mssdk.py2
-rw-r--r--src/engine/SCons/Tool/mssdk.xml2
-rw-r--r--src/engine/SCons/Tool/msvc.py2
-rw-r--r--src/engine/SCons/Tool/msvc.xml2
-rw-r--r--src/engine/SCons/Tool/msvs.py8
-rw-r--r--src/engine/SCons/Tool/msvs.xml2
-rw-r--r--src/engine/SCons/Tool/msvsTests.py2
-rw-r--r--src/engine/SCons/Tool/mwcc.py2
-rw-r--r--src/engine/SCons/Tool/mwcc.xml2
-rw-r--r--src/engine/SCons/Tool/mwld.py2
-rw-r--r--src/engine/SCons/Tool/mwld.xml2
-rw-r--r--src/engine/SCons/Tool/nasm.py2
-rw-r--r--src/engine/SCons/Tool/nasm.xml2
-rw-r--r--src/engine/SCons/Tool/packaging.xml2
-rw-r--r--src/engine/SCons/Tool/packaging/__init__.py2
-rw-r--r--src/engine/SCons/Tool/packaging/__init__.xml6
-rw-r--r--src/engine/SCons/Tool/packaging/ipk.py2
-rw-r--r--src/engine/SCons/Tool/packaging/msi.py4
-rw-r--r--src/engine/SCons/Tool/packaging/rpm.py2
-rw-r--r--src/engine/SCons/Tool/packaging/src_tarbz2.py2
-rw-r--r--src/engine/SCons/Tool/packaging/src_targz.py2
-rw-r--r--src/engine/SCons/Tool/packaging/src_tarxz.py2
-rw-r--r--src/engine/SCons/Tool/packaging/src_zip.py2
-rw-r--r--src/engine/SCons/Tool/packaging/tarbz2.py2
-rw-r--r--src/engine/SCons/Tool/packaging/targz.py2
-rw-r--r--src/engine/SCons/Tool/packaging/tarxz.py2
-rw-r--r--src/engine/SCons/Tool/packaging/zip.py2
-rw-r--r--src/engine/SCons/Tool/pdf.py2
-rw-r--r--src/engine/SCons/Tool/pdf.xml2
-rw-r--r--src/engine/SCons/Tool/pdflatex.py2
-rw-r--r--src/engine/SCons/Tool/pdflatex.xml2
-rw-r--r--src/engine/SCons/Tool/pdftex.py2
-rw-r--r--src/engine/SCons/Tool/pdftex.xml2
-rw-r--r--src/engine/SCons/Tool/qt.py2
-rw-r--r--src/engine/SCons/Tool/qt.xml2
-rw-r--r--src/engine/SCons/Tool/rmic.py2
-rw-r--r--src/engine/SCons/Tool/rmic.xml2
-rw-r--r--src/engine/SCons/Tool/rpcgen.py2
-rw-r--r--src/engine/SCons/Tool/rpcgen.xml2
-rw-r--r--src/engine/SCons/Tool/rpm.py2
-rw-r--r--src/engine/SCons/Tool/rpmutils.py2
-rw-r--r--src/engine/SCons/Tool/sgiar.py2
-rw-r--r--src/engine/SCons/Tool/sgiar.xml2
-rw-r--r--src/engine/SCons/Tool/sgic++.py2
-rw-r--r--src/engine/SCons/Tool/sgic++.xml2
-rw-r--r--src/engine/SCons/Tool/sgicc.py2
-rw-r--r--src/engine/SCons/Tool/sgicc.xml2
-rw-r--r--src/engine/SCons/Tool/sgicxx.py2
-rw-r--r--src/engine/SCons/Tool/sgilink.py2
-rw-r--r--src/engine/SCons/Tool/sgilink.xml2
-rw-r--r--src/engine/SCons/Tool/sunar.py2
-rw-r--r--src/engine/SCons/Tool/sunar.xml2
-rw-r--r--src/engine/SCons/Tool/sunc++.py2
-rw-r--r--src/engine/SCons/Tool/sunc++.xml2
-rw-r--r--src/engine/SCons/Tool/suncc.py2
-rw-r--r--src/engine/SCons/Tool/suncc.xml2
-rw-r--r--src/engine/SCons/Tool/suncxx.py39
-rw-r--r--src/engine/SCons/Tool/sunf77.py2
-rw-r--r--src/engine/SCons/Tool/sunf77.xml2
-rw-r--r--src/engine/SCons/Tool/sunf90.py2
-rw-r--r--src/engine/SCons/Tool/sunf90.xml2
-rw-r--r--src/engine/SCons/Tool/sunf95.py2
-rw-r--r--src/engine/SCons/Tool/sunf95.xml2
-rw-r--r--src/engine/SCons/Tool/sunlink.py2
-rw-r--r--src/engine/SCons/Tool/sunlink.xml2
-rw-r--r--src/engine/SCons/Tool/swig.py4
-rw-r--r--src/engine/SCons/Tool/swig.xml2
-rw-r--r--src/engine/SCons/Tool/tar.py2
-rw-r--r--src/engine/SCons/Tool/tar.xml2
-rw-r--r--src/engine/SCons/Tool/tex.py6
-rw-r--r--src/engine/SCons/Tool/tex.xml2
-rw-r--r--src/engine/SCons/Tool/textfile.py2
-rw-r--r--src/engine/SCons/Tool/textfile.xml2
-rw-r--r--src/engine/SCons/Tool/tlib.py2
-rw-r--r--src/engine/SCons/Tool/tlib.xml2
-rw-r--r--src/engine/SCons/Tool/wix.py2
-rw-r--r--src/engine/SCons/Tool/wixTests.py2
-rw-r--r--src/engine/SCons/Tool/xgettext.py2
-rw-r--r--src/engine/SCons/Tool/xgettext.xml2
-rw-r--r--src/engine/SCons/Tool/yacc.py2
-rw-r--r--src/engine/SCons/Tool/yacc.xml2
-rw-r--r--src/engine/SCons/Tool/zip.py2
-rw-r--r--src/engine/SCons/Tool/zip.xml2
-rw-r--r--src/engine/SCons/Util.py2
-rw-r--r--src/engine/SCons/UtilTests.py2
-rw-r--r--src/engine/SCons/Variables/BoolVariable.py2
-rw-r--r--src/engine/SCons/Variables/BoolVariableTests.py2
-rw-r--r--src/engine/SCons/Variables/EnumVariable.py2
-rw-r--r--src/engine/SCons/Variables/EnumVariableTests.py2
-rw-r--r--src/engine/SCons/Variables/ListVariable.py2
-rw-r--r--src/engine/SCons/Variables/ListVariableTests.py2
-rw-r--r--src/engine/SCons/Variables/PackageVariable.py2
-rw-r--r--src/engine/SCons/Variables/PackageVariableTests.py2
-rw-r--r--src/engine/SCons/Variables/PathVariable.py2
-rw-r--r--src/engine/SCons/Variables/PathVariableTests.py2
-rw-r--r--src/engine/SCons/Variables/VariablesTests.py2
-rw-r--r--src/engine/SCons/Variables/__init__.py2
-rw-r--r--src/engine/SCons/Warnings.py20
-rw-r--r--src/engine/SCons/WarningsTests.py2
-rw-r--r--src/engine/SCons/__init__.py10
-rw-r--r--src/engine/SCons/compat/__init__.py2
-rw-r--r--src/engine/SCons/compat/_scons_dbm.py2
-rw-r--r--src/engine/SCons/cpp.py2
-rw-r--r--src/engine/SCons/cppTests.py2
-rw-r--r--src/engine/SCons/exitfuncs.py2
-rw-r--r--src/script/scons-configure-cache.py10
-rw-r--r--src/script/scons-time.py26
-rw-r--r--src/script/scons.bat4
-rwxr-xr-xsrc/script/scons.py10
-rw-r--r--src/script/sconsign.py10
-rwxr-xr-xsrc/setup.py4
-rw-r--r--src/test_files.py2
-rw-r--r--src/test_interrupts.py2
-rw-r--r--src/test_pychecker.py2
-rw-r--r--src/test_setup.py11
-rw-r--r--src/test_strings.py4
-rw-r--r--testing/framework/README.txt2
-rw-r--r--testing/framework/TestCmd.py2
-rw-r--r--testing/framework/TestCommon.py4
-rw-r--r--testing/framework/TestRuntest.py2
-rw-r--r--testing/framework/TestSCons.py6
-rw-r--r--testing/framework/TestSConsMSVS.py2
-rw-r--r--testing/framework/TestSCons_time.py21
-rw-r--r--testing/framework/TestSConsign.py2
-rw-r--r--testing/framework/test-framework.rst2
424 files changed, 3192 insertions, 4593 deletions
diff --git a/.appveyor.yml b/.appveyor.yml
index d2c63cb..09cd996 100644
--- a/.appveyor.yml
+++ b/.appveyor.yml
@@ -1,10 +1,11 @@
#version: '3.0.1.{build}'
image:
- # linux builds disabled for now
+ # linux builds done in Travis CI for now
# - Ubuntu
- Visual Studio 2015
- Visual Studio 2017
+ - Visual Studio 2019
cache:
- downloads -> appveyor.yml
@@ -24,6 +25,7 @@ install:
- cmd: set STATIC_DEPS=true & C:\\%WINPYTHON%\\python.exe -m pip install -U --progress-bar off lxml
# install 3rd party tools to test with
- cmd: choco install --allow-empty-checksums dmd ldc swig vswhere xsltproc winflexbison
+ - cmd: set SCONS_CACHE_MSVC_CONFIG=true
- cmd: set
### LINUX ###
@@ -36,58 +38,37 @@ install:
- sh: which python$PYTHON
- sh: python$PYTHON --version
- sh: export PYSITEDIR=$(python$PYTHON -m site --user-site)
- - sh: python$PYTHON -m pip install --user -U --progress-bar off pip setuptools wheel
+ - sh: python$PYTHON -m pip install --user -U --progress-bar off pip setuptools wheel
- sh: python$PYTHON -m pip install --user -U --progress-bar off coverage codecov
- sh: STATIC_DEPS=true python$PYTHON -m pip install --user -U --progress-bar off lxml
- sh: ./.travis/install.sh
- sh: printenv
-# build matrix will be number of images multiplied
-# by each '-' below, split jobs into groups of 4
-# to avoid timeing out
+# build matrix will be number of images multiplied by each '-' below,
+# less any exclusions.
+# split builds into sets of four jobs due to appveyor per-job time limit
environment:
matrix:
- WINPYTHON: "Python27"
PYTHON: "2.7"
PYVER: 27
BUILD_JOB_NUM: 1
- COVERAGE: 1
+ COVERAGE: 0
- WINPYTHON: "Python27"
PYTHON: "2.7"
PYVER: 27
BUILD_JOB_NUM: 2
- COVERAGE: 1
+ COVERAGE: 0
- WINPYTHON: "Python27"
PYTHON: "2.7"
PYVER: 27
BUILD_JOB_NUM: 3
- COVERAGE: 1
+ COVERAGE: 0
- WINPYTHON: "Python27"
PYTHON: "2.7"
PYVER: 27
BUILD_JOB_NUM: 4
- COVERAGE: 1
-
- - WINPYTHON: "Python36"
- PYTHON: "3.6"
- PYVER: 36
- BUILD_JOB_NUM: 1
- COVERAGE: 1
- - WINPYTHON: "Python36"
- PYTHON: "3.6"
- PYVER: 36
- BUILD_JOB_NUM: 2
- COVERAGE: 1
- - WINPYTHON: "Python36"
- PYTHON: "3.6"
- PYVER: 36
- BUILD_JOB_NUM: 3
- COVERAGE: 1
- - WINPYTHON: "Python36"
- PYTHON: "3.6"
- PYVER: 36
- BUILD_JOB_NUM: 4
- COVERAGE: 1
+ COVERAGE: 0
- WINPYTHON: "Python35"
PYTHON: "3.5"
@@ -110,6 +91,27 @@ environment:
BUILD_JOB_NUM: 4
COVERAGE: 0
+ - WINPYTHON: "Python36"
+ PYTHON: "3.6"
+ PYVER: 36
+ BUILD_JOB_NUM: 1
+ COVERAGE: 1
+ - WINPYTHON: "Python36"
+ PYTHON: "3.6"
+ PYVER: 36
+ BUILD_JOB_NUM: 2
+ COVERAGE: 1
+ - WINPYTHON: "Python36"
+ PYTHON: "3.6"
+ PYVER: 36
+ BUILD_JOB_NUM: 3
+ COVERAGE: 1
+ - WINPYTHON: "Python36"
+ PYTHON: "3.6"
+ PYVER: 36
+ BUILD_JOB_NUM: 4
+ COVERAGE: 1
+
- WINPYTHON: "Python37"
PYTHON: "3.7"
PYVER: 37
@@ -133,40 +135,49 @@ environment:
# remove sets of build jobs based on critia below
# to fine tune the number and platforms tested
-matrix:
- exclude:
- # test python 3.5, 3.6 on Visual Studio 2015 image
- - image: Visual Studio 2015
- WINPYTHON: "Python37"
- - image: Visual Studio 2015
+matrix:
+ exclude:
+ # test python 3.5 on Visual Studio 2015 image
+ - image: Visual Studio 2015
WINPYTHON: "Python27"
+ - image: Visual Studio 2015
+ WINPYTHON: "Python36"
+ - image: Visual Studio 2015
+ WINPYTHON: "Python37"
- # test python 2.7, 3.7 on Visual Studio 2015 image
+ # test python 2.7, 3.6 on Visual Studio 2017 image
- image: Visual Studio 2017
WINPYTHON: "Python35"
- - image: Visual Studio 2017
+ - image: Visual Studio 2017
+ WINPYTHON: "Python37"
+
+ # test python 3.7 on Visual Studio 2019 image
+ - image: Visual Studio 2019
+ WINPYTHON: "Python27"
+ - image: Visual Studio 2019
+ WINPYTHON: "Python35"
+ - image: Visual Studio 2019
WINPYTHON: "Python36"
# test python 3.7 on Ubuntu
- - image: Ubuntu
- WINPYTHON: "Python27"
- - image: Ubuntu
+ - image: Ubuntu
+ WINPYTHON: "Python27"
+ - image: Ubuntu
WINPYTHON: "Python35"
- - image: Ubuntu
+ - image: Ubuntu
WINPYTHON: "Python36"
# remove some binaries we dont to be found
before_build:
- ps: |
- if ($isWindows)
- {
+ if ($isWindows) {
dir "C:\Program Files\Git\usr\bin\x*.exe"
if (Test-Path "C:\Program Files\Git\usr\bin\xsltproc.EXE" ) {
Remove-Item "C:\Program Files\Git\usr\bin\xsltproc.EXE" -ErrorAction Ignore
}
dir "C:\Program Files\Git\usr\bin\x*.exe"
}
-
+
build: off
build_script:
@@ -174,18 +185,17 @@ build_script:
- cmd: "C:\\%WINPYTHON%\\python.exe runtest.py -l -a > all_tests.txt"
- sh: python$PYTHON runtest.py -l -a > all_tests.txt
- # setup coverage by creating the coverage config file, and adding coverage
+ # setup coverage by creating the coverage config file, and adding coverage
# to the usercustomize so that all python processes start with coverage
- ps: |
- if ($env:COVERAGE -eq 1){
+ if ($env:COVERAGE -eq 1) {
$env:COVERAGE_PROCESS_START = "$($env:APPVEYOR_BUILD_FOLDER)/.coveragerc";
$env:PYTHONNOUSERSITE = "";
New-Item -ItemType Directory -Force -Path "$($env:PYSITEDIR)";
$env:COVERAGE_FILE = "$($env:APPVEYOR_BUILD_FOLDER)/.coverage";
$usercustomizeText = "import os`r`nos.environ['COVERAGE_PROCESS_START'] = '$($env:COVERAGE_PROCESS_START)'`r`nimport coverage`r`ncoverage.process_startup()";
$usercustomizeText|Set-Content "$($env:PYSITEDIR)/usercustomize.py";
- if ($isWindows)
- {
+ if ($isWindows) {
$coveragercFile = "[run]`r`nsource = $($env:APPVEYOR_BUILD_FOLDER)/src`r`nparallel = True`r`ndisable_warnings = trace-changed`r`nomit =`r`n`t*Tests.py`r`n`tsrc\test_*`r`n`tsrc\setup.py`r`n`r`n[path]`r`nsource = $($env:APPVEYOR_BUILD_FOLDER)`r`n[report]`r`nomit =`r`n`t*Tests.py`r`n`tsrc\test_*`r`n`tsrc\setup.py`r`n`r`n"
}
else
@@ -205,35 +215,34 @@ build_script:
if ( $start -eq 0 ){ $start = 1 };
get-content all_tests.txt | select -first ($end - $start) -skip ($start - 1) | Out-File -Encoding ASCII build_tests.txt;
- # exclude VS 10.0 because it hangs the testing until this is resolved:
+ # exclude VS 10.0 because it hangs the testing until this is resolved:
# https://help.appveyor.com/discussions/problems/19283-visual-studio-2010-trial-license-has-expired
- ps: |
New-Item -Name exclude_list.txt -ItemType File
$workaround_image = "Visual Studio 2015"
- if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq $workaround_image){
+ if ($env:APPVEYOR_BUILD_WORKER_IMAGE -eq $workaround_image) {
Add-Content -Path 'exclude_list.txt' -Value 'test\MSVS\vs-10.0-exec.py'
}
# Windows run the tests
# NOTE: running powershell from cmd on purpose because it formats the output
# correctly
- - cmd: powershell -Command "& { if($env:COVERAGE -eq 1) { coverage run -p --rcfile=$($env:COVERAGE_PROCESS_START) runtest.py -j 2 --exclude-list exclude_list.txt -f build_tests.txt } else { C:\\%WINPYTHON%\\python.exe runtest.py -j 2 --exclude-list exclude_list.txt -f build_tests.txt }; if($LastExitCode -eq 2 -Or $LastExitCode -eq 0) { $host.SetShouldExit(0 )} else {$host.SetShouldExit(1)}}"
+ - cmd: powershell -Command "& { if($env:COVERAGE -eq 1) { coverage run -p --rcfile=$($env:COVERAGE_PROCESS_START) runtest.py -j 2 -t --exclude-list exclude_list.txt -f build_tests.txt } else { C:\\%WINPYTHON%\\python.exe runtest.py -j 2 -t --exclude-list exclude_list.txt -f build_tests.txt }; if($LastExitCode -eq 2 -Or $LastExitCode -eq 0) { $host.SetShouldExit(0 )} else {$host.SetShouldExit(1)}}"
# linux run the tests
# unset JAVA_TOOL_OPTIONS because newer java prints this to stderr
- sh: |
unset JAVA_TOOL_OPTIONS
- if [ "$COVERAGE" -eq "1" ]; then
- coverage run -p --rcfile="$COVERAGE_PROCESS_START" runtest.py --exclude-list exclude_list.txt -f build_tests.txt || if [[ $? == 2 ]]; then true; else false; fi;
+ if [ "$COVERAGE" -eq "1" ]; then
+ coverage run -p --rcfile="$COVERAGE_PROCESS_START" runtest.py --exclude-list exclude_list.txt -f build_tests.txt || if [[ $? == 2 ]]; then true; else false; fi;
else
- python$PYTHON runtest.py -j 2 --exclude-list exclude_list.txt -f build_tests.txt || if [[ $? == 2 ]]; then true; else false; fi;
+ python$PYTHON runtest.py -j 2 --exclude-list exclude_list.txt -f build_tests.txt || if [[ $? == 2 ]]; then true; else false; fi;
fi
# run converage even if there was a test failure
on_finish:
- ps: |
- if ($env:COVERAGE -eq 1)
- {
+ if ($env:COVERAGE -eq 1) {
& coverage combine
& coverage report
& coverage xml -o coverage_xml.xml
@@ -244,5 +253,5 @@ on_finish:
- sh: if [ $COVERAGE -eq 1 ]; then codecov -X gcov --file coverage_xml.xml; fi
# not using coveralls, so leaving it commented out in case we switch back
#- cmd: "C:\\%WINPYTHON%\\python.exe -m pip install --user -U coveralls"
- #- sh: python$PYTHON -m pip install --user -U coveralls
+ #- sh: python$PYTHON -m pip install --user -U coveralls
#- ps: coveralls --rcfile="$($env:COVERAGE_PROCESS_START)"
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..089d31b
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,6 @@
+doc/* linguist-documentation
+src/engine/SCons/Tool/docbook/docbook-xsl-1.76.1 linguist-vendored
+*.xml linguist-documentation
+*.xsl linguist-documentation
+*.gen linguist-documentation
+
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..2b781b2
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,13 @@
+# Contributing to SCons
+
+First off, thanks for taking the time to contribute!
+
+Here are some pointers to get started, before more information gets moved here to this page.
+
+ * [Bugs and Feature Requests](https://scons.org/bugs.html)
+ * [Development](https://scons.org/dev.html)
+ * [SCons Developer's Guidelines](https://scons.org/guidelines.html)
+
+Various resources to contact are here:
+
+ * [Contacts](https://scons.org/contact.html)
diff --git a/LICENSE b/LICENSE
index 6b6cd6c..67e0e2f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -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/README.rst b/README.rst
index 07be9a9..7b7c221 100755
--- a/README.rst
+++ b/README.rst
@@ -499,13 +499,13 @@ about `Executing SCons Without Installing`_)::
Depending on the utilities installed on your system, any or all of the
following packages will be built::
- build/dist/scons-3.1.0.tar.gz
- build/dist/scons-3.1.0.zip
- build/dist/scons-doc-3.1.0.tar.gz
- build/dist/scons-local-3.1.0.tar.gz
- build/dist/scons-local-3.1.0.zip
- build/dist/scons-src-3.1.0.tar.gz
- build/dist/scons-src-3.1.0.zip
+ build/dist/scons-3.1.2.tar.gz
+ build/dist/scons-3.1.2.zip
+ build/dist/scons-doc-3.1.2.tar.gz
+ build/dist/scons-local-3.1.2.tar.gz
+ build/dist/scons-local-3.1.2.zip
+ build/dist/scons-src-3.1.2.tar.gz
+ build/dist/scons-src-3.1.2.zip
The SConstruct file is supposed to be smart enough to avoid trying to build
packages for which you don't have the proper utilities installed. For
diff --git a/SConstruct b/SConstruct
index 10eabe7..69221d0 100644
--- a/SConstruct
+++ b/SConstruct
@@ -8,7 +8,7 @@ from __future__ import print_function
copyright_years = '2001 - 2019'
# This gets inserted into the man pages to reflect the month of release.
-month_year = 'July 2019'
+month_year = 'December 2019'
#
# Copyright (c) 2001 - 2019 The SCons Foundation
@@ -49,7 +49,7 @@ import textwrap
import bootstrap
project = 'scons'
-default_version = '3.1.0'
+default_version = '3.1.2'
copyright = "Copyright (c) %s The SCons Foundation" % copyright_years
SConsignFile()
@@ -552,7 +552,7 @@ for p in [ scons ]:
#
# Now run everything in src_file through the sed command we
- # concocted to expand SConstruct, 3.1.0, etc.
+ # concocted to expand SConstruct, 3.1.2, etc.
#
for b in src_files:
s = p['filemap'].get(b, b)
diff --git a/bin/SConsDoc.py b/bin/SConsDoc.py
index e44a8db..f1de48a 100644
--- a/bin/SConsDoc.py
+++ b/bin/SConsDoc.py
@@ -26,7 +26,8 @@
#
from __future__ import print_function
-__doc__ = """
+
+__doc__ = r"""
This module parses home-brew XML files that document various things
in SCons. Right now, it handles Builders, functions, construction
variables, and Tools, but we expect it to get extended in the future.
@@ -117,16 +118,18 @@ import re
import sys
import copy
+PY2 = sys.version_info[0] == 2
+
# Do we have libxml2/libxslt/lxml?
has_libxml2 = True
try:
import libxml2
import libxslt
-except:
+except ImportError:
has_libxml2 = False
try:
import lxml
- except:
+ except ImportError:
raise ImportError("Failed to import either libxml2/libxslt or lxml")
has_etree = False
@@ -155,13 +158,16 @@ if not has_etree:
except ImportError:
raise ImportError("Failed to import ElementTree from any known place")
-re_entity = re.compile(r"\&([^;]+);")
+# patterns to help trim XML passed in as strings
+re_entity = re.compile(r"&([^;]+);")
re_entity_header = re.compile(r"<!DOCTYPE\s+sconsdoc\s+[^\]]+\]>")
# Namespace for the SCons Docbook XSD
-dbxsd="http://www.scons.org/dbxsd/v1.0"
+dbxsd = "http://www.scons.org/dbxsd/v1.0"
+# Namsespace pattern to help identify an scons-xml file read as bytes
+dbxsdpat = b'xmlns="%s"' % dbxsd.encode('utf-8')
# Namespace map identifier for the SCons Docbook XSD
-dbxid="dbx"
+dbxid = "dbx"
# Namespace for schema instances
xsi = "http://www.w3.org/2001/XMLSchema-instance"
@@ -170,19 +176,22 @@ copyright_comment = """
Copyright (c) 2001 - 2019 The SCons Foundation
This file is processed by the bin/SConsDoc.py module.
-See its __doc__ string for a discussion of the format.
+See its docstring for a discussion of the format.
"""
def isSConsXml(fpath):
- """ Check whether the given file is a SCons XML file, i.e. it
- contains the default target namespace definition.
+ """ Check whether the given file is an SCons XML file.
+
+ It is SCons XML if it contains the default target namespace definition
+ described by dbxsdpat
+
"""
try:
- with open(fpath,'r') as f:
+ with open(fpath, 'rb') as f:
content = f.read()
- if content.find('xmlns="%s"' % dbxsd) >= 0:
+ if content.find(dbxsdpat) >= 0:
return True
- except:
+ except Exception:
pass
return False
@@ -195,10 +204,11 @@ def remove_entities(content):
return content
-default_xsd = os.path.join('doc','xsd','scons.xsd')
+default_xsd = os.path.join('doc', 'xsd', 'scons.xsd')
ARG = "dbscons"
+
class Libxml2ValidityHandler:
def __init__(self):
@@ -224,10 +234,11 @@ class DoctypeEntity:
def getEntityString(self):
txt = """ <!ENTITY %(perc)s %(name)s SYSTEM "%(uri)s">
%(perc)s%(name)s;
-""" % {'perc' : perc, 'name' : self.name, 'uri' : self.uri}
+""" % {'perc': perc, 'name': self.name, 'uri': self.uri}
return txt
+
class DoctypeDeclaration:
def __init__(self, name_=None):
self.name = name_
@@ -253,14 +264,16 @@ class DoctypeDeclaration:
return content
if not has_libxml2:
- class TreeFactory:
+ class TreeFactory(object):
def __init__(self):
pass
- def newNode(self, tag):
+ @staticmethod
+ def newNode(tag):
return etree.Element(tag)
- def newEtreeNode(self, tag, init_ns=False):
+ @staticmethod
+ def newEtreeNode(tag, init_ns=False):
if init_ns:
NSMAP = {None: dbxsd,
'xsi' : xsi}
@@ -268,47 +281,66 @@ if not has_libxml2:
return etree.Element(tag)
- def copyNode(self, node):
+ @staticmethod
+ def copyNode(node):
return copy.deepcopy(node)
- def appendNode(self, parent, child):
+ @staticmethod
+ def appendNode(parent, child):
parent.append(child)
- def hasAttribute(self, node, att):
+ @staticmethod
+ def hasAttribute(node, att):
return att in node.attrib
- def getAttribute(self, node, att):
+ @staticmethod
+ def getAttribute(node, att):
return node.attrib[att]
- def setAttribute(self, node, att, value):
+ @staticmethod
+ def setAttribute(node, att, value):
node.attrib[att] = value
- def getText(self, root):
+ @staticmethod
+ def getText(root):
return root.text
- def setText(self, root, txt):
+ @staticmethod
+ def setText(root, txt):
root.text = txt
- def writeGenTree(self, root, fp):
+ @staticmethod
+ def writeGenTree(root, fp):
dt = DoctypeDeclaration()
- fp.write(etree.tostring(root, xml_declaration=True,
- encoding="UTF-8", pretty_print=True,
+ try:
+ encfun = unicode # PY2
+ except NameError:
+ encfun = str
+ fp.write(etree.tostring(root, encoding=encfun,
+ pretty_print=True,
doctype=dt.createDoctype()))
- def writeTree(self, root, fpath):
- with open(fpath, 'w') as fp:
- fp.write(etree.tostring(root, xml_declaration=True,
- encoding="UTF-8", pretty_print=True))
-
- def prettyPrintFile(self, fpath):
- with open(fpath,'r') as fin:
+ @staticmethod
+ def writeTree(root, fpath):
+ try:
+ encfun = unicode # PY2
+ except NameError:
+ encfun = "utf-8"
+ with open(fpath, 'wb') as fp:
+ fp.write(etree.tostring(root, encoding=encfun,
+ pretty_print=True))
+
+ @staticmethod
+ def prettyPrintFile(fpath):
+ with open(fpath,'rb') as fin:
tree = etree.parse(fin)
pretty_content = etree.tostring(tree, pretty_print=True)
- with open(fpath,'w') as fout:
+ with open(fpath,'wb') as fout:
fout.write(pretty_content)
- def decorateWithHeader(self, root):
+ @staticmethod
+ def decorateWithHeader(root):
root.attrib["{"+xsi+"}schemaLocation"] = "%s %s/scons.xsd" % (dbxsd, dbxsd)
return root
@@ -316,12 +348,12 @@ if not has_libxml2:
""" Return a XML file tree with the correct namespaces set,
the element root as top entry and the given header comment.
"""
- NSMAP = {None: dbxsd,
- 'xsi' : xsi}
+ NSMAP = {None: dbxsd, 'xsi' : xsi}
t = etree.Element(root, nsmap=NSMAP)
return self.decorateWithHeader(t)
- def validateXml(self, fpath, xmlschema_context):
+ @staticmethod
+ def validateXml(fpath, xmlschema_context):
# Use lxml
xmlschema = etree.XMLSchema(xmlschema_context)
try:
@@ -339,19 +371,22 @@ if not has_libxml2:
return False
return True
- def findAll(self, root, tag, ns=None, xp_ctxt=None, nsmap=None):
+ @staticmethod
+ def findAll(root, tag, ns=None, xp_ctxt=None, nsmap=None):
expression = ".//{%s}%s" % (nsmap[ns], tag)
if not ns or not nsmap:
expression = ".//%s" % tag
return root.findall(expression)
- def findAllChildrenOf(self, root, tag, ns=None, xp_ctxt=None, nsmap=None):
+ @staticmethod
+ def findAllChildrenOf(root, tag, ns=None, xp_ctxt=None, nsmap=None):
expression = "./{%s}%s/*" % (nsmap[ns], tag)
if not ns or not nsmap:
expression = "./%s/*" % tag
return root.findall(expression)
- def convertElementTree(self, root):
+ @staticmethod
+ def convertElementTree(root):
""" Convert the given tree of etree.Element
entries to a list of tree nodes for the
current XML toolkit.
@@ -359,53 +394,63 @@ if not has_libxml2:
return [root]
else:
- class TreeFactory:
+ class TreeFactory(object):
def __init__(self):
pass
- def newNode(self, tag):
+ @staticmethod
+ def newNode(tag):
return libxml2.newNode(tag)
- def newEtreeNode(self, tag, init_ns=False):
+ @staticmethod
+ def newEtreeNode(tag, init_ns=False):
return etree.Element(tag)
- def copyNode(self, node):
+ @staticmethod
+ def copyNode(node):
return node.copyNode(1)
- def appendNode(self, parent, child):
+ @staticmethod
+ def appendNode(parent, child):
if hasattr(parent, 'addChild'):
parent.addChild(child)
else:
parent.append(child)
- def hasAttribute(self, node, att):
+ @staticmethod
+ def hasAttribute(node, att):
if hasattr(node, 'hasProp'):
return node.hasProp(att)
return att in node.attrib
- def getAttribute(self, node, att):
+ @staticmethod
+ def getAttribute(node, att):
if hasattr(node, 'prop'):
return node.prop(att)
return node.attrib[att]
- def setAttribute(self, node, att, value):
+ @staticmethod
+ def setAttribute(node, att, value):
if hasattr(node, 'setProp'):
node.setProp(att, value)
else:
node.attrib[att] = value
- def getText(self, root):
+ @staticmethod
+ def getText(root):
if hasattr(root, 'getContent'):
return root.getContent()
return root.text
- def setText(self, root, txt):
+ @staticmethod
+ def setText(root, txt):
if hasattr(root, 'setContent'):
root.setContent(txt)
else:
root.text = txt
- def writeGenTree(self, root, fp):
+ @staticmethod
+ def writeGenTree(root, fp):
doc = libxml2.newDoc('1.0')
dtd = doc.newDtd("sconsdoc", None, None)
doc.addChild(dtd)
@@ -420,23 +465,26 @@ else:
fp.write(content)
doc.freeDoc()
- def writeTree(self, root, fpath):
- with open(fpath, 'w') as fp:
+ @staticmethod
+ def writeTree(root, fpath):
+ with open(fpath, 'wb') as fp:
doc = libxml2.newDoc('1.0')
doc.setRootElement(root)
fp.write(doc.serialize("UTF-8", 1))
doc.freeDoc()
- def prettyPrintFile(self, fpath):
+ @staticmethod
+ def prettyPrintFile(fpath):
# Read file and resolve entities
doc = libxml2.readFile(fpath, None, libxml2d.XML_PARSE_NOENT)
- with open(fpath, 'w') as fp:
+ with open(fpath, 'wb') as fp:
# Prettyprint
fp.write(doc.serialize("UTF-8", 1))
# Cleanup
doc.freeDoc()
- def decorateWithHeader(self, root):
+ @staticmethod
+ def decorateWithHeader(root):
# Register the namespaces
ns = root.newNs(dbxsd, None)
xi = root.newNs(xsi, 'xsi')
@@ -453,7 +501,8 @@ else:
t = libxml2.newNode(root)
return self.decorateWithHeader(t)
- def validateXml(self, fpath, xmlschema_context):
+ @staticmethod
+ def validateXml(fpath, xmlschema_context):
retval = True
# Create validation context
@@ -479,7 +528,8 @@ else:
return retval
- def findAll(self, root, tag, ns=None, xpath_context=None, nsmap=None):
+ @staticmethod
+ def findAll(root, tag, ns=None, xpath_context=None, nsmap=None):
if hasattr(root, 'xpathEval') and xpath_context:
# Use the xpath context
xpath_context.setContextNode(root)
@@ -493,7 +543,8 @@ else:
expression = ".//%s" % tag
return root.findall(expression)
- def findAllChildrenOf(self, root, tag, ns=None, xpath_context=None, nsmap=None):
+ @staticmethod
+ def findAllChildrenOf(root, tag, ns=None, xpath_context=None, nsmap=None):
if hasattr(root, 'xpathEval') and xpath_context:
# Use the xpath context
xpath_context.setContextNode(root)
@@ -562,20 +613,18 @@ else:
tf = TreeFactory()
-class SConsDocTree:
+class SConsDocTree(object):
def __init__(self):
- self.nsmap = {'dbx' : dbxsd}
+ self.nsmap = {'dbx': dbxsd}
self.doc = None
self.root = None
self.xpath_context = None
def parseContent(self, content, include_entities=True):
- """ Parses the given content as XML file. This method
- is used when we generate the basic lists of entities
- for the builders, tools and functions.
- So we usually don't bother about namespaces and resolving
- entities here...this is handled in parseXmlFile below
- (step 2 of the overall process).
+ """ Parses the given text content as XML
+
+ This is the setup portion, called from parseContent in
+ an SConsDocHandler instance - see the notes there.
"""
if not include_entities:
content = remove_entities(content)
@@ -583,7 +632,6 @@ class SConsDocTree:
self.root = etree.fromstring(content)
def parseXmlFile(self, fpath):
- nsmap = {'dbx' : dbxsd}
if not has_libxml2:
# Create domtree from file
domtree = etree.parse(fpath)
@@ -604,7 +652,7 @@ class SConsDocTree:
if self.xpath_context is not None:
self.xpath_context.xpathFreeContext()
-perc="%"
+perc = "%"
def validate_all_xml(dpaths, xsdfile=default_xsd):
xmlschema_context = None
@@ -620,7 +668,7 @@ def validate_all_xml(dpaths, xsdfile=default_xsd):
fpaths = []
for dp in dpaths:
if dp.endswith('.xml') and isSConsXml(dp):
- path='.'
+ path = '.'
fpaths.append(dp)
else:
for path, dirs, files in os.walk(dp):
@@ -633,8 +681,8 @@ def validate_all_xml(dpaths, xsdfile=default_xsd):
fails = []
for idx, fp in enumerate(fpaths):
fpath = os.path.join(path, fp)
- print("%.2f%s (%d/%d) %s" % (float(idx+1)*100.0/float(len(fpaths)),
- perc, idx+1, len(fpaths),fp))
+ print("%.2f%s (%d/%d) %s" % (float(idx + 1) * 100.0 /float(len(fpaths)),
+ perc, idx + 1, len(fpaths), fp))
if not tf.validateXml(fp, xmlschema_context):
fails.append(fp)
@@ -649,6 +697,7 @@ def validate_all_xml(dpaths, xsdfile=default_xsd):
return True
+
class Item(object):
def __init__(self, name):
self.name = name
@@ -668,21 +717,25 @@ class Item(object):
def __lt__(self, other):
return self.sort_name < other.sort_name
+
class Builder(Item):
pass
+
class Function(Item):
- def __init__(self, name):
- super(Function, self).__init__(name)
+ pass
+
class Tool(Item):
def __init__(self, name):
Item.__init__(self, name)
self.entity = self.name.replace('+', 'X')
+
class ConstructionVariable(Item):
pass
+
class Arguments(object):
def __init__(self, signature, body=None):
if not body:
@@ -692,7 +745,7 @@ class Arguments(object):
def __str__(self):
s = ''.join(self.body).strip()
result = []
- for m in re.findall('([a-zA-Z/_]+|[^a-zA-Z/_]+)', s):
+ for m in re.findall(r'([a-zA-Z/_]+|[^a-zA-Z/_]+)', s):
if ' ' in m:
m = '"%s"' % m
result.append(m)
@@ -700,6 +753,7 @@ class Arguments(object):
def append(self, data):
self.body.append(data)
+
class SConsDocHandler(object):
def __init__(self):
self.builders = {}
@@ -794,7 +848,7 @@ class SConsDocHandler(object):
self.parseDomtree(t.root, t.xpath_context, t.nsmap)
# lifted from Ka-Ping Yee's way cool pydoc module.
-if sys.version_info[0] == 2:
+if PY2:
def importfile(path):
"""Import a Python source file or compiled file given its path."""
import imp
@@ -817,11 +871,9 @@ if sys.version_info[0] == 2:
else: # PY3 version, from newer pydoc
def importfile(path):
"""Import a Python source file or compiled file given its path."""
- import importlib
- from pydoc import ErrorDuringImport
- magic = importlib.util.MAGIC_NUMBER
+ from importlib.util import MAGIC_NUMBER
with open(path, 'rb') as ifp:
- is_bytecode = magic == ifp.read(len(magic))
+ is_bytecode = MAGIC_NUMBER == ifp.read(len(MAGIC_NUMBER))
filename = os.path.basename(path)
name, ext = os.path.splitext(filename)
if is_bytecode:
@@ -832,7 +884,7 @@ else: # PY3 version, from newer pydoc
spec = importlib.util.spec_from_file_location(name, path, loader=loader)
try:
return importlib._bootstrap._load(spec)
- except:
+ except ImportError:
raise ErrorDuringImport(path, sys.exc_info())
# Local Variables:
diff --git a/bin/SConsExamples.py b/bin/SConsExamples.py
index 7491c58..dbb8715 100644
--- a/bin/SConsExamples.py
+++ b/bin/SConsExamples.py
@@ -287,9 +287,8 @@ def ensureExampleOutputsExist(dpath):
fpath = os.path.join(generated_examples,
key + '_' + r.name.replace("/", "_"))
# Write file
- f = open(fpath, 'w')
- f.write("%s\n" % content)
- f.close()
+ with open(fpath, 'w') as f:
+ f.write("%s\n" % content)
perc = "%"
@@ -324,9 +323,8 @@ def createAllExampleOutputs(dpath):
fpath = os.path.join(generated_examples,
key + '_' + r.name.replace("/", "_"))
# Write file
- f = open(fpath, 'w')
- f.write("%s\n" % content)
- f.close()
+ with open(fpath, 'w') as f:
+ f.write("%s\n" % content)
idx += 1
def collectSConsExampleNames(fpath):
@@ -458,6 +456,7 @@ import re
import SCons.Action
import SCons.Defaults
import SCons.Node.FS
+import shutil
platform = '%(osname)s'
@@ -540,30 +539,28 @@ def Null(target, source, env):
def Cat(target, source, env):
target = str(target[0])
- f = open(target, "wb")
for src in map(str, source):
- f.write(open(src, "rb").read())
- f.close()
+ shutil.copy(src, target)
def CCCom(target, source, env):
- target = str(target[0])
- fp = open(target, "wb")
- def process(source_file, fp=fp):
- for line in open(source_file, "rb").readlines():
- m = re.match(r'#include\s[<"]([^<"]+)[>"]', line)
- if m:
- include = m.group(1)
- for d in [str(env.Dir('$CPPPATH')), '.']:
- f = os.path.join(d, include)
- if os.path.exists(f):
- process(f)
- break
- elif line[:11] != "STRIP CCCOM":
- fp.write(line)
- for src in map(str, source):
- process(src)
- fp.write('debug = ' + ARGUMENTS.get('debug', '0') + '\\n')
- fp.close()
+ def process(source_file, ofp):
+ with open(source_file, "r") as ifp:
+ for line in ifp.readlines():
+ m = re.match(r'#include\s[<"]([^<"]+)[>"]', line)
+ if m:
+ include = m.group(1)
+ for d in [str(env.Dir('$CPPPATH')), '.']:
+ f = os.path.join(d, include)
+ if os.path.exists(f):
+ process(f, ofp)
+ break
+ elif line[:11] != "STRIP CCCOM":
+ ofp.write(line)
+
+ with open(str(target[0]), "w") as fp:
+ for src in map(str, source):
+ process(src, fp)
+ fp.write('debug = ' + ARGUMENTS.get('debug', '0') + '\\n')
public_class_re = re.compile('^public class (\S+)', re.MULTILINE)
@@ -577,20 +574,23 @@ def JavaCCom(target, source, env):
for t in tlist:
not_copied[t] = 1
for src in map(str, source):
- contents = open(src, "rb").read()
+ with open(src, "r") as f:
+ contents = f.read()
classes = public_class_re.findall(contents)
for c in classes:
for t in [x for x in tlist if x.find(c) != -1]:
- open(t, "wb").write(contents)
+ with open(t, "w") as f:
+ f.write(contents)
del not_copied[t]
for t in not_copied.keys():
- open(t, "wb").write("\\n")
+ with open(t, "w") as f:
+ f.write("\\n")
def JavaHCom(target, source, env):
tlist = map(str, target)
slist = map(str, source)
for t, s in zip(tlist, slist):
- open(t, "wb").write(open(s, "rb").read())
+ shutil.copy(s, t)
def JarCom(target, source, env):
target = str(target[0])
@@ -599,10 +599,8 @@ def JarCom(target, source, env):
for dirpath, dirnames, filenames in os.walk(src):
class_files.extend([ os.path.join(dirpath, f)
for f in filenames if f.endswith('.class') ])
- f = open(target, "wb")
for cf in class_files:
- f.write(open(cf, "rb").read())
- f.close()
+ shutil.copy(cf, target)
# XXX Adding COLOR, COLORS and PACKAGE to the 'cc' varlist(s) by hand
# here is bogus. It's for the benefit of doc/user/command-line.in, which
@@ -721,7 +719,8 @@ def command_touch(args, command, test, values):
if not os.path.isabs(file):
file = os.path.join(test.workpath('WORK'), file)
if not os.path.exists(file):
- open(file, 'wb')
+ with open(file, 'w'):
+ pass
os.utime(file, times)
return []
@@ -735,8 +734,8 @@ def command_edit(args, c, test, values):
for file in args:
if not os.path.isabs(file):
file = os.path.join(test.workpath('WORK'), file)
- contents = open(file, 'rb').read()
- open(file, 'wb').write(contents + add_string)
+ with open(file, 'a') as f:
+ f.write(add_string)
return []
def command_ls(args, c, test, values):
@@ -825,7 +824,7 @@ def create_scons_output(e):
t.write(path, content)
if hasattr(f, 'chmod'):
if len(f.chmod):
- os.chmod(path, int(f.chmod, 0))
+ os.chmod(path, int(f.chmod, base=8))
# Regular expressions for making the doc output consistent,
# regardless of reported addresses or Python version.
@@ -882,7 +881,7 @@ def create_scons_output(e):
lines = ExecuteCommand(args, command, t, {'osname':o.os, 'tools':o.tools})
if not command.output and lines:
ncontent = '\n'.join(lines)
- ncontent = address_re.sub(r' at 0x700000&gt;', ncontent)
+ ncontent = address_re.sub(r' at 0x700000>', ncontent)
ncontent = engine_re.sub(r' File "bootstrap/src/engine/SCons/', ncontent)
ncontent = file_re.sub(r'\1 <module>', ncontent)
ncontent = nodelist_re.sub(r"\1 'NodeList' object \2", ncontent)
diff --git a/bin/calibrate.py b/bin/calibrate.py
index 3f9104e..be06a54 100644
--- a/bin/calibrate.py
+++ b/bin/calibrate.py
@@ -28,8 +28,8 @@ import re
import subprocess
import sys
-variable_re = re.compile('^VARIABLE: (.*)$', re.M)
-elapsed_re = re.compile('^ELAPSED: (.*)$', re.M)
+variable_re = re.compile(r'^VARIABLE: (.*)$', re.M)
+elapsed_re = re.compile(r'^ELAPSED: (.*)$', re.M)
def main(argv=None):
if argv is None:
@@ -60,7 +60,8 @@ def main(argv=None):
while good < 3:
p = subprocess.Popen(command,
stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
+ stderr=subprocess.STDOUT,
+ universal_newlines=True)
output = p.communicate()[0]
vm = variable_re.search(output)
em = elapsed_re.search(output)
@@ -70,12 +71,13 @@ def main(argv=None):
print(output)
raise
print("run %3d: %7.3f: %s" % (run, elapsed, ' '.join(vm.groups())))
- if opts.min < elapsed and elapsed < opts.max:
+ if opts.min < elapsed < opts.max:
good += 1
else:
good = 0
for v in vm.groups():
var, value = v.split('=', 1)
+ # TODO: this sometimes converges slowly, better algorithm?
value = int((int(value) * opts.max) // elapsed)
os.environ[var] = str(value)
run += 1
diff --git a/bin/docs-update-generated.py b/bin/docs-update-generated.py
index c164baf..78b60a7 100644
--- a/bin/docs-update-generated.py
+++ b/bin/docs-update-generated.py
@@ -10,6 +10,8 @@ from __future__ import print_function
import os
import sys
+import subprocess
+
import SConsDoc
# Directory where all generated files are stored
@@ -17,8 +19,8 @@ gen_folder = os.path.join('doc','generated')
def argpair(key):
""" Return the argument pair *.gen,*.mod for the given key. """
- arg = '%s,%s' % (os.path.join(gen_folder,'%s.gen' % key),
- os.path.join(gen_folder,'%s.mod' % key))
+ arg = '%s,%s' % (os.path.join(gen_folder, '%s.gen' % key),
+ os.path.join(gen_folder, '%s.mod' % key))
return arg
@@ -43,10 +45,13 @@ def generate_all():
print("Couldn't create destination folder %s! Exiting..." % gen_folder)
return
# Call scons-proc.py
- os.system('%s %s -b %s -f %s -t %s -v %s %s' %
- (sys.executable, os.path.join('bin','scons-proc.py'),
- argpair('builders'), argpair('functions'),
- argpair('tools'), argpair('variables'), ' '.join(flist)))
+ _ = subprocess.call([sys.executable,
+ os.path.join('bin','scons-proc.py'),
+ '-b', argpair('builders'),
+ '-f', argpair('functions'),
+ '-t', argpair('tools'),
+ '-v', argpair('variables')] + flist,
+ shell=False)
if __name__ == "__main__":
diff --git a/bin/import-test.py b/bin/import-test.py
index 2290edd..23718cf 100644
--- a/bin/import-test.py
+++ b/bin/import-test.py
@@ -25,7 +25,7 @@
# """ triple-quotes will need to have their contents edited by hand.
#
-__revision__ = "bin/import-test.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "bin/import-test.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/bin/linecount.py b/bin/linecount.py
index 8f9973f..f9a3f5f 100644
--- a/bin/linecount.py
+++ b/bin/linecount.py
@@ -23,7 +23,7 @@
# interesting one for most purposes.
from __future__ import division, print_function
-__revision__ = "bin/linecount.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "bin/linecount.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/bin/restore.sh b/bin/restore.sh
index c8db2c0..2e7883d 100644
--- a/bin/restore.sh
+++ b/bin/restore.sh
@@ -1,6 +1,6 @@
#!/usr/bin/env sh
#
-# Simple hack script to restore __revision__, __COPYRIGHT_, 3.1.0
+# Simple hack script to restore __revision__, __COPYRIGHT_, 3.1.2
# and other similar variables to what gets checked in to source. This
# comes in handy when people send in diffs based on the released source.
#
@@ -24,7 +24,7 @@ for i in `find $DIRS -name '*.py'`; do
ed $i <<EOF
g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001 - 2019 The SCons Foundation/p
w
-/^__revision__ = /s/= .*/= "bin/restore.sh e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"/p
+/^__revision__ = /s/= .*/= "bin/restore.sh bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"/p
w
q
EOF
@@ -35,7 +35,7 @@ for i in `find $DIRS -name 'scons.bat'`; do
ed $i <<EOF
g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001 - 2019 The SCons Foundation/p
w
-/^@REM src\/script\/scons.bat/s/@REM .* knight/@REM bin/restore.sh e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan/p
+/^@REM src\/script\/scons.bat/s/@REM .* knight/@REM bin/restore.sh bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan/p
w
q
EOF
@@ -44,13 +44,13 @@ done
for i in `find $DIRS -name '__init__.py' -o -name 'scons.py' -o -name 'sconsign.py'`; do
header $i
ed $i <<EOF
-/^__version__ = /s/= .*/= "3.1.0"/p
+/^__version__ = /s/= .*/= "3.1.2"/p
w
-/^__build__ = /s/= .*/= "e724ae812eb96f4858a132f5b8c769724744faf6"/p
+/^__build__ = /s/= .*/= "bee7caf9defd6e108fc2998a2520ddb36a967691"/p
w
-/^__buildsys__ = /s/= .*/= "kufra"/p
+/^__buildsys__ = /s/= .*/= "octodog"/p
w
-/^__date__ = /s/= .*/= "2019-07-21 00:04:47"/p
+/^__date__ = /s/= .*/= "2019-12-17 02:07:09"/p
w
/^__developer__ = /s/= .*/= "bdeegan"/p
w
@@ -61,7 +61,7 @@ done
for i in `find $DIRS -name 'setup.py'`; do
header $i
ed $i <<EOF
-/^ *version = /s/= .*/= "3.1.0",/p
+/^ *version = /s/= .*/= "3.1.2",/p
w
q
EOF
@@ -72,9 +72,9 @@ for i in `find $DIRS -name '*.txt'`; do
ed $i <<EOF
g/Copyright (c) 2001.*SCons Foundation/s//Copyright (c) 2001 - 2019 The SCons Foundation/p
w
-/# [^ ]* 0.96.[CD][0-9]* [0-9\/]* [0-9:]* knight$/s/.*/# bin/restore.sh e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan/p
+/# [^ ]* 0.96.[CD][0-9]* [0-9\/]* [0-9:]* knight$/s/.*/# bin/restore.sh bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan/p
w
-/Version [0-9][0-9]*\.[0-9][0-9]*/s//Version 3.1.0/p
+/Version [0-9][0-9]*\.[0-9][0-9]*/s//Version 3.1.2/p
w
q
EOF
diff --git a/bin/rsync-sourceforge b/bin/rsync-sourceforge
deleted file mode 100644
index de44e3b..0000000
--- a/bin/rsync-sourceforge
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-#
-# Sync this directory tree with sourceforge.
-#
-# Cribbed and modified from Peter Miller's same-named script in
-# /home/groups/a/ae/aegis/aegis at SourceForge.
-#
-# Guide to what this does with rsync:
-#
-# --rsh=ssh use ssh for the transfer
-# -l copy symlinks as symlinks
-# -p preserve permissions
-# -r recursive
-# -t preserve times
-# -z compress data
-# --stats file transfer statistics
-# --exclude exclude files matching the pattern
-# --delete delete files that don't exist locally
-# --delete-excluded delete files that match the --exclude patterns
-# --progress show progress during the transfer
-# -v verbose
-#
-LOCAL=/home/scons/scons
-REMOTE=/home/groups/s/sc/scons/scons
-/usr/bin/rsync --rsh=ssh -l -p -r -t -z --stats \
- --exclude build \
- --exclude "*,D" \
- --exclude "*.pyc" \
- --exclude aegis.log \
- --delete --delete-excluded \
- --progress -v \
- ${LOCAL}/. scons.sourceforge.net:${REMOTE}/.
diff --git a/bin/scons-proc.py b/bin/scons-proc.py
index e09c853..d8b37df 100644
--- a/bin/scons-proc.py
+++ b/bin/scons-proc.py
@@ -32,8 +32,8 @@ Options:
-t file(s) dump tool information to the specified file(s)
-v file(s) dump variable information to the specified file(s)
- Regard that each -[btv] argument is a pair of
- comma-separated .gen,.mod file names.
+ The "files" argument following a -[bftv] argument is expected to
+ be a comma-separated pair of names like: foo.gen,foo.mod
"""
@@ -70,7 +70,9 @@ def parse_docs(args, include_entities=True):
sys.stderr.write("error in %s\n" % f)
raise
else:
- content = open(f).read()
+ # mode we read (text/bytes) has to match handling in SConsDoc
+ with open(f, 'r') as fp:
+ content = fp.read()
if content:
try:
h.parseContent(content, include_entities)
@@ -166,6 +168,7 @@ class SCons_XML(object):
# Write file
f = self.fopen(filename)
stf.writeGenTree(root, f)
+ f.close()
def write_mod(self, filename):
try:
@@ -212,6 +215,7 @@ class SCons_XML(object):
v.tag, v.entityfunc(), v.tag))
f.write('\n')
f.write(Warning)
+ f.close()
class Proxy(object):
def __init__(self, subject):
@@ -348,7 +352,7 @@ processor_class = SCons_XML
# Step 1: Creating entity files for builders, functions,...
print("Generating entity files...")
-h = parse_docs(args, False)
+h = parse_docs(args, include_entities=False)
write_output_files(h, buildersfiles, functionsfiles, toolsfiles,
variablesfiles, SCons_XML.write_mod)
@@ -362,7 +366,7 @@ else:
# Step 3: Creating actual documentation snippets, using the
# fully resolved and updated entities from the *.mod files.
print("Updating documentation for builders, tools and functions...")
-h = parse_docs(args, True)
+h = parse_docs(args, include_entities=True)
write_output_files(h, buildersfiles, functionsfiles, toolsfiles,
variablesfiles, SCons_XML.write)
print("Done")
diff --git a/bin/scons-review.sh b/bin/scons-review.sh
deleted file mode 100755
index f126333..0000000
--- a/bin/scons-review.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/sh
-
-case "$1" in
-'') exec svn diff --diff-cmd diff -x -c $* ;;
--m) svn diff --diff-cmd diff -x -c $* | alpine scons-dev ;;
-*) echo "Error: unknown option '$1"; exit 1 ;;
-esac
-
-# OLD CODE FOR USE WITH AEGIS
-#
-#if test $# -ne 1; then
-# echo "Usage: scons-review change#" >&2
-# exit 1
-#fi
-#if test "X$AEGIS_PROJECT" = "X"; then
-# echo "scons-review: AEGIS_PROJECT is not set" >&2
-# exit 1
-#fi
-#DIR=`aegis -cd -dd $*`
-#if test "X${DIR}" = "X"; then
-# echo "scons-review: No Aegis directory for '$*'" >&2
-# exit 1
-#fi
-#(cd ${DIR} && find * -name '*,D' | sort | xargs cat) | pine scons-dev
diff --git a/bin/scons_dev_master.py b/bin/scons_dev_master.py
index 4b1160f..cdbd68e 100644..100755
--- a/bin/scons_dev_master.py
+++ b/bin/scons_dev_master.py
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/usr/bin/python
#
# A script for turning a generic Ubuntu system into a master for
diff --git a/bin/sfsum b/bin/sfsum
deleted file mode 100644
index 142793a..0000000
--- a/bin/sfsum
+++ /dev/null
@@ -1,148 +0,0 @@
-#!/usr/bin/env python
-#
-# sfsum.py: A script for parsing XML data exported from
-# SourceForge projects.
-#
-# Right now, this is hard-coded to generate a summary of open bugs.
-#
-# XML data for SourceForge project is available for download by project
-# administrators. Because it's intended for backup purposes, you have
-# to slurp the whole set of data, including info about all of the closed
-# items, the feature requests, etc., so it can get big.
-#
-# You can do this by hand (if you're an administrator) with a URL like
-# this (where 30337 is the group_id for SCons):
-#
-# http://sourceforge.net/export/xml_export.php?group_id=30337
-#
-# They also have a Perl script, called xml_export, available as part
-# of a set of utilities called "adocman" which automate dealing with
-# SourceForge document management from the command line. "adocman"
-# is available at:
-#
-# https://sourceforge.net/projects/sitedocs/
-#
-from __future__ import print_function
-
-import xml.sax
-import xml.sax.saxutils
-import sys
-
-SFName = {
- 'Unassigned' : 'nobody',
- 'Chad Austin' : 'aegis',
- 'Charle Crain' : 'diewarzau',
- 'Steven Knight' : 'stevenknight',
- 'Steve Leblanc' : 'stevenleblanc',
- 'Jeff Petkau' : 'jpet',
- 'Anthony Roach' : 'anthonyroach',
- 'Steven Shaw' : 'steven_shaw',
- 'Terrel Shumway' : 'terrelshumway',
- 'Greg Spencer' : 'greg_spencer',
- 'Christoph Wiedemann' : 'wiedeman',
-}
-
-class Artifact(object):
- """Just a place to hold attributes that we find in the XML."""
- pass
-
-Artifacts = {}
-
-def nws(text):
- """Normalize white space. This will become important if/when
- we enhance this to search for arbitrary fields."""
- return ' '.join(text.split())
-
-class ClassifyArtifacts(xml.sax.saxutils.DefaultHandler):
- """
- Simple SAX subclass to classify the artifacts in SourceForge
- XML output.
-
- This reads up the fields in an XML description and turns the field
- descriptions into attributes of an Artificat object, on the fly.
- Artifacts are of the following types:
-
- Bugs
- Feature Requests
- Patches
- Support Requests
-
- We could, if we choose to, add additional types in the future
- by creating additional trackers.
-
- This class loses some info right now because we don't pay attention
- to the <messages> tag in the output, which contains a list of items
- that have <field> tags in them. Right now, these just overwrite
- each other in the Arifact object we create.
-
- We also don't pay attention to any attributes of a <field> tag other
- than the "name" attribute. We'll need to extend this class if we
- ever want to pay attention to those attributes.
- """
- def __init__(self):
- self.artifact = None
-
- def startElement(self, name, attrs):
- self.text = ""
- if name == 'artifact':
- self.artifact = Artifact()
- elif not self.artifact is None and name == 'field':
- self.fname = attrs.get('name', None)
-
- def characters(self, ch):
- if not self.artifact is None:
- self.text = self.text + ch
-
- def endElement(self, name):
- global Artifacts
- if name == 'artifact':
- type = self.artifact.artifact_type
- try:
- list = Artifacts[type]
- except KeyError:
- Artifacts[type] = list = []
- list.append(self.artifact)
- self.artifact = None
- elif not self.artifact is None and name == 'field':
- setattr(self.artifact, self.fname, self.text)
-
-if __name__ == '__main__':
- # Create a parser.
- parser = xml.sax.make_parser()
- # Tell the parser we are not interested in XML namespaces.
- parser.setFeature(xml.sax.handler.feature_namespaces, 0)
-
- # Instantiate our handler and tell the parser to use it.
- parser.setContentHandler(ClassifyArtifacts())
-
- # Parse the input.
- parser.parse(sys.argv[1])
-
- # Hard-coded search for 'Open' bugs. This should be easily
- # generalized once we figure out other things for this script to do.
- bugs = [x for x in Artifacts['Bugs'] if x.status == 'Open']
-
- print(list(Artifacts.keys()))
-
- print("%d open bugs" % len(bugs))
-
- # Sort them into a separate list for each assignee.
- Assigned = {}
- for bug in bugs:
- a = bug.assigned_to
- try:
- list = Assigned[a]
- except KeyError:
- Assigned[a] = list = []
- list.append(bug)
-
- for a in SFName.keys():
- try:
- b = Assigned[SFName[a]]
- except KeyError:
- pass
- else:
- print(" %s" % a)
- b.sort(key=lambda x, y: (x.artifact_id, y.artifact_id))
- for bug in b:
- print(" %-6s %s" % (bug.artifact_id, bug.summary))
diff --git a/bin/timebuild b/bin/timebuild
deleted file mode 100644
index d5af983..0000000
--- a/bin/timebuild
+++ /dev/null
@@ -1,65 +0,0 @@
-#!/bin/sh
-#
-# Profile running SCons to build itself from the current package.
-#
-# This runs "aegis -build" to build a current scons-src-*.tar.gz
-# package, unpacks it in the supplied directory name, and then
-# starts a profiled run of an SCons build, followed by another.
-# This results in two profiles:
-#
-# NAME/NAME-0.prof
-# profile of a build-everything run
-#
-# NAME/NAME-1.prof
-# profile of an all-up-to-date run
-#
-# This also copies the build scons-src-*.tar.gz file to the NAME
-# subdirectory, and tars up everything under src/ as NAME/src.tar.gz,
-# so that repeated runs with different in-progress changes can serve
-# as their own crude version control, so you don't lose that exact
-# combination of features which performed best.
-
-if test X$1 = X; then
- echo "Must supply name!" >&2
- exit 1
-fi
-
-VERSION=0.90
-
-DIR=$1
-
-SRC="scons-src-$VERSION"
-SRC_TAR_GZ="${SRC}.tar.gz"
-B_D_SRC_TAR_GZ="build/dist/${SRC_TAR_GZ}"
-
-echo "Building ${B_D_SRC_TAR_GZ}: " `date`
-aegis -build ${B_D_SRC_TAR_GZ}
-
-echo "mkdir ${DIR}: " `date`
-mkdir ${DIR}
-
-echo "cp ${B_D_SRC_TAR_GZ} ${DIR}: " `date`
-cp ${B_D_SRC_TAR_GZ} ${DIR}
-
-echo "tar cf ${DIR}/src.tar.gz: " `date`
-tar cf ${DIR}/src.tar.gz src
-
-cd ${DIR}
-
-echo "tar zxf ${SRC_TAR_GZ}: " `date`
-tar zxf ${SRC_TAR_GZ}
-
-cd ${SRC}
-
-SCRIPT="src/script/scons.py"
-ARGS="version=$VERSION"
-
-export SCONS_LIB_DIR=`pwd`/src/engine
-
-echo "Build run starting: " `date`
-python $SCRIPT --profile=../$DIR-0.prof $ARGS > ../$DIR-0.log 2>&1
-
-echo "Up-to-date run starting: " `date`
-python $SCRIPT --profile=../$DIR-1.prof $ARGS > ../$DIR-1.log 2>&1
-
-echo "Finished $DIR at: " `date`
diff --git a/bin/update-release-info.py b/bin/update-release-info.py
index c2b3d19..4f33857 100644
--- a/bin/update-release-info.py
+++ b/bin/update-release-info.py
@@ -58,7 +58,7 @@ In 'post' mode, files are prepared for the next release cycle:
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
-__revision__ = "bin/update-release-info.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "bin/update-release-info.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/config b/config
deleted file mode 100644
index b055bdb..0000000
--- a/config
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * MANIFEST: use of SCons in project config file to build itself
- *
- * SCons has a Repository feature, introduced in SCons 0.09, that was
- * designed to work well with Aegis.
- */
-
-/*
- * The build_command field of the project config file is used to invoke
- * the relevant build command. This command tells SCons where to find
- * the rules.
- *
- * Our chicken-and-egg dilemma is this: we want to use the version of
- * SCons under development in an Aegis change to build itself. But the
- * pieces of SCons are likely only partly in this change, and partly in
- * baselines.
- *
- * Python only imports things on a module-by-module basis--which is to
- * say, once it finds __init__.py in a given directory, it assumes that
- * all other files in that module are in the same directory. But that's
- * not the way Aegis works, because if a file hasn't changed on the
- * branch, it will only be in its parent's baseline directory.
- *
- * Aegis' mechanism for working around this sort of problem is to make
- * symlinks to the proper baseline versions of each file, which makes
- * it look like everything is in the local tree. That's unattractive,
- * though, because we really want to eat our own dog food and use the
- * SCons -Y options to pull things from the baseline repositories.
- *
- * So our solution (suggested by Anthony Roach) is a bootstrap.py script
- * that does some Aegis-like searching through the baseline directories
- * and makes a bootstrap copy of the version of SCons under development
- * that we can use for building. After it makes this copy of SCons, it
- * executes it with the same command-line arguments we supplied (and
- * setting $SCONS_LIB_DIR to the right directory) so we can use it
- * here with command-line options as if it were SCons itself. (Note,
- * however, that bootstrap.py only understands the specific command-line
- * options already in use here, so if you change the call below to add
- * some other SCons options, you may have to modify bootstrap.py to
- * recognize them.
- *
- * The ${Source bootstrap.py} substitution finds bootstrap.py wherever
- * it may be in the Aegis baselines.
- *
- * The long -Y${SUBSTitute...} substitution takes the Aegis baseline
- * search path and turns it into the right -Y command-line options for
- * SCons.
- *
- * The rest of the substitutions (${DEVeloper}, etc.) should be obvious.
- *
- * Look in aesub(5) for more information about command substitutions.
- */
-build_command = "python2.1 ${Source bootstrap.py} -Y${SUBSTitute : \\ -Y $Search_Path} date='${DAte %Y/%m/%d %H:%M:%S}' developer=${DEVeloper} version=${VERsion} change=${Change}";
-
-/*
- * SCons removes its targets before constructing them, which qualifies it
- * for the following entry in the config file. The files must be removed
- * first, otherwise the baseline would cease to be self-consistent.
- */
-
-link_integration_directory = true;
-
-/*
- * This is set temporarily to allow us to build using the SCons
- * currently checked in to the src directory.
-create_symlinks_before_build = true;
- */
-
-/*
- * aegis - project change supervisor
- * This file is in the Public Domain, 1995, 1998 Peter Miller.
- *
- * MANIFEST: example of using rcs in the project config file
- *
- * The entries for the commands are listed below. RCS uses a slightly
- * different model than aegis wants, so some maneuvering is required.
- * The command strings in this section assume that the RCS commands ci and co
- * and rcs and rlog are in the command search PATH, but you may like to
- * hard-wire the paths, or set PATH at the start of each. You should also note
- * that the strings are always handed to the Bourne shell to be executed, and
- * are set to exit with an error immediately a sub-command fails.
- *
- * In these commands, the RCS file is kept unlocked, since only the owner will
- * be checking changes in. The RCS functionality for coordinating shared
- * access is not required.
- *
- * One advantage of using RCS version 5.6 or later is that binary files are
- * supported, should you want to have binary files in the baseline.
- *
- * The ${quote ...} construct is used to quote filenames which contain
- * shell special characters. A minimum of quoting is performed, so if
- * the filenames do not contail shell special characters, no quotes will
- * be used.
- */
-
-/*
- * This command is used to create a new file history.
- * This command is always executed as the project owner.
- * The following substitutions are available:
- *
- * ${Input}
- * absolute path of the source file
- * ${History}
- * absolute path of the history file
- *
- * The "ci -f" option is used to specify that a copy is to be checked-in even
- * if there are no changes.
- * The "ci -u" option is used to specify that an unlocked copy will remain in
- * the baseline.
- * The "ci -d" option is used to specify that the file time rather than the
- * current time is to be used for the new revision.
- * The "ci -M" option is used to specify that the mode date on the original
- * file is not to be altered.
- * The "ci -t" option is used to specify that there is to be no description
- * text for the new RCS file.
- * The "ci -m" option is used to specify that the change number is to be stored
- * in the file log if this is actually an update (typically from aenf
- * after aerm on the same file name).
- * The "rcs -U" option is used to specify that the new RCS file is to have
- * unstrict locking.
- * The "rcs -kk" option is used to specify that keyword substitution is
- * disabled (only keyword names, not values, are substituted).
- */
-history_create_command =
- "ci -f -u -d -M -m$c -t/dev/null ${quote $input} ${quote $history,v}; \
-rcs -kk -U ${quote $history,v}";
-
-
-/*
- * This command is used to get a specific edit back from history.
- * This command is always executed as the project owner.
- * The following substitutions are available:
- *
- * ${History}
- * absolute path of the history file
- * ${Edit}
- * edit number, as given by history_\%query_\%command
- * ${Output}
- * absolute path of the destination file
- *
- * The "co -r" option is used to specify the edit to be retrieved.
- * The "co -p" option is used to specify that the results be printed on the
- * standard output; this is because the destination filename will never
- * look anything like the history source filename.
- * The "rcs -kk" option is used to specify that keyword substitution is
- * disabled (only keyword names, not values, are substituted).
- */
-history_get_command =
- "co -kk -r${quote $edit} -p ${quote $history,v} > ${quote $output}";
-
-/*
- * This command is used to add a new "top-most" entry to the history file.
- * This command is always executed as the project owner.
- * The following substitutions are available:
- *
- * ${Input}
- * absolute path of source file
- * ${History}
- * absolute path of history file
- *
- * The "ci -f" option is used to specify that a copy is to be checked-in even
- * if there are no changes.
- * The "ci -u" option is used to specify that an unlocked copy will remain in
- * the baseline.
- * The "ci -d" option is used to specify that the file time rather than the
- * current time is to be used for the new revision.
- * The "ci -M" option is used to specify that the mode date on the original
- * file is not to be altered.
- * The "ci -m" option is used to specify that the change number is to be stored
- * in the file log, which allows rlog to be used to find the change
- * numbers to which each revision of the file corresponds.
- *
- * It is possible for a a very cautious approach has been taken, in which case
- * the history_put_command may be set to the same string specified above for
- * the history_create_command.
- */
-history_put_command =
- "ci -f -u -d -M -m$c ${quote $input} ${quote $history,v}";
-
-/*
- * This command is used to query what the history mechanism calls the top-most
- * edit of a history file. The result may be any arbitrary string, it need not
- * be anything like a number, just so long as it uniquely identifies the edit
- * for use by the history_get_command at a later date. The edit number is to
- * be printed on the standard output. This command is always executed as the
- * project owner.
- *
- * The following substitutions are available:
- *
- * ${History}
- * absolute path of the history file
- */
-history_query_command =
- "rlog -r ${quote $history,v} | awk '/^head:/ {print $$2}'";
-
-/*
- * RCS also provides a merge program, which can be used to provide a three-way
- * merge. It has an ouput format some sites prefer to the fmerge output.
- *
- * This command is used by aed(1) to produce a difference listing when a file
- * in the development directory is out of date compared to the current version
- * in the baseline.
- *
- * All of the command substitutions described in aesub(5) are available.
- * In addition, the following substitutions are also available:
- *
- * ${ORiginal}
- * The absolute path name of a file containing the common ancestor
- * version of ${MostRecent} and {$Input}. Usually the version originally
- * copied into the change. Usually in a temporary file.
- * ${Most_Recent}
- * The absolute path name of a file containing the most recent version.
- * Usually in the baseline.
- * ${Input}
- * The absolute path name of the edited version of the file. Usually in
- * the development directory.
- * ${Output}
- * The absolute path name of the file in which to write the difference
- * listing. Usually in the development directory.
- *
- * An exit status of 0 means successful, even of the files differ (and they
- * usually do). An exit status which is non-zero means something is wrong.
- *
- * The "merge -L" options are used to specify labels for the baseline and the
- * development directory, respecticvely, when conflict lines are inserted
- * into the result.
- * The "merge -p" options is used to specify that the results are to be printed
- * on the standard output.
- */
-
-diff3_command =
- "set +e; \
-merge -p -L baseline -L C$c ${quote $mostrecent} ${quote $original} \
-${quote $input} > ${quote $output}; \
-test $? -le 1";
-
-/*
- * The diff command in Red Hat 8.0 changed the exit status so it *fails*
- * when *it* thinks it's trying to diff a binary (non-ASCII-text) file.
- * The -a option disables this behavior and makes diff's exit status
- * behave like it used to, even on any binary files we have checked in.
- */
-
-diff_command =
- "set +e; \
- diff -a -c ${quote $original} ${quote $input} > ${quote $output}; \
- test $? -le 1";
-
-/*
- * We use a runtest.py script to execute tests. This takes care of
- * massaging environment variables and the like to test against the
- * unpacked package in the current directory.
- *
- * Note that we must include $spe in the batch_test_command line (so
- * that Aegis thinks we're smart about testing ourselves against the
- * baseline) but we don't actually need it. Our tests always run
- * relative to the package built under the current directory, which
- * is set appropriately during a baseline test. So we just use the
- * proper aesub variable to comment out the expanded $spe.
- */
-test_command = "python1.5 ${Source runtest.py Absolute} --noqmtest -p tar-gz -t -v ${SUBSTitute '\\.[CD][0-9]+$' '' ${VERsion}} -q --sp ${Search_Path} --spe ${Search_Path_Executable} ${File_Name}";
-
-batch_test_command = "python1.5 ${Source runtest.py Absolute} --noqmtest -p tar-gz -t -v ${SUBSTitute '\\.[CD][0-9]+$' '' ${VERsion}} -o ${Output} --aegis --sp ${Search_Path} --spe ${Search_Path_Executable} ${File_Names}";
-
-new_test_filename = "test/CHANGETHIS.py";
-
-/*
- *
- */
-file_template =
-[
- {
- pattern = [ "src/engine/*__init__.py" ];
- body = "${read_file ${source template/__init__.py abs}}";
- },
- {
- pattern = [ "src/engine/*Tests.py" ];
- body = "${read_file ${source template/Tests.py abs}}";
- },
- {
- pattern = [ "src/engine/*.py" ];
- body = "${read_file ${source template/file.py abs}}";
- },
- {
- pattern = [ "test/*.py" ];
- body = "${read_file ${source template/test.py abs}}";
- },
-];
-
-/*
- * Command for distributing changes from Aegis to all of the repositories
- * we want to mirror the information.
- *
- * XXX Uncomment after upgrading to an Aegis version that supports this.
-
-integrate_pass_notify_command =
- "$sh ${s bin/scons-cdist} -p $project $change";
- *
- */
diff --git a/debian/changelog b/debian/changelog
index 2327c63..e464f02 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,14 +1,28 @@
-scons-doc (3.1.0+repack-1) unstable; urgency=medium
+scons-doc (3.1.2+repack-1) experimental; urgency=medium
+
+ * New upstream release.
+ * debian/control:
+ - Add Build-Depends-Indep python3-distutils and python3-lxml.
+ - Remove from Build-Depends-Indep python-libxml2 and python-libxslt1.
+ - Add Rules-Requires-Root: binary-targets.
+ - Remove unused Build-Depends-Indep docbook-utils and docbook-xml.
+ * Switch to debhelper-compat:
+ - debian/control: change to debhelper-compat (=12).
+ - remove debian/compat.
+
+ -- Jörg Frings-Fürst <debian@jff.email> Sun, 29 Dec 2019 11:45:24 +0100
+
+scons-doc (3.1.1+repack-1) unstable; urgency=medium
* New upstream release.
- Rewrite Files-Excluded.
* Migrate to debhelper 12:
- Change debian/compat to 12.
- Bump minimum debhelper version in debian/control to >= 12.
- * Declare compliance with Debian Policy 4.4.0. (No changes needed).
+ * Declare compliance with Debian Policy 4.4.1 (No changes needed).
* debian/copyright: Add year 2019.
- -- Jörg Frings-Fürst <debian@jff.email> Tue, 23 Jul 2019 17:04:59 +0200
+ -- Jörg Frings-Fürst <debian@jff.email> Mon, 07 Oct 2019 17:51:56 +0200
scons-doc (3.0.0+repack-2) unstable; urgency=medium
diff --git a/debian/compat b/debian/compat
deleted file mode 100644
index 48082f7..0000000
--- a/debian/compat
+++ /dev/null
@@ -1 +0,0 @@
-12
diff --git a/debian/control b/debian/control
index 1e4edf5..7650dc9 100644
--- a/debian/control
+++ b/debian/control
@@ -4,16 +4,15 @@ Priority: optional
Maintainer: Jörg Frings-Fürst <debian@jff.email>
Uploaders: Laszlo Boszormenyi (GCS) <gcs@debian.org>
Build-Depends:
- debhelper (>= 12),
- scons (>= 3.0)
+ debhelper-compat (= 12),
+ scons (>= 3.1.2)
Build-Depends-Indep:
default-jre,
- docbook-utils,
- docbook-xml,
fop,
- python-libxml2,
- python-libxslt1
-Standards-Version: 4.4.0
+ python3-distutils,
+ python3-lxml
+Standards-Version: 4.4.1
+Rules-Requires-Root: binary-targets
Homepage: https://www.scons.org/
Vcs-Git: https://salsa.debian.org/debian/scons-doc.git
Vcs-Browser: https://salsa.debian.org/debian/scons-doc
diff --git a/doc/generated/builders.gen b/doc/generated/builders.gen
index 7c62558..59d2dca 100644
--- a/doc/generated/builders.gen
+++ b/doc/generated/builders.gen
@@ -48,11 +48,15 @@ env.CFile(target = 'bar', source = 'bar.y')
</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-The <function xmlns="http://www.scons.org/dbxsd/v1.0">Command</function> "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 <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="f-Command"><function>Command</function></link> function description
+The <function xmlns="http://www.scons.org/dbxsd/v1.0">Command</function> "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 <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="f-Command"><function>Command</function></link> function description
for the calling syntax and details.
</para>
</listitem>
@@ -465,6 +469,22 @@ a builder.
<example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
env.Install('/usr/local/bin', source = ['foo', 'bar'])
</example_commands>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+If the <option>--install-sandbox</option> 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.
+</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+See also <function xmlns="http://www.scons.org/dbxsd/v1.0">FindInstalledFiles</function>.
+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).
+</para>
+
</listitem>
</varlistentry>
<varlistentry id="b-InstallAs">
@@ -1841,72 +1861,28 @@ env.Program(target = 'foo', source = ['foo.o', 'bar.c', 'baz.f'])
<function>env.ProgramAllAtOnce()</function>
</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- Builds an executable from D sources without first creating individual
- objects for each file.
- </para>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- D sources can be compiled file-by-file as C and C++ source are, and
- D is integrated into the <filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename> 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.
- </para>
- <example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
- env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
- </example_commands>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- 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.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- Builds an executable from D sources without first creating individual
- objects for each file.
- </para>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- D sources can be compiled file-by-file as C and C++ source are, and
- D is integrated into the <filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename> 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.
- </para>
- <example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
- env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
- </example_commands>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- 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.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- Builds an executable from D sources without first creating individual
- objects for each file.
- </para>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- D sources can be compiled file-by-file as C and C++ source are, and
- D is integrated into the <filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename> 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.
- </para>
- <example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
- env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
- </example_commands>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- 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.
- </para>
- </listitem>
+ <para xmlns="http://www.scons.org/dbxsd/v1.0">
+ Builds an executable from D sources without first creating individual
+ objects for each file.
+ </para>
+ <para xmlns="http://www.scons.org/dbxsd/v1.0">
+ D sources can be compiled file-by-file as C and C++ source are, and
+ D is integrated into the <filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename> 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.
+ </para>
+ <example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
+ env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
+ </example_commands>
+ <para xmlns="http://www.scons.org/dbxsd/v1.0">
+ 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.
+ </para>
+</listitem>
</varlistentry>
<varlistentry id="b-RES">
<term>
diff --git a/doc/generated/examples/caching_ex-random_1.xml b/doc/generated/examples/caching_ex-random_1.xml
index 58ff6ae..1c99727 100644
--- a/doc/generated/examples/caching_ex-random_1.xml
+++ b/doc/generated/examples/caching_ex-random_1.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<screen xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">% <userinput>scons -Q</userinput>
cc -o f3.o -c f3.c
+cc -o f4.o -c f4.c
+cc -o f1.o -c f1.c
cc -o f2.o -c f2.c
cc -o f5.o -c f5.c
-cc -o f1.o -c f1.c
-cc -o f4.o -c f4.c
cc -o prog f1.o f2.o f3.o f4.o f5.o
</screen>
diff --git a/doc/generated/examples/troubleshoot_Dump_1.xml b/doc/generated/examples/troubleshoot_Dump_1.xml
index 99d1399..1f6f250 100644
--- a/doc/generated/examples/troubleshoot_Dump_1.xml
+++ b/doc/generated/examples/troubleshoot_Dump_1.xml
@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<screen xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">% <userinput>scons</userinput>
scons: Reading SConscript files ...
-{ 'BUILDERS': {'_InternalInstall': &lt;function InstallBuilderWrapper at 0x700000&amp;gt;, '_InternalInstallVersionedLib': &lt;function InstallVersionedBuilderWrapper at 0x700000&amp;gt;, '_InternalInstallAs': &lt;function InstallAsBuilderWrapper at 0x700000&amp;gt;},
+{ 'BUILDERS': {'_InternalInstall': &lt;function InstallBuilderWrapper at 0x700000&gt;, '_InternalInstallVersionedLib': &lt;function InstallVersionedBuilderWrapper at 0x700000&gt;, '_InternalInstallAs': &lt;function InstallAsBuilderWrapper at 0x700000&gt;},
'CONFIGUREDIR': '#/.sconf_temp',
'CONFIGURELOG': '#/config.log',
'CPPSUFFIXES': [ '.c',
@@ -25,16 +25,16 @@ scons: Reading SConscript files ...
'.SPP',
'.sx'],
'DSUFFIXES': ['.d'],
- 'Dir': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
- 'Dirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
+ 'Dir': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
+ 'Dirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
'ENV': { 'PATH': '/usr/local/bin:/opt/bin:/bin:/usr/bin'},
- 'ESCAPE': &lt;function escape at 0x700000&amp;gt;,
- 'File': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
+ 'ESCAPE': &lt;function escape at 0x700000&gt;,
+ 'File': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
'HOST_ARCH': None,
'HOST_OS': None,
'IDLSUFFIXES': ['.idl', '.IDL'],
- 'INSTALL': &lt;function copyFunc at 0x700000&amp;gt;,
- 'INSTALLVERSIONEDLIB': &lt;function copyFuncVersionedLib at 0x700000&amp;gt;,
+ 'INSTALL': &lt;function copyFunc at 0x700000&gt;,
+ 'INSTALLVERSIONEDLIB': &lt;function copyFuncVersionedLib at 0x700000&gt;,
'LIBPREFIX': 'lib',
'LIBPREFIXES': ['$LIBPREFIX'],
'LIBSUFFIX': '.a',
@@ -45,18 +45,19 @@ scons: Reading SConscript files ...
'PLATFORM': 'posix',
'PROGPREFIX': '',
'PROGSUFFIX': '',
- 'PSPAWN': &lt;function piped_env_spawn at 0x700000&amp;gt;,
- 'RDirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
- 'SCANNERS': [&lt;SCons.Scanner.Base object at 0x700000&amp;gt;],
+ 'PSPAWN': &lt;function piped_env_spawn at 0x700000&gt;,
+ 'RDirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
+ 'SCANNERS': [&lt;SCons.Scanner.Base object at 0x700000&gt;],
'SHELL': 'sh',
'SHLIBPREFIX': '$LIBPREFIX',
'SHLIBSUFFIX': '.so',
'SHOBJPREFIX': '$OBJPREFIX',
'SHOBJSUFFIX': '$OBJSUFFIX',
- 'SPAWN': &lt;function subprocess_spawn at 0x700000&amp;gt;,
+ 'SPAWN': &lt;function subprocess_spawn at 0x700000&gt;,
'TARGET_ARCH': None,
'TARGET_OS': None,
'TEMPFILE': &lt;class 'SCons.Platform.TempFileMunge'&gt;,
+ 'TEMPFILEARGJOIN': ' ',
'TEMPFILEPREFIX': '@',
'TOOLS': ['install', 'install'],
'_CPPDEFFLAGS': '${_defines(CPPDEFPREFIX, CPPDEFINES, CPPDEFSUFFIX, __env__)}',
@@ -68,10 +69,10 @@ scons: Reading SConscript files ...
'__LDMODULEVERSIONFLAGS': '${__libversionflags(__env__,"LDMODULEVERSION","_LDMODULEVERSIONFLAGS")}',
'__RPATH': '$_RPATH',
'__SHLIBVERSIONFLAGS': '${__libversionflags(__env__,"SHLIBVERSION","_SHLIBVERSIONFLAGS")}',
- '__libversionflags': &lt;function __libversionflags at 0x700000&amp;gt;,
- '_concat': &lt;function _concat at 0x700000&amp;gt;,
- '_defines': &lt;function _defines at 0x700000&amp;gt;,
- '_stripixes': &lt;function _stripixes at 0x700000&amp;gt;}
+ '__libversionflags': &lt;function __libversionflags at 0x700000&gt;,
+ '_concat': &lt;function _concat at 0x700000&gt;,
+ '_defines': &lt;function _defines at 0x700000&gt;,
+ '_stripixes': &lt;function _stripixes at 0x700000&gt;}
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
diff --git a/doc/generated/examples/troubleshoot_Dump_2.xml b/doc/generated/examples/troubleshoot_Dump_2.xml
index e8e0960..4b8aa0b 100644
--- a/doc/generated/examples/troubleshoot_Dump_2.xml
+++ b/doc/generated/examples/troubleshoot_Dump_2.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<screen xmlns="http://www.scons.org/dbxsd/v1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0 http://www.scons.org/dbxsd/v1.0/scons.xsd">C:\&gt;<userinput>scons</userinput>
scons: Reading SConscript files ...
-{ 'BUILDERS': {'_InternalInstallVersionedLib': &lt;function InstallVersionedBuilderWrapper at 0x700000&amp;gt;, '_InternalInstall': &lt;function InstallBuilderWrapper at 0x700000&amp;gt;, 'Object': &lt;SCons.Builder.CompositeBuilder object at 0x700000&amp;gt;, 'PCH': &lt;SCons.Builder.BuilderBase object at 0x700000&amp;gt;, 'RES': &lt;SCons.Builder.BuilderBase object at 0x700000&amp;gt;, 'SharedObject': &lt;SCons.Builder.CompositeBuilder object at 0x700000&amp;gt;, 'StaticObject': &lt;SCons.Builder.CompositeBuilder object at 0x700000&amp;gt;, '_InternalInstallAs': &lt;function InstallAsBuilderWrapper at 0x700000&amp;gt;},
+{ 'BUILDERS': {'_InternalInstallVersionedLib': &lt;function InstallVersionedBuilderWrapper at 0x700000&gt;, '_InternalInstall': &lt;function InstallBuilderWrapper at 0x700000&gt;, 'Object': &lt;SCons.Builder.CompositeBuilder object at 0x700000&gt;, 'PCH': &lt;SCons.Builder.BuilderBase object at 0x700000&gt;, 'RES': &lt;SCons.Builder.BuilderBase object at 0x700000&gt;, 'SharedObject': &lt;SCons.Builder.CompositeBuilder object at 0x700000&gt;, 'StaticObject': &lt;SCons.Builder.CompositeBuilder object at 0x700000&gt;, '_InternalInstallAs': &lt;function InstallAsBuilderWrapper at 0x700000&gt;},
'CC': 'cl',
- 'CCCOM': &lt;SCons.Action.FunctionAction object at 0x700000&amp;gt;,
+ 'CCCOM': &lt;SCons.Action.FunctionAction object at 0x700000&gt;,
'CCFLAGS': ['/nologo'],
'CCPCHFLAGS': ['${(PCH and "/Yu%s \\"/Fp%s\\""%(PCHSTOP or "",File(PCH))) or ""}'],
'CCPDBFLAGS': ['${(PDB and "/Z7") or ""}'],
@@ -38,20 +38,20 @@ scons: Reading SConscript files ...
'CXXFILESUFFIX': '.cc',
'CXXFLAGS': ['$(', '/TP', '$)'],
'DSUFFIXES': ['.d'],
- 'Dir': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
- 'Dirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
+ 'Dir': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
+ 'Dirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
'ENV': { 'PATH': 'C:\\WINDOWS\\System32',
'PATHEXT': '.COM;.EXE;.BAT;.CMD',
'SystemRoot': 'C:\\WINDOWS'},
- 'ESCAPE': &lt;function escape at 0x700000&amp;gt;,
- 'File': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
+ 'ESCAPE': &lt;function escape at 0x700000&gt;,
+ 'File': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
'HOST_ARCH': '',
'HOST_OS': 'win32',
'IDLSUFFIXES': ['.idl', '.IDL'],
'INCPREFIX': '/I',
'INCSUFFIX': '',
- 'INSTALL': &lt;function copyFunc at 0x700000&amp;gt;,
- 'INSTALLVERSIONEDLIB': &lt;function copyFuncVersionedLib at 0x700000&amp;gt;,
+ 'INSTALL': &lt;function copyFunc at 0x700000&gt;,
+ 'INSTALLVERSIONEDLIB': &lt;function copyFuncVersionedLib at 0x700000&gt;,
'LEXUNISTD': ['--nounistd'],
'LIBPREFIX': '',
'LIBPREFIXES': ['$LIBPREFIX'],
@@ -66,15 +66,15 @@ scons: Reading SConscript files ...
'PLATFORM': 'win32',
'PROGPREFIX': '',
'PROGSUFFIX': '.exe',
- 'PSPAWN': &lt;function piped_spawn at 0x700000&amp;gt;,
+ 'PSPAWN': &lt;function piped_spawn at 0x700000&gt;,
'RC': 'rc',
- 'RCCOM': &lt;SCons.Action.FunctionAction object at 0x700000&amp;gt;,
+ 'RCCOM': &lt;SCons.Action.FunctionAction object at 0x700000&gt;,
'RCFLAGS': ['/nologo'],
'RCSUFFIXES': ['.rc', '.rc2'],
- 'RDirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&amp;gt;,
- 'SCANNERS': [&lt;SCons.Scanner.Base object at 0x700000&amp;gt;],
+ 'RDirs': &lt;SCons.Defaults.Variable_Method_Caller object at 0x700000&gt;,
+ 'SCANNERS': [&lt;SCons.Scanner.Base object at 0x700000&gt;],
'SHCC': '$CC',
- 'SHCCCOM': &lt;SCons.Action.FunctionAction object at 0x700000&amp;gt;,
+ 'SHCCCOM': &lt;SCons.Action.FunctionAction object at 0x700000&gt;,
'SHCCFLAGS': ['$CCFLAGS'],
'SHCFLAGS': ['$CFLAGS'],
'SHCXX': '$CXX',
@@ -85,11 +85,12 @@ scons: Reading SConscript files ...
'SHLIBSUFFIX': '.dll',
'SHOBJPREFIX': '$OBJPREFIX',
'SHOBJSUFFIX': '$OBJSUFFIX',
- 'SPAWN': &lt;function spawn at 0x700000&amp;gt;,
+ 'SPAWN': &lt;function spawn at 0x700000&gt;,
'STATIC_AND_SHARED_OBJECTS_ARE_THE_SAME': 1,
'TARGET_ARCH': None,
'TARGET_OS': None,
'TEMPFILE': &lt;class 'SCons.Platform.TempFileMunge'&gt;,
+ 'TEMPFILEARGJOIN': '\n',
'TEMPFILEPREFIX': '@',
'TOOLS': ['msvc', 'install', 'install'],
'_CCCOMCOM': '$CPPFLAGS $_CPPDEFFLAGS $_CPPINCFLAGS $CCPCHFLAGS $CCPDBFLAGS',
@@ -97,14 +98,14 @@ scons: Reading SConscript files ...
'_CPPINCFLAGS': '$( ${_concat(INCPREFIX, CPPPATH, INCSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_LIBDIRFLAGS': '$( ${_concat(LIBDIRPREFIX, LIBPATH, LIBDIRSUFFIX, __env__, RDirs, TARGET, SOURCE)} $)',
'_LIBFLAGS': '${_concat(LIBLINKPREFIX, LIBS, LIBLINKSUFFIX, __env__)}',
- '_MSVC_OUTPUT_FLAG': &lt;function msvc_output_flag at 0x700000&amp;gt;,
+ '_MSVC_OUTPUT_FLAG': &lt;function msvc_output_flag at 0x700000&gt;,
'__DSHLIBVERSIONFLAGS': '${__libversionflags(__env__,"DSHLIBVERSION","_DSHLIBVERSIONFLAGS")}',
'__LDMODULEVERSIONFLAGS': '${__libversionflags(__env__,"LDMODULEVERSION","_LDMODULEVERSIONFLAGS")}',
'__SHLIBVERSIONFLAGS': '${__libversionflags(__env__,"SHLIBVERSION","_SHLIBVERSIONFLAGS")}',
- '__libversionflags': &lt;function __libversionflags at 0x700000&amp;gt;,
- '_concat': &lt;function _concat at 0x700000&amp;gt;,
- '_defines': &lt;function _defines at 0x700000&amp;gt;,
- '_stripixes': &lt;function _stripixes at 0x700000&amp;gt;}
+ '__libversionflags': &lt;function __libversionflags at 0x700000&gt;,
+ '_concat': &lt;function _concat at 0x700000&gt;,
+ '_defines': &lt;function _defines at 0x700000&gt;,
+ '_stripixes': &lt;function _stripixes at 0x700000&gt;}
scons: done reading SConscript files.
scons: Building targets ...
scons: `.' is up to date.
diff --git a/doc/generated/examples/troubleshoot_explain1_3.xml b/doc/generated/examples/troubleshoot_explain1_3.xml
index 04b09fd..ebc13f8 100644
--- a/doc/generated/examples/troubleshoot_explain1_3.xml
+++ b/doc/generated/examples/troubleshoot_explain1_3.xml
@@ -3,5 +3,5 @@
cp file.in file.oout
scons: warning: Cannot find target file.out after building
-File "/home/bdeegan/devel/scons/git/as_scons/bootstrap/src/script/scons.py", line 204, in &lt;module&gt;
+File "/home/bdeegan/devel/scons/git/as_scons/src/script/scons.py", line 204, in &lt;module&gt;
</screen>
diff --git a/doc/generated/examples/troubleshoot_stacktrace_2.xml b/doc/generated/examples/troubleshoot_stacktrace_2.xml
index 76cfc1a..70a429d 100644
--- a/doc/generated/examples/troubleshoot_stacktrace_2.xml
+++ b/doc/generated/examples/troubleshoot_stacktrace_2.xml
@@ -4,10 +4,10 @@ scons: *** [prog.o] Source `prog.c' not found, needed by target `prog.o'.
scons: internal stack trace:
File "bootstrap/src/engine/SCons/Job.py", line 199, in start
task.prepare()
- File "bootstrap/src/engine/SCons/Script/Main.py", line 177, in prepare
+ File "bootstrap/src/engine/SCons/Script/Main.py", line 191, in prepare
return SCons.Taskmaster.OutOfDateTask.prepare(self)
File "bootstrap/src/engine/SCons/Taskmaster.py", line 198, in prepare
executor.prepare()
- File "bootstrap/src/engine/SCons/Executor.py", line 430, in prepare
+ File "bootstrap/src/engine/SCons/Executor.py", line 431, in prepare
raise SCons.Errors.StopError(msg % (s, self.batches[0].targets[0]))
</screen>
diff --git a/doc/generated/functions.gen b/doc/generated/functions.gen
index 5e8bebb..d71387e 100644
--- a/doc/generated/functions.gen
+++ b/doc/generated/functions.gen
@@ -25,8 +25,8 @@
Creates an Action object for
the specified
<varname>action</varname>.
-See the section "Action Objects,"
-below, for a complete explanation of the arguments and behavior.
+See the manpage section "Action Objects"
+for a complete explanation of the arguments and behavior.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -121,11 +121,11 @@ env.other_method_name('another arg')
This function adds a new command-line option to be recognized.
The specified
<varname>arguments</varname>
-are the same as supported by the standard Python
-<function>optparse.add_option</function>()
-method (with a few additional capabilities noted below);
+are the same as supported by the <function>add_option</function>
+method in the standard Python library module <emphasis>optparse</emphasis>,
+with a few additional capabilities noted below;
see the documentation for
-<literal>optparse</literal>
+<emphasis>optparse</emphasis>
for a thorough discussion of its option-processing capabities.
</para>
@@ -166,23 +166,36 @@ the option will have a default value of
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
+Unlike regular <emphasis>optparse</emphasis>, option names
+added via <function>AddOption</function> 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 <function xmlns="http://www.scons.org/dbxsd/v1.0">AddOption</function> call.
+</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
Once a new command-line option has been added with
<function xmlns="http://www.scons.org/dbxsd/v1.0">AddOption</function>,
the option value may be accessed using
<function xmlns="http://www.scons.org/dbxsd/v1.0">GetOption</function>
or
<function>env.GetOption</function>().
+<!--
The value may also be set, using
-<function xmlns="http://www.scons.org/dbxsd/v1.0">SetOption</function>
+&f-SetOption;
or
<function>env.SetOption</function>(),
if conditions in a
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">SConscript</filename>
+&SConscript;
require overriding any default value.
Note, however, that a
value specified on the command line will
<emphasis>always</emphasis>
override a value set by any SConscript file.
+-->
+<function xmlns="http://www.scons.org/dbxsd/v1.0">SetOption</function> is not currently supported for
+options added with <function xmlns="http://www.scons.org/dbxsd/v1.0">AddOption</function>.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -221,6 +234,22 @@ AddOption('--prefix',
help='installation prefix')
env = Environment(PREFIX = GetOption('prefix'))
</example_commands>
+
+<note xmlns="http://www.scons.org/dbxsd/v1.0">
+<para>
+While <function xmlns="http://www.scons.org/dbxsd/v1.0">AddOption</function> behaves like
+<function>add_option</function>,
+from the <emphasis>optparse</emphasis> module,
+the behavior of options added by <function xmlns="http://www.scons.org/dbxsd/v1.0">AddOption</function>
+which take arguments is underfined in
+<command>scons</command> if whitespace
+(rather than an <literal>=</literal> sign) is used as
+the separator on the command line when
+the option is invoked.
+Such usage should be avoided.
+</para>
+</note>
+
</listitem>
</varlistentry>
<varlistentry id="f-AddPostAction">
@@ -241,7 +270,8 @@ has been built.
The specified action(s) may be
an Action object, or anything that
can be converted into an Action object
-(see below).
+See the manpage section "Action Objects"
+for a complete explanation.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -270,7 +300,8 @@ is built.
The specified action(s) may be
an Action object, or anything that
can be converted into an Action object
-(see below).
+See the manpage section "Action Objects"
+for a complete explanation.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -444,7 +475,7 @@ 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.)
+(See also the <function xmlns="http://www.scons.org/dbxsd/v1.0">Prepend</function> method).
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -532,30 +563,6 @@ env.AppendUnique(CCFLAGS = '-g', FOO = ['foo.yyy'])
</example_commands>
</listitem>
</varlistentry>
- <varlistentry id="f-BuildDir">
- <term>
- <literal>BuildDir(build_dir, src_dir, [duplicate])</literal>
- </term>
- <term>
- <literal>env.BuildDir(build_dir, src_dir, [duplicate])</literal>
- </term>
- <listitem>
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Deprecated synonyms for
-<function xmlns="http://www.scons.org/dbxsd/v1.0">VariantDir</function>
-and
-<function>env.VariantDir</function>().
-The
-<varname>build_dir</varname>
-argument becomes the
-<varname>variant_dir</varname>
-argument of
-<function xmlns="http://www.scons.org/dbxsd/v1.0">VariantDir</function>
-or
-<function>env.VariantDir</function>().
-</para>
-</listitem>
- </varlistentry>
<varlistentry id="f-Builder">
<term>
<literal>Builder(action, [arguments])</literal>
@@ -568,8 +575,8 @@ or
Creates a Builder object for
the specified
<varname>action</varname>.
-See the section "Builder Objects,"
-below, for a complete explanation of the arguments and behavior.
+See the manpage section "Builder Objects"
+for a complete explanation of the arguments and behavior.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -849,19 +856,29 @@ for a single special-case build.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-As a special case, the
-<varname>source_scanner</varname>
-keyword argument can
+<function xmlns="http://www.scons.org/dbxsd/v1.0">Command</function> builder accepts
+<varname>source_scanner</varname>,
+<varname>target_scanner</varname>,
+<varname>source_factory</varname>, and
+<varname>target_factory</varname>
+keyword arguments. The *_scanner args can
be used to specify
a Scanner object
-that will be used to scan the sources.
-(The global
+that will be used to apply a custom
+scanner for a source or target.
+For example, the global
<literal>DirScanner</literal>
object can be used
if any of the sources will be directories
that must be scanned on-disk for
changes to files that aren't
-already specified in other Builder of function calls.)
+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.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -873,7 +890,7 @@ same-named existing construction variables.
An action can be an external command,
specified as a string,
or a callable Python object;
-see "Action Objects," below,
+see the manpage section "Action Objects"
for more complete information.
Also note that a string specifying an external command
may be preceded by an
@@ -897,7 +914,7 @@ env.Command('foo.out', 'foo.in',
env.Command('bar.out', 'bar.in',
["rm -f $TARGET",
"$BAR_BUILD &lt; $SOURCES &gt; $TARGET"],
- ENV = {'PATH' : '/usr/local/bin/'})
+ ENV={'PATH': '/usr/local/bin/'})
def rename(env, target, source):
import os
@@ -905,7 +922,7 @@ def rename(env, target, source):
env.Command('baz.out', 'baz.in',
["$BAZ_BUILD &lt; $SOURCES &gt; .tmp",
- rename ])
+ rename])
</example_commands>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -914,14 +931,14 @@ Note that 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 entry it is.
+identifies what type of entries they are.
If necessary, you can explicitly specify
that targets or source nodes should
-be treated as directoriese
+be treated as directories
by using the
<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="f-Dir"><function>Dir</function></link>
or
-<function>env.Dir</function>()
+<function>env.Dir</function>
functions.
</para>
@@ -937,9 +954,9 @@ env.Command(env.Dir('$DISTDIR')), None, make_distdir)
</example_commands>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-(Also note that SCons will usually
+Also note that SCons will usually
automatically create any directory necessary to hold a target file,
-so you normally don't need to create directories by hand.)
+so you normally don't need to create directories by hand.
</para>
</listitem>
</varlistentry>
@@ -954,8 +971,8 @@ so you normally don't need to create directories by hand.)
<para xmlns="http://www.scons.org/dbxsd/v1.0">
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.
+See the manpage section "Configure Contexts"
+for a complete explanation of the arguments and behavior.
</para>
</listitem>
</varlistentry>
@@ -1262,15 +1279,21 @@ see below.
</varlistentry>
<varlistentry id="f-DefaultEnvironment">
<term>
- <literal>DefaultEnvironment([args])</literal>
+ <literal>DefaultEnvironment([**kwargs])</literal>
</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-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
+Creates and returns the default <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction environment</literal> object.
+The default <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction environment</literal> 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
+<literal xmlns="http://www.scons.org/dbxsd/v1.0">construction environment</literal>), 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 <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction environment</literal>.
</para>
</listitem>
</varlistentry>
@@ -1333,11 +1356,11 @@ env.Depends(bar, installed_lib)
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
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.
+containing the <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction variables</literal> in the <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction environment</literal>.
+If there are any arguments specified,
+the values of the specified <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction variables</literal>
+are returned as a string (if one
+argument) or as a list of strings.
</para>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -1345,8 +1368,8 @@ Example:
</para>
<example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
-dict = env.Dictionary()
-cc_dict = env.Dictionary('CC', 'CCFLAGS', 'CCCOM')
+cvars = env.Dictionary()
+cc_values = env.Dictionary('CC', 'CCFLAGS', 'CCCOM')
</example_commands>
</listitem>
</varlistentry>
@@ -1385,7 +1408,8 @@ 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.
+see manpage section "File and Directory Nodes"
+for more information.
</para>
</listitem>
</varlistentry>
@@ -1408,7 +1432,7 @@ This SConstruct:
<example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
env=Environment()
-print env.Dump('CCCOM')
+print(env.Dump('CCCOM'))
</example_commands>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -1425,7 +1449,7 @@ While this SConstruct:
<example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
env=Environment()
-print env.Dump()
+print(env.Dump())
</example_commands>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -1528,8 +1552,8 @@ Executes an Action object.
The specified
<varname>action</varname>
may be an Action object
-(see the section "Action Objects,"
-below, for a complete explanation of the arguments and behavior),
+(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,
@@ -1686,7 +1710,8 @@ 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.
+see manpage section "File and Directory Nodes"
+for more information.
</para>
</listitem>
</varlistentry>
@@ -2836,7 +2861,7 @@ and the construction variables they affect
are as specified for the
<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="f-ParseFlags"><function>env.ParseFlags</function></link>
method (which this method calls).
-See that method's description, below,
+See that method's description
for a table of options and construction variables.
</para>
</listitem>
@@ -2948,30 +2973,34 @@ and added to the following construction variables:
</para>
<example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
--arch CCFLAGS, LINKFLAGS
--D CPPDEFINES
--framework FRAMEWORKS
--frameworkdir= FRAMEWORKPATH
--include CCFLAGS
--isysroot CCFLAGS, LINKFLAGS
--isystem CCFLAGS
--iquote CCFLAGS
--idirafter CCFLAGS
--I CPPPATH
--l LIBS
--L LIBPATH
--mno-cygwin CCFLAGS, LINKFLAGS
--mwindows LINKFLAGS
--pthread CCFLAGS, LINKFLAGS
--std= CFLAGS
--Wa, ASFLAGS, CCFLAGS
--Wl,-rpath= RPATH
--Wl,-R, RPATH
--Wl,-R RPATH
--Wl, LINKFLAGS
--Wp, CPPFLAGS
-- CCFLAGS
-+ CCFLAGS, LINKFLAGS
+-arch CCFLAGS, LINKFLAGS
+-D CPPDEFINES
+-framework FRAMEWORKS
+-frameworkdir= FRAMEWORKPATH
+-fmerge-all-constants CCFLAGS, LINKFLAGS
+-fopenmp CCFLAGS, LINKFLAGS
+-include CCFLAGS
+-imacros CCFLAGS
+-isysroot CCFLAGS, LINKFLAGS
+-isystem CCFLAGS
+-iquote CCFLAGS
+-idirafter CCFLAGS
+-I CPPPATH
+-l LIBS
+-L LIBPATH
+-mno-cygwin CCFLAGS, LINKFLAGS
+-mwindows LINKFLAGS
+-openmp CCFLAGS, LINKFLAGS
+-pthread CCFLAGS, LINKFLAGS
+-std= CFLAGS
+-Wa, ASFLAGS, CCFLAGS
+-Wl,-rpath= RPATH
+-Wl,-R, RPATH
+-Wl,-R RPATH
+-Wl, LINKFLAGS
+-Wp, CPPFLAGS
+- CCFLAGS
++ CCFLAGS, LINKFLAGS
</example_commands>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
@@ -3536,8 +3565,8 @@ Return('val1 val2')
Creates a Scanner object for
the specified
<varname>function</varname>.
-See the section "Scanner Objects,"
-below, for a complete explanation of the arguments and behavior.
+See manpage section "Scanner Objects"
+for a complete explanation of the arguments and behavior.
</para>
</listitem>
</varlistentry>
@@ -4226,107 +4255,6 @@ env.SourceCode('no_source.c', None)
</para>
</listitem>
</varlistentry>
- <varlistentry id="f-SourceSignatures">
- <term>
- <literal>SourceSignatures(type)</literal>
- </term>
- <term>
- <literal>env.SourceSignatures(type)</literal>
- </term>
- <listitem>
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Note: Although it is not yet officially deprecated,
-use of this function is discouraged.
-See the
-<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="f-Decider"><function>Decider</function></link>
-function for a more flexible and straightforward way
-to configure SCons' decision-making.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-The
-<function xmlns="http://www.scons.org/dbxsd/v1.0">SourceSignatures</function>
-function tells
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-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
-<literal>MD5</literal>
-or
-<literal>timestamp</literal>.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-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.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>MD5</literal>
-means
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-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.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>timestamp</literal>
-means
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-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
-<emphasis>older</emphasis>
-than the last time it was used to rebuild the target file.)
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-There is no different between the two behaviors
-for Python
-<function xmlns="http://www.scons.org/dbxsd/v1.0">Value</function>
-node objects.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>MD5</literal>
-signatures take longer to compute,
-but are more accurate than
-<literal>timestamp</literal>
-signatures.
-The default value is
-<literal>MD5</literal>.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Note that the default
-<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="f-TargetSignatures"><function>TargetSignatures</function></link>
-setting (see below)
-is to use this
-<function xmlns="http://www.scons.org/dbxsd/v1.0">SourceSignatures</function>
-setting for any target files that are used
-to build other target files.
-Consequently, changing the value of
-<function xmlns="http://www.scons.org/dbxsd/v1.0">SourceSignatures</function>
-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
-<function xmlns="http://www.scons.org/dbxsd/v1.0">env.SourceSignatures</function>
-is used).
-</para>
-</listitem>
- </varlistentry>
<varlistentry id="f-Split">
<term>
<literal>Split(arg)</literal>
@@ -4459,7 +4387,7 @@ Example:
</para>
<example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
-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}",
@@ -4489,170 +4417,15 @@ Examples:
</para>
<example_commands xmlns="http://www.scons.org/dbxsd/v1.0">
-# 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( 'lib.c' ), UNIX_ATTR="0644" )
+Tag( Library( 'lib.c' ), UNIX_ATTR="0o644" )
# marks file2.txt to be a documentation file
Tag( 'file2.txt', DOC )
</example_commands>
</listitem>
</varlistentry>
- <varlistentry id="f-TargetSignatures">
- <term>
- <literal>TargetSignatures(type)</literal>
- </term>
- <term>
- <literal>env.TargetSignatures(type)</literal>
- </term>
- <listitem>
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Note: Although it is not yet officially deprecated,
-use of this function is discouraged.
-See the
-<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="f-Decider"><function>Decider</function></link>
-function for a more flexible and straightforward way
-to configure SCons' decision-making.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-The
-<function xmlns="http://www.scons.org/dbxsd/v1.0">TargetSignatures</function>
-function tells
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-how to decide if a target file
-(a file that
-<emphasis>is</emphasis>
-built from any other files)
-has changed since the last time it
-was used to build some other target file.
-Legal values are
-<literal>"build"</literal>;
-<literal>"content"</literal>
-(or its synonym
-<literal>"MD5"</literal>);
-<literal>"timestamp"</literal>;
-or
-<literal>"source"</literal>.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-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't have an explicit target signature type
-specified for their environments.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>"content"</literal>
-(or its synonym
-<literal>"MD5"</literal>)
-means
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-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
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-will open up
-MD5 sum the contents
-of target files after they're 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.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>"timestamp"</literal>
-means
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-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
-<emphasis>older</emphasis>
-than the last time it was used to rebuild the target file.)
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>"source"</literal>
-means
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-decides that a target file has changed
-as specified by the corresponding
-<function xmlns="http://www.scons.org/dbxsd/v1.0">SourceSignatures</function>
-setting
-(<literal>"MD5"</literal>
-or
-<literal>"timestamp"</literal>).
-This means that
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-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.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>"build"</literal>
-means
-<filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
-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
-<function xmlns="http://www.scons.org/dbxsd/v1.0">SourceSignatures</function>
-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.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-<literal>"build"</literal>
-signatures are fastest because
-<literal>"content"</literal>
-(or
-<literal>"MD5"</literal>)
-signatures take longer to compute,
-but are more accurate than
-<literal>"timestamp"</literal>
-signatures,
-and can prevent unnecessary "downstream" rebuilds
-when a target file is rebuilt to the exact same contents
-as the previous build.
-The
-<literal>"source"</literal>
-setting provides the most consistent behavior
-when other target files may be rebuilt from
-both source and target input files.
-The default value is
-<literal>"source"</literal>.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Because the default setting is
-<literal>"source"</literal>,
-using
-<function xmlns="http://www.scons.org/dbxsd/v1.0">SourceSignatures</function>
-is generally preferable to
-<function xmlns="http://www.scons.org/dbxsd/v1.0">TargetSignatures</function>,
-so that the up-to-date decision
-will be consistent for all files
-(or all files built with a specific construction environment).
-Use of
-<function xmlns="http://www.scons.org/dbxsd/v1.0">TargetSignatures</function>
-provides specific control for how built target files
-affect their "downstream" dependencies.
-</para>
-</listitem>
- </varlistentry>
<varlistentry id="f-Tool">
<term>
<literal>Tool(string, [toolpath, **kw])</literal>
@@ -4946,30 +4719,51 @@ SConscript(dirs='doc', variant_dir='build/doc', duplicate=0)
Searches for the specified executable
<varname>program</varname>,
returning the full path name to the program
-if it is found,
-and returning None if not.
-Searches the specified
-<varname>path</varname>,
-the value of the calling environment's PATH
-(<literal>env['ENV']['PATH']</literal>),
-or the user's current external PATH
-(<literal>os.environ['PATH']</literal>)
-by default.
+if it is found, else <literal>None</literal>.
+Searches the value of the
+<varname>path</varname> keyword argument,
+or if <literal>None</literal> (the default)
+the value of the calling environment's <envar>PATH</envar>
+(<literal>env['ENV']['PATH']</literal>).
+If <varname>path</varname> is <literal>None</literal> and
+the <literal>env['ENV']['PATH']</literal> key does not exist,
+the user's current external <envar>PATH</envar>
+(<literal>os.environ['PATH']</literal>) is used as fallback.
+</para>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
On Windows systems, searches for executable
-programs with any of the file extensions
-listed in the specified
-<varname>pathext</varname>,
-the calling environment's PATHEXT
-(<literal>env['ENV']['PATHEXT']</literal>)
-or the user's current PATHEXT
+programs with any of the file extensions listed in the
+<varname>pathext</varname> keyword argument,
+or if <literal>None</literal> (the default)
+the calling environment's <envar>PATHEXT</envar>
+(<literal>env['ENV']['PATHEXT']</literal>).
+The user's current external <envar>PATHEXT</envar>
(<literal>os.environ['PATHEXT']</literal>)
-by default.
+is used as a fallback if <varname>pathext</varname> is
+<literal>None</literal>
+and the key <literal>env['ENV']['PATHEXT']</literal>
+does not exist.
+</para>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
Will not select any
path name or names
in the specified
<varname>reject</varname>
list, if any.
</para>
+<note xmlns="http://www.scons.org/dbxsd/v1.0">
+<para>
+If you would prefer to search
+the user's current external <envar>PATH</envar>
+(<literal>os.environ['PATH']</literal>)
+by default,
+consider using the function <literal>SCons.Util.WhereIs</literal> instead.
+Note that <literal>SCons.Util.WhereIs</literal>
+does not expand environment variables automatically
+(no implicit <literal>env.subst</literal> for its arguments).
+</para>
+</note>
+
</listitem>
</varlistentry>
</variablelist>
diff --git a/doc/generated/functions.mod b/doc/generated/functions.mod
index e460aaf..3d49229 100644
--- a/doc/generated/functions.mod
+++ b/doc/generated/functions.mod
@@ -19,7 +19,6 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-Append "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Append</function>">
<!ENTITY f-AppendENVPath "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AppendENVPath</function>">
<!ENTITY f-AppendUnique "<function xmlns='http://www.scons.org/dbxsd/v1.0'>AppendUnique</function>">
-<!ENTITY f-BuildDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>BuildDir</function>">
<!ENTITY f-Builder "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Builder</function>">
<!ENTITY f-CacheDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>CacheDir</function>">
<!ENTITY f-Clean "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Clean</function>">
@@ -82,11 +81,9 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-SetOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SetOption</function>">
<!ENTITY f-SideEffect "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SideEffect</function>">
<!ENTITY f-SourceCode "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SourceCode</function>">
-<!ENTITY f-SourceSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SourceSignatures</function>">
<!ENTITY f-Split "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Split</function>">
<!ENTITY f-subst "<function xmlns='http://www.scons.org/dbxsd/v1.0'>subst</function>">
<!ENTITY f-Tag "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Tag</function>">
-<!ENTITY f-TargetSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TargetSignatures</function>">
<!ENTITY f-Tool "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Tool</function>">
<!ENTITY f-Value "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Value</function>">
<!ENTITY f-VariantDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>VariantDir</function>">
@@ -103,7 +100,6 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-env-Append "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.Append</function>">
<!ENTITY f-env-AppendENVPath "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.AppendENVPath</function>">
<!ENTITY f-env-AppendUnique "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.AppendUnique</function>">
-<!ENTITY f-env-BuildDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.BuildDir</function>">
<!ENTITY f-env-Builder "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.Builder</function>">
<!ENTITY f-env-CacheDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.CacheDir</function>">
<!ENTITY f-env-Clean "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.Clean</function>">
@@ -166,11 +162,9 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-env-SetOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.SetOption</function>">
<!ENTITY f-env-SideEffect "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.SideEffect</function>">
<!ENTITY f-env-SourceCode "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.SourceCode</function>">
-<!ENTITY f-env-SourceSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.SourceSignatures</function>">
<!ENTITY f-env-Split "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.Split</function>">
<!ENTITY f-env-subst "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.subst</function>">
<!ENTITY f-env-Tag "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.Tag</function>">
-<!ENTITY f-env-TargetSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.TargetSignatures</function>">
<!ENTITY f-env-Tool "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.Tool</function>">
<!ENTITY f-env-Value "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.Value</function>">
<!ENTITY f-env-VariantDir "<function xmlns='http://www.scons.org/dbxsd/v1.0'>env.VariantDir</function>">
@@ -197,7 +191,6 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-link-Append "<link linkend='f-Append' xmlns='http://www.scons.org/dbxsd/v1.0'><function>Append</function></link>">
<!ENTITY f-link-AppendENVPath "<link linkend='f-AppendENVPath' xmlns='http://www.scons.org/dbxsd/v1.0'><function>AppendENVPath</function></link>">
<!ENTITY f-link-AppendUnique "<link linkend='f-AppendUnique' xmlns='http://www.scons.org/dbxsd/v1.0'><function>AppendUnique</function></link>">
-<!ENTITY f-link-BuildDir "<link linkend='f-BuildDir' xmlns='http://www.scons.org/dbxsd/v1.0'><function>BuildDir</function></link>">
<!ENTITY f-link-Builder "<link linkend='f-Builder' xmlns='http://www.scons.org/dbxsd/v1.0'><function>Builder</function></link>">
<!ENTITY f-link-CacheDir "<link linkend='f-CacheDir' xmlns='http://www.scons.org/dbxsd/v1.0'><function>CacheDir</function></link>">
<!ENTITY f-link-Clean "<link linkend='f-Clean' xmlns='http://www.scons.org/dbxsd/v1.0'><function>Clean</function></link>">
@@ -260,11 +253,9 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-link-SetOption "<link linkend='f-SetOption' xmlns='http://www.scons.org/dbxsd/v1.0'><function>SetOption</function></link>">
<!ENTITY f-link-SideEffect "<link linkend='f-SideEffect' xmlns='http://www.scons.org/dbxsd/v1.0'><function>SideEffect</function></link>">
<!ENTITY f-link-SourceCode "<link linkend='f-SourceCode' xmlns='http://www.scons.org/dbxsd/v1.0'><function>SourceCode</function></link>">
-<!ENTITY f-link-SourceSignatures "<link linkend='f-SourceSignatures' xmlns='http://www.scons.org/dbxsd/v1.0'><function>SourceSignatures</function></link>">
<!ENTITY f-link-Split "<link linkend='f-Split' xmlns='http://www.scons.org/dbxsd/v1.0'><function>Split</function></link>">
<!ENTITY f-link-subst "<link linkend='f-subst' xmlns='http://www.scons.org/dbxsd/v1.0'><function>subst</function></link>">
<!ENTITY f-link-Tag "<link linkend='f-Tag' xmlns='http://www.scons.org/dbxsd/v1.0'><function>Tag</function></link>">
-<!ENTITY f-link-TargetSignatures "<link linkend='f-TargetSignatures' xmlns='http://www.scons.org/dbxsd/v1.0'><function>TargetSignatures</function></link>">
<!ENTITY f-link-Tool "<link linkend='f-Tool' xmlns='http://www.scons.org/dbxsd/v1.0'><function>Tool</function></link>">
<!ENTITY f-link-Value "<link linkend='f-Value' xmlns='http://www.scons.org/dbxsd/v1.0'><function>Value</function></link>">
<!ENTITY f-link-VariantDir "<link linkend='f-VariantDir' xmlns='http://www.scons.org/dbxsd/v1.0'><function>VariantDir</function></link>">
@@ -281,7 +272,6 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-link-env-Append "<link linkend='f-Append' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.Append</function></link>">
<!ENTITY f-link-env-AppendENVPath "<link linkend='f-AppendENVPath' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.AppendENVPath</function></link>">
<!ENTITY f-link-env-AppendUnique "<link linkend='f-AppendUnique' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.AppendUnique</function></link>">
-<!ENTITY f-link-env-BuildDir "<link linkend='f-BuildDir' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.BuildDir</function></link>">
<!ENTITY f-link-env-Builder "<link linkend='f-Builder' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.Builder</function></link>">
<!ENTITY f-link-env-CacheDir "<link linkend='f-CacheDir' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.CacheDir</function></link>">
<!ENTITY f-link-env-Clean "<link linkend='f-Clean' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.Clean</function></link>">
@@ -344,11 +334,9 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY f-link-env-SetOption "<link linkend='f-SetOption' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.SetOption</function></link>">
<!ENTITY f-link-env-SideEffect "<link linkend='f-SideEffect' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.SideEffect</function></link>">
<!ENTITY f-link-env-SourceCode "<link linkend='f-SourceCode' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.SourceCode</function></link>">
-<!ENTITY f-link-env-SourceSignatures "<link linkend='f-SourceSignatures' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.SourceSignatures</function></link>">
<!ENTITY f-link-env-Split "<link linkend='f-Split' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.Split</function></link>">
<!ENTITY f-link-env-subst "<link linkend='f-subst' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.subst</function></link>">
<!ENTITY f-link-env-Tag "<link linkend='f-Tag' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.Tag</function></link>">
-<!ENTITY f-link-env-TargetSignatures "<link linkend='f-TargetSignatures' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.TargetSignatures</function></link>">
<!ENTITY f-link-env-Tool "<link linkend='f-Tool' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.Tool</function></link>">
<!ENTITY f-link-env-Value "<link linkend='f-Value' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.Value</function></link>">
<!ENTITY f-link-env-VariantDir "<link linkend='f-VariantDir' xmlns='http://www.scons.org/dbxsd/v1.0'><function>env.VariantDir</function></link>">
diff --git a/doc/generated/tools.gen b/doc/generated/tools.gen
index be717e3..0d30f6f 100644
--- a/doc/generated/tools.gen
+++ b/doc/generated/tools.gen
@@ -91,7 +91,7 @@ Sets construction variables for the bcc32 compiler.
<term>cc</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Sets construction variables for generic POSIX C copmilers.
+Sets construction variables for generic POSIX C compilers.
</para>
<para>Sets: &cv-link-CC;, &cv-link-CCCOM;, &cv-link-CCFLAGS;, &cv-link-CFILESUFFIX;, &cv-link-CFLAGS;, &cv-link-CPPDEFPREFIX;, &cv-link-CPPDEFSUFFIX;, &cv-link-FRAMEWORKPATH;, &cv-link-FRAMEWORKS;, &cv-link-INCPREFIX;, &cv-link-INCSUFFIX;, &cv-link-SHCC;, &cv-link-SHCCCOM;, &cv-link-SHCCFLAGS;, &cv-link-SHCFLAGS;, &cv-link-SHOBJSUFFIX;.</para><para>Uses: &cv-link-PLATFORM;.</para></listitem>
</varlistentry>
@@ -139,9 +139,91 @@ Set construction variables for cygwin linker/loader.
<term>default</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Sets variables by calling a default list of Tool modules
-for the platform on which SCons is running.
+Sets <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction variables</literal> for a default list of Tool modules.
+Use <emphasis role="bold">default</emphasis>
+in the tools list to retain the original defaults,
+since the <parameter>tools</parameter> parameter
+is treated as a literal statement of the tools
+to be made available in that <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction environment</literal>, not an addition.
</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+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 <envar>TOOLS</envar> <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction variable</literal>
+in the <literal xmlns="http://www.scons.org/dbxsd/v1.0">construction environment</literal>.
+</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+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.
+</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+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 'ar'.
+It also selects all found from the list
+m4, rpm.
+</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+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.
+</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+On MacOS systems, the default tools list selects
+(first-found): a C compiler from
+gcc, cc;
+a C++ compiler from
+g++, cxx;
+an assembler 'as';
+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.
+</para>
+
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+Default lists for other platforms can be found by
+examining the <filename xmlns="http://www.scons.org/dbxsd/v1.0">scons</filename>
+source code (see
+<filename>SCons/Tool/__init__.py</filename>).
+</para>
+
</listitem>
</varlistentry>
<varlistentry id="t-dmd">
@@ -627,7 +709,9 @@ Sets construction variables for the <application xmlns="http://www.scons.org/dbx
<term>link</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-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.
</para>
<para>Sets: &cv-link-LDMODULE;, &cv-link-LDMODULECOM;, &cv-link-LDMODULEFLAGS;, &cv-link-LDMODULENOVERSIONSYMLINKS;, &cv-link-LDMODULEPREFIX;, &cv-link-LDMODULESUFFIX;, &cv-link-LDMODULEVERSION;, &cv-link-LDMODULEVERSIONFLAGS;, &cv-link-LIBDIRPREFIX;, &cv-link-LIBDIRSUFFIX;, &cv-link-LIBLINKPREFIX;, &cv-link-LIBLINKSUFFIX;, &cv-link-LINK;, &cv-link-LINKCOM;, &cv-link-LINKFLAGS;, &cv-link-SHLIBSUFFIX;, &cv-link-SHLINK;, &cv-link-SHLINKCOM;, &cv-link-SHLINKFLAGS;, &cv-link-__LDMODULEVERSIONFLAGS;, &cv-link-__SHLIBVERSIONFLAGS;.</para><para>Uses: &cv-link-LDMODULECOMSTR;, &cv-link-LINKCOMSTR;, &cv-link-SHLINKCOMSTR;.</para></listitem>
</varlistentry>
@@ -779,19 +863,19 @@ Sets construction variables for the
</para>
<para>Sets: &cv-link-AS;, &cv-link-ASCOM;, &cv-link-ASFLAGS;, &cv-link-ASPPCOM;, &cv-link-ASPPFLAGS;.</para><para>Uses: &cv-link-ASCOMSTR;, &cv-link-ASPPCOMSTR;.</para></listitem>
</varlistentry>
- <varlistentry id="t-packaging">
- <term>packaging</term>
+ <varlistentry id="t-Packaging">
+ <term>Packaging</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-A framework for building binary and source packages.
+Sets construction variables for the <function xmlns="http://www.scons.org/dbxsd/v1.0">Package</function> Builder.
</para>
</listitem>
</varlistentry>
- <varlistentry id="t-Packaging">
- <term>Packaging</term>
+ <varlistentry id="t-packaging">
+ <term>packaging</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-Sets construction variables for the <function xmlns="http://www.scons.org/dbxsd/v1.0">Package</function> Builder.
+A framework for building binary and source packages.
</para>
</listitem>
</varlistentry>
diff --git a/doc/generated/tools.mod b/doc/generated/tools.mod
index f9bc1d7..1209d74 100644
--- a/doc/generated/tools.mod
+++ b/doc/generated/tools.mod
@@ -78,8 +78,8 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY t-mwcc "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>mwcc</literal>">
<!ENTITY t-mwld "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>mwld</literal>">
<!ENTITY t-nasm "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>nasm</literal>">
-<!ENTITY t-packaging "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>packaging</literal>">
<!ENTITY t-Packaging "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>Packaging</literal>">
+<!ENTITY t-packaging "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>packaging</literal>">
<!ENTITY t-pdf "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>pdf</literal>">
<!ENTITY t-pdflatex "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>pdflatex</literal>">
<!ENTITY t-pdftex "<literal xmlns='http://www.scons.org/dbxsd/v1.0'>pdftex</literal>">
@@ -186,8 +186,8 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY t-link-mwcc "<link linkend='t-mwcc' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>mwcc</literal></link>">
<!ENTITY t-link-mwld "<link linkend='t-mwld' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>mwld</literal></link>">
<!ENTITY t-link-nasm "<link linkend='t-nasm' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>nasm</literal></link>">
-<!ENTITY t-link-packaging "<link linkend='t-packaging' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>packaging</literal></link>">
<!ENTITY t-link-Packaging "<link linkend='t-Packaging' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>Packaging</literal></link>">
+<!ENTITY t-link-packaging "<link linkend='t-packaging' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>packaging</literal></link>">
<!ENTITY t-link-pdf "<link linkend='t-pdf' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>pdf</literal></link>">
<!ENTITY t-link-pdflatex "<link linkend='t-pdflatex' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>pdflatex</literal></link>">
<!ENTITY t-link-pdftex "<link linkend='t-pdftex' xmlns='http://www.scons.org/dbxsd/v1.0'><literal>pdftex</literal></link>">
diff --git a/doc/generated/variables.gen b/doc/generated/variables.gen
index 28dfc59..9050832 100644
--- a/doc/generated/variables.gen
+++ b/doc/generated/variables.gen
@@ -488,7 +488,8 @@ after the SCons template for the file has been written.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
@@ -498,7 +499,8 @@ that may not be set or used in a construction environment.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
@@ -874,35 +876,15 @@ depending on the specific C++ compiler being used.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
The D compiler to use.
</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-The D compiler to use.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-The D compiler to use.
-</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DCOM">
<term>DCOM</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line used to compile a D file to an object file.
- Any options specified in the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-DFLAGS"><envar>$DFLAGS</envar></link> construction variable
- is included on this command line.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line used to compile a D file to an object file.
- Any options specified in the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-DFLAGS"><envar>$DFLAGS</envar></link> construction variable
- is included on this command line.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line used to compile a D file to an object file.
- Any options specified in the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-DFLAGS"><envar>$DFLAGS</envar></link> construction variable
- is included on this command line.
+The command line used to compile a D file to an object file.
+Any options specified in the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-DFLAGS"><envar>$DFLAGS</envar></link> construction variable
+is included on this command line.
</para>
</listitem>
</varlistentry>
@@ -910,49 +892,25 @@ The D compiler to use.
<term>DDEBUG</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of debug tags to enable when compiling.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of debug tags to enable when compiling.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of debug tags to enable when compiling.
+List of debug tags to enable when compiling.
</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DDEBUGPREFIX">
<term>DDEBUGPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DDEBUGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DDEBUGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DDEBUGPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DDEBUGPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DDEBUGSUFFIX">
<term>DDEBUGSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DDEBUGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DDEBUGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DDEBUGSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DDEBUGSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DESCRIPTION">
<term>DESCRIPTION</term>
@@ -980,98 +938,50 @@ section of an RPM
<varlistentry id="cv-DFILESUFFIX">
<term>DFILESUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFILESUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFILESUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFILESUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DFILESUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DFLAGPREFIX">
<term>DFLAGPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFLAGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFLAGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFLAGPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DFLAGPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DFLAGS">
<term>DFLAGS</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- General options that are passed to the D compiler.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- General options that are passed to the D compiler.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- General options that are passed to the D compiler.
+General options that are passed to the D compiler.
</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DFLAGSUFFIX">
<term>DFLAGSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DFLAGSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DFLAGSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DINCPREFIX">
<term>DINCPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DINCPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DINCPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DINCPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DINCPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DINCSUFFIX">
<term>DINCSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLIBFLAGSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-Dir">
<term>Dir</term>
@@ -1100,15 +1010,7 @@ into a list of Dir instances relative to the target being built.
<term>DLIB</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- Name of the lib tool to use for D codes.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- Name of the lib tool to use for D codes.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- Name of the lib tool to use for D codes.
+Name of the lib tool to use for D codes.
</para>
</listitem>
</varlistentry>
@@ -1116,127 +1018,63 @@ into a list of Dir instances relative to the target being built.
<term>DLIBCOM</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when creating libraries.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when creating libraries.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when creating libraries.
+The command line to use when creating libraries.
</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DLIBDIRPREFIX">
<term>DLIBDIRPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLIBLINKPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DLIBDIRSUFFIX">
<term>DLIBDIRSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLIBLINKSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DLIBFLAGPREFIX">
<term>DLIBFLAGPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLIBFLAGPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DLIBFLAGSUFFIX">
<term>DLIBFLAGSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBFLAGSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLIBFLAGSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DLIBLINKPREFIX">
<term>DLIBLINKPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLIBLINKPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DLIBLINKSUFFIX">
<term>DLIBLINKSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLIBLINKSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLIBLINKSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DLINK">
<term>DLINK</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- Name of the linker to use for linking systems including D sources.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- Name of the linker to use for linking systems including D sources.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- Name of the linker to use for linking systems including D sources.
+Name of the linker to use for linking systems including D sources.
</para>
</listitem>
</varlistentry>
@@ -1244,33 +1082,17 @@ into a list of Dir instances relative to the target being built.
<term>DLINKCOM</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when linking systems including D sources.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when linking systems including D sources.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when linking systems including D sources.
+The command line to use when linking systems including D sources.
</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DLINKFLAGPREFIX">
<term>DLINKFLAGPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLINKFLAGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLINKFLAGPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLINKFLAGPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLINKFLAGPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DLINKFLAGS">
<term>DLINKFLAGS</term>
@@ -1278,31 +1100,15 @@ into a list of Dir instances relative to the target being built.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
List of linker flags.
</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-List of linker flags.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
-List of linker flags.
-</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DLINKFLAGSUFFIX">
<term>DLINKFLAGSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLINKFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLINKFLAGSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DLINKFLAGSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DLINKFLAGSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DOCBOOK_DEFAULT_XSL_EPUB">
<term>DOCBOOK_DEFAULT_XSL_EPUB</term>
@@ -1507,39 +1313,31 @@ for <literal>saxon</literal> and <literal>saxon-xslt</literal>, respectively.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
List of paths to search for import modules.
</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of paths to search for import modules.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of paths to search for import modules.
-</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DRPATHPREFIX">
<term>DRPATHPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DRPATHPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DRPATHPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DRPATHSUFFIX">
<term>DRPATHSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DRPATHSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DRPATHSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DShLibSonameGenerator">
<term>DShLibSonameGenerator</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DShLibSonameGenerator.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DShLibSonameGenerator.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DSUFFIXES">
<term>DSUFFIXES</term>
@@ -1558,50 +1356,26 @@ The default list is:
<varlistentry id="cv-DVERPREFIX">
<term>DVERPREFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DVERPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DVERPREFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DVERPREFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DVERPREFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DVERSIONS">
<term>DVERSIONS</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of version tags to enable when compiling.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of version tags to enable when compiling.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- List of version tags to enable when compiling.
+List of version tags to enable when compiling.
</para>
</listitem>
</varlistentry>
<varlistentry id="cv-DVERSUFFIX">
<term>DVERSUFFIX</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DVERSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DVERSUFFIX.
- </para>
-
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- DVERSUFFIX.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+DVERSUFFIX.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-DVIPDF">
<term>DVIPDF</term>
@@ -3128,7 +2902,7 @@ to <literal>'.dll'</literal>.
Used to override <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SHLIBVERSION"><envar>$SHLIBVERSION</envar></link>/<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-LDMODULEVERSION"><envar>$LDMODULEVERSION</envar></link> when
generating versioned import library for a shared library/loadable module. If
undefined, the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SHLIBVERSION"><envar>$SHLIBVERSION</envar></link>/<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-LDMODULEVERSION"><envar>$LDMODULEVERSION</envar></link> is used to
-determine the version of versioned import library.
+determine the version of versioned import library.
</para>
</listitem>
</varlistentry>
@@ -3674,6 +3448,17 @@ If this is not set, then <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="
</para>
</listitem>
</varlistentry>
+ <varlistentry id="cv-LDMODULEEMITTER">
+ <term>LDMODULEEMITTER</term>
+ <listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+Contains the emitter specification for the
+<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="b-LoadableModule"><function>LoadableModule</function></link> builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
+</para>
+</listitem>
+ </varlistentry>
<varlistentry id="cv-LDMODULEFLAGS">
<term>LDMODULEFLAGS</term>
<listitem>
@@ -3846,7 +3631,10 @@ when the <envar xmlns="http://www.scons.org/dbxsd/v1.0">$_LIBDIRFLAGS</envar> va
<term>LIBEMITTER</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-TODO
+Contains the emitter specification for the
+<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="b-StaticLibrary"><function>StaticLibrary</function></link> builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
</para>
</listitem>
</varlistentry>
@@ -4239,7 +4027,7 @@ The command line used to pass files to the Microsoft IDL compiler.
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
The string displayed when
-the Microsoft IDL copmiler is called.
+the Microsoft IDL compiler is called.
If this is not set, then <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-MIDLCOM"><envar>$MIDLCOM</envar></link> (the command line) is displayed.
</para>
</listitem>
@@ -5336,7 +5124,10 @@ for example.
<term>PROGEMITTER</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-TODO
+Contains the emitter specification for the
+<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="b-Program"><function>Program</function></link> builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
</para>
</listitem>
</varlistentry>
@@ -6031,9 +5822,9 @@ 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.
+See the manpage sections "Builder Objects"
+and "Scanner Objects"
+for more information.
</para>
</listitem>
</varlistentry>
@@ -6149,18 +5940,8 @@ to generate shared-library objects.
<term>SHDC</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The name of the compiler to use when compiling D source
- destined to be in a shared objects.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The name of the compiler to use when compiling D source
- destined to be in a shared objects.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The name of the compiler to use when compiling D source
- destined to be in a shared objects.
+The name of the compiler to use when compiling D source
+destined to be in a shared objects.
</para>
</listitem>
</varlistentry>
@@ -6168,50 +5949,32 @@ to generate shared-library objects.
<term>SHDCOM</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when compiling code to be part of shared objects.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when compiling code to be part of shared objects.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when compiling code to be part of shared objects.
+The command line to use when compiling code to be part of shared objects.
</para>
</listitem>
</varlistentry>
<varlistentry id="cv-SHDLIBVERSION">
<term>SHDLIBVERSION</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- SHDLIBVERSION.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+SHDLIBVERSION.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-SHDLIBVERSIONFLAGS">
<term>SHDLIBVERSIONFLAGS</term>
<listitem>
- <para xmlns="http://www.scons.org/dbxsd/v1.0">
- SHDLIBVERSIONFLAGS.
- </para>
- </listitem>
+<para xmlns="http://www.scons.org/dbxsd/v1.0">
+SHDLIBVERSIONFLAGS.
+</para>
+</listitem>
</varlistentry>
<varlistentry id="cv-SHDLINK">
<term>SHDLINK</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The linker to use when creating shared objects for code bases
- include D sources.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The linker to use when creating shared objects for code bases
- include D sources.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The linker to use when creating shared objects for code bases
- include D sources.
+The linker to use when creating shared objects for code bases
+include D sources.
</para>
</listitem>
</varlistentry>
@@ -6219,15 +5982,7 @@ to generate shared-library objects.
<term>SHDLINKCOM</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when generating shared objects.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when generating shared objects.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The command line to use when generating shared objects.
+The command line to use when generating shared objects.
</para>
</listitem>
</varlistentry>
@@ -6235,15 +5990,7 @@ to generate shared-library objects.
<term>SHDLINKFLAGS</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The list of flags to use when generating a shared object.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The list of flags to use when generating a shared object.
-</para>
-
-<para xmlns="http://www.scons.org/dbxsd/v1.0">
- The list of flags to use when generating a shared object.
+The list of flags to use when generating a shared object.
</para>
</listitem>
</varlistentry>
@@ -6737,7 +6484,10 @@ If this is not set, then <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="
<term>SHLIBEMITTER</term>
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
-TODO
+Contains the emitter specification for the
+<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="b-SharedLibrary"><function>SharedLibrary</function></link> builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
</para>
</listitem>
</varlistentry>
@@ -6781,7 +6531,7 @@ The suffix used for shared library file names.
<listitem>
<para xmlns="http://www.scons.org/dbxsd/v1.0">
When this construction variable is defined, a versioned shared library
-is created by <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="b-SharedLibrary"><function>SharedLibrary</function></link> builder. This activates the
+is created by the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="b-SharedLibrary"><function>SharedLibrary</function></link> builder. This activates the
<link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-_SHLIBVERSIONFLAGS"><envar>$_SHLIBVERSIONFLAGS</envar></link> and thus modifies the <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SHLINKCOM"><envar>$SHLINKCOM</envar></link> as
required, adds the version number to the library name, and creates the symlinks
that are needed. <link xmlns="http://www.scons.org/dbxsd/v1.0" linkend="cv-SHLIBVERSION"><envar>$SHLIBVERSION</envar></link> versions should exist as alpha-numeric,
@@ -6901,7 +6651,8 @@ The variable is used, for example, by <link xmlns="http://www.scons.org/dbxsd/v1
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
@@ -6924,7 +6675,8 @@ field in the controlling information for Ipkg and RPM packages.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
@@ -7268,7 +7020,8 @@ General options passed to the tar archiver.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
@@ -7332,7 +7085,8 @@ For example, if you want to compile 64-bit binaries, you would set
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
@@ -7465,7 +7219,8 @@ that are part of this construction environment.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
@@ -7475,7 +7230,8 @@ that may not be set or used in a construction environment.
<para xmlns="http://www.scons.org/dbxsd/v1.0">
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</listitem>
</varlistentry>
diff --git a/doc/generated/variables.mod b/doc/generated/variables.mod
index 47576f4..ba92aa9 100644
--- a/doc/generated/variables.mod
+++ b/doc/generated/variables.mod
@@ -251,6 +251,7 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY cv-LDMODULE "<envar xmlns='http://www.scons.org/dbxsd/v1.0'>$LDMODULE</envar>">
<!ENTITY cv-LDMODULECOM "<envar xmlns='http://www.scons.org/dbxsd/v1.0'>$LDMODULECOM</envar>">
<!ENTITY cv-LDMODULECOMSTR "<envar xmlns='http://www.scons.org/dbxsd/v1.0'>$LDMODULECOMSTR</envar>">
+<!ENTITY cv-LDMODULEEMITTER "<envar xmlns='http://www.scons.org/dbxsd/v1.0'>$LDMODULEEMITTER</envar>">
<!ENTITY cv-LDMODULEFLAGS "<envar xmlns='http://www.scons.org/dbxsd/v1.0'>$LDMODULEFLAGS</envar>">
<!ENTITY cv-LDMODULENOVERSIONSYMLINKS "<envar xmlns='http://www.scons.org/dbxsd/v1.0'>$LDMODULENOVERSIONSYMLINKS</envar>">
<!ENTITY cv-LDMODULEPREFIX "<envar xmlns='http://www.scons.org/dbxsd/v1.0'>$LDMODULEPREFIX</envar>">
@@ -891,6 +892,7 @@ THIS IS AN AUTOMATICALLY-GENERATED FILE. DO NOT EDIT.
<!ENTITY cv-link-LDMODULE "<link linkend='cv-LDMODULE' xmlns='http://www.scons.org/dbxsd/v1.0'><envar>$LDMODULE</envar></link>">
<!ENTITY cv-link-LDMODULECOM "<link linkend='cv-LDMODULECOM' xmlns='http://www.scons.org/dbxsd/v1.0'><envar>$LDMODULECOM</envar></link>">
<!ENTITY cv-link-LDMODULECOMSTR "<link linkend='cv-LDMODULECOMSTR' xmlns='http://www.scons.org/dbxsd/v1.0'><envar>$LDMODULECOMSTR</envar></link>">
+<!ENTITY cv-link-LDMODULEEMITTER "<link linkend='cv-LDMODULEEMITTER' xmlns='http://www.scons.org/dbxsd/v1.0'><envar>$LDMODULEEMITTER</envar></link>">
<!ENTITY cv-link-LDMODULEFLAGS "<link linkend='cv-LDMODULEFLAGS' xmlns='http://www.scons.org/dbxsd/v1.0'><envar>$LDMODULEFLAGS</envar></link>">
<!ENTITY cv-link-LDMODULENOVERSIONSYMLINKS "<link linkend='cv-LDMODULENOVERSIONSYMLINKS' xmlns='http://www.scons.org/dbxsd/v1.0'><envar>$LDMODULENOVERSIONSYMLINKS</envar></link>">
<!ENTITY cv-link-LDMODULEPREFIX "<link linkend='cv-LDMODULEPREFIX' xmlns='http://www.scons.org/dbxsd/v1.0'><envar>$LDMODULEPREFIX</envar></link>">
diff --git a/doc/man/scons-time.xml b/doc/man/scons-time.xml
index 7251c9f..b973dba 100644
--- a/doc/man/scons-time.xml
+++ b/doc/man/scons-time.xml
@@ -32,8 +32,8 @@
<refmeta>
<refentrytitle>SCONS-TIME</refentrytitle>
<manvolnum>1</manvolnum>
-<refmiscinfo class='source'>SCons 3.1.0</refmiscinfo>
-<refmiscinfo class='manual'>SCons 3.1.0</refmiscinfo>
+<refmiscinfo class='source'>SCons 3.1.2</refmiscinfo>
+<refmiscinfo class='manual'>SCons 3.1.2</refmiscinfo>
</refmeta>
<refnamediv id='name'>
<refname>scons-time</refname>
@@ -53,7 +53,6 @@
<refsect1 id='generating_timing_information'><title>Generating Timing Information</title>
<para><emphasis role="bold">scons-time run</emphasis>
[<option>-hnqv</option>]
-[<option>--aegis=</option><replaceable>PROJECT</replaceable>]
[<option>-f </option><emphasis>FILE</emphasis>]
[<option>--number=</option><replaceable>NUMBER</replaceable>]
[<option>--outdir=</option><replaceable>OUTDIR</replaceable>]
@@ -644,7 +643,6 @@ files.</para>
<refsect2 id='the_run_subcommand'><title>The run Subcommand</title>
<para><emphasis role="bold">scons-time run</emphasis>
[<option>-hnqv</option>]
-[<option>--aegis=</option><replaceable>PROJECT</replaceable>]
[<option>-f </option><emphasis>FILE</emphasis>]
[<option>--number=</option><replaceable>NUMBER</replaceable>]
[<option>--outdir=</option><replaceable>OUTDIR</replaceable>]
@@ -728,31 +726,6 @@ this should be an up-to-date, "do nothing" rebuild.</para>
subcommand supports the following options:</para>
<variablelist>
<varlistentry>
- <term>--aegis=PROJECT</term>
- <listitem>
-<para>Specifies the Aegis
-<emphasis>PROJECT</emphasis>
-from which the
-version(s) of
-<emphasis role="bold">scons</emphasis>
-being timed will be extracted.
-When
-<option>--aegis</option>
-is specified, the
-<option>--number=</option><replaceable>NUMBER</replaceable>
-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
-<option>--number=</option>
-option is not specified,
-then the default behavior is to time the
-tip of the specified
-<emphasis>PROJECT</emphasis>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
<term>-f FILE, --file=FILE</term>
<listitem>
<para>Reads configuration information from the specified
@@ -799,14 +772,6 @@ the log files and profile outputs generated by this run.</para>
</variablelist>
<para>When used in conjunction with the
-<option>--aegis=</option><replaceable>PROJECT</replaceable>
-option,
-<emphasis>NUMBER</emphasis>
-specifies one or more comma-separated Aegis delta numbers
-that will be retrieved automatically from the specified Aegis
-<emphasis>PROJECT</emphasis>.</para>
-
-<para>When used in conjunction with the
<option>--svn=</option><replaceable>URL</replaceable>
option,
<emphasis>NUMBER</emphasis>
@@ -1057,24 +1022,6 @@ the necessary information for producing (and reporting)
consistent timing runs for a given configuration.</para>
<variablelist>
<varlistentry>
- <term><emphasis role="bold">aegis</emphasis></term>
- <listitem>
-<para>The Aegis executable for extracting deltas.
-The default is simply
-<emphasis role="bold">aegis</emphasis>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><emphasis role="bold">aegis_project</emphasis></term>
- <listitem>
-<para>The Aegis project from which deltas should be extracted.
-The default is whatever is specified
-with the
-<option>--aegis=</option>
-command-line option.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
<term><emphasis role="bold">archive_list</emphasis></term>
<listitem>
<para>A list of archives (files or directories)
diff --git a/doc/man/scons.xml b/doc/man/scons.xml
index dd9fbdd..20e9d84 100644
--- a/doc/man/scons.xml
+++ b/doc/man/scons.xml
@@ -75,8 +75,8 @@
<refmeta>
<refentrytitle>SCONS</refentrytitle>
<manvolnum>1</manvolnum>
-<refmiscinfo class='source'>SCons 3.1.0</refmiscinfo>
-<refmiscinfo class='manual'>SCons 3.1.0</refmiscinfo>
+<refmiscinfo class='source'>SCons 3.1.2</refmiscinfo>
+<refmiscinfo class='manual'>SCons 3.1.2</refmiscinfo>
</refmeta>
<refnamediv id='name'>
<refname>scons</refname>
@@ -209,12 +209,12 @@ that you want to use to build your target files
are not in standard system locations,
<command>scons</command>
will not find them unless
-you explicitly set the PATH
+you explicitly set the <envar>PATH</envar>
to include those locations.
Whenever you create an
<command>scons</command>
construction environment,
-you can propagate the value of PATH
+you can propagate the value of <envar>PATH</envar>
from your external environment as follows:</para>
<literallayout class="monospaced">
@@ -223,13 +223,20 @@ env = Environment(ENV = {'PATH' : os.environ['PATH']})
</literallayout>
<para>Similarly, if the commands use external environment variables
-like $PATH, $HOME, $JAVA_HOME, $LANG, $SHELL, $TERM, etc.,
+like
+<envar>PATH</envar>,
+<envar>HOME</envar>,
+<envar>JAVA_HOME</envar>,
+<envar>LANG</envar>,
+<envar>SHELL</envar>,
+<envar>TERM</envar>,
+etc.,
these variables can also be explicitly propagated:</para>
<literallayout class="monospaced">
import os
-env = Environment(ENV = {'PATH' : os.environ['PATH'],
- 'HOME' : os.environ['HOME']})
+env = Environment(ENV = {'PATH': os.environ['PATH'],
+ 'HOME': os.environ['HOME']})
</literallayout>
<para>Or you may explicitly propagate the invoking user's
@@ -679,19 +686,32 @@ 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.</para>
-
</listitem>
</varlistentry>
+
<varlistentry>
- <term>--debug=<emphasis>type</emphasis></term>
+ <term>--debug=<replaceable>type</replaceable>[<replaceable>,type</replaceable>...]</term>
<listitem>
<para>Debug the build process.
-<emphasis>type[,type...]</emphasis>
-specifies what type of debugging. Multiple types may be specified,
-separated by commas. The following types are valid:</para>
+<emphasis>type</emphasis>
+specifies the kind of debugging info to emit.
+Multiple types may be specified, separated by commas.
+The following entries show the recognized types:</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>--debug=action-timestamps</term>
+ <listitem>
+<para>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 <option>--debug=time</option> option.
+</para>
+<para>Since &scons; 3.1.</para>
</listitem>
</varlistentry>
+
<varlistentry>
<term>--debug=count</term>
<listitem>
@@ -720,17 +740,6 @@ files, as well as unlinking old targets before building them.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>--debug=dtree</term>
- <listitem>
-<para>A synonym for the newer
-<option>--tree=derived</option>
-option.
-This will be deprecated in some future release
-and ultimately removed.</para>
-
- </listitem>
- </varlistentry>
- <varlistentry>
<term>--debug=explain</term>
<listitem>
<para>Print an explanation of precisely why
@@ -786,13 +795,6 @@ and before and after building targets.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>--debug=nomemoizer</term>
- <listitem>
-<para>A deprecated option preserved for backwards compatibility.</para>
-
- </listitem>
- </varlistentry>
- <varlistentry>
<term>--debug=objects</term>
<listitem>
<para>Prints a list of the various objects
@@ -849,17 +851,6 @@ when encountering an otherwise unexplained error.</para>
</listitem>
</varlistentry>
<varlistentry>
- <term>--debug=stree</term>
- <listitem>
-<para>A synonym for the newer
-<option>--tree=all,status</option>
-option.
-This will be deprecated in some future release
-and ultimately removed.</para>
-
- </listitem>
- </varlistentry>
- <varlistentry>
<term>--debug=time</term>
<listitem>
<para>Prints various time profiling information:</para>
@@ -912,20 +903,9 @@ since multiple build commands and
intervening SCons processing
should take place in parallel.)
</para>
-
</listitem>
</varlistentry>
- <varlistentry>
- <term>--debug=tree</term>
- <listitem>
-<para>A synonym for the newer
-<option>--tree=all</option>
-option.
-This will be deprecated in some future release
-and ultimately removed.</para>
- </listitem>
- </varlistentry>
<varlistentry>
<term>--diskcheck=<emphasis>types</emphasis></term>
<listitem>
@@ -1113,6 +1093,18 @@ This implies
</listitem>
</varlistentry>
+
+ <varlistentry>
+ <term>--install-sandbox=<replaceable>path</replaceable></term>
+ <listitem>
+<para>
+When using the &Install; functions, prepend <replaceable>path</replaceable>
+to the installation paths such that all installed files will be placed
+underneath <replaceable>path</replaceable>.
+</para>
+ </listitem>
+ </varlistentry>
+
<varlistentry>
<term>--interactive</term>
<listitem>
@@ -1803,41 +1795,6 @@ Warnings for some specific deprecated features
may be enabled or disabled individually;
see below.</para>
- <blockquote>
- <variablelist>
- <varlistentry>
- <term>--warn=deprecated-copy, --warn=no-deprecated-copy</term>
- <listitem>
-<para>Enables or disables warnings about use of the deprecated
-<emphasis role="bold">env.Copy()</emphasis>
-method.</para>
-
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>--warn=deprecated-source-signatures, --warn=no-deprecated-source-signatures</term>
- <listitem>
-<para>Enables or disables warnings about use of the deprecated
-<emphasis role="bold">SourceSignatures()</emphasis>
-function or
-<emphasis role="bold">env.SourceSignatures()</emphasis>
-method.</para>
-
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>--warn=deprecated-target-signatures, --warn=no-deprecated-target-signatures</term>
- <listitem>
-<para>Enables or disables warnings about use of the deprecated
-<emphasis role="bold">TargetSignatures()</emphasis>
-function or
-<emphasis role="bold">env.TargetSignatures()</emphasis>
-method.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </blockquote>
-
</listitem>
</varlistentry>
<varlistentry>
@@ -1914,7 +1871,7 @@ These warnings are enabled by default.</para>
<option>--debug=object</option>
feature not working when
<command>scons</command>
-is run with the python
+is run with the Python
<option>-O</option>
option or from optimized Python (.pyo) modules.</para>
@@ -2041,7 +1998,7 @@ env['BAR'] = 'bar'
<para>As a convenience,
construction variables may also be set or modified by the
-<emphasis>parse_flags</emphasis>
+<emphasis role="bold">parse_flags</emphasis>
keyword argument, which applies the
&f-link-env-MergeFlags;
method (described below) to the argument value
@@ -2112,36 +2069,59 @@ env = Environment(platform = my_platform)
<para>Additionally, a specific set of tools
with which to initialize the environment
-may be specified as an optional keyword argument:</para>
+may be specified using the optional keyword argument
+<parameter>tools</parameter>:</para>
<literallayout class="monospaced">
-env = Environment(tools = ['msvc', 'lex'])
+env = Environment(tools=['msvc', 'lex'])
</literallayout>
-<para>Non-built-in tools may be specified using the toolpath argument:</para>
+<para>
+The <parameter>tools</parameter> 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 <literal>tools=['clang', 'link']</literal>.
+The tool name <literal>'default'</literal> can
+be used to retain the default list.
+</para>
+
+<para>Non-built-in tools may be specified using the
+optional <parameter>toolpath</parameter> keyword argument:</para>
<literallayout class="monospaced">
-env = Environment(tools = ['default', 'foo'], toolpath = ['tools'])
+env = Environment(tools=['default', 'foo'], toolpath=['tools'])
</literallayout>
-<para>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).
+<para>
+This looks for a tool specification in <filename>tools/foo.py</filename>
+as well as using the ordinary default tools for the platform.
+</para>
+
+<para>
+A tool specification must include two functions:
+<function>generate(env, **kw)</function>
+and <function>exists(env)</function>.
The
-<function>generate()</function>
+<function>generate</function>
function
-modifies the passed-in environment
+modifies the environment referenced by <parameter>env</parameter>
to set up variables so that the tool
can be executed;
it may use any keyword arguments
-that the user supplies (see below)
+that the user supplies in <parameter>kw</parameter> (see below)
to vary its initialization.
The
-<function>exists()</function>
+<function>exists</function>
function should return a true
value if the tool is available.
+</para>
+
+<para>
Tools in the toolpath are used before
-any of the built-in ones. For example, adding gcc.py to the toolpath
+any of the built-in ones. For example, adding
+<filename>gcc.py</filename> to the toolpath
would override the built-in gcc tool.
Also note that the toolpath is
stored in the environment for use
@@ -2149,7 +2129,8 @@ by later calls to
<emphasis role="bold">Clone</emphasis>()
and
<emphasis role="bold">Tool</emphasis>()
-methods:</para>
+methods:
+</para>
<literallayout class="monospaced">
base = Environment(toolpath=['custom_path'])
@@ -2192,11 +2173,12 @@ or otherwise changing its initialization.</para>
def generate(env, **kw):
# Sets MY_TOOL to the value of keyword argument 'arg1' or 1.
env['MY_TOOL'] = kw.get('arg1', '1')
+
def exists(env):
- return 1
+ return True
# in SConstruct:
-env = Environment(tools = ['default', ('my_tool', {'arg1': 'abc'})],
+env = Environment(tools=['default', ('my_tool', {'arg1': 'abc'})],
toolpath=['tools'])
</programlisting>
@@ -2215,7 +2197,7 @@ With a nested tool name the dot represents a directory seperator</para>
<programlisting>
# namespaced builder
-env = Environment(ENV = os.environ, tools = ['SubDir1.SubDir2.SomeTool'])
+env = Environment(ENV=os.environ, tools=['SubDir1.SubDir2.SomeTool'])
env.SomeTool(targets, sources)
# Search Paths
@@ -2257,90 +2239,108 @@ env.SomeTool(targets, sources)
<!-- '\" END GENERATED TOOL DESCRIPTIONS -->
<!-- '\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -->
-<para>Additionally, there is a "tool" named
-<emphasis role="bold">default</emphasis>
-which configures the
-environment with a default set of tools for the current platform.</para>
-
-<para>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.</para>
-
</refsect2>
<refsect2 id='builder_methods'><title>Builder Methods</title>
-<para>Build rules are specified by calling a construction
-environment's builder methods.
-The arguments to the builder methods are
-<emphasis role="bold">target</emphasis>
-(a list of targets to be built,
-usually file names)
+<para>You tell <command>scons</command> 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. <command>scons</command>
+defines a number of builders, and you can also write your own.
+Builders are attached to a &consenv; as methods,
+and the available builder methods are listed as
+key-value pairs in the
+<envar>BUILDERS</envar> attribute of the &consenv;.
+The available builders can be displayed like this
+for debugging purposes:
+</para>
+
+<literallayout class="monospaced">
+print("Builders:", list(env['BUILDERS']))
+</literallayout>
+
+<para>
+Builder methods always take two arguments:
+<replaceable>target</replaceable>
+(a target or a list of targets to be built)
and
-<emphasis role="bold">source</emphasis>
-(a list of sources to be built,
-usually file names).</para>
+<replaceable>source</replaceable>
+(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.
+</para>
<para>Because long lists of file names
can lead to a lot of quoting,
<command>scons</command>
-supplies a
-<emphasis role="bold">Split()</emphasis>
+supplies a &Split;
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't a string.)</para>
+(These are similar to the Python string <function>split</function>
+method, but work even if the input isn't a string.)</para>
-<para>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:</para>
+<para>
+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 <parameter>target=</parameter>
+and <parameter>source=</parameter>.
+The following are equivalent examples of calling the
+&Program; builder method:
+</para>
<literallayout class="monospaced">
env.Program('bar', ['bar.c', 'foo.c'])
env.Program('bar', Split('bar.c foo.c'))
env.Program('bar', env.Split('bar.c foo.c'))
-env.Program(source = ['bar.c', 'foo.c'], target = 'bar')
-env.Program(target = 'bar', Split('bar.c foo.c'))
-env.Program(target = 'bar', env.Split('bar.c foo.c'))
-env.Program('bar', source = 'bar.c foo.c'.split())
+env.Program(source=['bar.c', 'foo.c'], target='bar')
+env.Program(target='bar', source=Split('bar.c foo.c'))
+env.Program(target='bar', source=env.Split('bar.c foo.c'))
+env.Program('bar', source='bar.c foo.c'.split())
</literallayout>
-<para>Target and source file names
-that are not absolute path names
-(that is, do not begin with
-<emphasis role="bold">/</emphasis>
-on POSIX systems
-or
-<emphasis role="bold">\</emphasis>
-on Windows systems,
-with or without
-an optional drive letter)
-are interpreted relative to the directory containing the
-<emphasis role="bold">SConscript</emphasis>
-file being read.
-An initial
-<emphasis role="bold">#</emphasis>
-(hash mark)
-on a path name means that the rest of the file name
-is interpreted relative to
-the directory containing
-the top-level
-<emphasis role="bold">SConstruct</emphasis>
-file,
-even if the
-<emphasis role="bold">#</emphasis>
-is followed by a directory separator character
-(slash or backslash).</para>
+<para>
+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.
+</para>
+<para>
+<command>scons</command> recognizes a third way to specify
+path strings: if the string begins with
+the <emphasis role="bold">#</emphasis> character it is
+top-relative - it works like a relative path but the
+search follows down from the directory containing the top-level
+<emphasis role="bold">SConstruct</emphasis> 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.
+</para>
+
+<para>
+Target and source pathnames can be absolute, relative, or
+top-relative. Relative pathnames are searched considering the
+directory of the <emphasis role="bold">SConscript</emphasis>
+file currently being processed as the "current directory".
+</para>
<para>Examples:</para>
@@ -2382,12 +2382,12 @@ executable program
or
<emphasis role="bold">bar.exe</emphasis>
(on Windows systems)
-from the bar.c source file:</para>
+from the <filename>bar.c</filename> source file:</para>
<literallayout class="monospaced">
-env.Program(target = 'bar', source = 'bar.c')
-env.Program('bar', source = 'bar.c')
-env.Program(source = 'bar.c')
+env.Program(target='bar', source='bar.c')
+env.Program('bar', source='bar.c')
+env.Program(source='bar.c')
env.Program('bar.c')
</literallayout>
@@ -2397,28 +2397,31 @@ 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
<emphasis role="bold">srcdir</emphasis>.
The following example will build the
-<emphasis role="bold">build/prog</emphasis>
+<filename>build/prog</filename>
(or
-<emphasis role="bold">build/prog.exe</emphasis>
+<filename>build/prog.exe</filename>
on Windows)
program from the files
-<emphasis role="bold">src/f1.c</emphasis>
+<filename>src/f1.c</filename>
and
-<emphasis role="bold">src/f2.c</emphasis>:</para>
+<filename>src/f2.c</filename>:
+</para>
<literallayout class="monospaced">
env.Program('build/prog', ['f1.c', 'f2.c'], srcdir='src')
</literallayout>
-<para>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:</para>
+<para>It is possible to <emphasis>override</emphasis> (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:</para>
<literallayout class="monospaced">
env.Program('hello', 'hello.c', LIBS=['gl', 'glut'])
@@ -2438,7 +2441,7 @@ for dependencies on the non-standard library names;
see the descriptions of these variables, below, for more information.)</para>
<para>It is also possible to use the
-<emphasis>parse_flags</emphasis>
+<emphasis role="bold">parse_flags</emphasis>
keyword argument in an override,
to merge command-line style arguments
into the appropriate construction variables
@@ -2483,8 +2486,7 @@ from SCons.Script import *
</literallayout>
<para>All builder methods return a list-like object
-containing Nodes that
-represent the target or targets that will be built.
+containing Nodes that will be built.
A
<emphasis>Node</emphasis>
is an internal SCons object
@@ -2496,9 +2498,8 @@ 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
-<option>-D</option>
-flag when compiling one specific object file:</para>
+to add a specific preprocessor define
+when compiling one specific object file:</para>
<literallayout class="monospaced">
bar_obj_list = env.StaticObject('bar.c', CPPDEFINES='-DBAR')
@@ -2509,14 +2510,14 @@ env.Program(source = ['foo.c', bar_obj_list, 'main.c'])
makes for a more portable build
by avoiding having to specify
a platform-specific object suffix
-when calling the Program() builder method.</para>
+when calling the &Program; builder method.</para>
-<para>Note that Builder calls will automatically "flatten"
+<para>Note that builder calls will automatically "flatten"
the source and target file lists,
-so it's all right to have the bar_obj list
-return by the StaticObject() call
+so it's all right to have the <literal>bar_obj_list</literal>
+returned by the &StaticObject; call
in the middle of the source file list.
-If you need to manipulate a list of lists returned by Builders
+If you need to manipulate a list of lists returned by builders
directly using Python,
you can either build the list by hand:</para>
@@ -2528,8 +2529,7 @@ for object in objects:
print(str(object))
</literallayout>
-<para>Or you can use the
-<emphasis role="bold">Flatten</emphasis>()
+<para>Or you can use the &Flatten;
function supplied by scons
to create a list containing just the Nodes,
which may be more convenient:</para>
@@ -2542,23 +2542,23 @@ for object in objects:
print(str(object))
</literallayout>
-<para>Note also that because Builder calls return
+<para>Note also that because builder calls return
a list-like object, not an actual Python list,
you should
<emphasis>not</emphasis>
-use the Python
-<emphasis role="bold">+=</emphasis>
-operator to append Builder results to a Python list.
+use the Python add
+operator (<literal>+</literal> or <literal>+=</literal>)
+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.
+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
-<markup>.extend()</markup>
+Instead, use the Python list
+<function>extend</function>
method to make sure the list is updated in-place.
Example:</para>
@@ -2571,14 +2571,14 @@ 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('bar.c'))
</literallayout>
<para>The path name for a Node's file may be used
-by passing the Node to the Python-builtin
-<function>str()</function>
+by passing the Node to Python's builtin
+<function>str</function>
function:</para>
<literallayout class="monospaced">
@@ -2588,7 +2588,7 @@ print("The path to bar_obj is:", str(bar_obj_list[0]))
<para>Note again that because the Builder call returns a list,
we have to access the first element in the list
-<emphasis role="bold">(bar_obj_list[0])</emphasis>
+(<literal>(bar_obj_list[0])</literal>)
to get at the Node that actually represents
the object file.</para>
@@ -2651,7 +2651,12 @@ to use just the filename portion of the
targets and source.</para>
<para><command>scons</command>
-provides the following builder methods:</para>
+predefined the following builder methods.
+Depending on the setup of a particular
+&consenv; and on the type and software
+installation status of the underlying system,
+not all builders may be available to that
+&consenv;.</para>
<!-- '\""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -->
<!-- '\" BEGIN GENERATED BUILDER DESCRIPTIONS -->
@@ -3119,11 +3124,12 @@ defined construction variables:</para>
method of the construction environment:</para>
<literallayout class="monospaced">
-dict = env.Dictionary()
-dict["CC"] = "cc"
+cvars = env.Dictionary()
+cvars["CC"] = "cc"
</literallayout>
-<para>or using the [] operator:</para>
+<para>or using the key lookup operator <literal>[]</literal>
+directly on the construction environment:</para>
<literallayout class="monospaced">
env["CC"] = "cc"
@@ -4387,7 +4393,7 @@ functions return
and
<emphasis>Dir</emphasis>
Nodes, respectively.
-python objects, respectively.
+Python objects, respectively.
Those objects have several user-visible attributes
and methods that are often useful:</para>
@@ -4544,7 +4550,7 @@ incl = Dir('include')
f = incl.File('header.h')
# Get a Node for a subdirectory within a directory
-dist = Dir('project-3.2.1)
+dist = Dir('project-3.2.1')
src = dist.Dir('src')
# Get a Node for a file in the same directory
@@ -4919,7 +4925,8 @@ 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
+with the target, specify additional environment overrides,
+or associate a different
builder with the target.</para>
</listitem>
@@ -5404,17 +5411,15 @@ a = Action(build_it, varlist=['XXX'])
</programlisting>
<para>The
-<emphasis role="bold">Action</emphasis>()
+&Action;
global function
can be passed the following
optional keyword arguments
to modify the Action object's behavior:</para>
-
-<para><emphasis role="bold">chdir</emphasis>
-The
-<emphasis role="bold">chdir</emphasis>
-keyword argument specifies that
+<para>
+<replaceable>chdir</replaceable>
+specifies that
scons will execute the action
after changing to the specified directory.
If the
@@ -5459,15 +5464,9 @@ a = Action("build &lt; ${SOURCE.file} &gt; ${TARGET.file}",
chdir=1)
</literallayout>
-
-<para><emphasis role="bold">exitstatfunc</emphasis>
-The
-<emphasis role="bold">Action</emphasis>()
-global function
-also takes an
-<emphasis role="bold">exitstatfunc</emphasis>
-keyword argument
-which specifies a function
+<para>
+<replaceable>exitstatfunc</replaceable>
+specifies a function
that is passed the exit status
(or return value)
from the specified action
@@ -5489,11 +5488,9 @@ a = Action("build &lt; ${SOURCE.file} &gt; ${TARGET.file}",
</programlisting>
-<para><emphasis role="bold">batch_key</emphasis>
-The
-<emphasis role="bold">batch_key</emphasis>
-keyword argument can be used
-to specify that the Action can create multiple target files
+<para>
+<replaceable>batch_key</replaceable>
+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
@@ -5502,7 +5499,7 @@ to a single invocation of a compiler
such as Microsoft's Visual C / C++ compiler.)
If the
<emphasis role="bold">batch_key</emphasis>
-argument is any non-False, non-callable Python value,
+argument evaluates True and is not a callable object,
the configured Action object will cause
<command>scons</command>
to collect all targets built with the Action object
@@ -5534,7 +5531,7 @@ will be used to identify different
for batch building.
A
<emphasis role="bold">batch_key</emphasis>
-function must take the following arguments:</para>
+function must accept the following arguments:</para>
<variablelist>
<varlistentry>
@@ -5666,7 +5663,7 @@ sequences of file manipulation
without relying
on platform-specific
external commands:
-that</para>
+</para>
<literallayout class="monospaced">
env = Environment(TMPBUILD = '/tmp/builddir')
env.Command('foo.out', 'foo.in',
@@ -5689,11 +5686,11 @@ which can be octal or string, similar to the bash command.
Examples:</para>
<literallayout class="monospaced">
-Execute(Chmod('file', 0755))
+Execute(Chmod('file', 0o755))
env.Command('foo.out', 'foo.in',
[Copy('$TARGET', '$SOURCE'),
- Chmod('$TARGET', 0755)])
+ Chmod('$TARGET', 0o755)])
Execute(Chmod('file', "ugo+w"))
@@ -5826,13 +5823,13 @@ env.Command('marker', 'input_file',
<para>Before executing a command,
<command>scons</command>
-performs construction variable interpolation on the strings that make up
-the command line of builders.
-Variables are introduced by a
-<emphasis role="bold">$</emphasis>
+performs construction variable interpolation on the string that makes up
+the command line of the builder.
+Variables are introduced in such strings by a
+<literal>$</literal>
prefix.
-Besides construction variables, scons provides the following
-variables for each command execution:</para>
+Besides regular construction variables, scons provides the following
+special variables for each command execution:</para>
<variablelist>
<varlistentry>
@@ -5901,15 +5898,19 @@ from sources that have
<emphasis>not</emphasis>
changed since the target was last built.</para>
-<para>(Note that the above variables are reserved
-and may not be set in a construction environment.)</para>
-
</listitem>
</varlistentry>
</variablelist>
-<para>For example, given the construction variable CC='cc', targets=['foo'], and
-sources=['foo.c', 'bar.c']:</para>
+<para>Note that the above variables are reserved
+and may not be set in a construction environment.</para>
+
+<para>For example, given the construction variables
+<literal>CC='cc'</literal>,
+<literal>targets=['foo']</literal>
+and
+<literal>sources=['foo.c', 'bar.c']</literal>:
+</para>
<literallayout class="monospaced">
action='$CC -c -o $TARGET $SOURCES'
@@ -5921,8 +5922,10 @@ action='$CC -c -o $TARGET $SOURCES'
cc -c -o foo foo.c bar.c
</literallayout>
-<para>Variable names may be surrounded by curly braces ({})
-to separate the name from the trailing characters.
+<para>Variable names may be surrounded by curly braces
+<emphasis role="bold">{ }</emphasis>
+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.
@@ -6085,20 +6088,42 @@ may be a callable Python function
associated with a
construction variable in the environment.
The function should
-take four arguments:
-<emphasis>target</emphasis>
-- a list of target nodes,
-<emphasis>source</emphasis>
-- a list of source nodes,
-<emphasis>env</emphasis>
-- the construction environment,
-<emphasis>for_signature</emphasis>
-- a Boolean value that specifies
+accept four arguments:
+</para>
+<variablelist>
+ <varlistentry>
+ <term><replaceable>target</replaceable></term>
+ <listitem>
+<para>a list of target nodes</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>source</replaceable></term>
+ <listitem>
+<para>a list of source nodes</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>env</replaceable></term>
+ <listitem>
+<para>the construction environment</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term><replaceable>for_signature</replaceable></term>
+ <listitem>
+<para>a Boolean value that specifies
whether the function is being called
-for generating a build signature.
+for generating a build signature. </para>
+ </listitem>
+ </varlistentry>
+</variablelist>
+
+<para>
SCons will insert whatever
the called function returns
-into the expanded string:</para>
+into the expanded string:
+</para>
<programlisting>
def foo(target, source, env, for_signature):
@@ -6179,9 +6204,12 @@ echo Last build occurred . &gt; $TARGET
<refsect2 id='python_code_substitution'><title>Python Code Substitution</title>
-<para>Any python code within
-<emphasis role="bold">${</emphasis>-<emphasis role="bold">}</emphasis>
-pairs gets evaluated by python 'eval', with the python globals set to
+<para>
+Any Python code within curly braces
+<emphasis role="bold">{ }</emphasis>
+and introduced by the variable prefix <emphasis role="bold">$</emphasis>
+gets evaluated by the Python <function>eval</function> statement,
+with the Python globals set to
the current environment's set of construction variables.
So in the following case:</para>
<literallayout class="monospaced">
@@ -6197,14 +6225,20 @@ echo FOO &gt; foo.out
<literallayout class="monospaced">
echo BAR &gt; foo.out
</literallayout>
-<para>according to the current value of env['COND'] when the command is
-executed. The evaluation occurs when the target is being
-built, not when the SConscript is being read. So if env['COND'] is changed
+<para>according to the current value of <literal>env['COND']</literal>
+when the command is executed.
+The evaluation takes place when the target is being
+built, not when the SConscript is being read. So if
+<literal>env['COND']</literal> is changed
later in the SConscript, the final value will be used.</para>
-<para>Here's 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
+<para>Here's a more interesting example. Note that all of
+<envar>COND</envar>,
+<envar>FOO</envar>,
+and
+<envar>BAR</envar> are construction variables,
+and their values are substituted into the final command.
+<envar>FOO</envar> is a list, so its elements are interpolated
separated by spaces.</para>
<literallayout class="monospaced">
@@ -6315,7 +6349,8 @@ might not exist
argument is the construction environment for the scan.
Fetch values from it using the
<emphasis role="bold">env.Dictionary()</emphasis>
-method.</para>
+method or using the key lookup operator
+directly on the construction environment.</para>
<para>The
<emphasis role="bold">path</emphasis>
@@ -6551,9 +6586,10 @@ 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
+like <filename>/cygdrive/c/mydir</filename>
to an equivalent Windows pathname
-of C:/mydir (equivalent to C:\mydir).</para>
+of <filename>C:/mydir</filename> (equivalent to <filename>C:\mydir</filename>).
+</para>
<para>Versions of Python
that are built for native Windows execution,
@@ -6561,7 +6597,8 @@ 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)
+(such as <command>gcc</command>, <command>bison</command>,
+and <command>flex</command>)
may yield unpredictable results.
"Mixing and matching" in this way
can be made to work,
@@ -6771,7 +6808,7 @@ env['BUILDERS]['PDFBuilder'] = bld
<refsect2 id='defining_your_own_scanner_object'><title>Defining Your Own Scanner Object</title>
-<para>The following example shows an extremely simple scanner (the
+<para>The following example shows adding an extremely simple scanner (the
<emphasis role="bold">kfile_scan</emphasis>()
function)
that doesn't use a search path at all
@@ -6796,8 +6833,10 @@ kscan = Scanner(name = 'kfile',
function = kfile_scan,
argument = None,
skeys = ['.k'])
-scanners = Environment().Dictionary('SCANNERS')
-env = Environment(SCANNERS = scanners + [kscan])
+
+scanners = DefaultEnvironment()['SCANNERS']
+scanners.append(kscan)
+env = Environment(SCANNERS=scanners)
env.Command('foo', 'foo.k', 'kprocess &lt; $SOURCES &gt; $TARGET')
@@ -6814,7 +6853,8 @@ you can use the
function of your current Environment in order to create nodes on the fly from
a sequence of file names with relative paths.</para>
-<para>Here is a similar but more complete example that searches
+<para>Here is a similar but more complete example that adds
+a scanner which searches
a path of directories
(specified as the
<emphasis role="bold">MYPATH</emphasis>
@@ -6840,15 +6880,16 @@ def my_scan(node, env, path, arg):
break
return env.File(results)
-scanner = Scanner(name = 'myscanner',
- function = my_scan,
- argument = None,
- skeys = ['.x'],
- path_function = FindPathDirs('MYPATH')
+scanner = Scanner(name='myscanner',
+ function=my_scan,
+ argument=None,
+ skeys=['.x'],
+ path_function=FindPathDirs('MYPATH')
)
-scanners = Environment().Dictionary('SCANNERS')
-env = Environment(SCANNERS = scanners + [scanner],
- MYPATH = ['incs'])
+
+scanners = DefaultEnvironment()['SCANNERS']
+scanners.append(scanner)
+env = Environment(SCANNERS=scanners, MYPATH=['incs'])
env.Command('foo', 'foo.x', 'xprocess &lt; $SOURCES &gt; $TARGET')
</programlisting>
@@ -6861,8 +6902,8 @@ that will return a list of directories
specified in the
<emphasis role="bold">$MYPATH</emphasis>
construction variable. It lets SCons detect the file
-<emphasis role="bold">incs/foo.inc</emphasis>
-, even if
+<emphasis role="bold">incs/foo.inc</emphasis>,
+even if
<emphasis role="bold">foo.x</emphasis>
contains the line
<emphasis role="bold">include foo.inc</emphasis>
@@ -6883,17 +6924,18 @@ def pf(env, dir, target, source, arg):
results.append(top_dir + os.sep + p)
return results
-scanner = Scanner(name = 'myscanner',
- function = my_scan,
- argument = None,
- skeys = ['.x'],
- path_function = pf
+scanner = Scanner(name='myscanner',
+ function=my_scan,
+ argument=None,
+ skeys=['.x'],
+ path_function=pf
)
</programlisting>
</refsect2>
-<refsect2 id='creating_a_hierarchical_build'><title>Creating a Hierarchical Build</title>
+<refsect2 id='creating_a_hierarchical_build'>
+<title>Creating a Hierarchical Build</title>
<para>Notice that the file names specified in a subdirectory's
SConscript
@@ -6982,7 +7024,7 @@ value each time we call the SConscript function.</para>
<programlisting>
SConstruct:
- env = Environment(LIBPATH = ['#libA', '#libB'])
+ env = Environment(LIBPATH=['#libA', '#libB'])
Export('env')
SConscript('libA/SConscript')
SConscript('libB/SConscript')
@@ -7001,7 +7043,7 @@ libB/SConscript:
Main/SConscript:
Import('env')
- e = env.Copy(LIBS = ['a', 'b'])
+ e = env.Clone(LIBS=['a', 'b'])
e.Program('foo', Split('m1.c m2.c m3.c'))
</programlisting>
@@ -7126,22 +7168,62 @@ env.Program('MyApp', ['Foo.cpp', 'Bar.cpp'])
</refsect1>
<refsect1 id='environment'><title>ENVIRONMENT</title>
+
+<para>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:
+</para>
+
<variablelist>
<varlistentry>
- <term>SCONS_LIB_DIR</term>
- <listitem>
-<para>Specifies the directory that contains the SCons Python module directory
-(e.g. /home/aroach/scons-src-0.01/src/engine).</para>
+ <term>SCONS_LIB_DIR</term>
+ <listitem>
+<para>Specifies the directory that contains the &scons;
+Python module directory (for example,
+<filename>/home/aroach/scons-src-0.01/src/engine</filename>).</para>
+ </listitem>
+ </varlistentry>
- </listitem>
+ <varlistentry>
+ <term>SCONSFLAGS</term>
+ <listitem>
+<para>A string of options that will be used by &scons;
+in addition to those passed on the command line.</para>
+ </listitem>
</varlistentry>
+
<varlistentry>
- <term>SCONSFLAGS</term>
- <listitem>
-<para>A string of options that will be used by scons in addition to those passed
-on the command line.</para>
+ <term>SCONS_CACHE_MSVC_CONFIG</term>
+ <listitem>
+<para>(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.</para>
+
+<para>If set to a True-like value (<literal>"1"</literal>,
+<literal>"true"</literal> or
+<literal>"True"</literal>) will cache to a file named
+<filename>.scons_msvc_cache</filename> in the user's home directory.
+If set to a pathname, will use that pathname for the cache.</para>
+
+<para>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.</para>
+
+<para>Since &scons; 3.1.</para>
- </listitem>
+ </listitem>
</varlistentry>
</variablelist>
</refsect1>
@@ -7157,8 +7239,9 @@ source code.</para>
</refsect1>
<refsect1 id='authors'><title>AUTHORS</title>
-<para>Originally: Steven Knight &lt;knight@baldmt.com&gt; and Anthony Roach &lt;aroach@electriceyeball.com&gt;
-Since 2010: The SCons Development Team &lt;scons-dev@scons.org&gt;
+<para>Originally: Steven Knight <email>knight@baldmt.com</email>
+and Anthony Roach <email>aroach@electriceyeball.com</email>.
+Since 2010: The SCons Development Team <email>scons-dev@scons.org</email>.
</para>
</refsect1>
</refentry>
diff --git a/doc/man/sconsign.xml b/doc/man/sconsign.xml
index f70bb62..a1308ea 100644
--- a/doc/man/sconsign.xml
+++ b/doc/man/sconsign.xml
@@ -32,8 +32,8 @@
<refmeta>
<refentrytitle>SCONSIGN</refentrytitle>
<manvolnum>1</manvolnum>
-<refmiscinfo class='source'>SCons 3.1.0</refmiscinfo>
-<refmiscinfo class='manual'>SCons 3.1.0</refmiscinfo>
+<refmiscinfo class='source'>SCons 3.1.2</refmiscinfo>
+<refmiscinfo class='manual'>SCons 3.1.2</refmiscinfo>
</refmeta>
<refnamediv id='name'>
<refname>sconsign</refname>
diff --git a/doc/scons.mod b/doc/scons.mod
index cf46e3b..7a48f5f 100644
--- a/doc/scons.mod
+++ b/doc/scons.mod
@@ -212,6 +212,7 @@
<!ENTITY Import "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Import</function>">
<!ENTITY Install "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Install</function>">
<!ENTITY InstallAs "<function xmlns='http://www.scons.org/dbxsd/v1.0'>InstallAs</function>">
+<!ENTITY InstallVersionedLib "<function xmlns='http://www.scons.org/dbxsd/v1.0'>InstallVersionedLib</function>">
<!ENTITY Link "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Link</function>">
<!ENTITY ListOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>ListOption</function>">
<!ENTITY ListVariable "<function xmlns='http://www.scons.org/dbxsd/v1.0'>ListVariable</function>">
@@ -259,11 +260,8 @@
<!ENTITY SetDefault "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SetDefault</function>">
<!ENTITY SetOption "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SetOption</function>">
<!ENTITY SideEffect "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SideEffect</function>">
-<!ENTITY SourceSignature "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SourceSignature</function>">
-<!ENTITY SourceSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>SourceSignatures</function>">
<!ENTITY Split "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Split</function>">
<!ENTITY Tag "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Tag</function>">
-<!ENTITY TargetSignatures "<function xmlns='http://www.scons.org/dbxsd/v1.0'>TargetSignatures</function>">
<!ENTITY Task "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Task</function>">
<!ENTITY Touch "<function xmlns='http://www.scons.org/dbxsd/v1.0'>Touch</function>">
<!ENTITY UnknownOptions "<function xmlns='http://www.scons.org/dbxsd/v1.0'>UnknownOptions</function>">
diff --git a/doc/user/README b/doc/user/README
index 5433ea2..a66d20b 100644
--- a/doc/user/README
+++ b/doc/user/README
@@ -12,7 +12,7 @@ Writing examples: here's a simple template.
<scons_example name="Foo">
<file name="SConstruct">
env = Environment()
- print env.Dump("CC")
+ print(env.Dump("CC"))
</file>
</scons_example>
diff --git a/doc/user/builders-writing.xml b/doc/user/builders-writing.xml
index c36d468..a408479 100644
--- a/doc/user/builders-writing.xml
+++ b/doc/user/builders-writing.xml
@@ -196,7 +196,7 @@ env.Foo('file.foo', 'file.input')
<file name="file.input">
file.input
</file>
- <file name="foobuild" chmod="0755">
+ <file name="foobuild" chmod="0o755">
cat
</file>
</scons_example>
@@ -309,7 +309,7 @@ file.input
<file name="hello.c">
hello.c
</file>
- <file name="foobuild" chmod="0755">
+ <file name="foobuild" chmod="0o755">
cat
</file>
</scons_example>
@@ -389,7 +389,7 @@ file1.input
<file name="file2.input">
file2.input
</file>
- <file name="foobuild" chmod="0755">
+ <file name="foobuild" chmod="0o755">
cat
</file>
</scons_example>
@@ -453,7 +453,7 @@ def build_function(target, source, env):
A list of Node objects representing
the target or targets to be
- built by this builder function.
+ built by this function.
The file names of these target(s)
may be extracted using the Python &str; function.
@@ -469,7 +469,7 @@ def build_function(target, source, env):
A list of Node objects representing
the sources to be
- used by this builder function to build the targets.
+ used by this function to build the targets.
The file names of these source(s)
may be extracted using the Python &str; function.
@@ -484,7 +484,7 @@ def build_function(target, source, env):
<para>
The &consenv; used for building the target(s).
- The builder function may use any of the
+ The function may use any of the
environment's construction variables
in any way to affect how it builds the targets.
@@ -496,13 +496,14 @@ def build_function(target, source, env):
<para>
- The builder function must
- return a <literal>0</literal> or <literal>None</literal> value
- if the target(s) are built successfully.
- The builder function
- may raise an exception
- or return any non-zero value
- to indicate that the build is unsuccessful.
+ The function will be constructed as a SCons FunctionAction and
+ must return a <literal>0</literal> or <literal>None</literal>
+ value if the target(s) are built successfully. The function may
+ raise an exception or return any non-zero value to indicate that
+ the build is unsuccessful.
+
+ For more information on Actions see the Action Objects section of
+ the man page.
</para>
@@ -681,7 +682,7 @@ env.Foo('file')
<file name="file.input">
file.input
</file>
- <file name="foobuild" chmod="0755">
+ <file name="foobuild" chmod="0o755">
cat
</file>
</scons_example>
@@ -765,7 +766,7 @@ file.input
<file name="new_source">
new_source
</file>
- <file name="foobuild" chmod="0755">
+ <file name="foobuild" chmod="0o755">
cat
</file>
</scons_example>
@@ -839,7 +840,7 @@ modify1.input
<file name="modify2.in">
modify2.input
</file>
- <file name="my_command" chmod="0755">
+ <file name="my_command" chmod="0o755">
cat
</file>
diff --git a/doc/user/command-line.xml b/doc/user/command-line.xml
index bb1d32b..e14ed07 100644
--- a/doc/user/command-line.xml
+++ b/doc/user/command-line.xml
@@ -2,7 +2,7 @@
<!DOCTYPE sconsdoc [
<!ENTITY % scons SYSTEM "../scons.mod">
%scons;
-
+
<!ENTITY % builders-mod SYSTEM "../generated/builders.mod">
%builders-mod;
<!ENTITY % functions-mod SYSTEM "../generated/functions.mod">
@@ -89,7 +89,7 @@
all of the command-line variable settings,
the ability to apply command-line variable settings
to construction environments,
- and functions for configuring
+ and functions for configuring
specific types of variables
(Boolean values, path names, etc.)
with automatic validation of the user's specified values.
@@ -599,24 +599,30 @@ foo.in
&SCons; also allows you to define your own
command-line options with the &AddOption; function.
The &AddOption; function takes the same arguments
- as the <function>optparse.add_option</function> function
- from the standard Python library.
+ as the <function>add_option</function> method
+ from the standard Python library module <emphasis>optparse</emphasis>.
<footnote>
<para>
The &AddOption; function is,
in fact, implemented using a subclass
- of the <classname>optparse.OptionParser</classname>.
+ of <classname>optparse.OptionParser</classname>.
</para>
</footnote>
+ </para>
+
+ <para>
Once you have added a custom command-line option
with the &AddOption; function,
the value of the option (if any) is immediately available
using the standard &GetOption; function.
+ <!--
(The value can also be set using &SetOption;,
although that's not very useful in practice
because a default value can be specified in
directly in the &AddOption; call.)
-
+ -->
+ &SetOption; is not currently supported for
+ options added with &AddOption;.
</para>
<para>
@@ -678,6 +684,47 @@ foo.in
<scons_output_command>scons -Q -n --prefix=/tmp/install</scons_output_command>
</scons_output>
+ <note>
+ <para>
+ Option-arguments separated from long options by whitespace,
+ rather than by an <literal>=</literal>, cannot be correctly
+ resolved by <command>scons</command>.
+ While <literal>--input=ARG</literal>
+ is clearly opt followed by arg, for <literal>--input ARG</literal>
+ it is not possible to tell without instructions whether
+ <parameter>ARG</parameter> is an argument belonging to the
+ <parameter>input</parameter> option or a positional argument.
+ <command>scons</command> treats positional arguments as either
+ command-line build options or command-line targets
+ which are made available for use in an &SConscript;
+ (see the immediately following sections for details).
+ Thus, they must be collected before &SConscript; processing
+ takes place. Since &AddOption; calls, which provide
+ the processing instructions to resolve any ambiguity,
+ happen in an &SConscript;,
+ <command>scons</command> does not know in time
+ for options added this way, and unexpected things will happen,
+ such as option-arguments assigned as targets and/or exceptions
+ due to missing option-arguments.
+ </para>
+ <para>
+ As a result, this usage style should be avoided when invoking
+ <command>scons</command>. For single-argument
+ options, use the <literal>--input=ARG</literal> form on the
+ command line. For multiple-argument options
+ (<parameter>nargs</parameter> greater than one),
+ set <parameter>nargs</parameter> to one in
+ &AddOption; calls and either: combine the option-arguments into one word
+ with a separator, and parse the result in your own code
+ (see the built-in <parameter>--debug</parameter> option, which
+ allows specifying multiple arguments as a single comma-separated
+ word, for an example of such usage); or allow the option to
+ be specified multiple times by setting
+ <literal>action='append'</literal>. Both methods can be
+ supported at the same time.
+ </para>
+ </note>
+
</section>
</section>
@@ -1132,12 +1179,12 @@ vars = Variables('custom.py', ARGUMENTS)
</screen>
<para>
-
+
where values in the option file &custom_py; get overwritten
by the ones specified on the command line.
</para>
-
+
</section>
<section>
diff --git a/doc/user/depends.xml b/doc/user/depends.xml
index bb0a142..96a8685 100644
--- a/doc/user/depends.xml
+++ b/doc/user/depends.xml
@@ -764,185 +764,8 @@ int main() { printf("Hello, world!\n"); }
encounter them in older &SConscript; files.
</para>
-
- <section>
- <title>The &SourceSignatures; Function</title>
-
- <para>
-
- The &SourceSignatures; function is fairly straightforward,
- and supports two different argument values
- to configure whether source file changes should be decided
- using MD5 signatures:
-
- </para>
-
- <sconstruct>
-Program('hello.c')
-SourceSignatures('MD5')
- </sconstruct>
-
- <para>
-
- Or using time stamps:
-
- </para>
-
- <sconstruct>
-Program('hello.c')
-SourceSignatures('timestamp')
- </sconstruct>
-
- <para>
-
- These are roughly equivalent to specifying
- <function>Decider('MD5')</function>
- or
- <function>Decider('timestamp-match')</function>,
- respectively,
- although it only affects how SCons makes
- decisions about dependencies on
- <emphasis>source</emphasis> files--that is,
- files that are not built from any other files.
-
- </para>
-
- </section>
-
- <section>
- <title>The &TargetSignatures; Function</title>
-
- <para>
-
- The &TargetSignatures; function
- specifies how &SCons; decides
- when a target file has changed
- <emphasis>when it is used as a
- dependency of (input to) another target</emphasis>--that is,
- the &TargetSignatures; function configures
- how the signatures of "intermediate" target files
- are used when deciding if a "downstream" target file
- must be rebuilt.
- <footnote><para>
- This easily-overlooked distinction between
- how &SCons; decides if the target itself must be rebuilt
- and how the target is then used to decide if a different
- target must be rebuilt is one of the confusing
- things that has led to the &TargetSignatures;
- and &SourceSignatures; functions being
- replaced by the simpler &Decider; function.
- </para></footnote>
-
- </para>
-
- <para>
-
- The &TargetSignatures; function supports the same
- <literal>'MD5'</literal> and <literal>'timestamp'</literal>
- argument values that are supported by the &SourceSignatures;,
- with the same meanings, but applied to target files.
- That is, in the example:
-
- </para>
-
- <sconstruct>
-Program('hello.c')
-TargetSignatures('MD5')
- </sconstruct>
-
- <para>
-
- The MD5 checksum of the &hello_o; target file
- will be used to decide if it has changed since the last
- time the "downstream" &hello; target file was built.
- And in the example:
-
- </para>
-
- <sconstruct>
-Program('hello.c')
-TargetSignatures('timestamp')
- </sconstruct>
-
- <para>
-
- The modification time of the &hello_o; target file
- will be used to decide if it has changed since the last
- time the "downstream" &hello; target file was built.
-
- </para>
-
- <para>
-
- The &TargetSignatures; function supports
- two additional argument values:
- <literal>'source'</literal> and <literal>'build'</literal>.
- The <literal>'source'</literal> argument
- specifies that decisions involving
- whether target files have changed
- since a previous build
- should use the same behavior
- for the decisions configured for source files
- (using the &SourceSignatures; function).
- So in the example:
-
- </para>
-
- <sconstruct>
-Program('hello.c')
-TargetSignatures('source')
-SourceSignatures('timestamp')
- </sconstruct>
-
- <para>
-
- All files, both targets and sources,
- will use modification times
- when deciding if an input file
- has changed since the last
- time a target was built.
-
- </para>
-
- <para>
-
- Lastly, the <literal>'build'</literal> argument
- specifies that &SCons; should examine
- the build status of a target file
- and always rebuild a "downstream" target
- if the target file was itself rebuilt,
- without re-examining the contents or timestamp
- of the newly-built target file.
- If the target file was not rebuilt during
- this &scons; invocation,
- then the target file will be examined
- the same way as configured by
- the &SourceSignature; call
- to decide if it has changed.
-
- </para>
-
- <para>
-
- This mimics the behavior of
- <literal>build signatures</literal>
- in earlier versions of &SCons;.
- A &buildsignature; re-combined
- signatures of all the input files
- that went into making the target file,
- so that the target file itself
- did not need to have its contents read
- to compute an MD5 signature.
- This can improve performance for some configurations,
- but is generally not as effective as using
- <literal>Decider('MD5-timestamp')</literal>.
-
- </para>
-
- </section>
-
</section>
-
+
<section>
<title>Implicit Dependencies: The &cv-CPPPATH; Construction Variable</title>
diff --git a/doc/user/environments.xml b/doc/user/environments.xml
index ede9bc3..5df58c5 100644
--- a/doc/user/environments.xml
+++ b/doc/user/environments.xml
@@ -618,7 +618,7 @@ int main() { }
<para>
- You can fetch individual construction variables
+ You can fetch individual &consvars;
using the normal syntax
for accessing individual named items in a Python dictionary:
@@ -645,20 +645,21 @@ print("CC is: %s"%env['CC'])
<para>
- A construction environment, however,
- is actually an object with associated methods, etc.
+ A &consenv;
+ is actually an object with associated methods and
+ attributes.
If you want to have direct access to only the
- dictionary of construction variables,
+ dictionary of &consvars;
you can fetch this using the &Dictionary; method:
</para>
<scons_example name="environments_ex6b">
<file name="SConstruct" printme="1">
-env = Environment(FOO = 'foo', BAR = 'bar')
-dict = env.Dictionary()
+env = Environment(FOO='foo', BAR='bar')
+cvars = env.Dictionary()
for key in ['OBJSUFFIX', 'LIBSUFFIX', 'PROGSUFFIX']:
- print("key = %s, value = %s" % (key, dict[key]))
+ print("key = %s, value = %s" % (key, cvars[key]))
</file>
</scons_example>
@@ -687,7 +688,7 @@ for key in ['OBJSUFFIX', 'LIBSUFFIX', 'PROGSUFFIX']:
<para>
If you want to loop and print the values of
- all of the construction variables in a construction environment,
+ all of the &consvars; in a &consenv;,
the Python code to do that in sorted order might look something like:
</para>
@@ -698,6 +699,16 @@ for item in sorted(env.Dictionary().items()):
print("construction variable = '%s', value = '%s'" % item)
</sconstruct>
+ <para>
+ It should be noted that for the previous example, there is actually
+ a &consenv; method that does the same thing more simply,
+ and tries to format the output nicely as well:
+ </para>
+ <sconstruct>
+env = Environment()
+print(env.Dump())
+ </sconstruct>
+
</section>
<section>
@@ -706,10 +717,10 @@ for item in sorted(env.Dictionary().items()):
<para>
Another way to get information from
- a construction environment
+ a &consenv;
is to use the &subst; method
on a string containing <literal>$</literal> expansions
- of construction variable names.
+ of &consvar; names.
As a simple example,
the example from the previous
section that used
@@ -728,7 +739,7 @@ print("CC is: %s"%env.subst('$CC'))
One advantage of using
&subst; to expand strings is
- that construction variables
+ that &consvars;
in the result get re-expanded until
there are no expansions left in the string.
So a simple fetch of a value like
@@ -875,33 +886,30 @@ print("value is: %s"%env.subst( '->${1 / 0}&lt;-' ))
<para>
All of the &Builder; functions that we've introduced so far,
- like &Program; and &Library;,
- actually use a default &consenv;
- that contains settings
- for the various compilers
- and other tools that
- &SCons; configures by default,
- or otherwise knows about
- and has discovered on your system.
- The goal of the default construction environment
- is to make many configurations to "just work"
- to build software using
- readily available tools
+ like &Program; and &Library;, use a &consenv;
+ that contains settings for the various compilers
+ and other tools that &SCons; configures by default,
+ or otherwise knows about and has discovered on your system.
+ If not invoked as methods of a specific &consenv;,
+ they use the default &consenv;
+ The goal of the default &consenv;
+ is to make many configurations "just work"
+ to build software using readily available tools
with a minimum of configuration changes.
</para>
<para>
- You can, however, control the settings
- in the default construction environment
+ If needed, you can control the default &consenv;
by using the &DefaultEnvironment; function
- to initialize various settings:
+ to initialize various settings by passing
+ them as keyword arguments:
</para>
<sconstruct>
-DefaultEnvironment(CC = '/usr/local/bin/gcc')
+DefaultEnvironment(CC='/usr/local/bin/gcc')
</sconstruct>
<para>
@@ -917,15 +925,15 @@ DefaultEnvironment(CC = '/usr/local/bin/gcc')
<para>
- Note that the &DefaultEnvironment; function
- returns the initialized
- default construction environment object,
- which can then be manipulated like any
- other construction environment.
- So the following
- would be equivalent to the
- previous example,
- setting the &cv-CC;
+ The &DefaultEnvironment; function
+ returns the initialized default &consenv; object,
+ which can then be manipulated like any other &consenv;
+ (note that the default environment works like a singleton -
+ it can have only one instance - so the keyword arguments
+ are processed only on the first call. On any subsequent
+ call the existing object is returned).
+ So the following would be equivalent to the
+ previous example, setting the &cv-CC;
variable to <filename>/usr/local/bin/gcc</filename>
but as a separate step after
the default construction environment has been initialized:
@@ -960,8 +968,8 @@ env['CC'] = '/usr/local/bin/gcc'
</para>
<sconstruct>
-env = DefaultEnvironment(tools = ['gcc', 'gnulink'],
- CC = '/usr/local/bin/gcc')
+env = DefaultEnvironment(tools=['gcc', 'gnulink'],
+ CC='/usr/local/bin/gcc')
</sconstruct>
<para>
@@ -983,9 +991,8 @@ env = DefaultEnvironment(tools = ['gcc', 'gnulink'],
<para>
- The real advantage of construction environments
- is that you can create as many different construction
- environments as you need,
+ The real advantage of &consenvs;
+ is that you can create as many different ones as you need,
each tailored to a different way to build
some piece of software or other file.
If, for example, we need to build
@@ -1018,7 +1025,7 @@ int main() { }
<para>
- We can even use multiple construction environments to build
+ We can even use multiple &consenvs; to build
multiple versions of a single program.
If you do this by simply trying to use the
&b-link-Program; builder with both environments, though,
@@ -1641,7 +1648,7 @@ env['ENV']['PATH'] = '/usr/local/bin:/bin:/usr/bin'
env = Environment()
env.Command('foo', [], '__ROOT__/usr/bin/printenv.py')
</file>
- <file name="__ROOT__/usr/bin/printenv.py" chmod="0755">
+ <file name="__ROOT__/usr/bin/printenv.py" chmod="0o755">
#!/usr/bin/env python
import os
import sys
diff --git a/doc/user/factories.xml b/doc/user/factories.xml
index 43e417b..0756ad0 100644
--- a/doc/user/factories.xml
+++ b/doc/user/factories.xml
@@ -161,7 +161,7 @@ env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd()
SConscript('S')
</file>
<file name="file.in">file.in</file>
- <file name="modify" chmod="0755">
+ <file name="modify" chmod="0o755">
touch $*
</file>
</scons_example>
@@ -231,7 +231,7 @@ env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd()
SConscript('S')
</file>
<file name="file.in">file.in</file>
- <file name="modify" chmod="0755">
+ <file name="modify" chmod="0o755">
touch $*
</file>
</scons_example>
@@ -325,7 +325,7 @@ env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd()
SConscript('S')
</file>
<file name="file.in">file.in</file>
- <file name="modify" chmod="0755">
+ <file name="modify" chmod="0o755">
touch $*
</file>
</scons_example>
@@ -416,7 +416,7 @@ env['ENV']['PATH'] = env['ENV']['PATH'] + os.pathsep + os.getcwd()
SConscript('S')
</file>
<file name="file.in">file.in</file>
- <file name="process" chmod="0755">
+ <file name="process" chmod="0o755">
touch $*
</file>
</scons_example>
@@ -452,7 +452,7 @@ touch $*
Command("file.out", "file.in",
[
Copy("$TARGET", "$SOURCE"),
- Chmod("$TARGET", 0755),
+ Chmod("$TARGET", 0o755),
])
</file>
<file name="file.in">file.in</file>
diff --git a/doc/user/file-removal.xml b/doc/user/file-removal.xml
index fe38cf7..e772eeb 100644
--- a/doc/user/file-removal.xml
+++ b/doc/user/file-removal.xml
@@ -214,7 +214,7 @@ foo.in
<file name="foo.log">
foo.log
</file>
- <file name="build" chmod="0755">
+ <file name="build" chmod="0o755">
cat $3 > $2
</file>
</scons_example>
diff --git a/doc/user/install.xml b/doc/user/install.xml
index b3cb9dd..d977e6b 100644
--- a/doc/user/install.xml
+++ b/doc/user/install.xml
@@ -2,7 +2,7 @@
<!DOCTYPE sconsdoc [
<!ENTITY % scons SYSTEM "../scons.mod">
%scons;
-
+
<!ENTITY % builders-mod SYSTEM "../generated/builders.mod">
%builders-mod;
<!ENTITY % functions-mod SYSTEM "../generated/functions.mod">
@@ -11,7 +11,7 @@
%tools-mod;
<!ENTITY % variables-mod SYSTEM "../generated/variables.mod">
%variables-mod;
-
+
]>
<chapter id="chap-install"
@@ -50,7 +50,7 @@
Once a program is built,
it is often appropriate to install it in another
directory for public use.
- You use the &Install; method
+ You use the &Install; method
to arrange for a program, or any other file,
to be copied into a destination directory:
@@ -226,7 +226,7 @@ int main() { printf("Hello, world!\n"); }
<para>
- Lastly, if you have multiple files that all
+ If you have multiple files that all
need to be installed with different file names,
you can either call the &InstallAs; function
multiple times, or as a shorthand,
@@ -268,4 +268,66 @@ int main() { printf("Goodbye, world!\n"); }
</section>
+ <section>
+ <title>Installing a Shared Library</title>
+
+ <para>
+ If a shared library is created with the
+ &cv-link-SHLIBVERSION; variable set,
+ &scons; will create symbolic links as needed based on that
+ variable. To properly install such a library including the
+ symbolic links, use the &InstallVersionedLib; function.
+ </para>
+
+ <para>
+ For example, on a Linux system, this instruction:
+ </para>
+
+ <sconstruct>
+foo = env.SharedLibrary(target="foo", source="foo.c", SHLIBVERSION="1.2.3")
+ </sconstruct>
+
+ <para>
+ Will produce a shared library
+ <filename>libfoo.so.1.2.3</filename>
+ and symbolic links
+ <filename>libfoo.so</filename> and
+ <filename>libfoo.so.1</filename>
+ which point to
+ <filename>libfoo.so.1.2.3</filename>.
+ You can use the Node returned by the &SharedLibrary;
+ builder in order to install the library and its
+ symbolic links in one go without having to list
+ them individually:
+ </para>
+
+ <sconstruct>
+env.InstallVersionedLib(target="lib", source=foo)
+ </sconstruct>
+
+<!-- didn't get this to illustrate what I expected: example reports
+ installing lib without version, while manual effort has it:
+
+ <scons_example name="install_ex6">
+ <file name="SConstruct" printme="1">
+env = Environment()
+foo = env.SharedLibrary(target="foo", source="foo.c", SHLIBVERSION="1.2.3")
+ins = env.InstallVersionedLib(target="lib", source=foo)
+env.Alias('install', ins)
+ </file>
+ <file name="foo.c">
+int call_foo() {
+ printf("Hello world");
+ return(0);
+}
+ </file>
+ </scons_example>
+
+ <scons_output example="install_ex6" suffix="1">
+ <scons_output_command>scons -Q install</scons_output_command>
+ </scons_output>
+-->
+
+ </section>
+
</chapter>
diff --git a/doc/user/mergeflags.xml b/doc/user/mergeflags.xml
index d802125..f4438f8 100644
--- a/doc/user/mergeflags.xml
+++ b/doc/user/mergeflags.xml
@@ -77,7 +77,7 @@ env = Environment()
env.Append(CCFLAGS = '-option -O3 -O1')
flags = { 'CCFLAGS' : '-whatever -O3' }
env.MergeFlags(flags)
-print env['CCFLAGS']
+print(env['CCFLAGS'])
</file>
</scons_example>
@@ -104,7 +104,7 @@ env = Environment()
env.Append(CPPPATH = ['/include', '/usr/local/include', '/usr/include'])
flags = { 'CPPPATH' : ['/usr/opt/include', '/usr/local/include'] }
env.MergeFlags(flags)
-print env['CPPPATH']
+print(env['CPPPATH'])
</file>
</scons_example>
@@ -138,8 +138,8 @@ env = Environment()
env.Append(CCFLAGS = '-option -O3 -O1')
env.Append(CPPPATH = ['/include', '/usr/local/include', '/usr/include'])
env.MergeFlags('-whatever -I/usr/opt/include -O3 -I/usr/local/include')
-print env['CCFLAGS']
-print env['CPPPATH']
+print(env['CCFLAGS'])
+print(env['CPPPATH'])
</file>
</scons_example>
diff --git a/doc/user/output.xml b/doc/user/output.xml
index db16393..c0edbca 100644
--- a/doc/user/output.xml
+++ b/doc/user/output.xml
@@ -309,7 +309,7 @@ Linking foo
<scons_example name="output_COMSTR-VERBOSE">
<file name="SConstruct" printme="1">
env = Environment()
-if ARGUMENTS.get('VERBOSE') != "1':
+if ARGUMENTS.get('VERBOSE') != '1':
env['CCCOMSTR'] = "Compiling $TARGET"
env['LINKCOMSTR'] = "Linking $TARGET"
env.Program('foo.c')
diff --git a/doc/user/parseconfig.xml b/doc/user/parseconfig.xml
index 096d236..4adb20f 100644
--- a/doc/user/parseconfig.xml
+++ b/doc/user/parseconfig.xml
@@ -87,7 +87,7 @@
env = Environment()
env['CPPPATH'] = ['/lib/compat']
env.ParseConfig("pkg-config x11 --cflags --libs")
-print env['CPPPATH']
+print(env['CPPPATH'])
</file>
</scons_example>
@@ -139,7 +139,7 @@ scons: `.' is up to date.
env = Environment()
env.ParseConfig("pkg-config x11 --cflags --libs")
env.ParseConfig("pkg-config x11 --cflags --libs")
-print env['CPPPATH']
+print(env['CPPPATH'])
</file>
</scons_example>
diff --git a/doc/user/parseflags.xml b/doc/user/parseflags.xml
index 26313ce..cc31b3b 100644
--- a/doc/user/parseflags.xml
+++ b/doc/user/parseflags.xml
@@ -80,11 +80,12 @@
<scons_example name="parseflags_ex1">
<file name="SConstruct" printme="1">
+from __future__ import print_function
env = Environment()
d = env.ParseFlags("-I/opt/include -L/opt/lib -lfoo")
for k,v in sorted(d.items()):
if v:
- print k, v
+ print(k, v)
env.MergeFlags(d)
env.Program('f1.c')
</file>
@@ -119,11 +120,12 @@ int main() { return 0; }
<scons_example name="parseflags_ex2">
<file name="SConstruct" printme="1">
+from __future__ import print_function
env = Environment()
d = env.ParseFlags("-whatever")
for k,v in sorted(d.items()):
if v:
- print k, v
+ print(k, v)
env.MergeFlags(d)
env.Program('f1.c')
</file>
@@ -145,11 +147,12 @@ env.Program('f1.c')
<scons_example name="parseflags_ex3">
<file name="SConstruct" printme="1">
+from __future__ import print_function
env = Environment()
d = env.ParseFlags(["-I/opt/include", ["-L/opt/lib", "-lfoo"]])
for k,v in sorted(d.items()):
if v:
- print k, v
+ print(k, v)
env.MergeFlags(d)
env.Program('f1.c')
</file>
@@ -172,11 +175,12 @@ int main() { return 0; }
<scons_example name="parseflags_ex4">
<file name="SConstruct" printme="1">
+from __future__ import print_function
env = Environment()
d = env.ParseFlags(["!echo -I/opt/include", "!echo -L/opt/lib", "-lfoo"])
for k,v in sorted(d.items()):
if v:
- print k, v
+ print(k, v)
env.MergeFlags(d)
env.Program('f1.c')
</file>
diff --git a/doc/user/separate.xml b/doc/user/separate.xml
index 26500d6..3640fef 100644
--- a/doc/user/separate.xml
+++ b/doc/user/separate.xml
@@ -149,10 +149,8 @@ program using the F<build/foo.c> path name.
<para>
One historical note: the &VariantDir; function
- used to be called &BuildDir;.
- That name is still supported
- but has been deprecated
- because the &SCons; functionality
+ used to be called &BuildDir;, a name which was
+ removed because the &SCons; functionality
differs from the model of a "build directory"
implemented by other build systems like the GNU Autotools.
diff --git a/doc/user/sideeffect.xml b/doc/user/sideeffect.xml
index e630e4f..e8f0614 100644
--- a/doc/user/sideeffect.xml
+++ b/doc/user/sideeffect.xml
@@ -164,7 +164,7 @@ env.SideEffect('logfile.txt', f1 + f2)
</file>
<file name="file1.in">file1.in</file>
<file name="file2.in">file2.in</file>
- <file name="build" chmod="0755">
+ <file name="build" chmod="0o755">
cat
</file>
</scons_example>
diff --git a/doc/user/troubleshoot.xml b/doc/user/troubleshoot.xml
index 606c727..a9da534 100644
--- a/doc/user/troubleshoot.xml
+++ b/doc/user/troubleshoot.xml
@@ -289,7 +289,7 @@ file3.c
<scons_example name="troubleshoot_Dump">
<file name="SConstruct" printme="1">
env = Environment()
-print env.Dump()
+print(env.Dump())
</file>
</scons_example>
@@ -349,7 +349,7 @@ print env.Dump()
<scons_example name="troubleshoot_Dump_ENV">
<file name="SConstruct" printme="1">
env = Environment()
-print env.Dump('ENV')
+print(env.Dump('ENV'))
</file>
</scons_example>
diff --git a/src/Announce.txt b/src/Announce.txt
index 2ceb8bc..321496d 100755
--- a/src/Announce.txt
+++ b/src/Announce.txt
@@ -18,12 +18,43 @@ So that everyone using SCons can help each other learn how to use it more
effectively, please go to http://scons.org/lists.html#users to sign up for
the scons-users mailing list.
-RELEASE 3.1.0 - Mon, 20 Jul 2019 16:59:23 -0700
+RELEASE 3.1.2 - Mon, 17 Dec 2019 02:06:27 +0000
Please consult the RELEASE.txt file for a summary of changes since the last
release and consult the CHANGES.txt file for complete a list of changes
since last release. This announcement highlights only the important
changes.
+
+ NOTE: The 4.0.0 Release of SCons will drop Python 2.7 Support
+
+ Please note the following important changes since release 3.1.1:
+ - Added debug option "action_timestamps" which outputs to stdout the absolute start and end time for each target.
+ - 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
+ - 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.
+ - 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.
+ - 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
+
Please note the following important changes since release 3.0.4:
- Change the default for AppendENVPath to delete_existing=0, so path
order will not be changed, unless explicitly set (Issue #3276)
diff --git a/src/CHANGES.txt b/src/CHANGES.txt
index a23140c..745bcba 100755
--- a/src/CHANGES.txt
+++ b/src/CHANGES.txt
@@ -4,6 +4,92 @@
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:
+ - Remove obsoleted references to DeciderNeedsNode which could cause crash when using --debug=explain
+
+ From Jason Kenny
+ - Add Fix and test for crash in 3.1.0 when using Decider('MD5-timestamp') and --debug=explain
+
+ From Ben Reed:
+ - Added -fmerge-all-constants to flags that get included in both CCFLAGS and LINKFLAGS.
+
+ From Mathew Robinson:
+ - Fix issue #3415 - Update remaining usages of EnvironmentError to SConsEnvironmentError
+ this patch fixes issues introduced in 3.1.0 where any of the
+ following would cause SCons to error and exit:
+ - CacheDir not write-able
+ - JSON encoding errors for CacheDir config
+ - JSON decoding errors for CacheDir config
+
+
RELEASE 3.1.0 - Mon, 20 Jul 2019 16:59:23 -0700
From Joseph Brill:
@@ -13,7 +99,7 @@ RELEASE 3.1.0 - Mon, 20 Jul 2019 16:59:23 -0700
From William Deegan:
- Enhanced --debug=explain output. Now the separate components of the dependency list are split up
as follows:
-
+
scons: rebuilding `file3' because:
the dependency order changed:
->Sources
@@ -84,7 +170,7 @@ RELEASE 3.1.0 - Mon, 20 Jul 2019 16:59:23 -0700
- More fixes for newer Java versions (since 9): handle new jdk directory
naming (jdk-X.Y instead of jdkX.Y) on Windows; handle two-digit major
version. Docstrings improved.
- - Fixups for pylint: exception types, redefined functions,
+ - Fixups for pylint: exception types, redefined functions,
globals, etc. Some old code removed to resolve issues (hashlib is
always present on modern Pythons; no longer need the code for
2.5-and-earlier optparse). cmp is not a builtin function in Py3,
@@ -94,7 +180,7 @@ RELEASE 3.1.0 - Mon, 20 Jul 2019 16:59:23 -0700
- Add a PY3-only function for setting up the cachedir that should be less
prone to races. Add a hack to the PY2 version (from Issue #3351) to
be less prone to a race in the check for old-style cache.
- - Fix coding error in docbook tool only exercised when using python lxml
+ - Fix coding error in docbook tool only exercised when using python lxml
- Recognize two additional GNU compiler header directory options in
ParseFlags: -iquote and -idirafter.
- Fix more re patterns that contain \ but not specified as raw strings
@@ -141,7 +227,7 @@ From Daniel Moody:
From Bernhard M. Wiedemann:
- Do not store build host+user name if reproducible builds are wanted
-
+
RELEASE 3.0.4 - Mon, 20 Jan 2019 22:49:27 +0000
@@ -209,9 +295,9 @@ RELEASE 3.0.2 - Mon, 31 Dec 2018 16:00:12 -0700
- Fix GH Issue #2580 - # in FRAMEWORKPATH doesn't get properly expanded. The # is left in the
command line.
- Fix issue #2980 with credit to Piotr Bartosik (and William Blevins). This is an issue where using
- TimeStamp-MD5 Decider and CacheDir can yield incorrect md5's being written into the .sconsign.
- The difference between Piotr Bartosik's patch and the current code is that the more complicated
- creation of file to csig map is only done when the count of children for the current node doesn't
+ TimeStamp-MD5 Decider and CacheDir can yield incorrect md5's being written into the .sconsign.
+ The difference between Piotr Bartosik's patch and the current code is that the more complicated
+ creation of file to csig map is only done when the count of children for the current node doesn't
match the previous count which is loaded from the sconsign.
- Fix issue # 3106 MSVC if using MSVC_BATCH and target dir had a space would fail due to quirk in
MSVC's handling of escaped targetdirs when batch compiling.
@@ -247,7 +333,7 @@ RELEASE 3.0.2 - Mon, 31 Dec 2018 16:00:12 -0700
- Removed unused --warn options from the man page and source code.
From Arda Fu
- - Fix cpp scanner regex logic to treat ifndef for py3.5+. Previously it was
+ - Fix cpp scanner regex logic to treat ifndef for py3.5+. Previously it was
not properly differentiating between if, ifdef, and ifndef.
From Philipp Maierhöfer
@@ -258,7 +344,7 @@ RELEASE 3.0.2 - Mon, 31 Dec 2018 16:00:12 -0700
From Matthew Marinets:
- Fixed an issue that caused the Java emitter to incorrectly parse arguments to constructors that
implemented a class.
-
+
From Fredrik Medley:
- Fix exception when printing of EnviromentError messages.
Specifically, this fixes error reporting of the race condition when
@@ -379,7 +465,7 @@ RELEASE 3.0.2 - Mon, 31 Dec 2018 16:00:12 -0700
filter type -> list in ipk
From Bernhard M. Wiedemann:
- - Update SCons' internal scons build logic to allow overriding build date
+ - Update SCons' internal scons build logic to allow overriding build date
with SOURCE_DATE_EPOCH for SCons itself.
- Change the datestamps in SCons' docs and embedded in code use ISO 8601 format and UTC
diff --git a/src/LICENSE.txt b/src/LICENSE.txt
index 6b6cd6c..67e0e2f 100644
--- a/src/LICENSE.txt
+++ b/src/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/src/RELEASE.txt b/src/RELEASE.txt
index 9d0e092..5f84c9e 100755
--- a/src/RELEASE.txt
+++ b/src/RELEASE.txt
@@ -1,77 +1,90 @@
- A new SCons checkpoint release, 3.1.0, 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
- Here is a summary of the changes since 3.0.5:
+ Here is a summary of the changes since 3.1.1:
+
+ 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.
- - Added variable TEMPFILEARGJOIN to specify how to join arguments written
- to temp files used when command lines exceed MAXLINELENGTH when the
- command uses $TEMPFILE{...}
- - Support for MSVC 2019
- - Upgraded and improved Visual Studio solution/project generation code using the MSVSProject builder.
- - Added support for Visual Studio 2017 and 2019.
- - Added support for the following per-variant parameters to the builder:
- - cpppaths: Provides per-variant include paths.
- - cppdefines: Provides per-variant preprocessor definitions.
+ 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
CHANGED/ENHANCED EXISTING FUNCTIONALITY
-
- - Fix performance degradation for MD5-timestamp decider. NOTE: This changes the Decider() function arguments.
- From:
- def my_decider(dependency, target, prev_ni):
- To:
- def my_decider(dependency, target, prev_ni, repo_node):
- Where repo_node is the repository (or other) node to use to check if the node is out of date instead of dependency.
-
- - Enhanced --debug=explain output. Now the separate components of the dependency list are split up
- as follows:
-
- scons: rebuilding `file3' because:
- the dependency order changed:
- ->Sources
- Old:xxx New:zzz
- Old:yyy New:yyy
- Old:zzz New:xxx
- ->Depends
- ->Implicit
- Old:/usr/bin/python New:/usr/bin/python
-
- - Changed: Pseudo-builders now inherit OverrideEnvironments. For
- example when calling a pseudo-builder from another
- pseudo-builder the override variables passed to the first
- pseudo-builder call had to be explicitly passed on to the
- internal pseudo-builder call. Now the second pseudo-builder call
- will automatically inherit these override values.
+ - 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
- - Fix Issue #3350 - SCons Exception EnvironmentError is conflicting with Python's EnvironmentError.
- - Fix spurious rebuilds on second build for cases where builder has > 1 target and the source file
- is generated. This was causing the > 1th target to not have it's implicit list cleared when the source
- file was actually built, leaving an implicit list similar to follows for 2nd and higher target
- ['/usr/bin/python', 'xxx', 'yyy', 'zzz']
- This was getting persisted to SConsign and on rebuild it would be corrected to be similar to this
- ['zzz', 'yyy', 'xxx', '/usr/bin/python']
- Which would trigger a rebuild because the order changed.
- The fix involved added logic to mark all shared targets as peers and then ensure they're implicit
- list is all cleared together.
- - Fix Issue #3349 - SCons Exception EnvironmentError is conflicting with Python's EnvironmentError.
- Renamed to SConsEnvironmentError
- - Fix Issue #3350 - mslink failing when too many objects. This is resolved by adding TEMPFILEARGJOIN variable
- which specifies what character to join all the argements output into the tempfile. The default remains a space
- when mslink, msvc, or mslib tools are loaded they change the TEMPFILEARGJOIN to be a line separator (\r\n on win32)
- - Additional fix to issue #3135 - Also handle 'pure' and 'elemental' type bound procedures
-
- - Fix handling of Visual Studio Compilers to properly reject any unknown HOST_PLATFORM or TARGET_PLATFORM
- - Enable LaTeX scanner to find more than one include per line
-
- under which they would be observed), or major code cleanups
-
- Thanks to CURLY, LARRY, and MOE for their contributions to this release.
- Contributors are listed alphabetically by their last name.
+ - 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.
+
+
+ PACKAGING
+
+ - N/A
+
+ DOCUMENTATION
+
+ - N/A
+
+ DEVELOPMENT
+
+ - 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
+
Copyright (c) 2001 - 2019 The SCons Foundation
-src/RELEASE.txt e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan
+src/RELEASE.txt bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan
diff --git a/src/engine/SCons/Action.py b/src/engine/SCons/Action.py
index b541256..b4310f6 100644
--- a/src/engine/SCons/Action.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Action.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import pickle
diff --git a/src/engine/SCons/Action.xml b/src/engine/SCons/Action.xml
index 9cb186c..f4adc72 100644
--- a/src/engine/SCons/Action.xml
+++ b/src/engine/SCons/Action.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/ActionTests.py b/src/engine/SCons/ActionTests.py
index 9372240..b9e0663 100644
--- a/src/engine/SCons/ActionTests.py
+++ b/src/engine/SCons/ActionTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/ActionTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/ActionTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
# Define a null function and a null class for use as builder actions.
@@ -1208,10 +1208,6 @@ class CommandActionTestCase(unittest.TestCase):
# Newer cygwin seems to return 126 for following
expect_nonexecutable_file = 126
expect_nonexecutable_dir = 127
- elif sys.platform.find('sunos') != -1:
- expect_nonexistent = 1
- expect_nonexecutable_file = 1
- expect_nonexecutable_dir = 1
else:
expect_nonexistent = 127
expect_nonexecutable_file = 126
diff --git a/src/engine/SCons/Builder.py b/src/engine/SCons/Builder.py
index 7777436..e4e5215 100644
--- a/src/engine/SCons/Builder.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/BuilderTests.py b/src/engine/SCons/BuilderTests.py
index dd9a917..d0713b2 100644
--- a/src/engine/SCons/BuilderTests.py
+++ b/src/engine/SCons/BuilderTests.py
@@ -22,7 +22,7 @@
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/BuilderTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/BuilderTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/CacheDir.py b/src/engine/SCons/CacheDir.py
index c9e8ea7..20a7df4 100644
--- a/src/engine/SCons/CacheDir.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/CacheDir.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
CacheDir support
@@ -33,6 +33,7 @@ import os
import stat
import sys
+import SCons
import SCons.Action
import SCons.Warnings
from SCons.Util import PY3
@@ -185,7 +186,7 @@ class CacheDir(object):
pass
except OSError:
msg = "Failed to create cache directory " + path
- raise SCons.Errors.EnvironmentError(msg)
+ raise SCons.Errors.SConsEnvironmentError(msg)
try:
with open(config_file, 'x') as config:
@@ -194,14 +195,14 @@ class CacheDir(object):
json.dump(self.config, config)
except Exception:
msg = "Failed to write cache configuration for " + path
- raise SCons.Errors.EnvironmentError(msg)
+ raise SCons.Errors.SConsEnvironmentError(msg)
except FileExistsError:
try:
with open(config_file) as config:
self.config = json.load(config)
except ValueError:
msg = "Failed to read cache configuration for " + path
- raise SCons.Errors.EnvironmentError(msg)
+ raise SCons.Errors.SConsEnvironmentError(msg)
def _readconfig2(self, path):
diff --git a/src/engine/SCons/CacheDirTests.py b/src/engine/SCons/CacheDirTests.py
index f96dab5..f1a9936 100644
--- a/src/engine/SCons/CacheDirTests.py
+++ b/src/engine/SCons/CacheDirTests.py
@@ -21,16 +21,19 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/CacheDirTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/CacheDirTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import shutil
import sys
import unittest
+import tempfile
+import stat
from TestCmd import TestCmd
import SCons.CacheDir
+from SCons.Util import PY3
built_it = None
@@ -112,6 +115,84 @@ class CacheDirTestCase(BaseTestCase):
finally:
SCons.Util.MD5collect = save_collect
+class ExceptionTestCase(unittest.TestCase):
+ """Test that the correct exceptions are thrown by CacheDir."""
+
+ # Don't inherit from BaseTestCase, we're by definition trying to
+ # break things so we really want a clean slate for each test.
+ def setUp(self):
+ self.tmpdir = tempfile.mkdtemp()
+ self._CacheDir = SCons.CacheDir.CacheDir(self.tmpdir)
+
+ def tearDown(self):
+ shutil.rmtree(self.tmpdir)
+
+ @unittest.skipIf(sys.platform.startswith("win"), "This fixture will not trigger an OSError on Windows")
+ def test_throws_correct_on_OSError(self):
+ """Test that the correct error is thrown when cache directory cannot be created."""
+ privileged_dir = os.path.join(os.getcwd(), "privileged")
+ try:
+ os.mkdir(privileged_dir)
+ os.chmod(privileged_dir, stat.S_IREAD)
+ cd = SCons.CacheDir.CacheDir(os.path.join(privileged_dir, "cache"))
+ assert False, "Should have raised exception and did not"
+ except SCons.Errors.SConsEnvironmentError as e:
+ assert str(e) == "Failed to create cache directory {}".format(os.path.join(privileged_dir, "cache"))
+ finally:
+ os.chmod(privileged_dir, stat.S_IWRITE | stat.S_IEXEC | stat.S_IREAD)
+ shutil.rmtree(privileged_dir)
+
+
+ def test_throws_correct_when_failed_to_write_configfile(self):
+ class Unserializable:
+ """A class which the JSON should not be able to serialize"""
+
+ def __init__(self, oldconfig):
+ self.something = 1 # Make the object unserializable
+ # Pretend to be the old config just enough
+ self.__dict__["prefix_len"] = oldconfig["prefix_len"]
+
+ def __getitem__(self, name, default=None):
+ if name == "prefix_len":
+ return self.__dict__["prefix_len"]
+ else:
+ return None
+
+ def __setitem__(self, name, value):
+ self.__dict__[name] = value
+
+ oldconfig = self._CacheDir.config
+ self._CacheDir.config = Unserializable(oldconfig)
+ # Remove the config file that got created on object creation
+ # so that _readconfig* will try to rewrite it
+ old_config = os.path.join(self._CacheDir.path, "config")
+ os.remove(old_config)
+
+ try:
+ if PY3:
+ self._CacheDir._readconfig3(self._CacheDir.path)
+ else:
+ self._CacheDir._readconfig2(self._CacheDir.path)
+ assert False, "Should have raised exception and did not"
+ except SCons.Errors.SConsEnvironmentError as e:
+ assert str(e) == "Failed to write cache configuration for {}".format(self._CacheDir.path)
+
+ def test_raise_environment_error_on_invalid_json(self):
+ config_file = os.path.join(self._CacheDir.path, "config")
+ with open(config_file, "r") as cfg:
+ content = cfg.read()
+ # This will make JSON load raise a ValueError
+ content += "{}"
+ with open(config_file, "w") as cfg:
+ cfg.write(content)
+
+ try:
+ # Construct a new cache dir that will try to read the invalid config
+ new_cache_dir = SCons.CacheDir.CacheDir(self._CacheDir.path)
+ assert False, "Should have raised exception and did not"
+ except SCons.Errors.SConsEnvironmentError as e:
+ assert str(e) == "Failed to read cache configuration for {}".format(self._CacheDir.path)
+
class FileTestCase(BaseTestCase):
"""
Test calling CacheDir code through Node.FS.File interfaces.
diff --git a/src/engine/SCons/Conftest.py b/src/engine/SCons/Conftest.py
index 1163aa3..c24adf8 100644
--- a/src/engine/SCons/Conftest.py
+++ b/src/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/src/engine/SCons/Debug.py b/src/engine/SCons/Debug.py
index c19862a..ef7dfff 100644
--- a/src/engine/SCons/Debug.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Debug.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/src/engine/SCons/Defaults.py b/src/engine/SCons/Defaults.py
index 30c0052..c39c417 100644
--- a/src/engine/SCons/Defaults.py
+++ b/src/engine/SCons/Defaults.py
@@ -33,7 +33,7 @@ from distutils.msvccompiler.
#
from __future__ import division
-__revision__ = "src/engine/SCons/Defaults.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Defaults.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/src/engine/SCons/Defaults.xml b/src/engine/SCons/Defaults.xml
index e568c92..8f87c6e 100644
--- a/src/engine/SCons/Defaults.xml
+++ b/src/engine/SCons/Defaults.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -572,15 +572,21 @@ searching the repositories.
<scons_function name="DefaultEnvironment">
<arguments signature="global">
-([args])
+([**kwargs])
</arguments>
<summary>
<para>
-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
+Creates and returns the default &consenv; object.
+The default &consenv; 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
+&consenv;), 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 &consenv;.
</para>
</summary>
</scons_function>
diff --git a/src/engine/SCons/DefaultsTests.py b/src/engine/SCons/DefaultsTests.py
index 4e0328a..ebb78d5 100644
--- a/src/engine/SCons/DefaultsTests.py
+++ b/src/engine/SCons/DefaultsTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/DefaultsTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/DefaultsTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Environment.py b/src/engine/SCons/Environment.py
index 31a4721..c51df40 100644
--- a/src/engine/SCons/Environment.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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':
@@ -783,13 +781,14 @@ class SubstitutionEnvironment(object):
elif arg in ['-mno-cygwin',
'-pthread',
'-openmp',
+ '-fmerge-all-constants',
'-fopenmp']:
dict['CCFLAGS'].append(arg)
dict['LINKFLAGS'].append(arg)
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'
@@ -797,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)
@@ -1429,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
@@ -1492,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 ]
@@ -1502,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]
@@ -1510,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):
"""
@@ -1599,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:
@@ -1917,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)
@@ -1963,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)
@@ -2038,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
@@ -2158,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)
@@ -2176,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
@@ -2215,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):
"""
"""
@@ -2321,7 +2314,7 @@ class OverrideEnvironment(Base):
return attr.clone(self)
else:
return attr
-
+
def __setattr__(self, name, value):
setattr(self.__dict__['__subject'], name, value)
@@ -2333,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/src/engine/SCons/Environment.xml b/src/engine/SCons/Environment.xml
index 9b392d5..344bc2e 100644
--- a/src/engine/SCons/Environment.xml
+++ b/src/engine/SCons/Environment.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -148,9 +148,9 @@ 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.
+See the manpage sections "Builder Objects"
+and "Scanner Objects"
+for more information.
</para>
</summary>
</cvar>
@@ -160,7 +160,8 @@ below, for more information.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -170,7 +171,8 @@ that may not be set or used in a construction environment.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -180,7 +182,8 @@ that may not be set or used in a construction environment.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -190,7 +193,8 @@ that may not be set or used in a construction environment.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -200,7 +204,8 @@ that may not be set or used in a construction environment.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -210,7 +215,8 @@ that may not be set or used in a construction environment.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -220,7 +226,8 @@ that may not be set or used in a construction environment.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -230,7 +237,8 @@ that may not be set or used in a construction environment.
<para>
A reserved variable name
that may not be set or used in a construction environment.
-(See "Variable Substitution," below.)
+(See the manpage section "Variable Substitution"
+for more information).
</para>
</summary>
</cvar>
@@ -255,8 +263,8 @@ that are part of this construction environment.
Creates an Action object for
the specified
<varname>action</varname>.
-See the section "Action Objects,"
-below, for a complete explanation of the arguments and behavior.
+See the manpage section "Action Objects"
+for a complete explanation of the arguments and behavior.
</para>
<para>
@@ -359,7 +367,8 @@ has been built.
The specified action(s) may be
an Action object, or anything that
can be converted into an Action object
-(see below).
+See the manpage section "Action Objects"
+for a complete explanation.
</para>
<para>
@@ -386,7 +395,8 @@ is built.
The specified action(s) may be
an Action object, or anything that
can be converted into an Action object
-(see below).
+See the manpage section "Action Objects"
+for a complete explanation.
</para>
<para>
@@ -512,7 +522,7 @@ 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.)
+(See also the &Prepend; method).
</para>
<para>
@@ -603,28 +613,6 @@ env.AppendUnique(CCFLAGS = '-g', FOO = ['foo.yyy'])
</summary>
</scons_function>
-<scons_function name="BuildDir">
-<arguments>
-(build_dir, src_dir, [duplicate])
-</arguments>
-<summary>
-<para>
-Deprecated synonyms for
-&f-VariantDir;
-and
-<function>env.VariantDir</function>().
-The
-<varname>build_dir</varname>
-argument becomes the
-<varname>variant_dir</varname>
-argument of
-&f-VariantDir;
-or
-<function>env.VariantDir</function>().
-</para>
-</summary>
-</scons_function>
-
<scons_function name="Builder">
<arguments>
(action, [arguments])
@@ -634,8 +622,8 @@ or
Creates a Builder object for
the specified
<varname>action</varname>.
-See the section "Builder Objects,"
-below, for a complete explanation of the arguments and behavior.
+See the manpage section "Builder Objects"
+for a complete explanation of the arguments and behavior.
</para>
<para>
@@ -898,11 +886,15 @@ wx_env = env.Clone(parse_flags='!wx-config --cflags --cxxflags')
<builder name="Command">
<summary>
<para>
-The &b-Command; "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 &f-link-Command; function description
+The &b-Command; "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 &f-link-Command; function description
for the calling syntax and details.
</para>
</summary>
@@ -923,19 +915,29 @@ for a single special-case build.
</para>
<para>
-As a special case, the
-<varname>source_scanner</varname>
-keyword argument can
+&b-Command; builder accepts
+<varname>source_scanner</varname>,
+<varname>target_scanner</varname>,
+<varname>source_factory</varname>, and
+<varname>target_factory</varname>
+keyword arguments. The *_scanner args can
be used to specify
a Scanner object
-that will be used to scan the sources.
-(The global
+that will be used to apply a custom
+scanner for a source or target.
+For example, the global
<literal>DirScanner</literal>
object can be used
if any of the sources will be directories
that must be scanned on-disk for
changes to files that aren't
-already specified in other Builder of function calls.)
+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.
</para>
<para>
@@ -947,7 +949,7 @@ same-named existing construction variables.
An action can be an external command,
specified as a string,
or a callable Python object;
-see "Action Objects," below,
+see the manpage section "Action Objects"
for more complete information.
Also note that a string specifying an external command
may be preceded by an
@@ -971,7 +973,7 @@ env.Command('foo.out', 'foo.in',
env.Command('bar.out', 'bar.in',
["rm -f $TARGET",
"$BAR_BUILD &lt; $SOURCES &gt; $TARGET"],
- ENV = {'PATH' : '/usr/local/bin/'})
+ ENV={'PATH': '/usr/local/bin/'})
def rename(env, target, source):
import os
@@ -979,7 +981,7 @@ def rename(env, target, source):
env.Command('baz.out', 'baz.in',
["$BAZ_BUILD &lt; $SOURCES &gt; .tmp",
- rename ])
+ rename])
</example_commands>
<para>
@@ -988,14 +990,14 @@ Note that 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 entry it is.
+identifies what type of entries they are.
If necessary, you can explicitly specify
that targets or source nodes should
-be treated as directoriese
+be treated as directories
by using the
&f-link-Dir;
or
-<function>env.Dir</function>()
+<function>env.Dir</function>
functions.
</para>
@@ -1011,9 +1013,9 @@ env.Command(env.Dir('$DISTDIR')), None, make_distdir)
</example_commands>
<para>
-(Also note that SCons will usually
+Also note that SCons will usually
automatically create any directory necessary to hold a target file,
-so you normally don't need to create directories by hand.)
+so you normally don't need to create directories by hand.
</para>
</summary>
</scons_function>
@@ -1029,8 +1031,8 @@ so you normally don't need to create directories by hand.)
<para>
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.
+See the manpage section "Configure Contexts"
+for a complete explanation of the arguments and behavior.
</para>
</summary>
</scons_function>
@@ -1325,11 +1327,11 @@ env.Depends(bar, installed_lib)
<summary>
<para>
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.
+containing the &consvars; in the &consenv;.
+If there are any arguments specified,
+the values of the specified &consvars;
+are returned as a string (if one
+argument) or as a list of strings.
</para>
<para>
@@ -1337,8 +1339,8 @@ Example:
</para>
<example_commands>
-dict = env.Dictionary()
-cc_dict = env.Dictionary('CC', 'CCFLAGS', 'CCCOM')
+cvars = env.Dictionary()
+cc_values = env.Dictionary('CC', 'CCFLAGS', 'CCCOM')
</example_commands>
</summary>
</scons_function>
@@ -1375,7 +1377,8 @@ 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.
+see manpage section "File and Directory Nodes"
+for more information.
</para>
</summary>
</scons_function>
@@ -1399,7 +1402,7 @@ This SConstruct:
<example_commands>
env=Environment()
-print env.Dump('CCCOM')
+print(env.Dump('CCCOM'))
</example_commands>
<para>
@@ -1416,7 +1419,7 @@ While this SConstruct:
<example_commands>
env=Environment()
-print env.Dump()
+print(env.Dump())
</example_commands>
<para>
@@ -1458,8 +1461,8 @@ Executes an Action object.
The specified
<varname>action</varname>
may be an Action object
-(see the section "Action Objects,"
-below, for a complete explanation of the arguments and behavior),
+(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,
@@ -1532,7 +1535,8 @@ 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.
+see manpage section "File and Directory Nodes"
+for more information.
</para>
</summary>
</scons_function>
@@ -2190,7 +2194,7 @@ and the construction variables they affect
are as specified for the
&f-link-env-ParseFlags;
method (which this method calls).
-See that method's description, below,
+See that method's description
for a table of options and construction variables.
</para>
</summary>
@@ -2301,30 +2305,34 @@ and added to the following construction variables:
</para>
<example_commands>
--arch CCFLAGS, LINKFLAGS
--D CPPDEFINES
--framework FRAMEWORKS
--frameworkdir= FRAMEWORKPATH
--include CCFLAGS
--isysroot CCFLAGS, LINKFLAGS
--isystem CCFLAGS
--iquote CCFLAGS
--idirafter CCFLAGS
--I CPPPATH
--l LIBS
--L LIBPATH
--mno-cygwin CCFLAGS, LINKFLAGS
--mwindows LINKFLAGS
--pthread CCFLAGS, LINKFLAGS
--std= CFLAGS
--Wa, ASFLAGS, CCFLAGS
--Wl,-rpath= RPATH
--Wl,-R, RPATH
--Wl,-R RPATH
--Wl, LINKFLAGS
--Wp, CPPFLAGS
-- CCFLAGS
-+ CCFLAGS, LINKFLAGS
+-arch CCFLAGS, LINKFLAGS
+-D CPPDEFINES
+-framework FRAMEWORKS
+-frameworkdir= FRAMEWORKPATH
+-fmerge-all-constants CCFLAGS, LINKFLAGS
+-fopenmp CCFLAGS, LINKFLAGS
+-include CCFLAGS
+-imacros CCFLAGS
+-isysroot CCFLAGS, LINKFLAGS
+-isystem CCFLAGS
+-iquote CCFLAGS
+-idirafter CCFLAGS
+-I CPPPATH
+-l LIBS
+-L LIBPATH
+-mno-cygwin CCFLAGS, LINKFLAGS
+-mwindows LINKFLAGS
+-openmp CCFLAGS, LINKFLAGS
+-pthread CCFLAGS, LINKFLAGS
+-std= CFLAGS
+-Wa, ASFLAGS, CCFLAGS
+-Wl,-rpath= RPATH
+-Wl,-R, RPATH
+-Wl,-R RPATH
+-Wl, LINKFLAGS
+-Wp, CPPFLAGS
+- CCFLAGS
++ CCFLAGS, LINKFLAGS
</example_commands>
<para>
@@ -2655,8 +2663,8 @@ env.Requires('foo', 'file-that-must-be-built-before-foo')
Creates a Scanner object for
the specified
<varname>function</varname>.
-See the section "Scanner Objects,"
-below, for a complete explanation of the arguments and behavior.
+See manpage section "Scanner Objects"
+for a complete explanation of the arguments and behavior.
</para>
</summary>
</scons_function>
@@ -2968,105 +2976,6 @@ env.SourceCode('no_source.c', None)
</summary>
</scons_function>
-<scons_function name="SourceSignatures">
-<arguments>
-(type)
-</arguments>
-<summary>
-<para>
-Note: Although it is not yet officially deprecated,
-use of this function is discouraged.
-See the
-&f-link-Decider;
-function for a more flexible and straightforward way
-to configure SCons' decision-making.
-</para>
-
-<para>
-The
-&f-SourceSignatures;
-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
-<literal>MD5</literal>
-or
-<literal>timestamp</literal>.
-</para>
-
-<para>
-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.
-</para>
-
-<para>
-<literal>MD5</literal>
-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.
-</para>
-
-<para>
-<literal>timestamp</literal>
-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
-<emphasis>older</emphasis>
-than the last time it was used to rebuild the target file.)
-</para>
-
-<para>
-There is no different between the two behaviors
-for Python
-&f-Value;
-node objects.
-</para>
-
-<para>
-<literal>MD5</literal>
-signatures take longer to compute,
-but are more accurate than
-<literal>timestamp</literal>
-signatures.
-The default value is
-<literal>MD5</literal>.
-</para>
-
-<para>
-Note that the default
-&f-link-TargetSignatures;
-setting (see below)
-is to use this
-&f-SourceSignatures;
-setting for any target files that are used
-to build other target files.
-Consequently, changing the value of
-&f-SourceSignatures;
-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
-&f-env-SourceSignatures;
-is used).
-</para>
-</summary>
-</scons_function>
-
<scons_function name="Split">
<arguments>
(arg)
@@ -3197,7 +3106,7 @@ Example:
</para>
<example_commands>
-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}",
@@ -3210,159 +3119,6 @@ source_nodes = env.subst('$EXPAND_TO_NODELIST',
</summary>
</scons_function>
-<scons_function name="TargetSignatures">
-<arguments>
-(type)
-</arguments>
-<summary>
-<para>
-Note: Although it is not yet officially deprecated,
-use of this function is discouraged.
-See the
-&f-link-Decider;
-function for a more flexible and straightforward way
-to configure SCons' decision-making.
-</para>
-
-<para>
-The
-&f-TargetSignatures;
-function tells
-&scons;
-how to decide if a target file
-(a file that
-<emphasis>is</emphasis>
-built from any other files)
-has changed since the last time it
-was used to build some other target file.
-Legal values are
-<literal>"build"</literal>;
-<literal>"content"</literal>
-(or its synonym
-<literal>"MD5"</literal>);
-<literal>"timestamp"</literal>;
-or
-<literal>"source"</literal>.
-</para>
-
-<para>
-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't have an explicit target signature type
-specified for their environments.
-</para>
-
-<para>
-<literal>"content"</literal>
-(or its synonym
-<literal>"MD5"</literal>)
-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're 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.
-</para>
-
-<para>
-<literal>"timestamp"</literal>
-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
-<emphasis>older</emphasis>
-than the last time it was used to rebuild the target file.)
-</para>
-
-<para>
-<literal>"source"</literal>
-means
-&scons;
-decides that a target file has changed
-as specified by the corresponding
-&f-SourceSignatures;
-setting
-(<literal>"MD5"</literal>
-or
-<literal>"timestamp"</literal>).
-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.
-</para>
-
-<para>
-<literal>"build"</literal>
-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
-&f-SourceSignatures;
-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.
-</para>
-
-<para>
-<literal>"build"</literal>
-signatures are fastest because
-<literal>"content"</literal>
-(or
-<literal>"MD5"</literal>)
-signatures take longer to compute,
-but are more accurate than
-<literal>"timestamp"</literal>
-signatures,
-and can prevent unnecessary "downstream" rebuilds
-when a target file is rebuilt to the exact same contents
-as the previous build.
-The
-<literal>"source"</literal>
-setting provides the most consistent behavior
-when other target files may be rebuilt from
-both source and target input files.
-The default value is
-<literal>"source"</literal>.
-</para>
-
-<para>
-Because the default setting is
-<literal>"source"</literal>,
-using
-&f-SourceSignatures;
-is generally preferable to
-&f-TargetSignatures;,
-so that the up-to-date decision
-will be consistent for all files
-(or all files built with a specific construction environment).
-Use of
-&f-TargetSignatures;
-provides specific control for how built target files
-affect their "downstream" dependencies.
-</para>
-</summary>
-</scons_function>
-
<scons_function name="Tool">
<arguments>
(string, [toolpath, **kw])
@@ -3647,30 +3403,51 @@ SConscript(dirs='doc', variant_dir='build/doc', duplicate=0)
Searches for the specified executable
<varname>program</varname>,
returning the full path name to the program
-if it is found,
-and returning None if not.
-Searches the specified
-<varname>path</varname>,
-the value of the calling environment's PATH
-(<literal>env['ENV']['PATH']</literal>),
-or the user's current external PATH
-(<literal>os.environ['PATH']</literal>)
-by default.
+if it is found, else <literal>None</literal>.
+Searches the value of the
+<varname>path</varname> keyword argument,
+or if <literal>None</literal> (the default)
+the value of the calling environment's <envar>PATH</envar>
+(<literal>env['ENV']['PATH']</literal>).
+If <varname>path</varname> is <literal>None</literal> and
+the <literal>env['ENV']['PATH']</literal> key does not exist,
+the user's current external <envar>PATH</envar>
+(<literal>os.environ['PATH']</literal>) is used as fallback.
+</para>
+<para>
On Windows systems, searches for executable
-programs with any of the file extensions
-listed in the specified
-<varname>pathext</varname>,
-the calling environment's PATHEXT
-(<literal>env['ENV']['PATHEXT']</literal>)
-or the user's current PATHEXT
+programs with any of the file extensions listed in the
+<varname>pathext</varname> keyword argument,
+or if <literal>None</literal> (the default)
+the calling environment's <envar>PATHEXT</envar>
+(<literal>env['ENV']['PATHEXT']</literal>).
+The user's current external <envar>PATHEXT</envar>
(<literal>os.environ['PATHEXT']</literal>)
-by default.
+is used as a fallback if <varname>pathext</varname> is
+<literal>None</literal>
+and the key <literal>env['ENV']['PATHEXT']</literal>
+does not exist.
+</para>
+<para>
Will not select any
path name or names
in the specified
<varname>reject</varname>
list, if any.
</para>
+<note>
+<para>
+If you would prefer to search
+the user's current external <envar>PATH</envar>
+(<literal>os.environ['PATH']</literal>)
+by default,
+consider using the function <literal>SCons.Util.WhereIs</literal> instead.
+Note that <literal>SCons.Util.WhereIs</literal>
+does not expand environment variables automatically
+(no implicit <literal>env.subst</literal> for its arguments).
+</para>
+</note>
+
</summary>
</scons_function>
diff --git a/src/engine/SCons/EnvironmentTests.py b/src/engine/SCons/EnvironmentTests.py
index 1ce1007..139bef7 100644
--- a/src/engine/SCons/EnvironmentTests.py
+++ b/src/engine/SCons/EnvironmentTests.py
@@ -23,7 +23,7 @@
from __future__ import print_function
-__revision__ = "src/engine/SCons/EnvironmentTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/EnvironmentTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
@@ -797,12 +797,14 @@ sys.exit(0)
"-F fwd3 " + \
"-dylib_file foo-dylib " + \
"-pthread " + \
+ "-fmerge-all-constants " +\
"-fopenmp " + \
"-mno-cygwin -mwindows " + \
"-arch i386 -isysroot /tmp " + \
"-iquote /usr/include/foo1 " + \
"-isystem /usr/include/foo2 " + \
"-idirafter /usr/include/foo3 " + \
+ "-imacros /usr/include/foo4 " + \
"+DD64 " + \
"-DFOO -DBAR=value -D BAZ "
@@ -811,11 +813,13 @@ sys.exit(0)
assert d['ASFLAGS'] == ['-as'], d['ASFLAGS']
assert d['CFLAGS'] == ['-std=c99']
assert d['CCFLAGS'] == ['-X', '-Wa,-as',
- '-pthread', '-fopenmp', '-mno-cygwin',
+ '-pthread', '-fmerge-all-constants',
+ '-fopenmp', '-mno-cygwin',
('-arch', 'i386'), ('-isysroot', '/tmp'),
('-iquote', '/usr/include/foo1'),
('-isystem', '/usr/include/foo2'),
('-idirafter', '/usr/include/foo3'),
+ ('-imacros', env.fs.File('/usr/include/foo4')),
'+DD64'], repr(d['CCFLAGS'])
assert d['CXXFLAGS'] == ['-std=c++0x'], repr(d['CXXFLAGS'])
assert d['CPPDEFINES'] == ['FOO', ['BAR', 'value'], 'BAZ'], d['CPPDEFINES']
@@ -832,7 +836,7 @@ sys.exit(0)
assert LIBS == ['xxx', 'yyy', 'ascend'], (d['LIBS'], LIBS)
assert d['LINKFLAGS'] == ['-Wl,-link',
'-dylib_file', 'foo-dylib',
- '-pthread', '-fopenmp',
+ '-pthread', '-fmerge-all-constants', '-fopenmp',
'-mno-cygwin', '-mwindows',
('-arch', 'i386'),
('-isysroot', '/tmp'),
@@ -1872,18 +1876,6 @@ def generate(env):
assert ('BUILDERS' in env) is False
env2 = env.Clone()
- def test_Copy(self):
- """Test copying using the old env.Copy() method"""
- env1 = self.TestEnvironment(XXX = 'x', YYY = 'y')
- env2 = env1.Copy()
- env1copy = env1.Copy()
- assert env1copy == env1copy
- assert env2 == env2
- env2.Replace(YYY = 'yyy')
- assert env2 == env2
- assert env1 != env2
- assert env1 == env1copy
-
def test_Detect(self):
"""Test Detect()ing tools"""
test = TestCmd.TestCmd(workdir = '')
@@ -2024,6 +2016,7 @@ def generate(env):
"-Ffwd2 " + \
"-F fwd3 " + \
"-pthread " + \
+ "-fmerge-all-constants " + \
"-mno-cygwin -mwindows " + \
"-arch i386 -isysroot /tmp " + \
"-iquote /usr/include/foo1 " + \
@@ -2035,7 +2028,7 @@ def generate(env):
assert save_command == ['fake command'], save_command
assert env['ASFLAGS'] == ['assembler', '-as'], env['ASFLAGS']
assert env['CCFLAGS'] == ['', '-X', '-Wa,-as',
- '-pthread', '-mno-cygwin',
+ '-pthread', '-fmerge-all-constants', '-mno-cygwin',
('-arch', 'i386'), ('-isysroot', '/tmp'),
('-iquote', '/usr/include/foo1'),
('-isystem', '/usr/include/foo2'),
@@ -2049,6 +2042,7 @@ def generate(env):
assert env['LIBPATH'] == ['list', '/usr/fax', 'foo'], env['LIBPATH']
assert env['LIBS'] == ['xxx', 'yyy', env.File('abc')], env['LIBS']
assert env['LINKFLAGS'] == ['', '-Wl,-link', '-pthread',
+ '-fmerge-all-constants',
'-mno-cygwin', '-mwindows',
('-arch', 'i386'),
('-isysroot', '/tmp'),
@@ -3280,44 +3274,6 @@ def generate(env):
s = e.src_builder()
assert s is None, s
- def test_SourceSignatures(self):
- """Test the SourceSignatures() method"""
- import SCons.Errors
-
- env = self.TestEnvironment(M = 'MD5', T = 'timestamp')
-
- exc_caught = None
- try:
- env.SourceSignatures('invalid_type')
- except SCons.Errors.UserError:
- exc_caught = 1
- assert exc_caught, "did not catch expected UserError"
-
- env.SourceSignatures('MD5')
- assert env.src_sig_type == 'MD5', env.src_sig_type
-
- env.SourceSignatures('$M')
- assert env.src_sig_type == 'MD5', env.src_sig_type
-
- env.SourceSignatures('timestamp')
- assert env.src_sig_type == 'timestamp', env.src_sig_type
-
- env.SourceSignatures('$T')
- assert env.src_sig_type == 'timestamp', env.src_sig_type
-
- try:
- import SCons.Util
- save_md5 = SCons.Util.md5
- SCons.Util.md5 = None
- try:
- env.SourceSignatures('MD5')
- except SCons.Errors.UserError:
- pass
- else:
- self.fail('Did not catch expected UserError')
- finally:
- SCons.Util.md5 = save_md5
-
def test_Split(self):
"""Test the Split() method"""
env = self.TestEnvironment(FOO = 'fff', BAR = 'bbb')
@@ -3334,56 +3290,6 @@ def generate(env):
s = env.Split("$FOO$BAR")
assert s == ["fffbbb"], s
- def test_TargetSignatures(self):
- """Test the TargetSignatures() method"""
- import SCons.Errors
-
- env = self.TestEnvironment(B='build', C='content')
-
- exc_caught = None
- try:
- env.TargetSignatures('invalid_type')
- except SCons.Errors.UserError:
- exc_caught = 1
- assert exc_caught, "did not catch expected UserError"
- assert not hasattr(env, '_build_signature')
-
- env.TargetSignatures('build')
- assert env.tgt_sig_type == 'build', env.tgt_sig_type
-
- env.TargetSignatures('$B')
- assert env.tgt_sig_type == 'build', env.tgt_sig_type
-
- env.TargetSignatures('content')
- assert env.tgt_sig_type == 'content', env.tgt_sig_type
-
- env.TargetSignatures('$C')
- assert env.tgt_sig_type == 'content', env.tgt_sig_type
-
- env.TargetSignatures('MD5')
- assert env.tgt_sig_type == 'MD5', env.tgt_sig_type
-
- env.TargetSignatures('timestamp')
- assert env.tgt_sig_type == 'timestamp', env.tgt_sig_type
-
- try:
- import SCons.Util
- save_md5 = SCons.Util.md5
- SCons.Util.md5 = None
- try:
- env.TargetSignatures('MD5')
- except SCons.Errors.UserError:
- pass
- else:
- self.fail('Did not catch expected UserError')
- try:
- env.TargetSignatures('content')
- except SCons.Errors.UserError:
- pass
- else:
- self.fail('Did not catch expected UserError')
- finally:
- SCons.Util.md5 = save_md5
def test_Value(self):
"""Test creating a Value() object
@@ -3404,7 +3310,6 @@ def generate(env):
assert v3.value == 'c', v3.value
-
def test_Environment_global_variable(self):
"""Test setting Environment variable to an Environment.Base subclass"""
class MyEnv(SCons.Environment.Base):
@@ -3746,8 +3651,6 @@ class OverrideEnvironmentTestCase(unittest.TestCase,TestEnvironmentFixture):
# Environment()
# FindFile()
# Scanner()
- # SourceSignatures()
- # TargetSignatures()
# It's unlikely Clone() will ever be called this way, so let the
# other methods test that handling overridden values works.
diff --git a/src/engine/SCons/Errors.py b/src/engine/SCons/Errors.py
index 28f58be..0bad46d 100644
--- a/src/engine/SCons/Errors.py
+++ b/src/engine/SCons/Errors.py
@@ -28,7 +28,7 @@ and user errors in SCons.
"""
-__revision__ = "src/engine/SCons/Errors.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Errors.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import shutil
import SCons.Util
diff --git a/src/engine/SCons/ErrorsTests.py b/src/engine/SCons/ErrorsTests.py
index a1bc048..a0a9cb5 100644
--- a/src/engine/SCons/ErrorsTests.py
+++ b/src/engine/SCons/ErrorsTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/ErrorsTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/ErrorsTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import errno
import os
diff --git a/src/engine/SCons/Executor.py b/src/engine/SCons/Executor.py
index c6ffe81..5c95e95 100644
--- a/src/engine/SCons/Executor.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Executor.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import collections
diff --git a/src/engine/SCons/ExecutorTests.py b/src/engine/SCons/ExecutorTests.py
index 353e6f2..88417a8 100644
--- a/src/engine/SCons/ExecutorTests.py
+++ b/src/engine/SCons/ExecutorTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/ExecutorTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/ExecutorTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Job.py b/src/engine/SCons/Job.py
index 12ba19f..214a0c9 100644
--- a/src/engine/SCons/Job.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Job.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/JobTests.py b/src/engine/SCons/JobTests.py
index d46ab30..32e9355 100644
--- a/src/engine/SCons/JobTests.py
+++ b/src/engine/SCons/JobTests.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/JobTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/JobTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import unittest
import random
diff --git a/src/engine/SCons/Memoize.py b/src/engine/SCons/Memoize.py
index f7b45bf..8f33a1b 100644
--- a/src/engine/SCons/Memoize.py
+++ b/src/engine/SCons/Memoize.py
@@ -22,7 +22,7 @@
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Memoize.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Memoize.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """Memoizer
diff --git a/src/engine/SCons/MemoizeTests.py b/src/engine/SCons/MemoizeTests.py
index f3b5329..e83aa95 100644
--- a/src/engine/SCons/MemoizeTests.py
+++ b/src/engine/SCons/MemoizeTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/MemoizeTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/MemoizeTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Node/Alias.py b/src/engine/SCons/Node/Alias.py
index a9defb6..5c62677 100644
--- a/src/engine/SCons/Node/Alias.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Node/Alias.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import collections
diff --git a/src/engine/SCons/Node/AliasTests.py b/src/engine/SCons/Node/AliasTests.py
index 764ac67..40f3ff3 100644
--- a/src/engine/SCons/Node/AliasTests.py
+++ b/src/engine/SCons/Node/AliasTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Node/AliasTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Node/AliasTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Node/FS.py b/src/engine/SCons/Node/FS.py
index 21ccecc..65d1ac1 100644
--- a/src/engine/SCons/Node/FS.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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.
@@ -3436,6 +3436,8 @@ class File(Base):
Boolean - Indicates if node(File) has changed.
"""
+ if node is None:
+ node = self
# Now get sconsign name -> csig map and then get proper prev_ni if possible
bi = node.get_stored_info().binfo
rebuilt = False
diff --git a/src/engine/SCons/Node/FSTests.py b/src/engine/SCons/Node/FSTests.py
index 2366a4d..3b4d78b 100644
--- a/src/engine/SCons/Node/FSTests.py
+++ b/src/engine/SCons/Node/FSTests.py
@@ -22,7 +22,7 @@
#
from __future__ import division, print_function
-__revision__ = "src/engine/SCons/Node/FSTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Node/FSTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
@@ -2545,11 +2545,10 @@ class FileTestCase(_tempdirTestCase):
def get_ninfo(self):
""" mocked to ensure csig will equal the filename"""
- try:
- return self.ninfo
- except AttributeError:
- self.ninfo = FakeNodeInfo(self.name, self.timestamp)
+ if self.ninfo is not None:
return self.ninfo
+ self.ninfo = FakeNodeInfo(self.name, self.timestamp)
+ return self.ninfo
def get_csig(self):
ninfo = self.get_ninfo()
diff --git a/src/engine/SCons/Node/NodeTests.py b/src/engine/SCons/Node/NodeTests.py
index ce44b7d..3e186de 100644
--- a/src/engine/SCons/Node/NodeTests.py
+++ b/src/engine/SCons/Node/NodeTests.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/Node/NodeTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Node/NodeTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Node/Python.py b/src/engine/SCons/Node/Python.py
index d338051..ec23b3f 100644
--- a/src/engine/SCons/Node/Python.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Node/Python.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Node
diff --git a/src/engine/SCons/Node/PythonTests.py b/src/engine/SCons/Node/PythonTests.py
index 98137c7..94501d2 100644
--- a/src/engine/SCons/Node/PythonTests.py
+++ b/src/engine/SCons/Node/PythonTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Node/PythonTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Node/PythonTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Node/__init__.py b/src/engine/SCons/Node/__init__.py
index 5455bd6..32f4bba 100644
--- a/src/engine/SCons/Node/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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()
@@ -1661,10 +1661,7 @@ class Node(object, with_metaclass(NoSlotsPyPy)):
if k not in old_bkids:
lines.append("`%s' is a new dependency\n" % stringify(k))
else:
- try:
- changed = _decider_map[k.changed_since_last_build](k, self, osig[k])
- except DeciderNeedsNode as e:
- changed = e.decider(self, osig[k], node=self)
+ changed = _decider_map[k.changed_since_last_build](k, self, osig[k])
if changed:
lines.append("`%s' changed\n" % stringify(k))
diff --git a/src/engine/SCons/PathList.py b/src/engine/SCons/PathList.py
index d6a01e7..ad02936 100644
--- a/src/engine/SCons/PathList.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/PathList.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """SCons.PathList
diff --git a/src/engine/SCons/PathListTests.py b/src/engine/SCons/PathListTests.py
index 0a18fbe..0cf1457 100644
--- a/src/engine/SCons/PathListTests.py
+++ b/src/engine/SCons/PathListTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/PathListTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/PathListTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Platform/PlatformTests.py b/src/engine/SCons/Platform/PlatformTests.py
index 7941625..1d1d6a7 100644
--- a/src/engine/SCons/Platform/PlatformTests.py
+++ b/src/engine/SCons/Platform/PlatformTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/PlatformTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/PlatformTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Platform/__init__.py b/src/engine/SCons/Platform/__init__.py
index 8da1e9d..2e3d6cd 100644
--- a/src/engine/SCons/Platform/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Platform/__init__.xml b/src/engine/SCons/Platform/__init__.xml
index d4c2a21..43a4497 100644
--- a/src/engine/SCons/Platform/__init__.xml
+++ b/src/engine/SCons/Platform/__init__.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Platform/aix.py b/src/engine/SCons/Platform/aix.py
index 70fbb35..c5964b6 100644
--- a/src/engine/SCons/Platform/aix.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/aix.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import subprocess
diff --git a/src/engine/SCons/Platform/cygwin.py b/src/engine/SCons/Platform/cygwin.py
index 70b6443..fe71ea9 100644
--- a/src/engine/SCons/Platform/cygwin.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/cygwin.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
diff --git a/src/engine/SCons/Platform/darwin.py b/src/engine/SCons/Platform/darwin.py
index d5861d9..ff0d50d 100644
--- a/src/engine/SCons/Platform/darwin.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/darwin.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
import os
diff --git a/src/engine/SCons/Platform/hpux.py b/src/engine/SCons/Platform/hpux.py
index 6867212..3158438 100644
--- a/src/engine/SCons/Platform/hpux.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/hpux.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
diff --git a/src/engine/SCons/Platform/irix.py b/src/engine/SCons/Platform/irix.py
index a382e71..8643b14 100644
--- a/src/engine/SCons/Platform/irix.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/irix.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
diff --git a/src/engine/SCons/Platform/mingw.py b/src/engine/SCons/Platform/mingw.py
index c03c9c8..1961606 100644
--- a/src/engine/SCons/Platform/mingw.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/mingw.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
diff --git a/src/engine/SCons/Platform/os2.py b/src/engine/SCons/Platform/os2.py
index ebabe3d..eb2c679 100644
--- a/src/engine/SCons/Platform/os2.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Platform/posix.py b/src/engine/SCons/Platform/posix.py
index 780c764..c9f9a2d 100644
--- a/src/engine/SCons/Platform/posix.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/posix.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import errno
import os
diff --git a/src/engine/SCons/Platform/posix.xml b/src/engine/SCons/Platform/posix.xml
index a710230..44cca43 100644
--- a/src/engine/SCons/Platform/posix.xml
+++ b/src/engine/SCons/Platform/posix.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Platform/sunos.py b/src/engine/SCons/Platform/sunos.py
index 6aa54aa..90418d5 100644
--- a/src/engine/SCons/Platform/sunos.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/sunos.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import posix
diff --git a/src/engine/SCons/Platform/sunos.xml b/src/engine/SCons/Platform/sunos.xml
index abab196..4b6bda2 100644
--- a/src/engine/SCons/Platform/sunos.xml
+++ b/src/engine/SCons/Platform/sunos.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Platform/virtualenv.py b/src/engine/SCons/Platform/virtualenv.py
index 9fb3e45..3416b41 100644
--- a/src/engine/SCons/Platform/virtualenv.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/virtualenv.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/src/engine/SCons/Platform/virtualenvTests.py b/src/engine/SCons/Platform/virtualenvTests.py
index 891fdb3..4fec748 100644
--- a/src/engine/SCons/Platform/virtualenvTests.py
+++ b/src/engine/SCons/Platform/virtualenvTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Platform/virtualenvTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Platform/virtualenvTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Platform/win32.py b/src/engine/SCons/Platform/win32.py
index ea567a2..b386afa 100644
--- a/src/engine/SCons/Platform/win32.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Platform/win32.xml b/src/engine/SCons/Platform/win32.xml
index cc87470..c15b23b 100644
--- a/src/engine/SCons/Platform/win32.xml
+++ b/src/engine/SCons/Platform/win32.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/SConf.py b/src/engine/SCons/SConf.py
index 7409c50..e714636 100644
--- a/src/engine/SCons/SConf.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/SConf.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/SConfTests.py b/src/engine/SCons/SConfTests.py
index bfa4871..a05eec4 100644
--- a/src/engine/SCons/SConfTests.py
+++ b/src/engine/SCons/SConfTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/SConfTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/SConfTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
@@ -56,6 +56,18 @@ class SConfTestCase(unittest.TestCase):
os.chdir(self.save_cwd)
def _resetSConfState(self):
+ if sys.platform in ['cygwin', 'win32'] and sys.version_info.major == 2:
+ # On Windows with Python2, SCons.Platform.win32 redefines the
+ # built-in file() and open() functions to disable handle
+ # inheritance. Because we are unloading all SCons modules other
+ # than SCons.Compat, SCons.Platform.win32 will lose the variables
+ # it needs. As a result, we should reset the file() and open()
+ # functions to their original built-in versions.
+ import __builtin__
+ import SCons.Platform.win32
+ __builtin__.file = SCons.Platform.win32._builtin_file
+ __builtin__.open = SCons.Platform.win32._builtin_open
+
# Ok, this is tricky, and i do not know, if everything is sane.
# We try to reset scons' state (including all global variables)
import SCons.SConsign
@@ -90,22 +102,6 @@ class SConfTestCase(unittest.TestCase):
global existing_lib
existing_lib = 'm'
- if sys.platform in ['cygwin', 'win32']:
- # On Windows, SCons.Platform.win32 redefines the builtin
- # file() and open() functions to close the file handles.
- # This interferes with the unittest.py infrastructure in
- # some way. Just sidestep the issue by restoring the
- # original builtin functions whenever we have to reset
- # all of our global state.
-
- import SCons.Platform.win32
-
- try:
- file = SCons.Platform.win32._builtin_file
- open = SCons.Platform.win32._builtin_open
- except AttributeError:
- pass
-
def _baseTryXXX(self, TryFunc):
# TryCompile and TryLink are much the same, so we can test them
# in one method, we pass the function as a string ('TryCompile',
diff --git a/src/engine/SCons/SConsign.py b/src/engine/SCons/SConsign.py
index e003933..24bfd21 100644
--- a/src/engine/SCons/SConsign.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/SConsign.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/SConsignTests.py b/src/engine/SCons/SConsignTests.py
index 1ae1f47..fbac8a4 100644
--- a/src/engine/SCons/SConsignTests.py
+++ b/src/engine/SCons/SConsignTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/SConsignTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/SConsignTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/src/engine/SCons/Scanner/C.py b/src/engine/SCons/Scanner/C.py
index 206de5f..32e0499 100644
--- a/src/engine/SCons/Scanner/C.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Scanner/CTests.py b/src/engine/SCons/Scanner/CTests.py
index 8e1e3b3..ff27e22 100644
--- a/src/engine/SCons/Scanner/CTests.py
+++ b/src/engine/SCons/Scanner/CTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/CTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/CTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Scanner/D.py b/src/engine/SCons/Scanner/D.py
index 1ad9e89..427c596 100644
--- a/src/engine/SCons/Scanner/D.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/D.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Scanner
diff --git a/src/engine/SCons/Scanner/DTests.py b/src/engine/SCons/Scanner/DTests.py
index f115eb0..8f79920 100644
--- a/src/engine/SCons/Scanner/DTests.py
+++ b/src/engine/SCons/Scanner/DTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/DTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/DTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import unittest
diff --git a/src/engine/SCons/Scanner/Dir.py b/src/engine/SCons/Scanner/Dir.py
index be8ae6c..c3e825c 100644
--- a/src/engine/SCons/Scanner/Dir.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Scanner/DirTests.py b/src/engine/SCons/Scanner/DirTests.py
index 71e527f..49f2518 100644
--- a/src/engine/SCons/Scanner/DirTests.py
+++ b/src/engine/SCons/Scanner/DirTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/DirTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/DirTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/src/engine/SCons/Scanner/Fortran.py b/src/engine/SCons/Scanner/Fortran.py
index d315bc9..93be76c 100644
--- a/src/engine/SCons/Scanner/Fortran.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/Fortran.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/src/engine/SCons/Scanner/FortranTests.py b/src/engine/SCons/Scanner/FortranTests.py
index 5bf4be6..42c399b 100644
--- a/src/engine/SCons/Scanner/FortranTests.py
+++ b/src/engine/SCons/Scanner/FortranTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/FortranTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/FortranTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Scanner/IDL.py b/src/engine/SCons/Scanner/IDL.py
index 88226e6..6569c1f 100644
--- a/src/engine/SCons/Scanner/IDL.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Scanner/IDLTests.py b/src/engine/SCons/Scanner/IDLTests.py
index 9bc4e5a..68a29c6 100644
--- a/src/engine/SCons/Scanner/IDLTests.py
+++ b/src/engine/SCons/Scanner/IDLTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/IDLTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/IDLTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import unittest
import sys
diff --git a/src/engine/SCons/Scanner/LaTeX.py b/src/engine/SCons/Scanner/LaTeX.py
index 8afe5b0..4e43eaa 100644
--- a/src/engine/SCons/Scanner/LaTeX.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/LaTeX.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/src/engine/SCons/Scanner/LaTeXTests.py b/src/engine/SCons/Scanner/LaTeXTests.py
index 8750000..9c2bfbb 100644
--- a/src/engine/SCons/Scanner/LaTeXTests.py
+++ b/src/engine/SCons/Scanner/LaTeXTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/LaTeXTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/LaTeXTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Scanner/Prog.py b/src/engine/SCons/Scanner/Prog.py
index 2ae3c68..5f9015d 100644
--- a/src/engine/SCons/Scanner/Prog.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Scanner/ProgTests.py b/src/engine/SCons/Scanner/ProgTests.py
index 7dae37c..fc6b1ff 100644
--- a/src/engine/SCons/Scanner/ProgTests.py
+++ b/src/engine/SCons/Scanner/ProgTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/ProgTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/ProgTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/src/engine/SCons/Scanner/RC.py b/src/engine/SCons/Scanner/RC.py
index 4f0cee2..47c6ca2 100644
--- a/src/engine/SCons/Scanner/RC.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/RC.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/src/engine/SCons/Scanner/RCTests.py b/src/engine/SCons/Scanner/RCTests.py
index 2915985..f2c74a3 100644
--- a/src/engine/SCons/Scanner/RCTests.py
+++ b/src/engine/SCons/Scanner/RCTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Scanner/RCTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/RCTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import unittest
import sys
diff --git a/src/engine/SCons/Scanner/SWIG.py b/src/engine/SCons/Scanner/SWIG.py
index 5f2a3e3..7ff78a6 100644
--- a/src/engine/SCons/Scanner/SWIG.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/SWIG.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Scanner
diff --git a/src/engine/SCons/Scanner/ScannerTests.py b/src/engine/SCons/Scanner/ScannerTests.py
index 64842d4..3649120 100644
--- a/src/engine/SCons/Scanner/ScannerTests.py
+++ b/src/engine/SCons/Scanner/ScannerTests.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/ScannerTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/ScannerTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Scanner/__init__.py b/src/engine/SCons/Scanner/__init__.py
index feff12a..9884533 100644
--- a/src/engine/SCons/Scanner/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Scanner/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/src/engine/SCons/Scanner/__init__.xml b/src/engine/SCons/Scanner/__init__.xml
index 436d806..1043234 100644
--- a/src/engine/SCons/Scanner/__init__.xml
+++ b/src/engine/SCons/Scanner/__init__.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Script/Interactive.py b/src/engine/SCons/Script/Interactive.py
index 3d70728..b2c134c 100644
--- a/src/engine/SCons/Script/Interactive.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Script/Interactive.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
SCons interactive mode
diff --git a/src/engine/SCons/Script/Main.py b/src/engine/SCons/Script/Main.py
index 878f824..5b7406c 100644
--- a/src/engine/SCons/Script/Main.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Script/Main.xml b/src/engine/SCons/Script/Main.xml
index c1c4bde..9966244 100644
--- a/src/engine/SCons/Script/Main.xml
+++ b/src/engine/SCons/Script/Main.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -33,11 +33,11 @@ See its __doc__ string for a discussion of the format.
This function adds a new command-line option to be recognized.
The specified
<varname>arguments</varname>
-are the same as supported by the standard Python
-<function>optparse.add_option</function>()
-method (with a few additional capabilities noted below);
+are the same as supported by the <function>add_option</function>
+method in the standard Python library module <emphasis>optparse</emphasis>,
+with a few additional capabilities noted below;
see the documentation for
-<literal>optparse</literal>
+<emphasis>optparse</emphasis>
for a thorough discussion of its option-processing capabities.
</para>
@@ -78,12 +78,22 @@ the option will have a default value of
</para>
<para>
+Unlike regular <emphasis>optparse</emphasis>, option names
+added via <function>AddOption</function> 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 &f-AddOption; call.
+</para>
+
+<para>
Once a new command-line option has been added with
&f-AddOption;,
the option value may be accessed using
&f-GetOption;
or
<function>env.GetOption</function>().
+<!--
The value may also be set, using
&f-SetOption;
or
@@ -95,6 +105,9 @@ Note, however, that a
value specified on the command line will
<emphasis>always</emphasis>
override a value set by any SConscript file.
+-->
+&f-SetOption; is not currently supported for
+options added with &f-AddOption;.
</para>
<para>
@@ -133,6 +146,22 @@ AddOption('--prefix',
help='installation prefix')
env = Environment(PREFIX = GetOption('prefix'))
</example_commands>
+
+<note>
+<para>
+While &AddOption; behaves like
+<function>add_option</function>,
+from the <emphasis>optparse</emphasis> module,
+the behavior of options added by &AddOption;
+which take arguments is underfined in
+<command>scons</command> if whitespace
+(rather than an <literal>=</literal> sign) is used as
+the separator on the command line when
+the option is invoked.
+Such usage should be avoided.
+</para>
+</note>
+
</summary>
</scons_function>
diff --git a/src/engine/SCons/Script/MainTests.py b/src/engine/SCons/Script/MainTests.py
index 752ea0a..188700a 100644
--- a/src/engine/SCons/Script/MainTests.py
+++ b/src/engine/SCons/Script/MainTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Script/MainTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Script/MainTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import unittest
diff --git a/src/engine/SCons/Script/SConsOptions.py b/src/engine/SCons/Script/SConsOptions.py
index 5651c96..e7a3fc1 100644
--- a/src/engine/SCons/Script/SConsOptions.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Script/SConscript.py b/src/engine/SCons/Script/SConscript.py
index 9687c29..97073ba 100644
--- a/src/engine/SCons/Script/SConscript.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Script/SConscript.xml b/src/engine/SCons/Script/SConscript.xml
index 2d77aa3..5b5e482 100644
--- a/src/engine/SCons/Script/SConscript.xml
+++ b/src/engine/SCons/Script/SConscript.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Script/SConscriptTests.py b/src/engine/SCons/Script/SConscriptTests.py
index c1232e8..8b17ed4 100644
--- a/src/engine/SCons/Script/SConscriptTests.py
+++ b/src/engine/SCons/Script/SConscriptTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Script/SConscriptTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Script/SConscriptTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Script.SConscript
diff --git a/src/engine/SCons/Script/__init__.py b/src/engine/SCons/Script/__init__.py
index cf2e472..5292c10 100644
--- a/src/engine/SCons/Script/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Subst.py b/src/engine/SCons/Subst.py
index 1e0d423..23030f4 100644
--- a/src/engine/SCons/Subst.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Subst.xml b/src/engine/SCons/Subst.xml
index 858ff40..d69ea38 100644
--- a/src/engine/SCons/Subst.xml
+++ b/src/engine/SCons/Subst.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/SubstTests.py b/src/engine/SCons/SubstTests.py
index 49a9a2f..5dcdea4 100644
--- a/src/engine/SCons/SubstTests.py
+++ b/src/engine/SCons/SubstTests.py
@@ -22,7 +22,7 @@
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/SubstTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/SubstTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Taskmaster.py b/src/engine/SCons/Taskmaster.py
index 29e48ac..60d2ac3 100644
--- a/src/engine/SCons/Taskmaster.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/TaskmasterTests.py b/src/engine/SCons/TaskmasterTests.py
index 218870e..fc6e5fc 100644
--- a/src/engine/SCons/TaskmasterTests.py
+++ b/src/engine/SCons/TaskmasterTests.py
@@ -22,7 +22,7 @@
#
from __future__ import division
-__revision__ = "src/engine/SCons/TaskmasterTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/TaskmasterTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Tool/386asm.py b/src/engine/SCons/Tool/386asm.py
index 1121c3d..d398f07 100644
--- a/src/engine/SCons/Tool/386asm.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/386asm.xml b/src/engine/SCons/Tool/386asm.xml
index fe819d2..8ad9fa9 100644
--- a/src/engine/SCons/Tool/386asm.xml
+++ b/src/engine/SCons/Tool/386asm.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/DCommon.py b/src/engine/SCons/Tool/DCommon.py
index f6b6000..0e0cf09 100644
--- a/src/engine/SCons/Tool/DCommon.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/DCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/DCommon.xml b/src/engine/SCons/Tool/DCommon.xml
index 5103ca1..63e6c45 100644
--- a/src/engine/SCons/Tool/DCommon.xml
+++ b/src/engine/SCons/Tool/DCommon.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -23,49 +23,339 @@ See its __doc__ string for a discussion of the format.
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.scons.org/dbxsd/v1.0/scons.xsd">
+<cvar name="DC">
+<summary>
+<para>
+The D compiler to use.
+</para>
+</summary>
+</cvar>
+<cvar name="DCOM">
+<summary>
+<para>
+The command line used to compile a D file to an object file.
+Any options specified in the &cv-link-DFLAGS; construction variable
+is included on this command line.
+</para>
+</summary>
+</cvar>
+<cvar name="DDEBUG">
+<summary>
+<para>
+List of debug tags to enable when compiling.
+</para>
+</summary>
+</cvar>
+<cvar name="DDEBUGPREFIX">
+<summary>
+<para>
+DDEBUGPREFIX.
+</para>
+</summary>
+</cvar>
- <cvar name="DRPATHPREFIX">
- <summary>
- <para>
- DRPATHPREFIX.
- </para>
- </summary>
- </cvar>
-
- <cvar name="DRPATHSUFFIX">
- <summary>
- <para>
- DRPATHSUFFIX.
- </para>
- </summary>
- </cvar>
-
-
- <cvar name="DShLibSonameGenerator">
- <summary>
- <para>
- DShLibSonameGenerator.
- </para>
- </summary>
- </cvar>
-
- <cvar name="SHDLIBVERSION">
- <summary>
- <para>
- SHDLIBVERSION.
- </para>
- </summary>
- </cvar>
- <cvar name="SHDLIBVERSIONFLAGS">
- <summary>
- <para>
- SHDLIBVERSIONFLAGS.
- </para>
- </summary>
- </cvar>
+<cvar name="DDEBUGSUFFIX">
+<summary>
+<para>
+DDEBUGSUFFIX.
+</para>
+</summary>
+</cvar>
+<cvar name="DFILESUFFIX">
+<summary>
+<para>
+DFILESUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DFLAGPREFIX">
+<summary>
+<para>
+DFLAGPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DFLAGS">
+<summary>
+<para>
+General options that are passed to the D compiler.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DFLAGSUFFIX">
+<summary>
+<para>
+DFLAGSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DINCSUFFIX">
+<summary>
+<para>
+DLIBFLAGSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DINCPREFIX">
+<summary>
+<para>
+DINCPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIB">
+<summary>
+<para>
+Name of the lib tool to use for D codes.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIBCOM">
+<summary>
+<para>
+The command line to use when creating libraries.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIBDIRPREFIX">
+<summary>
+<para>
+DLIBLINKPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIBDIRSUFFIX">
+<summary>
+<para>
+DLIBLINKSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIBFLAGSUFFIX">
+<summary>
+<para>
+DLIBFLAGSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIBFLAGPREFIX">
+<summary>
+<para>
+DLIBFLAGPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIBLINKPREFIX">
+<summary>
+<para>
+DLIBLINKPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLIBLINKSUFFIX">
+<summary>
+<para>
+DLIBLINKSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLINK">
+<summary>
+<para>
+Name of the linker to use for linking systems including D sources.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLINKCOM">
+<summary>
+<para>
+The command line to use when linking systems including D sources.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLINKFLAGS">
+<summary>
+<para>
+List of linker flags.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLINKFLAGSUFFIX">
+<summary>
+<para>
+DLINKFLAGSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DLINKFLAGPREFIX">
+<summary>
+<para>
+DLINKFLAGPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DPATH">
+<summary>
+<para>
+ List of paths to search for import modules.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DRPATHPREFIX">
+<summary>
+<para>
+DRPATHPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DRPATHSUFFIX">
+<summary>
+<para>
+DRPATHSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DShLibSonameGenerator">
+<summary>
+<para>
+DShLibSonameGenerator.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DVERPREFIX">
+<summary>
+<para>
+DVERPREFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DVERSIONS">
+<summary>
+<para>
+List of version tags to enable when compiling.
+</para>
+</summary>
+</cvar>
+
+<cvar name="DVERSUFFIX">
+<summary>
+<para>
+DVERSUFFIX.
+</para>
+</summary>
+</cvar>
+
+<cvar name="SHDC">
+<summary>
+<para>
+The name of the compiler to use when compiling D source
+destined to be in a shared objects.
+</para>
+</summary>
+</cvar>
+
+<cvar name="SHDCOM">
+<summary>
+<para>
+The command line to use when compiling code to be part of shared objects.
+</para>
+</summary>
+</cvar>
+
+<cvar name="SHDLIBVERSION">
+<summary>
+<para>
+SHDLIBVERSION.
+</para>
+</summary>
+</cvar>
+
+<cvar name="SHDLIBVERSIONFLAGS">
+<summary>
+<para>
+SHDLIBVERSIONFLAGS.
+</para>
+</summary>
+</cvar>
+
+<cvar name="SHDLINK">
+<summary>
+<para>
+The linker to use when creating shared objects for code bases
+include D sources.
+</para>
+</summary>
+</cvar>
+
+<cvar name="SHDLINKCOM">
+<summary>
+<para>
+The command line to use when generating shared objects.
+</para>
+</summary>
+</cvar>
+
+<cvar name="SHDLINKFLAGS">
+<summary>
+<para>
+The list of flags to use when generating a shared object.
+</para>
+</summary>
+</cvar>
+
+
+<builder name="ProgramAllAtOnce">
+<summary>
+ <para>
+ Builds an executable from D sources without first creating individual
+ objects for each file.
+ </para>
+ <para>
+ 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 to the D compiler. This builder serves that purpose.
+ </para>
+ <example_commands>
+ env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
+ </example_commands>
+ <para>
+ 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.
+ </para>
+</summary>
+</builder>
</sconsdoc>
diff --git a/src/engine/SCons/Tool/FortranCommon.py b/src/engine/SCons/Tool/FortranCommon.py
index 11f1eb7..af573fa 100644
--- a/src/engine/SCons/Tool/FortranCommon.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/FortranCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
import os.path
diff --git a/src/engine/SCons/Tool/FortranCommonTests.py b/src/engine/SCons/Tool/FortranCommonTests.py
index 9cca9b0..726b4bf 100644
--- a/src/engine/SCons/Tool/FortranCommonTests.py
+++ b/src/engine/SCons/Tool/FortranCommonTests.py
@@ -22,7 +22,7 @@
#
# from typing import Dict, Any
-__revision__ = "src/engine/SCons/Tool/FortranCommonTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/FortranCommonTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/GettextCommon.py b/src/engine/SCons/Tool/GettextCommon.py
index 79912b6..f03c256 100644
--- a/src/engine/SCons/Tool/GettextCommon.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/GettextCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Warnings
import re
diff --git a/src/engine/SCons/Tool/JavaCommon.py b/src/engine/SCons/Tool/JavaCommon.py
index 1e58af6..f9e3684 100644
--- a/src/engine/SCons/Tool/JavaCommon.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/JavaCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/JavaCommonTests.py b/src/engine/SCons/Tool/JavaCommonTests.py
index 45a8a0b..ec5bb74 100644
--- a/src/engine/SCons/Tool/JavaCommonTests.py
+++ b/src/engine/SCons/Tool/JavaCommonTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/JavaCommonTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/JavaCommonTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/src/engine/SCons/Tool/MSCommon/__init__.py b/src/engine/SCons/Tool/MSCommon/__init__.py
index e3c4471..c184aad 100644
--- a/src/engine/SCons/Tool/MSCommon/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/MSCommon/arch.py b/src/engine/SCons/Tool/MSCommon/arch.py
index 6312541..75e7264 100644
--- a/src/engine/SCons/Tool/MSCommon/arch.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/MSCommon/common.py b/src/engine/SCons/Tool/MSCommon/common.py
index 8353944..6f979e6 100644
--- a/src/engine/SCons/Tool/MSCommon/common.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/MSCommon/netframework.py b/src/engine/SCons/Tool/MSCommon/netframework.py
index edd9fd9..c2d5d7c 100644
--- a/src/engine/SCons/Tool/MSCommon/netframework.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/netframework.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
"""
diff --git a/src/engine/SCons/Tool/MSCommon/sdk.py b/src/engine/SCons/Tool/MSCommon/sdk.py
index e664a30..811ee24 100644
--- a/src/engine/SCons/Tool/MSCommon/sdk.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/MSCommon/vc.py b/src/engine/SCons/Tool/MSCommon/vc.py
index fa7be96..6d0a7ec 100644
--- a/src/engine/SCons/Tool/MSCommon/vc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/MSCommon/vcTests.py b/src/engine/SCons/Tool/MSCommon/vcTests.py
index 25537f3..336bffc 100644
--- a/src/engine/SCons/Tool/MSCommon/vcTests.py
+++ b/src/engine/SCons/Tool/MSCommon/vcTests.py
@@ -22,7 +22,7 @@
#
# from typing import Dict, Any
-__revision__ = "src/engine/SCons/Tool/MSCommon/vcTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/MSCommon/vcTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/MSCommon/vs.py b/src/engine/SCons/Tool/MSCommon/vs.py
index 731f328..972c4f8 100644
--- a/src/engine/SCons/Tool/MSCommon/vs.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/PharLapCommon.py b/src/engine/SCons/Tool/PharLapCommon.py
index 623f2a8..09751d1 100644
--- a/src/engine/SCons/Tool/PharLapCommon.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/PharLapCommon.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/ToolTests.py b/src/engine/SCons/Tool/ToolTests.py
index 25e9b2d..10cb346 100644
--- a/src/engine/SCons/Tool/ToolTests.py
+++ b/src/engine/SCons/Tool/ToolTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/ToolTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ToolTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/src/engine/SCons/Tool/__init__.py b/src/engine/SCons/Tool/__init__.py
index 271f214..a75693f 100644
--- a/src/engine/SCons/Tool/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/__init__.xml b/src/engine/SCons/Tool/__init__.xml
index 80fd2f6..848ffb1 100644
--- a/src/engine/SCons/Tool/__init__.xml
+++ b/src/engine/SCons/Tool/__init__.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -468,7 +468,7 @@ as C++ files.
Used to override &cv-link-SHLIBVERSION;/&cv-link-LDMODULEVERSION; when
generating versioned import library for a shared library/loadable module. If
undefined, the &cv-link-SHLIBVERSION;/&cv-link-LDMODULEVERSION; is used to
-determine the version of versioned import library.
+determine the version of versioned import library.
</para>
</summary>
</cvar>
@@ -476,7 +476,10 @@ determine the version of versioned import library.
<cvar name="LIBEMITTER">
<summary>
<para>
-TODO
+Contains the emitter specification for the
+&b-link-StaticLibrary; builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
</para>
</summary>
</cvar>
@@ -494,10 +497,24 @@ format as &cv-link-SHLIBVERSION;.
</summary>
</cvar>
+<cvar name="LDMODULEEMITTER">
+<summary>
+<para>
+Contains the emitter specification for the
+&b-link-LoadableModule; builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
+</para>
+</summary>
+</cvar>
+
<cvar name="SHLIBEMITTER">
<summary>
<para>
-TODO
+Contains the emitter specification for the
+&b-link-SharedLibrary; builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
</para>
</summary>
</cvar>
@@ -505,7 +522,10 @@ TODO
<cvar name="PROGEMITTER">
<summary>
<para>
-TODO
+Contains the emitter specification for the
+&b-link-Program; builder.
+The manpage section "Builder Objects" contains
+general information on specifying emitters.
</para>
</summary>
</cvar>
@@ -514,7 +534,7 @@ TODO
<summary>
<para>
When this construction variable is defined, a versioned shared library
-is created by &b-link-SharedLibrary; builder. This activates the
+is created by the &b-link-SharedLibrary; builder. This activates the
&cv-link-_SHLIBVERSIONFLAGS; and thus modifies the &cv-link-SHLINKCOM; as
required, adds the version number to the library name, and creates the symlinks
that are needed. &cv-link-SHLIBVERSION; versions should exist as alpha-numeric,
diff --git a/src/engine/SCons/Tool/aixc++.py b/src/engine/SCons/Tool/aixc++.py
index bafaea4..4a78eda 100644
--- a/src/engine/SCons/Tool/aixc++.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/aixc++.xml b/src/engine/SCons/Tool/aixc++.xml
index 0d50ae9..549675c 100644
--- a/src/engine/SCons/Tool/aixc++.xml
+++ b/src/engine/SCons/Tool/aixc++.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/aixcc.py b/src/engine/SCons/Tool/aixcc.py
index 349a40a..e7bc1ca 100644
--- a/src/engine/SCons/Tool/aixcc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/aixcc.xml b/src/engine/SCons/Tool/aixcc.xml
index aa0e604..254ca68 100644
--- a/src/engine/SCons/Tool/aixcc.xml
+++ b/src/engine/SCons/Tool/aixcc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/aixcxx.py b/src/engine/SCons/Tool/aixcxx.py
index 0830e33..f4ee5fe 100644
--- a/src/engine/SCons/Tool/aixcxx.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixcxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/aixf77.py b/src/engine/SCons/Tool/aixf77.py
index d2c619a..908e8ad 100644
--- a/src/engine/SCons/Tool/aixf77.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixf77.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/aixf77.xml b/src/engine/SCons/Tool/aixf77.xml
index ee4d232..55d82d5 100644
--- a/src/engine/SCons/Tool/aixf77.xml
+++ b/src/engine/SCons/Tool/aixf77.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/aixlink.py b/src/engine/SCons/Tool/aixlink.py
index ea2949f..67d65e8 100644
--- a/src/engine/SCons/Tool/aixlink.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/aixlink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/aixlink.xml b/src/engine/SCons/Tool/aixlink.xml
index 0f7fc62..95d93ae 100644
--- a/src/engine/SCons/Tool/aixlink.xml
+++ b/src/engine/SCons/Tool/aixlink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/applelink.py b/src/engine/SCons/Tool/applelink.py
index 011b29d..f432d61 100644
--- a/src/engine/SCons/Tool/applelink.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/applelink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/applelink.xml b/src/engine/SCons/Tool/applelink.xml
index c7209fa..f0e467a 100644
--- a/src/engine/SCons/Tool/applelink.xml
+++ b/src/engine/SCons/Tool/applelink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/ar.py b/src/engine/SCons/Tool/ar.py
index 459fb55..3d8cc8a 100644
--- a/src/engine/SCons/Tool/ar.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/ar.xml b/src/engine/SCons/Tool/ar.xml
index 573c80b..02549a6 100644
--- a/src/engine/SCons/Tool/ar.xml
+++ b/src/engine/SCons/Tool/ar.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/as.py b/src/engine/SCons/Tool/as.py
index 02139c5..3986a44 100644
--- a/src/engine/SCons/Tool/as.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/as.xml b/src/engine/SCons/Tool/as.xml
index c2d1814..49894c4 100644
--- a/src/engine/SCons/Tool/as.xml
+++ b/src/engine/SCons/Tool/as.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/bcc32.py b/src/engine/SCons/Tool/bcc32.py
index e8ffbbf..7e0b47f 100644
--- a/src/engine/SCons/Tool/bcc32.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/bcc32.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/bcc32.xml b/src/engine/SCons/Tool/bcc32.xml
index b2d8394..25ea147 100644
--- a/src/engine/SCons/Tool/bcc32.xml
+++ b/src/engine/SCons/Tool/bcc32.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/c++.py b/src/engine/SCons/Tool/c++.py
index 8819f82..00aee5d 100644
--- a/src/engine/SCons/Tool/c++.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/c++.xml b/src/engine/SCons/Tool/c++.xml
index c10438a..a550f6a 100644
--- a/src/engine/SCons/Tool/c++.xml
+++ b/src/engine/SCons/Tool/c++.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/cc.py b/src/engine/SCons/Tool/cc.py
index 698d725..ffcb6e8 100644
--- a/src/engine/SCons/Tool/cc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/cc.xml b/src/engine/SCons/Tool/cc.xml
index 735f700..90adbcf 100644
--- a/src/engine/SCons/Tool/cc.xml
+++ b/src/engine/SCons/Tool/cc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -26,7 +26,7 @@ See its __doc__ string for a discussion of the format.
<tool name="cc">
<summary>
<para>
-Sets construction variables for generic POSIX C copmilers.
+Sets construction variables for generic POSIX C compilers.
</para>
</summary>
<sets>
diff --git a/src/engine/SCons/Tool/clang.py b/src/engine/SCons/Tool/clang.py
index f48afbf..35347b4 100644
--- a/src/engine/SCons/Tool/clang.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/clang.xml b/src/engine/SCons/Tool/clang.xml
index a546946..ece6aa1 100644
--- a/src/engine/SCons/Tool/clang.xml
+++ b/src/engine/SCons/Tool/clang.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/clangxx.py b/src/engine/SCons/Tool/clangxx.py
index d88874e..9292c21 100644
--- a/src/engine/SCons/Tool/clangxx.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/clangxx.xml b/src/engine/SCons/Tool/clangxx.xml
index 7372389..5359484 100644
--- a/src/engine/SCons/Tool/clangxx.xml
+++ b/src/engine/SCons/Tool/clangxx.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/cvf.py b/src/engine/SCons/Tool/cvf.py
index aa24d69..60d5a3d 100644
--- a/src/engine/SCons/Tool/cvf.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/cvf.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import fortran
diff --git a/src/engine/SCons/Tool/cvf.xml b/src/engine/SCons/Tool/cvf.xml
index b56c23c..2dad3d2 100644
--- a/src/engine/SCons/Tool/cvf.xml
+++ b/src/engine/SCons/Tool/cvf.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/cxx.py b/src/engine/SCons/Tool/cxx.py
index 2ac278e..aced177 100644
--- a/src/engine/SCons/Tool/cxx.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/cxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/cyglink.xml b/src/engine/SCons/Tool/cyglink.xml
index a0aefac..7b9676f 100644
--- a/src/engine/SCons/Tool/cyglink.xml
+++ b/src/engine/SCons/Tool/cyglink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/default.py b/src/engine/SCons/Tool/default.py
index 866b823..355538f 100644
--- a/src/engine/SCons/Tool/default.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/default.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool
diff --git a/src/engine/SCons/Tool/default.xml b/src/engine/SCons/Tool/default.xml
index 8e1ed21..0d8f460 100644
--- a/src/engine/SCons/Tool/default.xml
+++ b/src/engine/SCons/Tool/default.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -26,10 +26,91 @@ See its __doc__ string for a discussion of the format.
<tool name="default">
<summary>
<para>
-Sets variables by calling a default list of Tool modules
-for the platform on which SCons is running.
+Sets &consvars; for a default list of Tool modules.
+Use <emphasis role="bold">default</emphasis>
+in the tools list to retain the original defaults,
+since the <parameter>tools</parameter> parameter
+is treated as a literal statement of the tools
+to be made available in that &consenv;, not an addition.
</para>
+
+<para>
+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 <envar>TOOLS</envar> &consvar;
+in the &consenv;.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+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 'ar'.
+It also selects all found from the list
+m4, rpm.
+</para>
+
+<para>
+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.
+</para>
+
+<para>
+On MacOS systems, the default tools list selects
+(first-found): a C compiler from
+gcc, cc;
+a C++ compiler from
+g++, cxx;
+an assembler 'as';
+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.
+</para>
+
+<para>
+Default lists for other platforms can be found by
+examining the &scons;
+source code (see
+<filename>SCons/Tool/__init__.py</filename>).
+</para>
+
</summary>
</tool>
-
</sconsdoc>
diff --git a/src/engine/SCons/Tool/dmd.py b/src/engine/SCons/Tool/dmd.py
index befcd22..74c8673 100644
--- a/src/engine/SCons/Tool/dmd.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/dmd.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import subprocess
diff --git a/src/engine/SCons/Tool/dmd.xml b/src/engine/SCons/Tool/dmd.xml
index 5149503..f7cc69d 100644
--- a/src/engine/SCons/Tool/dmd.xml
+++ b/src/engine/SCons/Tool/dmd.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -73,299 +73,4 @@ Sets construction variables for D language compiler DMD.
</uses>
</tool>
-<cvar name="DC">
-<summary>
-<para>
-The D compiler to use.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DCOM">
-<summary>
-<para>
- The command line used to compile a D file to an object file.
- Any options specified in the &cv-link-DFLAGS; construction variable
- is included on this command line.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DDEBUG">
-<summary>
-<para>
- List of debug tags to enable when compiling.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DFLAGS">
-<summary>
-<para>
- General options that are passed to the D compiler.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLIB">
-<summary>
-<para>
- Name of the lib tool to use for D codes.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLIBCOM">
-<summary>
-<para>
- The command line to use when creating libraries.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINK">
-<summary>
-<para>
- Name of the linker to use for linking systems including D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINKCOM">
-<summary>
-<para>
- The command line to use when linking systems including D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINKFLAGS">
-<summary>
-<para>
-List of linker flags.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DPATH">
-<summary>
-<para>
- List of paths to search for import modules.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DVERSIONS">
-<summary>
-<para>
- List of version tags to enable when compiling.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDC">
-<summary>
-<para>
- The name of the compiler to use when compiling D source
- destined to be in a shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDCOM">
-<summary>
-<para>
- The command line to use when compiling code to be part of shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINK">
-<summary>
-<para>
- The linker to use when creating shared objects for code bases
- include D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINKCOM">
-<summary>
-<para>
- The command line to use when generating shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINKFLAGS">
-<summary>
-<para>
- The list of flags to use when generating a shared object.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DVERSUFFIX">
- <summary>
- <para>
- DVERSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DVERPREFIX">
- <summary>
- <para>
- DVERPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLINKFLAGSUFFIX">
- <summary>
- <para>
- DLINKFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLINKFLAGPREFIX">
- <summary>
- <para>
- DLINKFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBLINKSUFFIX">
- <summary>
- <para>
- DLIBLINKSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBLINKPREFIX">
- <summary>
- <para>
- DLIBLINKPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBFLAGSUFFIX">
- <summary>
- <para>
- DLIBFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBFLAGPREFIX">
- <summary>
- <para>
- DLIBFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBDIRSUFFIX">
- <summary>
- <para>
- DLIBLINKSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBDIRPREFIX">
- <summary>
- <para>
- DLIBLINKPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DINCSUFFIX">
- <summary>
- <para>
- DLIBFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-
-<cvar name="DINCPREFIX">
- <summary>
- <para>
- DINCPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFLAGSUFFIX">
- <summary>
- <para>
- DFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFLAGPREFIX">
- <summary>
- <para>
- DFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFILESUFFIX">
- <summary>
- <para>
- DFILESUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DDEBUGPREFIX">
- <summary>
- <para>
- DDEBUGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DDEBUGSUFFIX">
- <summary>
- <para>
- DDEBUGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<builder name="ProgramAllAtOnce">
- <summary>
- <para>
- Builds an executable from D sources without first creating individual
- objects for each file.
- </para>
- <para>
- 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.
- </para>
- <example_commands>
- env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
- </example_commands>
- <para>
- 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.
- </para>
- </summary>
-</builder>
-
</sconsdoc>
diff --git a/src/engine/SCons/Tool/docbook/__init__.xml b/src/engine/SCons/Tool/docbook/__init__.xml
index 3110649..cbac169 100644
--- a/src/engine/SCons/Tool/docbook/__init__.xml
+++ b/src/engine/SCons/Tool/docbook/__init__.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/dvi.py b/src/engine/SCons/Tool/dvi.py
index 5cd85ed..1a7f7af 100644
--- a/src/engine/SCons/Tool/dvi.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/dvi.xml b/src/engine/SCons/Tool/dvi.xml
index 82ff01b..b5bfac9 100644
--- a/src/engine/SCons/Tool/dvi.xml
+++ b/src/engine/SCons/Tool/dvi.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/dvipdf.py b/src/engine/SCons/Tool/dvipdf.py
index 32f57e6..6012e5b 100644
--- a/src/engine/SCons/Tool/dvipdf.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/dvipdf.xml b/src/engine/SCons/Tool/dvipdf.xml
index 683ca72..f43af93 100644
--- a/src/engine/SCons/Tool/dvipdf.xml
+++ b/src/engine/SCons/Tool/dvipdf.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/dvips.py b/src/engine/SCons/Tool/dvips.py
index 988ecd3..9fce42c 100644
--- a/src/engine/SCons/Tool/dvips.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/dvips.xml b/src/engine/SCons/Tool/dvips.xml
index 9838db1..2dc91ba 100644
--- a/src/engine/SCons/Tool/dvips.xml
+++ b/src/engine/SCons/Tool/dvips.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/f03.py b/src/engine/SCons/Tool/f03.py
index 541ec88..77a37b9 100644
--- a/src/engine/SCons/Tool/f03.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/f03.xml b/src/engine/SCons/Tool/f03.xml
index af9da30..aed1584 100644
--- a/src/engine/SCons/Tool/f03.xml
+++ b/src/engine/SCons/Tool/f03.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/f08.py b/src/engine/SCons/Tool/f08.py
index 5dc49da..e7318b9 100644
--- a/src/engine/SCons/Tool/f08.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/f08.xml b/src/engine/SCons/Tool/f08.xml
index 4c07890..00b8c11 100644
--- a/src/engine/SCons/Tool/f08.xml
+++ b/src/engine/SCons/Tool/f08.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/f77.py b/src/engine/SCons/Tool/f77.py
index 6d60edf..0777822 100644
--- a/src/engine/SCons/Tool/f77.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/f77.xml b/src/engine/SCons/Tool/f77.xml
index 7ce1159..4b76d02 100644
--- a/src/engine/SCons/Tool/f77.xml
+++ b/src/engine/SCons/Tool/f77.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/f90.py b/src/engine/SCons/Tool/f90.py
index e0b5fae..6a370bd 100644
--- a/src/engine/SCons/Tool/f90.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/f90.xml b/src/engine/SCons/Tool/f90.xml
index f8c1854..0de4b7d 100644
--- a/src/engine/SCons/Tool/f90.xml
+++ b/src/engine/SCons/Tool/f90.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/f95.py b/src/engine/SCons/Tool/f95.py
index 9a1afdf..fca7d62 100644
--- a/src/engine/SCons/Tool/f95.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/f95.xml b/src/engine/SCons/Tool/f95.xml
index a575ad0..186da78 100644
--- a/src/engine/SCons/Tool/f95.xml
+++ b/src/engine/SCons/Tool/f95.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/filesystem.py b/src/engine/SCons/Tool/filesystem.py
index a625714..ea16abf 100644
--- a/src/engine/SCons/Tool/filesystem.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/fortran.py b/src/engine/SCons/Tool/fortran.py
index 1b09880..7b332c9 100644
--- a/src/engine/SCons/Tool/fortran.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/fortran.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import re
diff --git a/src/engine/SCons/Tool/fortran.xml b/src/engine/SCons/Tool/fortran.xml
index 0fde8f1..1390bc5 100644
--- a/src/engine/SCons/Tool/fortran.xml
+++ b/src/engine/SCons/Tool/fortran.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/g++.py b/src/engine/SCons/Tool/g++.py
index 8cf881f..eace13c 100644
--- a/src/engine/SCons/Tool/g++.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/g++.xml b/src/engine/SCons/Tool/g++.xml
index f997540..787ee86 100644
--- a/src/engine/SCons/Tool/g++.xml
+++ b/src/engine/SCons/Tool/g++.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/g77.py b/src/engine/SCons/Tool/g77.py
index fc0bcba..f3f935d 100644
--- a/src/engine/SCons/Tool/g77.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/g77.xml b/src/engine/SCons/Tool/g77.xml
index 519dfaf..f639ed2 100644
--- a/src/engine/SCons/Tool/g77.xml
+++ b/src/engine/SCons/Tool/g77.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/gas.py b/src/engine/SCons/Tool/gas.py
index c104e34..9b60201 100644
--- a/src/engine/SCons/Tool/gas.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/gas.xml b/src/engine/SCons/Tool/gas.xml
index 9cfe0de..e017e1c 100644
--- a/src/engine/SCons/Tool/gas.xml
+++ b/src/engine/SCons/Tool/gas.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/gcc.py b/src/engine/SCons/Tool/gcc.py
index 2532427..65b9f57 100644
--- a/src/engine/SCons/Tool/gcc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import cc
import os
diff --git a/src/engine/SCons/Tool/gcc.xml b/src/engine/SCons/Tool/gcc.xml
index 8c29e9d..882bfdc 100644
--- a/src/engine/SCons/Tool/gcc.xml
+++ b/src/engine/SCons/Tool/gcc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/gdc.py b/src/engine/SCons/Tool/gdc.py
index 46a910c..4c392e8 100644
--- a/src/engine/SCons/Tool/gdc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/gdc.xml b/src/engine/SCons/Tool/gdc.xml
index ea31215..1c18fdb 100644
--- a/src/engine/SCons/Tool/gdc.xml
+++ b/src/engine/SCons/Tool/gdc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -73,299 +73,4 @@ Sets construction variables for the D language compiler GDC.
</uses>
</tool>
-<cvar name="DC">
-<summary>
-<para>
-The D compiler to use.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DCOM">
-<summary>
-<para>
- The command line used to compile a D file to an object file.
- Any options specified in the &cv-link-DFLAGS; construction variable
- is included on this command line.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DDEBUG">
-<summary>
-<para>
- List of debug tags to enable when compiling.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DFLAGS">
-<summary>
-<para>
- General options that are passed to the D compiler.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLIB">
-<summary>
-<para>
- Name of the lib tool to use for D codes.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLIBCOM">
-<summary>
-<para>
- The command line to use when creating libraries.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINK">
-<summary>
-<para>
- Name of the linker to use for linking systems including D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINKCOM">
-<summary>
-<para>
- The command line to use when linking systems including D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINKFLAGS">
-<summary>
-<para>
-List of linker flags.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DPATH">
-<summary>
-<para>
- List of paths to search for import modules.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DVERSIONS">
-<summary>
-<para>
- List of version tags to enable when compiling.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDC">
-<summary>
-<para>
- The name of the compiler to use when compiling D source
- destined to be in a shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDCOM">
-<summary>
-<para>
- The command line to use when compiling code to be part of shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINK">
-<summary>
-<para>
- The linker to use when creating shared objects for code bases
- include D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINKCOM">
-<summary>
-<para>
- The command line to use when generating shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINKFLAGS">
-<summary>
-<para>
- The list of flags to use when generating a shared object.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DVERSUFFIX">
- <summary>
- <para>
- DVERSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DVERPREFIX">
- <summary>
- <para>
- DVERPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLINKFLAGSUFFIX">
- <summary>
- <para>
- DLINKFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLINKFLAGPREFIX">
- <summary>
- <para>
- DLINKFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBLINKSUFFIX">
- <summary>
- <para>
- DLIBLINKSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBLINKPREFIX">
- <summary>
- <para>
- DLIBLINKPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBFLAGSUFFIX">
- <summary>
- <para>
- DLIBFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBFLAGPREFIX">
- <summary>
- <para>
- DLIBFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBDIRSUFFIX">
- <summary>
- <para>
- DLIBLINKSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBDIRPREFIX">
- <summary>
- <para>
- DLIBLINKPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DINCSUFFIX">
- <summary>
- <para>
- DLIBFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-
-<cvar name="DINCPREFIX">
- <summary>
- <para>
- DINCPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFLAGSUFFIX">
- <summary>
- <para>
- DFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFLAGPREFIX">
- <summary>
- <para>
- DFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFILESUFFIX">
- <summary>
- <para>
- DFILESUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DDEBUGPREFIX">
- <summary>
- <para>
- DDEBUGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DDEBUGSUFFIX">
- <summary>
- <para>
- DDEBUGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<builder name="ProgramAllAtOnce">
- <summary>
- <para>
- Builds an executable from D sources without first creating individual
- objects for each file.
- </para>
- <para>
- 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.
- </para>
- <example_commands>
- env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
- </example_commands>
- <para>
- 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.
- </para>
- </summary>
-</builder>
-
</sconsdoc>
diff --git a/src/engine/SCons/Tool/gettext.xml b/src/engine/SCons/Tool/gettext.xml
index fc3af69..c79fe4d 100644
--- a/src/engine/SCons/Tool/gettext.xml
+++ b/src/engine/SCons/Tool/gettext.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/gettext_tool.py b/src/engine/SCons/Tool/gettext_tool.py
index 5fc0158..5891e40 100644
--- a/src/engine/SCons/Tool/gettext_tool.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gettext_tool.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
#############################################################################
def generate(env,**kw):
diff --git a/src/engine/SCons/Tool/gfortran.py b/src/engine/SCons/Tool/gfortran.py
index 8d02daa..986ebc6 100644
--- a/src/engine/SCons/Tool/gfortran.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gfortran.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/gfortran.xml b/src/engine/SCons/Tool/gfortran.xml
index 4e78495..20a6bb8 100644
--- a/src/engine/SCons/Tool/gfortran.xml
+++ b/src/engine/SCons/Tool/gfortran.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/gnulink.py b/src/engine/SCons/Tool/gnulink.py
index 53f5081..0715ffc 100644
--- a/src/engine/SCons/Tool/gnulink.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/gnulink.xml b/src/engine/SCons/Tool/gnulink.xml
index 5ef80eb..669ca34 100644
--- a/src/engine/SCons/Tool/gnulink.xml
+++ b/src/engine/SCons/Tool/gnulink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/gs.py b/src/engine/SCons/Tool/gs.py
index 371b810..3e9543f 100644
--- a/src/engine/SCons/Tool/gs.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/gs.xml b/src/engine/SCons/Tool/gs.xml
index 185f1b4..ffaa16c 100644
--- a/src/engine/SCons/Tool/gs.xml
+++ b/src/engine/SCons/Tool/gs.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/gxx.py b/src/engine/SCons/Tool/gxx.py
index d956c9f..2eb678d 100644
--- a/src/engine/SCons/Tool/gxx.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/gxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/src/engine/SCons/Tool/hpc++.py b/src/engine/SCons/Tool/hpc++.py
index 4ec2fe3..ee94e22 100644
--- a/src/engine/SCons/Tool/hpc++.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/hpc++.xml b/src/engine/SCons/Tool/hpc++.xml
index 8bb4a65..7bd251b 100644
--- a/src/engine/SCons/Tool/hpc++.xml
+++ b/src/engine/SCons/Tool/hpc++.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/hpcc.py b/src/engine/SCons/Tool/hpcc.py
index 6a564b9..f118cf3 100644
--- a/src/engine/SCons/Tool/hpcc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/hpcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/hpcc.xml b/src/engine/SCons/Tool/hpcc.xml
index f8bece8..9e58484 100644
--- a/src/engine/SCons/Tool/hpcc.xml
+++ b/src/engine/SCons/Tool/hpcc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/hpcxx.py b/src/engine/SCons/Tool/hpcxx.py
index 8ee888f..e4dcb97 100644
--- a/src/engine/SCons/Tool/hpcxx.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/hpcxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/hplink.py b/src/engine/SCons/Tool/hplink.py
index 1afa95e..9f90071 100644
--- a/src/engine/SCons/Tool/hplink.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/hplink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/hplink.xml b/src/engine/SCons/Tool/hplink.xml
index f2b923b..bfdc3bb 100644
--- a/src/engine/SCons/Tool/hplink.xml
+++ b/src/engine/SCons/Tool/hplink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/icc.py b/src/engine/SCons/Tool/icc.py
index 8110a60..877a212 100644
--- a/src/engine/SCons/Tool/icc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/icc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import cc
diff --git a/src/engine/SCons/Tool/icc.xml b/src/engine/SCons/Tool/icc.xml
index 8492fce..6f88ca8 100644
--- a/src/engine/SCons/Tool/icc.xml
+++ b/src/engine/SCons/Tool/icc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/icl.py b/src/engine/SCons/Tool/icl.py
index 29d5862..be67bdc 100644
--- a/src/engine/SCons/Tool/icl.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/icl.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool.intelc
diff --git a/src/engine/SCons/Tool/icl.xml b/src/engine/SCons/Tool/icl.xml
index 31e0bcc..c6d4c61 100644
--- a/src/engine/SCons/Tool/icl.xml
+++ b/src/engine/SCons/Tool/icl.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/ifl.py b/src/engine/SCons/Tool/ifl.py
index 0eb7cda..2139b9f 100644
--- a/src/engine/SCons/Tool/ifl.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/ifl.xml b/src/engine/SCons/Tool/ifl.xml
index f78c9fd..260a74d 100644
--- a/src/engine/SCons/Tool/ifl.xml
+++ b/src/engine/SCons/Tool/ifl.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/ifort.py b/src/engine/SCons/Tool/ifort.py
index 730e778..a248b3e 100644
--- a/src/engine/SCons/Tool/ifort.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/ifort.xml b/src/engine/SCons/Tool/ifort.xml
index 47a55e3..bb20c2a 100644
--- a/src/engine/SCons/Tool/ifort.xml
+++ b/src/engine/SCons/Tool/ifort.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/ilink.py b/src/engine/SCons/Tool/ilink.py
index 7c69e72..289235c 100644
--- a/src/engine/SCons/Tool/ilink.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/ilink.xml b/src/engine/SCons/Tool/ilink.xml
index 731bdfb..213988c 100644
--- a/src/engine/SCons/Tool/ilink.xml
+++ b/src/engine/SCons/Tool/ilink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/ilink32.py b/src/engine/SCons/Tool/ilink32.py
index a1e12a6..33df790 100644
--- a/src/engine/SCons/Tool/ilink32.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/ilink32.xml b/src/engine/SCons/Tool/ilink32.xml
index 3f273a8..cfcdec3 100644
--- a/src/engine/SCons/Tool/ilink32.xml
+++ b/src/engine/SCons/Tool/ilink32.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/install.py b/src/engine/SCons/Tool/install.py
index c0a8917..f998baa 100644
--- a/src/engine/SCons/Tool/install.py
+++ b/src/engine/SCons/Tool/install.py
@@ -31,7 +31,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/install.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/install.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import re
diff --git a/src/engine/SCons/Tool/install.xml b/src/engine/SCons/Tool/install.xml
index da2d4a0..e126c75 100644
--- a/src/engine/SCons/Tool/install.xml
+++ b/src/engine/SCons/Tool/install.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -52,6 +52,22 @@ a builder.
<example_commands>
env.Install('/usr/local/bin', source = ['foo', 'bar'])
</example_commands>
+
+<para>
+If the <option>--install-sandbox</option> 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.
+</para>
+
+<para>
+See also &FindInstalledFiles;.
+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).
+</para>
+
</summary>
</builder>
diff --git a/src/engine/SCons/Tool/intelc.py b/src/engine/SCons/Tool/intelc.py
index fdd9730..c45c71a 100644
--- a/src/engine/SCons/Tool/intelc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/intelc.xml b/src/engine/SCons/Tool/intelc.xml
index af77186..96a21ca 100644
--- a/src/engine/SCons/Tool/intelc.xml
+++ b/src/engine/SCons/Tool/intelc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/ipkg.py b/src/engine/SCons/Tool/ipkg.py
index 664c3a6..e1fad35 100644
--- a/src/engine/SCons/Tool/ipkg.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ipkg.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/src/engine/SCons/Tool/jar.py b/src/engine/SCons/Tool/jar.py
index 98be08f..f2a328b 100644
--- a/src/engine/SCons/Tool/jar.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/jar.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import SCons.Subst
diff --git a/src/engine/SCons/Tool/jar.xml b/src/engine/SCons/Tool/jar.xml
index 73f6bcb..6961841 100644
--- a/src/engine/SCons/Tool/jar.xml
+++ b/src/engine/SCons/Tool/jar.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/javac.py b/src/engine/SCons/Tool/javac.py
index 387afdb..aeb52ce 100644
--- a/src/engine/SCons/Tool/javac.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/javac.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/javac.xml b/src/engine/SCons/Tool/javac.xml
index dc72f75..f504db3 100644
--- a/src/engine/SCons/Tool/javac.xml
+++ b/src/engine/SCons/Tool/javac.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/javah.py b/src/engine/SCons/Tool/javah.py
index 251778d..b41c742 100644
--- a/src/engine/SCons/Tool/javah.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/javah.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/javah.xml b/src/engine/SCons/Tool/javah.xml
index f72a6cd..16f5e0a 100644
--- a/src/engine/SCons/Tool/javah.xml
+++ b/src/engine/SCons/Tool/javah.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/latex.py b/src/engine/SCons/Tool/latex.py
index 3f1af08..6cfd93a 100644
--- a/src/engine/SCons/Tool/latex.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/latex.xml b/src/engine/SCons/Tool/latex.xml
index b4eb45a..352357a 100644
--- a/src/engine/SCons/Tool/latex.xml
+++ b/src/engine/SCons/Tool/latex.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/ldc.py b/src/engine/SCons/Tool/ldc.py
index dda1a5e..639dd48 100644
--- a/src/engine/SCons/Tool/ldc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/ldc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import subprocess
diff --git a/src/engine/SCons/Tool/ldc.xml b/src/engine/SCons/Tool/ldc.xml
index 691145a..40c9714 100644
--- a/src/engine/SCons/Tool/ldc.xml
+++ b/src/engine/SCons/Tool/ldc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -73,299 +73,4 @@ Sets construction variables for the D language compiler LDC2.
</uses>
</tool>
-<cvar name="DC">
-<summary>
-<para>
-The D compiler to use.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DCOM">
-<summary>
-<para>
- The command line used to compile a D file to an object file.
- Any options specified in the &cv-link-DFLAGS; construction variable
- is included on this command line.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DDEBUG">
-<summary>
-<para>
- List of debug tags to enable when compiling.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DFLAGS">
-<summary>
-<para>
- General options that are passed to the D compiler.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLIB">
-<summary>
-<para>
- Name of the lib tool to use for D codes.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLIBCOM">
-<summary>
-<para>
- The command line to use when creating libraries.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINK">
-<summary>
-<para>
- Name of the linker to use for linking systems including D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINKCOM">
-<summary>
-<para>
- The command line to use when linking systems including D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DLINKFLAGS">
-<summary>
-<para>
-List of linker flags.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DPATH">
-<summary>
-<para>
- List of paths to search for import modules.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DVERSIONS">
-<summary>
-<para>
- List of version tags to enable when compiling.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDC">
-<summary>
-<para>
- The name of the compiler to use when compiling D source
- destined to be in a shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDCOM">
-<summary>
-<para>
- The command line to use when compiling code to be part of shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINK">
-<summary>
-<para>
- The linker to use when creating shared objects for code bases
- include D sources.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINKCOM">
-<summary>
-<para>
- The command line to use when generating shared objects.
-</para>
-</summary>
-</cvar>
-
-<cvar name="SHDLINKFLAGS">
-<summary>
-<para>
- The list of flags to use when generating a shared object.
-</para>
-</summary>
-</cvar>
-
-<cvar name="DVERSUFFIX">
- <summary>
- <para>
- DVERSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DVERPREFIX">
- <summary>
- <para>
- DVERPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLINKFLAGSUFFIX">
- <summary>
- <para>
- DLINKFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLINKFLAGPREFIX">
- <summary>
- <para>
- DLINKFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBLINKSUFFIX">
- <summary>
- <para>
- DLIBLINKSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBLINKPREFIX">
- <summary>
- <para>
- DLIBLINKPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBFLAGSUFFIX">
- <summary>
- <para>
- DLIBFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBFLAGPREFIX">
- <summary>
- <para>
- DLIBFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBDIRSUFFIX">
- <summary>
- <para>
- DLIBLINKSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DLIBDIRPREFIX">
- <summary>
- <para>
- DLIBLINKPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DINCSUFFIX">
- <summary>
- <para>
- DLIBFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-
-<cvar name="DINCPREFIX">
- <summary>
- <para>
- DINCPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFLAGSUFFIX">
- <summary>
- <para>
- DFLAGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFLAGPREFIX">
- <summary>
- <para>
- DFLAGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DFILESUFFIX">
- <summary>
- <para>
- DFILESUFFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DDEBUGPREFIX">
- <summary>
- <para>
- DDEBUGPREFIX.
- </para>
- </summary>
-</cvar>
-
-<cvar name="DDEBUGSUFFIX">
- <summary>
- <para>
- DDEBUGSUFFIX.
- </para>
- </summary>
-</cvar>
-
-<builder name="ProgramAllAtOnce">
- <summary>
- <para>
- Builds an executable from D sources without first creating individual
- objects for each file.
- </para>
- <para>
- 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.
- </para>
- <example_commands>
- env.ProgramAllAtOnce('executable', ['mod_a.d, mod_b.d', 'mod_c.d'])
- </example_commands>
- <para>
- 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.
- </para>
- </summary>
-</builder>
-
</sconsdoc>
diff --git a/src/engine/SCons/Tool/lex.py b/src/engine/SCons/Tool/lex.py
index 4831776..db1ca6d 100644
--- a/src/engine/SCons/Tool/lex.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/lex.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/src/engine/SCons/Tool/lex.xml b/src/engine/SCons/Tool/lex.xml
index 0d044b8..031da84 100644
--- a/src/engine/SCons/Tool/lex.xml
+++ b/src/engine/SCons/Tool/lex.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/link.py b/src/engine/SCons/Tool/link.py
index dcaf91f..c712732 100644
--- a/src/engine/SCons/Tool/link.py
+++ b/src/engine/SCons/Tool/link.py
@@ -32,7 +32,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/link.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/link.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import re
diff --git a/src/engine/SCons/Tool/link.xml b/src/engine/SCons/Tool/link.xml
index a8b6954..1076c62 100644
--- a/src/engine/SCons/Tool/link.xml
+++ b/src/engine/SCons/Tool/link.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -26,7 +26,9 @@ See its __doc__ string for a discussion of the format.
<tool name="link">
<summary>
<para>
-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.
</para>
</summary>
<sets>
diff --git a/src/engine/SCons/Tool/linkloc.py b/src/engine/SCons/Tool/linkloc.py
index 42d010d..508b09a 100644
--- a/src/engine/SCons/Tool/linkloc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/linkloc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/src/engine/SCons/Tool/linkloc.xml b/src/engine/SCons/Tool/linkloc.xml
index 567ed66..8127f1b 100644
--- a/src/engine/SCons/Tool/linkloc.xml
+++ b/src/engine/SCons/Tool/linkloc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/m4.py b/src/engine/SCons/Tool/m4.py
index 0ecc82a..b71f6be 100644
--- a/src/engine/SCons/Tool/m4.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/m4.xml b/src/engine/SCons/Tool/m4.xml
index f7e81e5..cb0cd6d 100644
--- a/src/engine/SCons/Tool/m4.xml
+++ b/src/engine/SCons/Tool/m4.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/masm.py b/src/engine/SCons/Tool/masm.py
index cf147a7..0897714 100644
--- a/src/engine/SCons/Tool/masm.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/masm.xml b/src/engine/SCons/Tool/masm.xml
index 1760252..ede5422 100644
--- a/src/engine/SCons/Tool/masm.xml
+++ b/src/engine/SCons/Tool/masm.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/midl.py b/src/engine/SCons/Tool/midl.py
index f75204a..5ec5974 100644
--- a/src/engine/SCons/Tool/midl.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/midl.xml b/src/engine/SCons/Tool/midl.xml
index 717eb38..73e680a 100644
--- a/src/engine/SCons/Tool/midl.xml
+++ b/src/engine/SCons/Tool/midl.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -86,7 +86,7 @@ The command line used to pass files to the Microsoft IDL compiler.
<summary>
<para>
The string displayed when
-the Microsoft IDL copmiler is called.
+the Microsoft IDL compiler is called.
If this is not set, then &cv-link-MIDLCOM; (the command line) is displayed.
</para>
</summary>
diff --git a/src/engine/SCons/Tool/mingw.py b/src/engine/SCons/Tool/mingw.py
index 8410d2f..3152bf2 100644
--- a/src/engine/SCons/Tool/mingw.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mingw.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/mingw.xml b/src/engine/SCons/Tool/mingw.xml
index b1f028d..4becde2 100644
--- a/src/engine/SCons/Tool/mingw.xml
+++ b/src/engine/SCons/Tool/mingw.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/msgfmt.py b/src/engine/SCons/Tool/msgfmt.py
index c8141a0..1ee45e7 100644
--- a/src/engine/SCons/Tool/msgfmt.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msgfmt.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from SCons.Builder import BuilderBase
#############################################################################
diff --git a/src/engine/SCons/Tool/msgfmt.xml b/src/engine/SCons/Tool/msgfmt.xml
index 67a8e0d..d185933 100644
--- a/src/engine/SCons/Tool/msgfmt.xml
+++ b/src/engine/SCons/Tool/msgfmt.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/msginit.py b/src/engine/SCons/Tool/msginit.py
index 69e803a..8ce9f02 100644
--- a/src/engine/SCons/Tool/msginit.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/msginit.xml b/src/engine/SCons/Tool/msginit.xml
index d09dde1..9251d89 100644
--- a/src/engine/SCons/Tool/msginit.xml
+++ b/src/engine/SCons/Tool/msginit.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/msgmerge.py b/src/engine/SCons/Tool/msgmerge.py
index 4254fa6..748041d 100644
--- a/src/engine/SCons/Tool/msgmerge.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/msgmerge.xml b/src/engine/SCons/Tool/msgmerge.xml
index 2944679..78fa397 100644
--- a/src/engine/SCons/Tool/msgmerge.xml
+++ b/src/engine/SCons/Tool/msgmerge.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/mslib.py b/src/engine/SCons/Tool/mslib.py
index cecdbdc..88b5b1e 100644
--- a/src/engine/SCons/Tool/mslib.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mslib.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/src/engine/SCons/Tool/mslib.xml b/src/engine/SCons/Tool/mslib.xml
index a9b7cef..7ca3a00 100644
--- a/src/engine/SCons/Tool/mslib.xml
+++ b/src/engine/SCons/Tool/mslib.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/mslink.py b/src/engine/SCons/Tool/mslink.py
index 9fbce4b..d995d3b 100644
--- a/src/engine/SCons/Tool/mslink.py
+++ b/src/engine/SCons/Tool/mslink.py
@@ -32,7 +32,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/mslink.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mslink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/mslink.xml b/src/engine/SCons/Tool/mslink.xml
index 692c1da..42dd493 100644
--- a/src/engine/SCons/Tool/mslink.xml
+++ b/src/engine/SCons/Tool/mslink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/mssdk.py b/src/engine/SCons/Tool/mssdk.py
index 7a38c6a..55cb54a 100644
--- a/src/engine/SCons/Tool/mssdk.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mssdk.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
"""engine.SCons.Tool.mssdk
diff --git a/src/engine/SCons/Tool/mssdk.xml b/src/engine/SCons/Tool/mssdk.xml
index b84597e..ef17ae2 100644
--- a/src/engine/SCons/Tool/mssdk.xml
+++ b/src/engine/SCons/Tool/mssdk.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/msvc.py b/src/engine/SCons/Tool/msvc.py
index 052a0b0..0013015 100644
--- a/src/engine/SCons/Tool/msvc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msvc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import os
diff --git a/src/engine/SCons/Tool/msvc.xml b/src/engine/SCons/Tool/msvc.xml
index b8b4f6d..96aa172 100644
--- a/src/engine/SCons/Tool/msvc.xml
+++ b/src/engine/SCons/Tool/msvc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/msvs.py b/src/engine/SCons/Tool/msvs.py
index 38965e3..4a4b390 100644
--- a/src/engine/SCons/Tool/msvs.py
+++ b/src/engine/SCons/Tool/msvs.py
@@ -32,7 +32,7 @@ selection method.
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/msvs.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/msvs.xml b/src/engine/SCons/Tool/msvs.xml
index 9f2353a..26a16c4 100644
--- a/src/engine/SCons/Tool/msvs.xml
+++ b/src/engine/SCons/Tool/msvs.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/msvsTests.py b/src/engine/SCons/Tool/msvsTests.py
index e0b5ced..748631c 100644
--- a/src/engine/SCons/Tool/msvsTests.py
+++ b/src/engine/SCons/Tool/msvsTests.py
@@ -22,7 +22,7 @@
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/msvsTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/msvsTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/src/engine/SCons/Tool/mwcc.py b/src/engine/SCons/Tool/mwcc.py
index b2b2f5b..341a3ef 100644
--- a/src/engine/SCons/Tool/mwcc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mwcc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/mwcc.xml b/src/engine/SCons/Tool/mwcc.xml
index e9f210c..51bc7ad 100644
--- a/src/engine/SCons/Tool/mwcc.xml
+++ b/src/engine/SCons/Tool/mwcc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/mwld.py b/src/engine/SCons/Tool/mwld.py
index 5049c55..5af02a6 100644
--- a/src/engine/SCons/Tool/mwld.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/mwld.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Tool
diff --git a/src/engine/SCons/Tool/mwld.xml b/src/engine/SCons/Tool/mwld.xml
index 261a039..406bc3f 100644
--- a/src/engine/SCons/Tool/mwld.xml
+++ b/src/engine/SCons/Tool/mwld.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/nasm.py b/src/engine/SCons/Tool/nasm.py
index d4d0a1b..f08930e 100644
--- a/src/engine/SCons/Tool/nasm.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/nasm.xml b/src/engine/SCons/Tool/nasm.xml
index 6626411..7715ce9 100644
--- a/src/engine/SCons/Tool/nasm.xml
+++ b/src/engine/SCons/Tool/nasm.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/packaging.xml b/src/engine/SCons/Tool/packaging.xml
index 9b46000..3469070 100644
--- a/src/engine/SCons/Tool/packaging.xml
+++ b/src/engine/SCons/Tool/packaging.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/packaging/__init__.py b/src/engine/SCons/Tool/packaging/__init__.py
index 72b9eef..4b947f9 100644
--- a/src/engine/SCons/Tool/packaging/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/__init__.xml b/src/engine/SCons/Tool/packaging/__init__.xml
index 1643def..662a82a 100644
--- a/src/engine/SCons/Tool/packaging/__init__.xml
+++ b/src/engine/SCons/Tool/packaging/__init__.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
@@ -850,9 +850,9 @@ Examples:
</para>
<example_commands>
-# 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( 'lib.c' ), UNIX_ATTR="0644" )
+Tag( Library( 'lib.c' ), UNIX_ATTR="0o644" )
# marks file2.txt to be a documentation file
Tag( 'file2.txt', DOC )
diff --git a/src/engine/SCons/Tool/packaging/ipk.py b/src/engine/SCons/Tool/packaging/ipk.py
index dbf5be8..8b4d79c 100644
--- a/src/engine/SCons/Tool/packaging/ipk.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/ipk.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/src/engine/SCons/Tool/packaging/msi.py b/src/engine/SCons/Tool/packaging/msi.py
index 4a48b47..1d47268 100644
--- a/src/engine/SCons/Tool/packaging/msi.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/rpm.py b/src/engine/SCons/Tool/packaging/rpm.py
index a948e29..1554d09 100644
--- a/src/engine/SCons/Tool/packaging/rpm.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/packaging/rpm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
diff --git a/src/engine/SCons/Tool/packaging/src_tarbz2.py b/src/engine/SCons/Tool/packaging/src_tarbz2.py
index b628ccd..1889ec9 100644
--- a/src/engine/SCons/Tool/packaging/src_tarbz2.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/src_targz.py b/src/engine/SCons/Tool/packaging/src_targz.py
index 4c7469c..0d3a3db 100644
--- a/src/engine/SCons/Tool/packaging/src_targz.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/src_tarxz.py b/src/engine/SCons/Tool/packaging/src_tarxz.py
index 6688c46..3042cac 100644
--- a/src/engine/SCons/Tool/packaging/src_tarxz.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/src_zip.py b/src/engine/SCons/Tool/packaging/src_zip.py
index d56f3aa..207fb1c 100644
--- a/src/engine/SCons/Tool/packaging/src_zip.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/tarbz2.py b/src/engine/SCons/Tool/packaging/tarbz2.py
index e371f1b..f34813b 100644
--- a/src/engine/SCons/Tool/packaging/tarbz2.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/targz.py b/src/engine/SCons/Tool/packaging/targz.py
index 121e4a4..8c694af 100644
--- a/src/engine/SCons/Tool/packaging/targz.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/tarxz.py b/src/engine/SCons/Tool/packaging/tarxz.py
index 3ec9822..dc52aa9 100644
--- a/src/engine/SCons/Tool/packaging/tarxz.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/packaging/zip.py b/src/engine/SCons/Tool/packaging/zip.py
index 11ab3b5..c7da7e9 100644
--- a/src/engine/SCons/Tool/packaging/zip.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/pdf.py b/src/engine/SCons/Tool/pdf.py
index 50988b6..6d6310f 100644
--- a/src/engine/SCons/Tool/pdf.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/pdf.xml b/src/engine/SCons/Tool/pdf.xml
index 876de15..394da06 100644
--- a/src/engine/SCons/Tool/pdf.xml
+++ b/src/engine/SCons/Tool/pdf.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/pdflatex.py b/src/engine/SCons/Tool/pdflatex.py
index 2c559f7..7550365 100644
--- a/src/engine/SCons/Tool/pdflatex.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/pdflatex.xml b/src/engine/SCons/Tool/pdflatex.xml
index 975d5e9..fdcfd88 100644
--- a/src/engine/SCons/Tool/pdflatex.xml
+++ b/src/engine/SCons/Tool/pdflatex.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/pdftex.py b/src/engine/SCons/Tool/pdftex.py
index c658aa0..b6595c1 100644
--- a/src/engine/SCons/Tool/pdftex.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/pdftex.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import SCons.Action
diff --git a/src/engine/SCons/Tool/pdftex.xml b/src/engine/SCons/Tool/pdftex.xml
index 0a265e7..a17fe2b 100644
--- a/src/engine/SCons/Tool/pdftex.xml
+++ b/src/engine/SCons/Tool/pdftex.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/qt.py b/src/engine/SCons/Tool/qt.py
index a582e6f..351d487 100644
--- a/src/engine/SCons/Tool/qt.py
+++ b/src/engine/SCons/Tool/qt.py
@@ -33,7 +33,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/qt.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/qt.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import re
diff --git a/src/engine/SCons/Tool/qt.xml b/src/engine/SCons/Tool/qt.xml
index 560a11d..7e7649d 100644
--- a/src/engine/SCons/Tool/qt.xml
+++ b/src/engine/SCons/Tool/qt.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/rmic.py b/src/engine/SCons/Tool/rmic.py
index d6f7b2b..9ff1674 100644
--- a/src/engine/SCons/Tool/rmic.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/rmic.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/rmic.xml b/src/engine/SCons/Tool/rmic.xml
index 2a273d3..c382312 100644
--- a/src/engine/SCons/Tool/rmic.xml
+++ b/src/engine/SCons/Tool/rmic.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/rpcgen.py b/src/engine/SCons/Tool/rpcgen.py
index b9f8ca6..1fb22f1 100644
--- a/src/engine/SCons/Tool/rpcgen.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/rpcgen.xml b/src/engine/SCons/Tool/rpcgen.xml
index 1ee9df9..16042cb 100644
--- a/src/engine/SCons/Tool/rpcgen.xml
+++ b/src/engine/SCons/Tool/rpcgen.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/rpm.py b/src/engine/SCons/Tool/rpm.py
index 0253365..39e7b59 100644
--- a/src/engine/SCons/Tool/rpm.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/rpm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import re
diff --git a/src/engine/SCons/Tool/rpmutils.py b/src/engine/SCons/Tool/rpmutils.py
index a2400ff..4d8b9be 100644
--- a/src/engine/SCons/Tool/rpmutils.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/rpmutils.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import platform
diff --git a/src/engine/SCons/Tool/sgiar.py b/src/engine/SCons/Tool/sgiar.py
index d82ec89..c249815 100644
--- a/src/engine/SCons/Tool/sgiar.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/sgiar.xml b/src/engine/SCons/Tool/sgiar.xml
index 6d28475..9a7769c 100644
--- a/src/engine/SCons/Tool/sgiar.xml
+++ b/src/engine/SCons/Tool/sgiar.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sgic++.py b/src/engine/SCons/Tool/sgic++.py
index 84d775a..0cb7a4a 100644
--- a/src/engine/SCons/Tool/sgic++.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/sgic++.xml b/src/engine/SCons/Tool/sgic++.xml
index bab0392..4440081 100644
--- a/src/engine/SCons/Tool/sgic++.xml
+++ b/src/engine/SCons/Tool/sgic++.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sgicc.py b/src/engine/SCons/Tool/sgicc.py
index 537f1a3..b602be8 100644
--- a/src/engine/SCons/Tool/sgicc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgicc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
from . import cc
diff --git a/src/engine/SCons/Tool/sgicc.xml b/src/engine/SCons/Tool/sgicc.xml
index f26944b..7235f89 100644
--- a/src/engine/SCons/Tool/sgicc.xml
+++ b/src/engine/SCons/Tool/sgicc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sgicxx.py b/src/engine/SCons/Tool/sgicxx.py
index d44ec26..8fe0441 100644
--- a/src/engine/SCons/Tool/sgicxx.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgicxx.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/sgilink.py b/src/engine/SCons/Tool/sgilink.py
index ca9e69c..d5d6556 100644
--- a/src/engine/SCons/Tool/sgilink.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sgilink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/sgilink.xml b/src/engine/SCons/Tool/sgilink.xml
index 7cc9818..d01f7e7 100644
--- a/src/engine/SCons/Tool/sgilink.xml
+++ b/src/engine/SCons/Tool/sgilink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sunar.py b/src/engine/SCons/Tool/sunar.py
index 07d45b2..af3d685 100644
--- a/src/engine/SCons/Tool/sunar.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/sunar.xml b/src/engine/SCons/Tool/sunar.xml
index 97d1a05..e30584a 100644
--- a/src/engine/SCons/Tool/sunar.xml
+++ b/src/engine/SCons/Tool/sunar.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sunc++.py b/src/engine/SCons/Tool/sunc++.py
index 1611fe9..5f09d94 100644
--- a/src/engine/SCons/Tool/sunc++.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/sunc++.xml b/src/engine/SCons/Tool/sunc++.xml
index d1d0160..afc2ab0 100644
--- a/src/engine/SCons/Tool/sunc++.xml
+++ b/src/engine/SCons/Tool/sunc++.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/suncc.py b/src/engine/SCons/Tool/suncc.py
index da6ca6e..f40b6d3 100644
--- a/src/engine/SCons/Tool/suncc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/suncc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/suncc.xml b/src/engine/SCons/Tool/suncc.xml
index f191eda..31bfa63 100644
--- a/src/engine/SCons/Tool/suncc.xml
+++ b/src/engine/SCons/Tool/suncc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/suncxx.py b/src/engine/SCons/Tool/suncxx.py
index 1ee1c6a..0c70b68 100644
--- a/src/engine/SCons/Tool/suncxx.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/sunf77.py b/src/engine/SCons/Tool/sunf77.py
index c1c216f..2ea5447 100644
--- a/src/engine/SCons/Tool/sunf77.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunf77.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/sunf77.xml b/src/engine/SCons/Tool/sunf77.xml
index fafcb8d..cdb3061 100644
--- a/src/engine/SCons/Tool/sunf77.xml
+++ b/src/engine/SCons/Tool/sunf77.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sunf90.py b/src/engine/SCons/Tool/sunf90.py
index 4cabee8..d69f8d1 100644
--- a/src/engine/SCons/Tool/sunf90.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunf90.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/sunf90.xml b/src/engine/SCons/Tool/sunf90.xml
index f979e15..f8fc24f 100644
--- a/src/engine/SCons/Tool/sunf90.xml
+++ b/src/engine/SCons/Tool/sunf90.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sunf95.py b/src/engine/SCons/Tool/sunf95.py
index 077b1bc..f03c43f 100644
--- a/src/engine/SCons/Tool/sunf95.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunf95.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.Util
diff --git a/src/engine/SCons/Tool/sunf95.xml b/src/engine/SCons/Tool/sunf95.xml
index 4072d36..64bf0f8 100644
--- a/src/engine/SCons/Tool/sunf95.xml
+++ b/src/engine/SCons/Tool/sunf95.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/sunlink.py b/src/engine/SCons/Tool/sunlink.py
index 8d965fa..25ab4d4 100644
--- a/src/engine/SCons/Tool/sunlink.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/sunlink.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/src/engine/SCons/Tool/sunlink.xml b/src/engine/SCons/Tool/sunlink.xml
index 68eee54..2bb456e 100644
--- a/src/engine/SCons/Tool/sunlink.xml
+++ b/src/engine/SCons/Tool/sunlink.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/swig.py b/src/engine/SCons/Tool/swig.py
index 2e61b91..d724500 100644
--- a/src/engine/SCons/Tool/swig.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/swig.xml b/src/engine/SCons/Tool/swig.xml
index 65a5971..6e6e7f0 100644
--- a/src/engine/SCons/Tool/swig.xml
+++ b/src/engine/SCons/Tool/swig.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/tar.py b/src/engine/SCons/Tool/tar.py
index 08c80f2..564ea0f 100644
--- a/src/engine/SCons/Tool/tar.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/tar.xml b/src/engine/SCons/Tool/tar.xml
index 95e8418..fd413ff 100644
--- a/src/engine/SCons/Tool/tar.xml
+++ b/src/engine/SCons/Tool/tar.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/tex.py b/src/engine/SCons/Tool/tex.py
index 9beb557..c9d9f55 100644
--- a/src/engine/SCons/Tool/tex.py
+++ b/src/engine/SCons/Tool/tex.py
@@ -33,7 +33,7 @@ selection method.
#
from __future__ import print_function
-__revision__ = "src/engine/SCons/Tool/tex.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/tex.xml b/src/engine/SCons/Tool/tex.xml
index c293977..ad91adc 100644
--- a/src/engine/SCons/Tool/tex.xml
+++ b/src/engine/SCons/Tool/tex.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/textfile.py b/src/engine/SCons/Tool/textfile.py
index 58a5007..906c1ac 100644
--- a/src/engine/SCons/Tool/textfile.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/textfile.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons
diff --git a/src/engine/SCons/Tool/textfile.xml b/src/engine/SCons/Tool/textfile.xml
index 31d2d4f..8304c17 100644
--- a/src/engine/SCons/Tool/textfile.xml
+++ b/src/engine/SCons/Tool/textfile.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/tlib.py b/src/engine/SCons/Tool/tlib.py
index 4d8101b..935b83f 100644
--- a/src/engine/SCons/Tool/tlib.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/tlib.xml b/src/engine/SCons/Tool/tlib.xml
index 2fd8c08..8235a66 100644
--- a/src/engine/SCons/Tool/tlib.xml
+++ b/src/engine/SCons/Tool/tlib.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/wix.py b/src/engine/SCons/Tool/wix.py
index e79e4a1..093cbcd 100644
--- a/src/engine/SCons/Tool/wix.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Tool/wixTests.py b/src/engine/SCons/Tool/wixTests.py
index f2649a3..3cde796 100644
--- a/src/engine/SCons/Tool/wixTests.py
+++ b/src/engine/SCons/Tool/wixTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Tool/wixTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/wixTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import unittest
import os.path
diff --git a/src/engine/SCons/Tool/xgettext.py b/src/engine/SCons/Tool/xgettext.py
index 185558e..1544a62 100644
--- a/src/engine/SCons/Tool/xgettext.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/xgettext.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import re
diff --git a/src/engine/SCons/Tool/xgettext.xml b/src/engine/SCons/Tool/xgettext.xml
index 079693f..5ab15fd 100644
--- a/src/engine/SCons/Tool/xgettext.xml
+++ b/src/engine/SCons/Tool/xgettext.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/yacc.py b/src/engine/SCons/Tool/yacc.py
index 6857574..0fdd5dd 100644
--- a/src/engine/SCons/Tool/yacc.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/yacc.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/src/engine/SCons/Tool/yacc.xml b/src/engine/SCons/Tool/yacc.xml
index 8ba3658..82274cb 100644
--- a/src/engine/SCons/Tool/yacc.xml
+++ b/src/engine/SCons/Tool/yacc.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Tool/zip.py b/src/engine/SCons/Tool/zip.py
index b7efdc7..8b7ab76 100644
--- a/src/engine/SCons/Tool/zip.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Tool/zip.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
diff --git a/src/engine/SCons/Tool/zip.xml b/src/engine/SCons/Tool/zip.xml
index d7622dd..c7743c0 100644
--- a/src/engine/SCons/Tool/zip.xml
+++ b/src/engine/SCons/Tool/zip.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0"?>
<!--
Copyright (c) 2001 - 2019 The SCons Foundation
diff --git a/src/engine/SCons/Util.py b/src/engine/SCons/Util.py
index 5b4c225..2bc129a 100644
--- a/src/engine/SCons/Util.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Util.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/src/engine/SCons/UtilTests.py b/src/engine/SCons/UtilTests.py
index 41a1647..e18dc13 100644
--- a/src/engine/SCons/UtilTests.py
+++ b/src/engine/SCons/UtilTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/UtilTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/UtilTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import SCons.compat
diff --git a/src/engine/SCons/Variables/BoolVariable.py b/src/engine/SCons/Variables/BoolVariable.py
index 4cb9f35..629faaf 100644
--- a/src/engine/SCons/Variables/BoolVariable.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/BoolVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['BoolVariable',]
diff --git a/src/engine/SCons/Variables/BoolVariableTests.py b/src/engine/SCons/Variables/BoolVariableTests.py
index a184378..ca70253 100644
--- a/src/engine/SCons/Variables/BoolVariableTests.py
+++ b/src/engine/SCons/Variables/BoolVariableTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/BoolVariableTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/BoolVariableTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Variables/EnumVariable.py b/src/engine/SCons/Variables/EnumVariable.py
index ba9f972..22630a4 100644
--- a/src/engine/SCons/Variables/EnumVariable.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/EnumVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['EnumVariable',]
diff --git a/src/engine/SCons/Variables/EnumVariableTests.py b/src/engine/SCons/Variables/EnumVariableTests.py
index 28b9d68..64d75a6 100644
--- a/src/engine/SCons/Variables/EnumVariableTests.py
+++ b/src/engine/SCons/Variables/EnumVariableTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/EnumVariableTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/EnumVariableTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Variables/ListVariable.py b/src/engine/SCons/Variables/ListVariable.py
index a30f265..bf0f856 100644
--- a/src/engine/SCons/Variables/ListVariable.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/Variables/ListVariableTests.py b/src/engine/SCons/Variables/ListVariableTests.py
index 86e2c9e..dd5f44f 100644
--- a/src/engine/SCons/Variables/ListVariableTests.py
+++ b/src/engine/SCons/Variables/ListVariableTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/ListVariableTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/ListVariableTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import copy
import sys
diff --git a/src/engine/SCons/Variables/PackageVariable.py b/src/engine/SCons/Variables/PackageVariable.py
index 7c23cca..12b8974 100644
--- a/src/engine/SCons/Variables/PackageVariable.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/PackageVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['PackageVariable',]
diff --git a/src/engine/SCons/Variables/PackageVariableTests.py b/src/engine/SCons/Variables/PackageVariableTests.py
index 2e48536..9d7ca53 100644
--- a/src/engine/SCons/Variables/PackageVariableTests.py
+++ b/src/engine/SCons/Variables/PackageVariableTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/PackageVariableTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/PackageVariableTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Variables/PathVariable.py b/src/engine/SCons/Variables/PathVariable.py
index bf123fb..5b3059d 100644
--- a/src/engine/SCons/Variables/PathVariable.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/PathVariable.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__all__ = ['PathVariable',]
diff --git a/src/engine/SCons/Variables/PathVariableTests.py b/src/engine/SCons/Variables/PathVariableTests.py
index d862887..fbcc5b8 100644
--- a/src/engine/SCons/Variables/PathVariableTests.py
+++ b/src/engine/SCons/Variables/PathVariableTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/PathVariableTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/PathVariableTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/src/engine/SCons/Variables/VariablesTests.py b/src/engine/SCons/Variables/VariablesTests.py
index ed2edab..5822478 100644
--- a/src/engine/SCons/Variables/VariablesTests.py
+++ b/src/engine/SCons/Variables/VariablesTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/Variables/VariablesTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/VariablesTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/Variables/__init__.py b/src/engine/SCons/Variables/__init__.py
index 5b4b3af..31d6621 100644
--- a/src/engine/SCons/Variables/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/Variables/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os.path
import sys
diff --git a/src/engine/SCons/Warnings.py b/src/engine/SCons/Warnings.py
index 1c84d57..49a35a9 100644
--- a/src/engine/SCons/Warnings.py
+++ b/src/engine/SCons/Warnings.py
@@ -27,7 +27,7 @@ This file implements the warnings framework for SCons.
"""
-__revision__ = "src/engine/SCons/Warnings.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/engine/SCons/WarningsTests.py b/src/engine/SCons/WarningsTests.py
index 2b36eb2..7fb6d6b 100644
--- a/src/engine/SCons/WarningsTests.py
+++ b/src/engine/SCons/WarningsTests.py
@@ -21,7 +21,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#
-__revision__ = "src/engine/SCons/WarningsTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/WarningsTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import sys
import unittest
diff --git a/src/engine/SCons/__init__.py b/src/engine/SCons/__init__.py
index c915441..42582b1 100644
--- a/src/engine/SCons/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.0"
+__version__ = "3.1.2"
-__build__ = "e724ae812eb96f4858a132f5b8c769724744faf6"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
-__buildsys__ = "kufra"
+__buildsys__ = "octodog"
-__date__ = "2019-07-21 00:04:47"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/src/engine/SCons/compat/__init__.py b/src/engine/SCons/compat/__init__.py
index dcbd8e8..a3935c3 100644
--- a/src/engine/SCons/compat/__init__.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/compat/__init__.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/src/engine/SCons/compat/_scons_dbm.py b/src/engine/SCons/compat/_scons_dbm.py
index ec5e261..c5da402 100644
--- a/src/engine/SCons/compat/_scons_dbm.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/compat/_scons_dbm.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
class error(Exception):
pass
diff --git a/src/engine/SCons/cpp.py b/src/engine/SCons/cpp.py
index 7c4ac92..17a92e1 100644
--- a/src/engine/SCons/cpp.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/cpp.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
SCons C Pre-Processor module
diff --git a/src/engine/SCons/cppTests.py b/src/engine/SCons/cppTests.py
index 6d41ab0..2e94bf8 100644
--- a/src/engine/SCons/cppTests.py
+++ b/src/engine/SCons/cppTests.py
@@ -23,7 +23,7 @@
from __future__ import absolute_import
-__revision__ = "src/engine/SCons/cppTests.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/cppTests.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import atexit
import sys
diff --git a/src/engine/SCons/exitfuncs.py b/src/engine/SCons/exitfuncs.py
index c5414a2..43ae73b 100644
--- a/src/engine/SCons/exitfuncs.py
+++ b/src/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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/engine/SCons/exitfuncs.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import atexit
diff --git a/src/script/scons-configure-cache.py b/src/script/scons-configure-cache.py
index 757a79f..ee11943 100644
--- a/src/script/scons-configure-cache.py
+++ b/src/script/scons-configure-cache.py
@@ -37,15 +37,15 @@ import glob
import json
import os
-__revision__ = "src/script/scons-configure-cache.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/script/scons-configure-cache.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.0"
+__version__ = "3.1.2"
-__build__ = "e724ae812eb96f4858a132f5b8c769724744faf6"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
-__buildsys__ = "kufra"
+__buildsys__ = "octodog"
-__date__ = "2019-07-21 00:04:47"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/src/script/scons-time.py b/src/script/scons-time.py
index 975ff64..c371d59 100644
--- a/src/script/scons-time.py
+++ b/src/script/scons-time.py
@@ -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 e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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/src/script/scons.bat b/src/script/scons.bat
index 75e2a49..dc67188 100644
--- a/src/script/scons.bat
+++ b/src/script/scons.bat
@@ -1,11 +1,11 @@
@REM Copyright (c) 2001 - 2019 The SCons Foundation
-@REM src/script/scons.bat e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 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.0'), join(sys.prefix, 'Lib', 'site-packages', 'scons'), join(sys.prefix, 'scons-3.1.0'), 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/src/script/scons.py b/src/script/scons.py
index b3172b1..d889e74 100755
--- a/src/script/scons.py
+++ b/src/script/scons.py
@@ -25,15 +25,15 @@
from __future__ import print_function
-__revision__ = "src/script/scons.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/script/scons.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.0"
+__version__ = "3.1.2"
-__build__ = "e724ae812eb96f4858a132f5b8c769724744faf6"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
-__buildsys__ = "kufra"
+__buildsys__ = "octodog"
-__date__ = "2019-07-21 00:04:47"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/src/script/sconsign.py b/src/script/sconsign.py
index a0d7b7e..b1f7cd0 100644
--- a/src/script/sconsign.py
+++ b/src/script/sconsign.py
@@ -25,15 +25,15 @@
from __future__ import print_function
-__revision__ = "src/script/sconsign.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/script/sconsign.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
-__version__ = "3.1.0"
+__version__ = "3.1.2"
-__build__ = "e724ae812eb96f4858a132f5b8c769724744faf6"
+__build__ = "bee7caf9defd6e108fc2998a2520ddb36a967691"
-__buildsys__ = "kufra"
+__buildsys__ = "octodog"
-__date__ = "2019-07-21 00:04:47"
+__date__ = "2019-12-17 02:07:09"
__developer__ = "bdeegan"
diff --git a/src/setup.py b/src/setup.py
index 790b1ea..0d4b62e 100755
--- a/src/setup.py
+++ b/src/setup.py
@@ -44,13 +44,13 @@ NOTE: Installed SCons is not importable like usual Python packages. It is
"""
-__revision__ = "src/setup.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/setup.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import stat
import sys
-Version = "3.1.0"
+Version = "3.1.2"
man_pages = [
'scons.1',
diff --git a/src/test_files.py b/src/test_files.py
index 42fb397..281027f 100644
--- a/src/test_files.py
+++ b/src/test_files.py
@@ -23,7 +23,7 @@
#
from __future__ import print_function
-__revision__ = "src/test_files.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/test_files.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
"""
Verify that we have certain important files in our distribution
diff --git a/src/test_interrupts.py b/src/test_interrupts.py
index 4ae0969..8427553 100644
--- a/src/test_interrupts.py
+++ b/src/test_interrupts.py
@@ -23,7 +23,7 @@
from __future__ import print_function
-__revision__ = "src/test_interrupts.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/test_interrupts.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
"""
Verify that the SCons source code contains only correct handling of
diff --git a/src/test_pychecker.py b/src/test_pychecker.py
index a93033d..a186ceb 100644
--- a/src/test_pychecker.py
+++ b/src/test_pychecker.py
@@ -22,7 +22,7 @@
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
from __future__ import print_function
-__revision__ = "src/test_pychecker.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/test_pychecker.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
"""
Use pychecker to catch various Python coding errors.
diff --git a/src/test_setup.py b/src/test_setup.py
index b540ab2..56e14eb 100644
--- a/src/test_setup.py
+++ b/src/test_setup.py
@@ -23,7 +23,7 @@
#
from __future__ import print_function
-__revision__ = "src/test_setup.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/test_setup.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
"""
Test how the setup.py script installs SCons.
@@ -176,7 +176,7 @@ tar_gz = os.path.join(cwd, 'build', 'dist', '%s.tar.gz' % scons_version)
zip = os.path.join(cwd, 'build', 'dist', '%s.zip' % scons_version)
if os.path.isfile(zip):
- try:
+ try:
import zipfile
except ImportError:
pass
@@ -185,9 +185,9 @@ if os.path.isfile(zip):
for name in zf.namelist():
dname = os.path.dirname(name)
- try:
+ try:
os.makedirs(dname)
- except FileExistsError:
+ except FileExistsError:
pass
# if the file exists, then delete it before writing
# to it so that we don't end up trying to write to a symlink:
@@ -325,8 +325,7 @@ test.must_have_installed(test.man_page_paths())
other_prefix = test.workpath('other-prefix')
test.subdir(other_prefix)
test.run(arguments = 'setup.py install --prefix=%s' % other_prefix)
-test.fail_test(test.stderr().find("you'll have to change the search path yourself")
- != -1)
+test.fail_test("you'll have to change the search path yourself" in test.stderr())
# All done.
test.pass_test()
diff --git a/src/test_strings.py b/src/test_strings.py
index ad2c755..555ca5d 100644
--- a/src/test_strings.py
+++ b/src/test_strings.py
@@ -23,7 +23,7 @@
#
from __future__ import print_function
-__revision__ = "src/test_strings.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "src/test_strings.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
"""
Verify that we have proper strings like Copyright notices on all the
@@ -109,7 +109,7 @@ class Checker(object):
class CheckUnexpandedStrings(Checker):
expressions = [
re.compile('Copyright (c) 2001 - 2019 The SCons Foundation'),
- re.compile('src/test_strings.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan'),
+ re.compile('src/test_strings.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan'),
]
def must_be_built(self):
return None
diff --git a/testing/framework/README.txt b/testing/framework/README.txt
index 817cb3f..8909f11 100644
--- a/testing/framework/README.txt
+++ b/testing/framework/README.txt
@@ -47,4 +47,4 @@ the pieces here are local to SCons.
Test infrastructure for the sconsign.py script.
Copyright (c) 2001 - 2019 The SCons Foundation
-testing/framework/README.txt e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan
+testing/framework/README.txt bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan
diff --git a/testing/framework/TestCmd.py b/testing/framework/TestCmd.py
index 81e03f3..9218f60 100644
--- a/testing/framework/TestCmd.py
+++ b/testing/framework/TestCmd.py
@@ -1528,7 +1528,7 @@ class TestCmd(object):
# TODO: Run full tests on both platforms and see if this fixes failures
# It seems that py3.6 still sets text mode if you set encoding.
elif sys.version_info[0] == 3: # TODO and sys.version_info[1] < 6:
- stream = stream.decode('utf-8')
+ stream = stream.decode('utf-8', errors='replace')
stream = stream.replace('\r\n', '\n')
elif sys.version_info[0] == 2:
stream = stream.replace('\r\n', '\n')
diff --git a/testing/framework/TestCommon.py b/testing/framework/TestCommon.py
index ca4a147..8e6cc8e 100644
--- a/testing/framework/TestCommon.py
+++ b/testing/framework/TestCommon.py
@@ -165,8 +165,8 @@ elif sys.platform.find('darwin') != -1:
elif sys.platform.find('sunos') != -1:
exe_suffix = ''
obj_suffix = '.o'
- shobj_suffix = '.o'
- shobj_prefix = 'so_'
+ shobj_suffix = '.pic.o'
+ shobj_prefix = ''
lib_prefix = 'lib'
lib_suffix = '.a'
dll_prefix = 'lib'
diff --git a/testing/framework/TestRuntest.py b/testing/framework/TestRuntest.py
index e9ca524..a86ce67 100644
--- a/testing/framework/TestRuntest.py
+++ b/testing/framework/TestRuntest.py
@@ -14,7 +14,7 @@ attributes defined in this subclass.
# Copyright (c) 2001 - 2019 The SCons Foundation
-__revision__ = "testing/framework/TestRuntest.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "testing/framework/TestRuntest.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
diff --git a/testing/framework/TestSCons.py b/testing/framework/TestSCons.py
index 2228423..4543c5b 100644
--- a/testing/framework/TestSCons.py
+++ b/testing/framework/TestSCons.py
@@ -15,7 +15,7 @@ attributes defined in this subclass.
# Copyright (c) 2001 - 2019 The SCons Foundation
from __future__ import division, print_function
-__revision__ = "testing/framework/TestSCons.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "testing/framework/TestSCons.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import re
@@ -35,7 +35,7 @@ from TestCmd import PIPE
# here provides some independent verification that what we packaged
# conforms to what we expect.
-default_version = '3.1.0'
+default_version = '3.1.2'
python_version_unsupported = (2, 6, 0)
python_version_deprecated = (2, 7, 0)
@@ -44,7 +44,7 @@ python_version_deprecated = (2, 7, 0)
# line must remain "__ VERSION __" (without the spaces) so the built
# version in build/testing/framework/TestSCons.py contains the actual version
# string of the packages that have been built.
-SConsVersion = '3.1.0'
+SConsVersion = '3.1.2'
if SConsVersion == '__' + 'VERSION' + '__':
SConsVersion = default_version
diff --git a/testing/framework/TestSConsMSVS.py b/testing/framework/TestSConsMSVS.py
index 86935fd..0eeed69 100644
--- a/testing/framework/TestSConsMSVS.py
+++ b/testing/framework/TestSConsMSVS.py
@@ -15,7 +15,7 @@ in this subclass.
# Copyright (c) 2001 - 2019 The SCons Foundation
-__revision__ = "testing/framework/TestSConsMSVS.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "testing/framework/TestSConsMSVS.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import sys
diff --git a/testing/framework/TestSCons_time.py b/testing/framework/TestSCons_time.py
index 547e264..63f1035 100644
--- a/testing/framework/TestSCons_time.py
+++ b/testing/framework/TestSCons_time.py
@@ -13,7 +13,7 @@ attributes defined in this subclass.
# Copyright (c) 2001 - 2019 The SCons Foundation
-__revision__ = "testing/framework/TestSCons_time.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "testing/framework/TestSCons_time.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
import os
import os.path
@@ -55,19 +55,6 @@ with open('SConstruct', 'r') as f:
exec(script)
"""
-aegis_py = """\
-#!/usr/bin/env python
-import os
-import sys
-
-script_dir = 'src/script'
-if not os.path.exists(script_dir):
- os.makedirs(script_dir)
-with open(script_dir + '/scons.py', 'w') as f:
- f.write(r'''%s''')
-""" % scons_py
-
-
svn_py = """\
#!/usr/bin/env python
import os
@@ -243,12 +230,6 @@ class TestSCons_time(TestCommon):
x = x.replace('time\\-', 'time\\-[^%s]*' % sep)
return x
- def write_fake_aegis_py(self, name):
- name = self.workpath(name)
- self.write(name, aegis_py)
- os.chmod(name, 0o755)
- return name
-
def write_fake_scons_py(self):
self.subdir('src', ['src', 'script'])
self.write('src/script/scons.py', scons_py)
diff --git a/testing/framework/TestSConsign.py b/testing/framework/TestSConsign.py
index 8f992ef..6ec6825 100644
--- a/testing/framework/TestSConsign.py
+++ b/testing/framework/TestSConsign.py
@@ -1,7 +1,7 @@
# Copyright (c) 2001 - 2019 The SCons Foundation
from __future__ import print_function
-__revision__ = "testing/framework/TestSConsign.py e724ae812eb96f4858a132f5b8c769724744faf6 2019-07-21 00:04:47 bdeegan"
+__revision__ = "testing/framework/TestSConsign.py bee7caf9defd6e108fc2998a2520ddb36a967691 2019-12-17 02:07:09 bdeegan"
__doc__ = """
TestSConsign.py: a testing framework for the "sconsign" script
diff --git a/testing/framework/test-framework.rst b/testing/framework/test-framework.rst
index cb6b8e1..24240ac 100644
--- a/testing/framework/test-framework.rst
+++ b/testing/framework/test-framework.rst
@@ -29,7 +29,7 @@ There are three types of SCons tests:
``src/engine/`` subdirectory and are the same base name as the module
to be tests, with ``Tests`` appended before the ``.py``. For example,
the unit tests for the ``Builder.py`` module are in the
- ``BuilderTests.py`` script. Unit tests tend to be based on assertions.
+ ``BuilderTests.py`` script. Unit tests tend to be based on assertions.
*External Tests*
For the support of external Tools (in the form of packages, preferably),