Scons Versions Save

SCons - a software construction tool

4.7.0

1 month ago

A new SCons release, 4.7.0, is now available on the SCons download page:

https://scons.org/pages/download.html

Here is a summary of the changes since 4.6.0:

NEW FUNCTIONALITY

  • Method unlink_files was added to the TestCmd class that unlinks a list of files from a specified directory. An attempt to unlink a file is made only when the file exists; otherwise, the file is ignored.

CHANGED/ENHANCED EXISTING FUNCTIONALITY

  • Add an optional argument list string to configure's CheckFunc method so that the generated function argument list matches the function's prototype when including a header file. Fixes GH Issue #4320
  • Now supports pre-release Python 3.13
  • Support for Python versions without support for the threading package has been removed
  • Dropped three unused warning classes: DeprecatedSourceCodeWarning, TaskmasterNeedsExecuteWarning, DeprecatedMissingSConscriptWarning.
  • Two warning classes that are actually used were added to manpage section on enabling warnings (cache-cleanup-error, future-reserved-variable).

FIXES

  • Fix of the --debug=sconscript option to return exist statements when using return statement with stop flag enabled
  • MSVS: prevent overwriting the SCons environment variable SCONS_HOME with the OS environment value of SCONS_HOME in the msvs tool.
  • MSVC: Fix the detection of Visual Studio 2015 Express ('14.0Exp') by adding a registry key definition and updating the installation root-relative registry value at runtime for the location of the VC folder.
  • MSVS: Fix the msvs project generation test for MSVS 6.0 to use the correct name of the generated project file.
  • MSVS: Fix the msvs project generation test scripts so that "false positive" tests results are not possible when the initial build is successful and the command-line build of the project file fails.
  • On Windows platform, when collecting command output (Configure checks), make sure decoding of bytes doesn't fail.
  • Documentation indicated that both Pseudo() and env.Pseudo() were usable, but Pseudo() did not work; is now enabled.
  • Improve handling of file data that SCons itself processes - as in scanners - try harder to decode non-UTF-8 text.
  • PyPackageDir no longer fails if passed a module name which cannot be found, now returns None.
  • Add locking around creation of CacheDir config file. Fixes issue #4489.

IMPROVEMENTS

  • Use of NotImplemented instead of NotImplementedError for special methods of _ListVariable class
  • The NewParallel scheduler is now the default, the tm_v2 flag is removed, and the old scheduler is opt-in under --experimental=legacy_sched. Additionally, the new scheduler is now used for -j1 builds as well. NOTE: This should significantly improve SCons performance for larger parallel builds (Larger -j values)
  • CacheDir writes no longer happen within the taskmaster critical section, and therefore can run in parallel with both other CacheDir writes and the taskmaster DAG walk.
  • The NewParallel scheduler now only adds threads as new work requiring execution is discovered, up to the limit set by -j. This should reduce resource utilization when the achievable parallelism in the DAG is less than the -j limit.
  • Dumping an environment with json formatting will now explicitly specify if a given value cannot be serialized.

PACKAGING

  • Remove unnecessary dependencies on pypi packages from setup.cfg
  • SCons documentation build can now be controlled through SKIP_DOC variable - rather than just true/false can now specify skip none, skip all, skip pdf docs, skip api docs.

DOCUMENTATION

  • Fixed the Scanner examples in the User Guide to be runnable and added some more explanation. Clarified discussion of the scanner function in the Scanner Objects section of the manpage.
  • The manpage entry for Pseudo was clarified.
  • The manpage entry for SharedLibrary was clarified.
  • Update API docs for Warnings framework; add two warns to manpage enable/disable control.
  • More consistent use of &Python; in the manpage. A few links added. A warning about overwriting env['ENV'] and one about Configure checks possibly not running in in no-exec mode also added.
  • Clarify how SCons finds the project top directory, and what that is used for.
  • Clarify MergeFlags usage of a dict argument.

DEVELOPMENT

  • Fix sphinx config to handle SCons versions with post such as: 4.6.0.post1
  • Created SCons.Util.sctyping to contain complex type information, allowing for repo-wide type hinting without causing cyclical dependencies.

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.6.0..HEAD
26  Andrew Morrow
24  Mats Wichmann
14  William Deegan
 7  Joseph Brill
 6  StenGruener
 3  Prabhu S. Khalsa
 3  Thaddeus Crews
 2  fazledyn-or
 1  Michał Górny
 1  Piotr Siupa

4.6.0

5 months ago

A new SCons release, 4.6.0, is now available on the SCons download page:

https://scons.org/pages/download.html

Here is a summary of the changes since 4.5.2:

NEW FUNCTIONALITY

  • D compilers : added support for generation of .di interface files. New variables DI_FILE_DIR, DI_FILE_DIR_PREFIX, DI_FILE_DIR_SUFFIX, DI_FILE_SUFFIX.
  • MSVC: If available, native arm64 tools will be used on arm64 hosts for VS2022.
  • MSVC: If necessary, automatically define VSCMD_SKIP_SENDTELEMETRY for VS2019 and later on arm64 hosts when using an arm (32-bit) build of python to prevent a powershell error pop-up window (powershell dll not found).
  • Add a LIBLITERALPREFIX variable which can be set to the linker's prefix for considering a library argument unmodified (e.g. for the GNU linker, the ':' in '-l:libfoo.a'). Fixes Github issue #3951.

