rewording of CHANGES.txt info. Changed versionadded to 4.5.0
[scons.git] / RELEASE.txt
blob756d674c10999d1552fc0d82de591ff8c8f5afd4
1 If you are reading this in the git repository, the contents
2 refer to *unreleased* changes since the last SCons release.
3 Past official release announcements appear at:
5     https://scons.org/tag/releases.html
7 ==================================================================
9 A new SCons release, 4.4.1, is now available on the SCons download page:
11     https://scons.org/pages/download.html
14 Here is a summary of the changes since 4.4.0:
16 NOTE: If you build with Python 3.10.0 and then rebuild with 3.10.1 (or higher), you may
17       see unexpected rebuilds. This is due to Python internals changing which changed
18       the signature of a Python Action Function.
20 NOTE: If you use a dictionary to specify your CPPDEFINES, you may see unexpected build results
21       The insertion order of dictionary keys is now preserved when generating the command line.
22       Previously these were sorted alphabecially.  This change to the command line,
23       while generating identical set of CPPDEFINES can change order and cause a rebuild.
26 NEW FUNCTIONALITY
27 -----------------
29 - Added ValidateOptions() which will check that all command line options are in either
30   those specified by SCons itself, or by AddOption() in SConstruct/SConscript.  It should
31   not be called until all AddOption() calls are completed. Resolves Issue #4187
32 - Added --experimental=tm_v2, which enables Andrew Morrow's NewParallel Job implementation.
33   This should scale much better for highly parallel builds.  You can also enable this via SetOption().
36 DEPRECATED FUNCTIONALITY
37 ------------------------
39 - List anything that's been deprecated since the last release
41 CHANGED/ENHANCED EXISTING FUNCTIONALITY
42 ---------------------------------------
44 - Added -fsanitize support to ParseFlags().  This will propagate to CCFLAGS and LINKFLAGS.
45 - Calling EnsureSConsVersion() and EnsurePythonVersion() won't initialize
46   DefaultEnvironment anymore.
47 - The console message from the Chmod() action function now displays
48   octal modes using the modern Python syntax (0o755 rather than 0755).
49 - Migrated logging logic for --taskmastertrace to use Python's logging module. Added logging
50   to NewParallel Job class (Andrew Morrow's new parallel job implementation)
51 - Preliminary support for Python 3.12.
52 - Run LaTeX after biber/bibtex only if necessary
53 - Configure context methods CheckLib and CheckLibWithHeader now expose
54   two additional keyword arguments: 'append', which controls whether to append
55   (the default) or prepend discovered libraries to $LIBS, and 'unique',
56   which controls whether to add the library if it is already in the $LIBS
57   list. This brings the library-adding functionality in Configure in line
58   with the regular Append, AppendUnique, Prepend and PrependUnique methods.
59 - CPPDEFINES values added via a dictionary type are longer sorted by
60   key. This used to be required to maintain a consistent order of
61   commandline arguments between SCons runs, but meant macros were not
62   always emitted in the order entered. Sorting is no longer required
63   after Python interpreter improvements.  There might be a one-time 
64   rebuild of targets that involved such sorted keys in their actions.
66 FIXES
67 -----
69 - Added missing newline to generated compilation database (compile_commands.json)
70 - A list argument as the source to the Copy() action function is now handled.
71   Both the implementation and the strfunction which prints the progress
72   message were adjusted.
73 - The Java Scanner processing of JAVACLASSPATH for dependencies (behavior
74   that was introduced in SCons 4.4.0) is adjusted to split on the system's
75   search path separator instead of on a space. The previous behavior meant
76   that a path containing spaces (e.g. r"C:\somepath\My Classes") would
77   lead to unexpected errors. If the split-on-space behavior is desired,
78   pre-split the value: instead of: env["JAVACLASSPATH"] = "foo bar baz"
79   use: env["JAVACLASSPATH"] = env.Split("foo bar baz")
80   There is no change in how JAVACLASSPATH gets turned into the -classpath
81   argument passed to the JDK tools.
82 - Ninja: Fix execution environment sanitation for launching ninja. Previously if you set an
83   execution environment variable set to a python list it would crash. Now it
84   will create a string joining the list with os.pathsep
85 - Fixed command line argument --diskcheck: previously a value of 'none' was ignored.
86   SetOption('diskcheck','none') is unaffected, as it did not have the problem.
87 - Fixed Issue #4275 - when outputting compilation db and TEMPFILE was in use, the compilation db would have
88   command lines using the generated tempfile for long command lines, instead of the full command line for
89   the compilation step for the source/target pair.
90 - A refactor in the caching logic for version 4.4.0 left Java inner classes
91   failing with an exception when a CacheDir was enabled. This is now corrected.
92 - When using the gfortran tool (the default on most platforms as long as a GNU
93   toolchain is installed), the user setting of the "dialect" compilers
94   (F77, F90, F03 and F09, as well as the shared-library equivalents SHF77,
95   SHF90, SHF03, SHF09) is now honored; previously the tool overwrote the
96   settings to 'gfortran', which made it difficult reference a cross-compile
97   version for dialects.
98 - Fix issue #2757, where Configure checks that perform a check which reads a modified source
99   (including program, source or header file(s)) would incorrectly mark that file "up to date" so the
100   actual build would not see the file as modified. Leading to incorrect incremental builds.
101   Now configure checks now clear node info for non conftest nodes, so they will be re-evaluated for
102   the real taskmaster run when the build commences.
103 - Inconsistent behavior of adding values to the CPPDEFINES construction
104   variable has been cleaned up (described in issue #4254). Now a tuple,
105   whether provided by itself or as a member of a list, is consistently
106   interpreted as a macro with replacement value. When adding a list,
107   individual members are added in sequence without interpretation.
108   A string value containing spaces is split if it is the initial value or
109   added, but not if it is given as a member of an added list.  Detection
110   of duplicate macros now works for both valued and unvalued forms.
111 - Handling of CPPDEFINES macros via Prepend and PrependUnique now works
112   (previously this was special-cased only for Append and AppendUnique).
114 IMPROVEMENTS
115 ------------
117 - Changed the Taskmaster trace logic to use python's logging module.
118 - Add cache-debug messages for push failures.
119 - Added error message to handle the case when SCons attempts to retrieve all the targets
120   for a specified builder from the CacheDir, fails to do so, and then runs into an error
121   when deleting the files which were retrieved. Previously if this happened there were no
122   errors or warnings.
124 PACKAGING
125 ---------
127 - SCons now has three requirements files: requirements.txt describes
128   requirements to run scons; requirements-dev.txt requirements to
129   develop it - mainly things needed to run the testsuite;
130   requirements_pkg.txt are the requirements to do a full build
131   (including docs build) with an intent to create the packages.
132 - Moved rpm and debian directories under packaging
133 - Added logic to help packagers enable reproducible builds into packaging/etc/.
134   Please read packaging/etc/README.txt if you are interested.
135 - A zipapp of scons-local is now also built.
138 DOCUMENTATION
139 -------------
141 - Updated the --hash-format manpage entry.
142 - EnsureSConsVersion, EnsurePythonVersion, Exit, GetLaunchDir and
143   SConscriptChdir are now listed as Global functions only.
144 - Updated the docs for Glob.
145 - Updated SHELL_ENV_GENERATORS description and added versionadded indicator.
146 - JAVABOOTCLASSPATH, JAVACLASSPATH and JAVASOURCEPATH better document the
147   acceptable syntax for values, and how they will be interpreted,
148   including that JAVACLASSPATH will be scanned for dependencies.
149   Added note on the possibly surprising feature that SCons always passes
150   -sourcepath when calling javac, which affects how the class path is
151   used when finding sources.
152 - Updated the User Guide chapter on installation: modernized the notes
153   on Python installs, SCons installs, and having multiple SCons versions
154   present on a single system.
155 - Updated the User Guide chapter on variant directories with more
156   explanation, and the introduction of terms like "out of tree" that
157   may help in forming a mental model.
158 - Additional explanations for MSVSProject and MSVSSolution builders.
159 - Updated MSVC documentation - adds "version added" annotations on recently
160   added construction variables and provides a version-mapping table.
161 - Added further details in the documentation of Append and related methods
162   on the special handling of CPPDEFINES.
164 DEVELOPMENT
165 -----------
167 - Refactored SCons/Taskmaster into a package. Moved SCons/Jobs.py into that package.
168   NOTE: If you hook into SCons.Jobs, you'll have to change that to use SCons.Taskmaster.Jobs
169 - Refactored SCons.Util, which had grown quite large, to be a package,
170   not a single-file module. Change should be transparent: the same import
171   of SCons.Util and public symbols from it will continue to work, however
172   code which reaches directly in to grab private symbols (starting with
173   underscore) which moved to a submodule, that code will have to be adjusted,
174   as those are not imported to the package level (new SCons.Util.hashes has
175   some of these, which are used by existing unit tests).
176 - Added overrides argument to SCons.Subst.scons_subst(), subst_list(), subst(), and Action's process(),
177   strfunction(). This allows passing a dictionary of envvars to override when evaluating subst()'d strings/lists
180 Thanks to the following contributors listed below for their contributions to this release.
181 ==========================================================================================
182 .. code-block:: text
184     git shortlog --no-merges -ns 4.4.0..HEAD