Skip to content

Releases: SCons/scons

SCons 4.7.0 Released

18 Mar 00:55
Compare
Choose a tag to compare

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

SCons 4.6.0

20 Nov 02:03
Compare
Choose a tag to compare

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  ...
Read more

4.5.2 Release

21 Mar 16:25
Compare
Choose a tag to compare

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 Release

07 Mar 04:54
Compare
Choose a tag to compare

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 Release

05 Mar 22:21
Compare
Choose a tag to compare

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...
Read more

SCons 4.4.0

30 Jul 21:59
Compare
Choose a tag to compare

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 en...
Read more

4.3.0 Release is available

15 Feb 17:54
Compare
Choose a tag to compare

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 Release is available.

05 Aug 19:31
Compare
Choose a tag to compare

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 Release

19 Jan 22:02
Compare
Choose a tag to compare

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

05 Mar 16:08
Compare
Choose a tag to compare
3.0.5a2 Pre-release
Pre-release

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