CHANGED/ENHANCED EXISTING FUNCTIONALITY

  • When debugging (--debug=pdb), the filenames SConstruct and SConscript are now recognized when manipulating breakpoints. Previously, only a full pathname to an sconscript file worked, as pdb requires a .py extension to open a file that is not an absolute path.
  • Three unused non-public methods of the Environment Base class were dropped: get_src_sig_type, get_tgt_sig_type, _changed_source. These were unused remnants of the previously removed SourceSignatures and TargetSignatures features (dropped in 3.1.2).
  • The --debug flag now has a 'json' option which will write information generated by --debug={count, memory, time, action-timestamps} and about the build.
  • Obsoleted YACCVCGFILESUFFIX, it's being replaced by YACC_GRAPH_FILE_SUFFIX. If YACC_GRAPH_FILE_SUFFIX is not set, it will respect YACCVCGFILESUFFIX.
  • The yacc tool now understands the bison behavior of --header, --defines and --graph being called without an option-argument as being synonyms for -d (first two) and -g. -H also recognized as a synonym for -d. Default value for $YACC_GRAPH_FILE_SUFFIX changed to '.gv' to match current bison default (since bison 3.8). Set this variable to '.dot' if using byacc. Fixes #4326 and #4327.
  • MSVC: When trying to find a valid msvc batch file, the existence of the msvc compiler executable is verified for VS6 to VS2015 to avoid executing the msvc batch file when the host/target tool is known not to be present. Always check that the msvc compiler executable is found on the msvc script environment path after running the msvc batch file. This is predominately needed for recent versions of Visual Studio where the msvc batch file exists but an individual msvc toolset may not support the host/target architecture combination. For example, when using VS2022 on arm64, the arm64 native tools are only installed for the 14.3x toolsets.
  • MSVC: When the msvc compiler executable is not found during setup of the msvc environment, the warning message issued takes into account whether or not a possibly erroneous compiler executable was already present in the scons environment path. See CHANGES.txt for details.
  • Extend range of recognized Java versions to 20.
  • Builder calls (like Program()) now accept pathlib objects in source lists.
  • The Help() function now takes an additional keyword argument keep_local: when starting to build a help message, you can now retain help from AddOption calls (options added for the project_, but omit help for SCons' own cmdline options with "Help(newtext, append=True, local_only=True)".
  • Calling SConscript() with a nonexistent file is now an error. Previously this succeeded - prior to SCons 3.0, silently; since 3.0, with a warning. Developers can still instruct such an SConscript() call not to fail by being explicit: pass keyword argument "must_exist=False". The "--warn=missing-sconscript" commandline option is no longer available as the warning was part of the transitional phase.
  • Add missing directories to searched paths for mingw installs
  • SCons.Util.types renamed to to SCons.Util.sctypes to avoid any possible confusion with the Python stdlib "types" module. Note that it was briefly (for 4.5.x only) possible to import directly from SCons.Util.types, although the preferred usage remains to import from SCons.Util only. Any code that did the direct import will have to change to import from SCons.Util.sctypes.
  • Add JDK 21 LTS support
  • The newly added --debug=sconscript option (new) will output notices when entering an exiting each SConscript as they are processed.

FIXES

  • Fixed: when using the mingw tool, if an msys2 Python is used (os.sep is '/' rather than the Windows default ''), certain Configure checks could fail due to the construction of the path to run the compiled check.
  • C scanner's dictifyCPPDEFINES routine did not understand the possible combinations of CPPDEFINES - not aware of a "name=value" string either embedded in a sequence, or by itself. The conditional C scanner thus did not always properly apply the defines. The regular C scanner does not use these, so was not affected. [fixes #4193]
  • MSVC: The installed msvc list is calculated once and cached. There was an indirect dependency on the target architecture when determining if each version of msvc was installed based on the initial invocation. It was possible that an msvc instance would not be considered installed due to the tools for the requested target architecture not being installed. The initial call to construct the installed msvc list now uses an undefined target architecture to evaluate all potential host/target combinations when evaluating if the msvc tools are installed for a given Visual Studio installation.
  • MSVC: Erroneous construction of the installed msvc list (as described above) caused an index error in the msvc support code. An explicit check was added to prevent indexing into an empty list. Fixes #4312.
  • MSVC: The search for the msvc compiler executable (cl.exe) no longer inspects the OS system path in certain situations when setting up the msvc environment.
  • MSCommon: Test SConfTests.py would fail when mscommon debugging was enabled via the MSVC_MSCOMMON_DEBUG environment variable. The mscommon logging filter class registered with the python logging module was refactored to prevent test failure.
  • MSVS: Add arm64 to the MSVS supported architectures list for VS2017 and later to be consistent with the current documentation of MSVS_ARCH.
  • FORTRAN: Fix gfortran tool initialization. Defaults to using binary named gfortran as would be expected, and properly set's SHFORTRAN flags to include -fPIC where previously it was only doing so for the other fortran versions (F77,..)
  • MSCommon: Added more error handling while reading msvc config cache. (Enabled/specified by SCONS_CACHE_MSVC_CONFIG). The existing cache will be discarded if there's a decode error reading it. It's possible there's a race condition creating this issue it in certain CI builds.
  • Fixed: race condition in Mkdir which can happen when two SConscript are processed simultaneously by two separate build commands.

IMPROVEMENTS

  • Now tries to find mingw if it comes from Chocolatey install of msys2.
  • MSVC: Module imports were changed from a relative import to a top-level absolute import in the following Microsoft tools: midl, mslib, mslink, mssdk, msvc, msvs. Moving any of these tools that used relative imports to the scons site tools folder would fail on import (i.e., the relative import paths become invalid when moved).

PACKAGING

  • The build of scons now matches the help text displayed - the targets listed there can all now be given as a target to build (except for the two full source balls; the source tar.gz is currently generated directly by the GitHub release process).

DOCUMENTATION

  • Aligned manpage signature for Alias function to match implementation - if the previous targets parameter had been used as a keyword argument, the results would be incorrect (does not apply to positional argument usage, which had no problem).
  • Changed the message about scons -H to clarify it shows built-in options only.
  • Cachedir description updated.
  • Updated the first two chapters on building with SCons in the User Guide.
  • Clarify that exported variables are shared - if mutable, changes made in an SConscript are visible everywhere that takes a refereence to that object.
  • Update PCH builder docs with some usage notes.

DEVELOPMENT

  • SCons test runner now uses pathlib to normalize and compare paths to test files, which allows test lists, exclude lists, and tests on the command line to "not care" about the OS convention for pathname separators.
  • Class ActionBase is now an abstract base class to more accurately reflect its usage. Derived _ActionAction inherits the ABC, so it now declares (actually raises NotImplementedError) two methods it doesn't use so it can be instantiated by unittests and others.
  • Added more type annotations to internal routines.
  • Cleaned up dblite module (checker warnings, etc.).
  • TeX tests: skip tests that use makeindex or epstopdf not installed, or if kpsewhich glossaries.sty fails.

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.5.2..HEAD
    97  Mats Wichmann
    39  William Deegan
    20  Joseph Brill
    12  Alex Burton
     4  StenGruener
     2  Jonathon Reinhart
     2  LiuYinCarl
     2  Max Bachmann
     1  Kenshin
     1  Shohei YOSHIDA
     1  Vitaly Cheptsov

4.5.2

1 year ago

A new SCons release, 4.5.2, is now available on the SCons download page:

https://scons.org/pages/download.html

Here is a summary of the changes since 4.5.1:

FIXES

  • Fix a problem (#4321) in 4.5.0/4.5.1 where ParseConfig could cause an exception in MergeFlags when the result would be to add preprocessor defines to existing CPPDEFINES. The following code illustrates the circumstances that could trigger this: env=Environment(CPPDEFINES=['a']) env.Append(CPPDEFINES=['b']) env.MergeFlags({'CPPDEFINES': 'c'})

PACKAGING

  • Remove the redundant wheel dependency from pyproject.toml, as it is added automatically by the setuptools PEP517 backend.

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.5.1..HEAD
 3  Mats Wichmann
 2  William Deegan
 1  Michał Górny

4.5.1

1 year ago

A new SCons release, 4.5.1, is now available on the SCons download page:

https://scons.org/pages/download.html

Here is a summary of the changes since 4.5.0:

FIXES

  • Fix a problem in 4.5.0 where using something like the following code will cause a Clone()'d environment to share the CPPDEFINES with the original Environment() which was cloned. Causing leakage of changes to CPPDEFINES when they should be completely independent after the Clone. env=Environment(CPPDEFINES=['a']) env.Append(CPPDEFINES=['b']) (or AppendUnique,Prepend,PrependUnique) env1=env.Clone() env1.Append(CPPDEFINES=['c']) (or any other modification, but not overwriting CPPDEFINES) Now env['CPPDEFINES'] will contain 'c' when it should not.

Thanks to the following contributors listed below for their contributions to this release.

git shortlog --no-merges -ns 4.5.0..HEAD

     3  William Deegan
     1  Mats Wichmann

4.5.0

1 year ago

A new SCons release, 4.5.0, is now available on the SCons download page:

https://scons.org/pages/download.html

Here is a summary of the changes since 4.4.0:

NOTE: If you build with Python 3.10.0 and then rebuild with 3.10.1 (or higher), you may see unexpected rebuilds. This is due to Python internals changing which changed the signature of a Python Action Function.

NOTE: If you use a dictionary to specify your CPPDEFINES, you may see an unexpected rebuild. The insertion order of dictionary keys is now preserved when generating the command line. Previously these were sorted alphabecially. This change to the command line, while generating identical set of CPPDEFINES can change order and cause a rebuild.

NEW FUNCTIONALITY

  • Added ValidateOptions() which will check that all command line options are in either those specified by SCons itself, or by AddOption() in SConstruct/SConscript. It should not be called until all AddOption() calls are completed. Resolves Issue #4187
  • Added --experimental=tm_v2, which enables Andrew Morrow's NewParallel Job implementation. This should scale much better for highly parallel builds. You can also enable this via SetOption().
  • Added FILE_ENCODING, to allow explicitly setting the text encoding for files written by the Textfile() and Substfile() builders. If not specified, Textfile() and Substfile() builders will write files as UTF-8.

DEPRECATED FUNCTIONALITY

  • The qt tool has been renamed qt3.

CHANGED/ENHANCED EXISTING FUNCTIONALITY

  • Added -fsanitize support to ParseFlags(). This will propagate to CCFLAGS and LINKFLAGS.
  • Calling EnsureSConsVersion() and EnsurePythonVersion() won't initialize DefaultEnvironment anymore.
  • The console message from the Chmod() action function now displays octal modes using the modern Python syntax (0o755 rather than 0755).
  • Migrated logging logic for --taskmastertrace to use Python's logging module. Added logging to NewParallel Job class (Andrew Morrow's new parallel job implementation)
  • Preliminary support for Python 3.12.
  • Run LaTeX after biber/bibtex only if necessary
  • Configure context methods CheckLib and CheckLibWithHeader now expose two additional keyword arguments: 'append', which controls whether to append (the default) or prepend discovered libraries to $LIBS, and 'unique', which controls whether to add the library if it is already in the $LIBS list. This brings the library-adding functionality in Configure in line with the regular Append, AppendUnique, Prepend and PrependUnique methods.
  • CPPDEFINES values added via a dictionary type are longer sorted by key. This used to be required to maintain a consistent order of commandline arguments between SCons runs, but meant macros were not always emitted in the order entered. Sorting is no longer required after Python interpreter improvements. There might be a one-time rebuild of targets that involved such sorted keys in their actions.
  • Renamed the 'qt' tools to 'qt3' since the logic in that tool is only for QT version 3.
    Renamed all env vars which affect qt3 from QT_ to QT3_. If you are still using SCons to build QT 3 code, you'll need to update your SConscripts. Note that using 'qt' tool has been deprecated for some time.

FIXES

  • Added missing newline to generated compilation database (compile_commands.json)
  • A list argument as the source to the Copy() action function is now handled. Both the implementation and the strfunction which prints the progress message were adjusted.
  • The Java Scanner processing of JAVACLASSPATH for dependencies (behavior that was introduced in SCons 4.4.0) is adjusted to split on the system's search path separator instead of on a space. The previous behavior meant that a path containing spaces (e.g. r"C:\somepath\My Classes") would lead to unexpected errors. If the split-on-space behavior is desired, pre-split the value: instead of: env["JAVACLASSPATH"] = "foo bar baz" use: env["JAVACLASSPATH"] = env.Split("foo bar baz") There is no change in how JAVACLASSPATH gets turned into the -classpath argument passed to the JDK tools.
  • Ninja: Fix execution environment sanitation for launching ninja. Previously if you set an execution environment variable set to a python list it would crash. Now it will create a string joining the list with os.pathsep
  • Fixed command line argument --diskcheck: previously a value of 'none' was ignored. SetOption('diskcheck','none') is unaffected, as it did not have the problem.
  • Fixed Issue #4275 - when outputting compilation db and TEMPFILE was in use, the compilation db would have command lines using the generated tempfile for long command lines, instead of the full command line for the compilation step for the source/target pair.
  • A refactor in the caching logic for version 4.4.0 left Java inner classes failing with an exception when a CacheDir was enabled. This is now corrected.
  • When using the gfortran tool (the default on most platforms as long as a GNU toolchain is installed), the user setting of the "dialect" compilers (F77, F90, F03 and F09, as well as the shared-library equivalents SHF77, SHF90, SHF03, SHF09) is now honored; previously the tool overwrote the settings to 'gfortran', which made it difficult reference a cross-compile version for dialects.
  • Fix issue #2757, where Configure checks that perform a check which reads a modified source (including program, source or header file(s)) would incorrectly mark that file "up to date" so the actual build would not see the file as modified. Leading to incorrect incremental builds. Now configure checks now clear node info for non conftest nodes, so they will be re-evaluated for the real taskmaster run when the build commences.
  • Inconsistent behavior of adding values to the CPPDEFINES construction variable has been cleaned up (described in issue #4254). Now a tuple, whether provided by itself or as a member of a list, is consistently interpreted as a macro with replacement value. When adding a list, individual members are added in sequence without interpretation. A string value containing spaces is split if it is the initial value or added, but not if it is given as a member of an added list. Detection of duplicate macros now works for both valued and unvalued forms.
  • Handling of CPPDEFINES macros via Prepend and PrependUnique now works (previously this was special-cased only for Append and AppendUnique).

IMPROVEMENTS

  • Changed the Taskmaster trace logic to use python's logging module.
  • Add cache-debug messages for push failures.
  • Added error message to handle the case when SCons attempts to retrieve all the targets for a specified builder from the CacheDir, fails to do so, and then runs into an error when deleting the files which were retrieved. Previously if this happened there were no errors or warnings.

PACKAGING

  • SCons now has three requirements files: requirements.txt describes requirements to run scons; requirements-dev.txt requirements to develop it - mainly things needed to run the testsuite; requirements_pkg.txt are the requirements to do a full build (including docs build) with an intent to create the packages.
  • Moved rpm and debian directories under packaging
  • Added logic to help packagers enable reproducible builds into packaging/etc/. Please read packaging/etc/README.txt if you are interested.
  • A zipapp of scons-local is now also built.

DOCUMENTATION

  • Updated the --hash-format manpage entry.
  • EnsureSConsVersion, EnsurePythonVersion, Exit, GetLaunchDir and SConscriptChdir are now listed as Global functions only.
  • Updated the docs for Glob.
  • Updated SHELL_ENV_GENERATORS description and added versionadded indicator.
  • JAVABOOTCLASSPATH, JAVACLASSPATH and JAVASOURCEPATH better document the acceptable syntax for values, and how they will be interpreted, including that JAVACLASSPATH will be scanned for dependencies. Added note on the possibly surprising feature that SCons always passes -sourcepath when calling javac, which affects how the class path is used when finding sources.
  • Updated the User Guide chapter on installation: modernized the notes on Python installs, SCons installs, and having multiple SCons versions present on a single system.
  • Updated the User Guide chapter on variant directories with more explanation, and the introduction of terms like "out of tree" that may help in forming a mental model.
  • Additional explanations for MSVSProject and MSVSSolution builders.
  • Updated MSVC documentation - adds "version added" annotations on recently added construction variables and provides a version-mapping table.
  • Added further details in the documentation of Append and related methods on the special handling of CPPDEFINES.

DEVELOPMENT

  • Refactored SCons/Taskmaster into a package. Moved SCons/Jobs.py into that package. NOTE: If you hook into SCons.Jobs, you'll have to change that to use SCons.Taskmaster.Jobs
  • Refactored SCons.Util, which had grown quite large, to be a package, not a single-file module. Change should be transparent: the same import of SCons.Util and public symbols from it will continue to work, however code which reaches directly in to grab private symbols (starting with underscore) which moved to a submodule, that code will have to be adjusted, as those are not imported to the package level (new SCons.Util.hashes has some of these, which are used by existing unit tests).
  • Added overrides argument to SCons.Subst.scons_subst(), subst_list(), subst(), and Action's process(), strfunction(). This allows passing a dictionary of envvars to override when evaluating subst()'d strings/lists

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.4.0..HEAD
93  Mats Wichmann
85  William Deegan
 9  Anatoli Babenia
 8  Daniel Moody
 4  Andrew Morrow
 3  Ryan Saunders
 2  Flaviu Tamas
 1  Dan Mezhiborsky
 1  Lukas Schrangl
 1  Nickolai Korshunov
 1  TZe
 1  Thad Guidry
 1  djh

4.4.0

1 year ago

A new SCons release, 4.4.0, is now available on the SCons download page:

  https://scons.org/pages/download.html

Here is a summary of the changes since 4.3.0:

NOTE: If you build with Python 3.10.0 and then rebuild with 3.10.1 (or higher), you may see unexpected rebuilds. This is due to Python internals changing which changed the signature of a Python Action Function.

NEW FUNCTIONALITY

  • Added MSVC_USE_SCRIPT_ARGS Environment variable which specifies command line arguments to pass to the script specified by MSVC_USE_SCRIPT.
  • Added Configure.CheckMember() checker to check if struct/class has the specified member.
  • Added SHELL_ENV_GENERATORS construction variable. This variable should be set to a list (or an iterable) which contains functions to be called in order when constructing the execution environment (Generally this is the shell environment variables). This allows the user to customize how (for example) PATH is constructed. Note that these are called for every build command run by SCons. It could have considerable performance impact if not used carefully.
  • Added MSVC_USE_SETTINGS construction variable to pass a dictionary to configure the msvc compiler system environment as an alternative to bypassing Visual Studio autodetection entirely.
  • Added MSVC_SDK_VERSION construction variable which allows building with a specific Microsoft SDK version. This variable is used with the msvc batch file determined via autodetection. Refer to the documentation for additional requirements and validation details.
  • Added MSVC_TOOLSET_VERSION construction variable which allows building with a specific toolset version. This variable is used with the msvc batch file determined via autodetection. This variable does not affect the autodetection and selection of msvc instances. The toolset version is applied after an msvc instance is selected. This could be the default version of msvc. Refer to the documentation for additional requirements and validation details. Addresses issue #3265, issue #3664, and pull request #4149.
  • Added MSVC_SPECTRE_LIBS construction variable which allows building with spectre-mitigated Visual C++ libraries. This variable is used with the msvc batch file determined via autodetection. Refer to the documentation for additional requirements and validation details.
  • Added MSVC_SCRIPT_ARGS construction variable which specifies command line arguments that are passed to the msvc batch file determined via autodetection. Refer to the documentation for additional requirements and validation details. Addresses enhancement issue #4106.
  • Ninja: Added new alias "shutdown-ninja-scons-daemon" to allow ninja to shutdown the daemon. Also added cleanup to test framework to kill ninja scons daemons and clean ip daemon logs. NOTE: Test for this requires python psutil module. It will be skipped if not present.
  • Ninja: Added command line variable NINJA_CMD_ARGS that allows to pass through ninja command line args. This can also be set in your Environment().
  • Added a global policy setting and an environment construction variable for specifying the action to be taken when an msvc request cannot be satisfied. The available options are "error", "exception", "warning", "warn", "ignore", and "suppress". The global policy variable may be set and retrieved via the functions msvc_set_notfound_policy and msvc_get_notfound_policy, respectively. These two methods may be imported from SCons.Tool.MSCommon. The environment construction variable is MSVC_NOTFOUND_POLICY. When defined, the environment construction variable overrides the global policy setting for a given environment. When the active policy is "error" or "exception", an MSVCVersionNotFound exception is raised. When the active policy is "warning" or "warn", a VisualCMissingWarning warning is issued and the constructed environment is likely incomplete. When the active policy is "ignore" or "suppress", no action is taken and the constructed environment is likely incomplete. As implemented, the default global policy is "warning". The ability to set the global policy via an SCons command-line option may be added in a future enhancement.
  • Added a global policy setting and an environment construction variable for specifying the action to be taken when msvc script errors are detected. The available options are "error", "exception", "warning", "warn", "ignore", and "suppress". The global policy variable may be set and retrieved via the functions msvc_set_scripterror_policy and msvc_get_scripterror_policy, respectively. These two methods may be imported from SCons.Tool.MSCommon. The environment construction variable is MSVC_SCRIPTERROR_POLICY. When defined, the environment construction variable overrides the global policy setting for a given environment. When the active policy is "error" or "exception", an MSVCScriptExecutionError exception is raised when msvc batch file errors are detected. When the active policy is "warning" or "warn", an MSVCScriptExecutionWarning warning is issued when msvc batch file errors are detected. When the active policy is "ignore" or "suppress", msvc batch error messages are suppressed. As implemented, the default global policy is "ignore". The ability to set the global policy via an SCons command-line option may be added in a future enhancement.
  • Added experimental function msvc_query_version_toolset to SCons.Tool.MSCommon. Given a version specification, this function will return an msvc version and an msvc toolset version. The msvc toolset version may be None. The msvc version and msvc toolset version can be used in the environment construction variables MSVC_VERSION and MSVC_TOOLSET_VERSION, respectively. The version specification may be an msvc version or an msvc toolset version. This is a proxy for using an msvc toolset version to select an msvc instance. This function may be removed when an msvc toolset version is used during msvc instance selection.
  • Fortran: a new construction variable FORTRANCOMMONFLAGS is added which is applied to all Fortran dialects, to enable global (all-dialect) settings.
  • lex: two new construction variables are introduced (LEX_HEADER_ILE and LEX_TABLES_FILE) as the preferred way of specifying extra files that the tool can generate.
  • yacc: two new construction variables are introduced (YACC_HEADER_FILE and YACC_GRAPH_FILE) as the preferred way of specifying extra files that the tool can generate (applies only when using GNU flex and GNU bison).

CHANGED/ENHANCED EXISTING FUNCTIONALITY

  • On Windows, %AllUsersProfile%\scons\site_scons is now the default "system" location for a site_scons directory. %AllUsersProfile%\Application Data\scons\site_scons will continue to work. There does not seem to be any existing convention to use an "Application Data" subdirectory here.

  • Action._subproc() can now be used as a python context manager to ensure that the POpen object is properly closed.

  • SCons help (-H) no longer prints the "ignored for compatibility" options, which are still listed in the manpage.

  • Help is now sensitive to the size of the terminal window: the width of the help text will scale to wider (or narrower) terminals than 80 characters.

  • Ninja: Changed generated build.ninja file to run SCons only build Actions via a SCons Deamon. Added logic for starting and connecting to SCons daemon (currently only used for ninja)

  • The change to "content" and "content-timestamp" Decider names is reflected in the User Guide as well, since the hash function may be other than md5 (tidying up from earlier change)

  • If the (experimental) SCONS_CACHE_MSVC_CONFIG feature is used, it will now attempt a sanity check for the cached compiler information, and regenerate it if needed. Previously, this cache would fail if a compiler upgrade caused a change to internal paths (e.g. upgrading from 17.1 to 17.2 causes a necessary path component in some of the cached vars to need to 14.32.31326 instead of 14.31.31103), and the cache file needed to be manually removed. The default cachefile name is now "scons_msvc_cache.json" rather than ".scons_msvc_cache" so there should be no transition problem if using the default; if using a custom cache file name, the cache should still be manually removed if there are problems to transition to the new style.

  • Ninja: Update ninja file generation to only create response files for build commands which exceed MAXLINELENGTH

  • Update the debug output written to stdout for MSVC initialization which is enabled by setting SCONS_MSCOMMON_DEBUG=- to use the logging module. Also changed the debug output format written to stdout to include more information about the source for each message of MSVC initialization debugging output. A single space was added before the message for all debugging output records written to stdout and to files.

  • Ninja: Made ninja tool force the ninja file as the only target. Also improved the default targets setup and made sure there is always a default target for the ninja file, which excludes targets that start and stop the daemon.

  • Ninja: Update ninja tool so targets passed to SCons are propgated to ninja when scons automatically executes ninja.

  • Add JavaScanner to include JAVACLASSPATH as a dependency when using the Java tool.

  • The build argument (i.e., x86) is no longer passed to the MSVC 6.0 to 7.1 batch files. This may improve the effectiveness of the internal msvc cache when using MSVC detection and when bypassing MSVC detection as the MSVC 6.0 to 7.1 batch files do not expect any arguments.

  • Propagate the OS and windir environment variables from the system environment to the msvc environment. The OS and windir environment variables are used in the MSVC 6.0 batch file and the SDK 6.0-7.1 SetEnv.cmd batch files. Inclusion of the OS and windir environment variables eliminates some partial paths and warnings generated by the MSVC 6.0 and SDK 6.0-7.1 batch files when the variables are not defined.

    • Note: Attempting to run the SDK 6.0-7.1 batch files directly via MSVC_USE_SCRIPT can lead to build failures and/or incomplete build environments. The SDK 6.0-7.1 batch files require delayed expansion to be enabled which is currently not supported and is typically not enabled by default on the host system. The batch files may also require environment variables that are not included by default in the msvc environment.
  • An exception is raised when MSVC_UWP_APP is enabled for Visual Studio 2013 and earlier. Previous behavior was to silently ignore MSVC_UWP_APP when enabled for Visual Studio 2013 and earlier. Refer to the documentation for additional requirements and validation details. MSVC_UWP_APP was extended to accept True, False, and None in addition to '1' and '0'.

  • Ninja: added option "--skip-ninja-regen" to enable skipping regeneration of the ninja file if scons can determine the ninja file doesnot need to be regenerated, which will also skip restarting the scons daemon. Note this option is could result in incorrect rebuilds if scons Glob or scons generated files are used in ninja build target's command lines.

  • Tool loading used to have a special case for Jython, it no longer does. This effectively means SCons doesn't work with Jython, which has in reality been the case ever since SCons dropped Python 2 support - there is still no timeline for Jython switching to Python 3 compatibility.

FIXES

  • Fix a number of Python ResourceWarnings which are issued when running SCons and/or it's tests with python 3.9 (or higher)
  • Ninja: Fix issue where Configure files weren't being properly processed when build run via ninja.
  • Fixed crash in C scanner's dictify_CPPDEFINES() function which happens if AppendUnique is called on CPPPATH. (Issue #4108).
  • Added default values for source and target arguments to _defines() function. This is used to expand CPPDEFINES (and others). Previous change added those arguments with no defaults, so old usage where _defines() was called without source and target arguments would yield an exception. This issue was found via qt4 and qt5 tools in scons-contrib https://github.com/SCons/scons-contrib/issues/45
  • Fix issue where if you only had mingw installed on a Windows system and no MSVC compiler, and did not explicitly request the mingw tool, mingw tool initialization would fail and set the default compiler to MSVC which wasn't installed, yielding broken build. Updated mingw tool so that the generate and exists methods use the same mingw search paths (issue #4134).
  • Ninja: Added NINJA_GENERATED_SOURCE_ALIAS_NAME which allows user to specify an Alias() which the ninja tool can use to determine which files are generated sources. If this is not set by the user then the ninja tool will still dynamically determine which files are generated sources based on NINJA_GENERATED_SOURCE_SUFFIXES, and create a phony target _ninja_generated_sources. Generated sources will be built first by ninja. This is needed because ninja cannot determine which generated sources are required by other build targets. Code contributed by MongoDB.
  • Added special case for ninja scons daemon to work in win32 python3.6 environments. This particular environment does a bad job managing popen standard file handles, so some special workarounds are needed.
  • Added user configurable setting of ninja depfile format via NINJA_DEPFILE_PARSE_FORMAT. Now setting NINJA_DEPFILE_PARSE_FORMAT to [msvc,gcc,clang] can force the ninja expected format. Compiler tools will also configure the variable automatically.
  • Fix issue where Express versions of the MSVC compiler were not detected due to differences in initial msvc detection and msvc batch file determination when configuring the build environment. This could lead to build failures when only an MSVC Express instance is installed and the MSVC version is not explicitly specified (issue #2668 and issue #2697).
  • Restore the ability of the content-timestamp decider to see that a a source which is a symlink has changed if the file-system target of that link has been modified (issue #3880)
  • Fix typo in ninja scons daemon startup which causes ConnectionRefusedError to not retry to connect to the server during start up.
  • Fix incorrect Java classpath generation when a NodeList is used as part of any JAVA*PATH variables.
  • The system environment variable names imported for MSVC 7.0 and 6.0 were updated to be consistent with the variables names defined by their respective installers. This fixes an error caused when bypassing MSVC detection by specifying the MSVC 7.0 batch file directly.
  • lex: Fixed an issue with the lex tool where file arguments specified to either "--header-file=" or "--tables-file=" which included a space in the path to the file would be processed incorrectly
  • Modify the MSCommon logger configuration to be independent of the root logger. This fixes an issue when multiple loggers are created and the MSCommon logger added computed fields to the root logger that are not present in other logging instances.
  • Modify the MSVC_USE_SCRIPT_ARGS test fixture to disable the msvc cache. This fixes an issue where the MSVC_USE_SCRIPT_ARGS test for success relied on a debug log message that was not produced when the msvc cache file exists and the test keys are already in the cache as the msvc script invocation was bypassed.
  • Suppress issuing a warning when there are no installed Visual Studio instances for the default tools configuration (issue #2813). When msvc is the default compiler because there are no compilers installed, a build may fail due to the cl.exe command not being recognized. At present, there is no easy way to detect during msvc initialization if the default environment will be used later to build a program and/or library. There is no error/warning issued for the default tools as there are legitimate SCons uses that do not require a c compiler.

IMPROVEMENTS

  • Verify that a user specified msvc script (via MSVC_USE_SCRIPT) exists and raise an exception immediately when the user specified msvc script does not exist.
  • Add cache-debug messages for push failures.
  • Ninja: Added ninja mingw support and improved ninja CommandGeneratorAction support.
  • Command-line help is now sensitive to the size of the terminal window: the width of the help text will scale for terminals other than 80 chars wide.
  • Refactor the msvc code so that the same data structures are used during initial msvc detection and msvc batch file determination when configuring the build environment. Simplify the msvc code by eliminating special case handling primarily due to the differences between the full versions and express versions of visual studio.
  • Small refactor of scons daemons using a shared StateInfo class for communication between the scons interactive thread and the http server thread. Added error handling for scons interactive failing to startup.
  • Ninja: Updated ninja scons daemon scripts to output errors to stderr as well as the daemon log.
  • Ninja: Ensure that all targets set as default via Default() in SConstruct/SConscripts are default targets in the generated ninja.build file.

PACKAGING

  • Added project_url for mailing lists and Discord
  • Updated setup.cfg to remove Python 3.5 and add Python 3.10

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.3.0..HEAD
174  Joseph Brill
126  Mats Wichmann
  93  William Deegan
  64  Daniel Moody
  4  SergBobrovsky
  2  dependabot[bot]
  1  djh
  1  Ivan Kravets
  1  Vishwajith-K
  1  Zhichang Yu

.. _page: http://sourceforge.net/projects/scons/files/scons/4.4.0/ .. _ChangeLog: https://raw.githubusercontent.com/SCons/scons/rel_4.4.0/CHANGES.txt

4.3.0

2 years ago

A new SCons release, 4.3.0, is now available on the SCons download page:

  https://scons.org/pages/download.html

NOTE: 4.3.0 now requires Python 3.6.0 and above. Python 3.5.x is no longer supported

Here is a summary of the changes since 4.2.0:

NEW FUNCTIONALITY

  • Ninja - Added ninja API 'NINJA_FORCE_SCONS_BUILD' to force a node to callback to scons.
  • Add support for Visual Studio 2022.

DEPRECATED FUNCTIONALITY

  • The qt tool, which targets Qt version 3, is deprecated. Qt3 has been unsupported by upstream for many years. Qt4 and Qt5 tools are available from scons-contrib.

CHANGED/ENHANCED EXISTING FUNCTIONALITY

  • Ninja - Expanded ninja Mkdir to also support Mkdir actions.
  • Further PCH updates. It's now recommended that env['PCH'] should always be a File node. Either via return value from env.PCH() or by explicitly using File('StdAfx.pch').
  • Change SCons.Platform.win32.get_architecture() to return platform.platform() when run in an environment where neither: PROCESSOR_ARCHITEW6432 nor PROCESSOR_ARCHITECTURE is set. This should fix platform tests which started failing when HOST_OS/HOST_ARCH changes introduced by Aaron Franke (listed below) were merged.
  • The Java tool now accepts more versions (up to 17.0), and is better able to detect the many builds of OpenJDK available since it became designated the reference Java implementation.

FIXES

  • Fix reproducible builds. Restore logic respecting SOURCE_DATE_EPOCH when set.
  • Small fix to ensure CLVar default value is an empty list. See MongoDB bug report: https://jira.mongodb.org/browse/SERVER-59656 Code contributed by MongoDB.
  • Ninja - Fix ninja tool to never use for_sig substitution because ninja does not use signatures. This issue affected CommandGeneratorAction function actions specifically.
  • Fix PCH not being evaluated by subst() where necessary.
  • Fix issue #4021. Change the way subst() is used in Textfile() to not evaluate '$$(' -> '$', but instead it should yield '$('.
  • Ninja - Fix command line escaping for ninja dollar sign escape. Without escaping ninja properly,
  • Fix MSVS tests (vs-N.N-exec.py) for MSVS 6.0, 7.0, and 7.1 (import missing module).
  • Fix command line escaping for ninja dollar sign escape. Without escaping ninja properly, the ninja file scons regenerate and callback invocations will lose the $ characters used in the scons command line which ninja uses itself for escaping. For Example: scons BUILD=xyz OTHERVAR=$BUILD Prior to this fix, it would cause ninja to fail to escape the dollar sign, leading to the single dollar sign being used as a ninja escape character in the ninja file.
  • Ninja - Fixed an issue where if you control-c and/or killed ninja while it was running scons to regenerate build.ninja you would end up with no build.ninja file and have to rerun scons from scratch. Code contributed by MongoDB.

DEVELOPMENT

  • Added --no-ignore-skips to runtest.py. Changed default to ignore skips when setting runtest.py's exit status. Previously would exit 2 if any tests were skipped. Now will only exit 2 if user specifies --no-ignore-skips and some tests were skipped.

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.2.0..HEAD
47  Mats Wichmann
46  William Deegan
14  Jacob Cassagnol
11  Daniel Moody
 8  Ryan Egesdahl
 5  Joseph Brill
 4  Omar Polo
 2  Brian Quistorff
 1  Aaron Franke

4.2.0

2 years ago

A new SCons release, 4.2.0, is now available on the SCons download page:

  https://scons.org/pages/download.html

Here is a summary of the changes since 4.1.0:

NOTE: The 4.2.0 Release of SCons will deprecate Python 3.5 Support. Python 3.5 support will be dropped in the next major release.

NEW FUNCTIONALITY

- Add support for the (TARGET,SOURCE,TARGETS,SOURCES,CHANGED_TARGETS,CHANGED_SOURCES}.relpath property.
  This will provide a path relative to the top of the build tree (where the SConstruct is located)
  Fixes #396
- Added --experimental flag, to enable various experimental features/tools.  You can specify
  'all', 'none', or any combination of available experimental features.
- Added affect_signature flag to  _concat function.  If set to False, it will prepend and append $( and $).
  That way the various Environment variables can use that rather than "$( _concat(...) $)".

DEPRECATED FUNCTIONALITY

- Deprecate Python 3.5 as a supported version.

CHANGED/ENHANCED EXISTING FUNCTIONALITY

- SCons now supports the command-line parameter `--hash-format` to override the default
  hash format that SCons uses. It can also be set via `SetOption('hash_format')`. Supported
  values are: `md5`, `sha1`, and `sha256`. For all hash formats other than
  the default of `md5`, the SConsign database will include the name of the hash format.
  For example, `--hash-format=sha256` will create a SConsign with name
  `.sconsign_sha256.dblite.`.
- Improve Subst()'s logic to check for proper callable function or class's argument list.
  It will now allow callables with expected args, and any extra args as long as they
  have default arguments. Additionally functions with no defaults for extra arguments
  as long as they are set using functools.partial to create a new callable which set them.
- Internal has_key methods removed from SCons' dictionary-like objects
  SubstitutionEnvironment and OverrideEnvironment - in other words,
  an env - to match Python 3 which no longer has dict.has_key.
- Removed long-deprecated construction variables PDFCOM, WIN32_INSERT_DEF,
  WIN32DEFPREFIX, WIN32DEFSUFFIX, WIN32EXPPREFIX, WIN32EXPSUFFIX.
  All have been replaced by other names since at least 1.0.
- Added CACHEDIR_CLASS construction variable and expanded CacheDir method args
  to support SCons invoking CacheDir derived classes for CacheDir customization.
  Moved copy_from_cache attribute from the Environment class to CacheDir class.
  Code contributed by MongoDB.
- Update BuildTask to pass all targets to the progress object fixing an issue
  where multi-target build nodes only got the first target passed to the progress
  object.
- Change SConscript() missing SConscript behavior - if must_exist=False,
  the warning is suppressed.

FIXES

- The command-line parameter `--md5-chunksize` is now deprecated. Use `--hash-chunksize`
  instead.
- Fix Issue #3906 - `IMPLICIT_COMMAND_DEPENDENCIES` was not properly disabled when
  set to any string value (For example ['none','false','no','off'])
  Also previously 'All' wouldn't have the desired affect.
- DocbookXslt tool: The XSLT stylesheet file is now initialized to an env.File() Node, 
  such that dependencies work correctly in hierarchical builds (eg when using 
  DocbookXslt in SConscript('subdir/SConscript') context.
- The Install builder will now set the writable mode on the file(s) it
  copies. This restores the (previously undocumented) SCons behavior
  that regressed as of 4.0.0.
- Fix issue #3790: Generators in CPPDEFINES now have access to populated source
  and target lists
- Fix a potential race condition in shared cache environments where the permissions are
  not writeable for a moment after the file has been renamed and other builds (users) will copy
  it out of the cacheSmall reorganization of logic to copy files from cachedir. Moved CacheDir 
  writeable permission code for copy to cache behind the atomic rename operation.
- Fixed intermediate and and multi target nodes generated from SConf tests not being marked
  as is_conftest().

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.1.0..HEAD
   177  William Deegan
   101  Daniel Moody
    95  Mats Wichmann
    25  Adam Gross
     4  greenbender
     4  Daniel
     4  Henrik Maier
     4  Mathew Robinson
     3  Andrew Morrow
     3  Ivan Kravets
     3  Dillan Mills
     1  WholesomeIsland
     1  dependabot[bot]
     1  djh
     1  Joseph Brill

4.1.0

3 years ago

SCons 4.1.0 is available

Here is a summary of the changes since 4.0.1:

NEW FUNCTIONALITY

  • Add COMPILATIONDB_PATH_FILTER env option for CompilationDatabase() builder which allows filtering of entries based on the output file paths using glob style file matching (issue #3742).
  • Add ZIP_OVERRIDE_TIMESTAMP env option to Zip builder which allows for overriding of the file modification times in the archive.
  • Raise an error if an option (not otherwise consumed) is used which looks like an abbreviation of one one added by AddOption. (#3653)

CHANGED/ENHANCED EXISTING FUNCTIONALITY

  • Completely rewrote versioned shared libraries logic. Added support for SOVERSION via dmoody's initial PR #3733

  • No longer automatically disable setting SONAME on shared libraries on OpenBSD.

  • Environment.SideEffect() no longer adds duplicate side effects. NOTE: The list of returned side effect Nodes will not include any duplicate side effect Nodes.

  • /snap/bin is added to the default search path for the 'posix' platform.

  • Completely rewrote versioned shared libraries logic.

  • Added support for SOVERSION

  • No longer automatically disable setting SONAME on shared libraries on OpenBSD.

  • Switch to use ctypes instead of pywin32 (requiring an extra pip install) - Fixes Github Issue #2291

    • pywin32 no longer necessary for SCons install. (pip install SCons will no longer also require pywin32 on win32)
    • Remove pywin32 usage from SCons.Util where it was used for accessing the registry. Python native winreg library already includes this functionality.
    • Remove using pywin32 to retrieve peak memory usage on Win32 for --debug=memory
  • Tool module not found will now raise a UserError to more clearly indicate this is probably an SConscript problem, and to make the traceback more relevant.

  • Fix three issues with MergeFlags:

    • Signature/return did not match documentation or existing usage - the implementation now no longer returns the passed env
    • merging --param arguments did not work (issue #3107);
    • passing a dict to merge where the values are strings failed (issue #2961).
  • Only try to initialize the wix tool by default (or when tool default is explicitly installed) on Windows based systems.

  • Add /snap/bin to env['PATH'] on POSIX, although this is only really useful for a subset of POSIX systems that use snaps. Was needed for CI builds, which run on Ubuntu LTS images.

FIXES

  • Fix yacc tool, not respecting YACC set at time of tool initialization.
  • Fix race condition bug when initializing a scons cache directory at the same time from multiple threads or processes. Problem described in PR #3114. This is a simpler fix which should avoid some problems identified with the initial PR. (Credit to Fredrik Medley for reporting the issue, the initial PR, and discussing and testing this solution)
  • Fix incorrect cache hits and/or misses when running in interactive mode by having SCons.Node.Node.clear() clear out all caching-related state.
  • Fix Zip builder not rebuilding when ZIPROOT env option was changed.
  • Fix python3 crash when Value node get_text_content when child content does not have decode() NOTE: If you depend on Value node's get_text_content returning concatenated contents of it's children. This may break your code. It now concatenates the csig() of all children.
  • Fix Zip tool to respect ZIPCOMSTR. Previously all zip builder calls would yield something like zip(["test.zip"], ["zip_scons.py"]) and ignore ZIPCOMSTR if ZIPCOM and ZIPCOMSTR weren't set after the Environment/Tool is initialized. (Explained in PR #3659)
  • Fix issue where java parsed a class incorrectly from lambdas used after a new.
  • Fix using TEMPFILE in multiple actions in an action list. Previously a builder, or command with an action list like the following could yield a single tempfile with the first TEMPFILE's contents, used by both steps in the action list.

.. code-block:: text

['${TEMPFILE("xxx.py -otempfile $SOURCE")}', '${TEMPFILE("yyy.py -o$TARGET tempfile")}']

  • Cleanup in SCons.Util.AddMethod. If called with an environment instance as the object to modify, the method would not be correctly set up in any Clone of that instance. Now tries to detect this and calls MethodWrapper to set up the method the same way env.AddMethod does. MethodWrapper moved to Util to avoid a circular import. Fixes #3028.
  • Fix Issue #3014 - Empty file and missing file have same csig

PACKAGING

  • Fix Issue #3759 - include scons.1, sconsign.1, scons-time.1 manpages in sdist and wheel packages.
  • Pick a better "Topic" Trove classifier for SCons: SW Dev / Build Tools

DOCUMENTATION

  • Include previously-excluded SideEffect section in User Guide.

DEVELOPMENT

  • Rework runtest.py to use argparse for arg handling (was a mix of hand-coded and optparse, with a stated intent to "gradually port").
  • Add options to runtest to generate/not generate a log of failed tests, and to rerun such tests. Useful when an error cascades through several tests, can quickly try if a change improves all the fails. Dropped runtest test for fallback from qmtest, not needed; added new tests.

Thanks to the following contributors listed below for their contributions to this release.

.. code-block:: text

git shortlog --no-merges -ns 4.0.1..HEAD
  115  Mats Wichmann
    83  William Deegan
    14  Adam Gross
    4  Joseph Brill
    3  Joachim Kuebart
    2  GIT
    2  Daniel Moody
    2  James Benton
    1  Unknown
    1  Daniel
    1  anatoly techtonik
    1  Dirk Baechle
    1  dependabot[bot]
    1  David H
    1  Michał Górny
    1  Simon Tegelid

.. _page: http://sourceforge.net/projects/scons/files/scons/4.1.0/ .. _ChangeLog: https://raw.githubusercontent.com/SCons/scons/rel_4.1.0/CHANGES.txt

3.0.5a2

5 years ago

This is an alpha release for the Mesa project to try to ensure their windows build issue with MD5-timestamp decider has been resolved.

This should resolve: https://bugs.freedesktop.org/show_bug.cgi?id=109443