<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<p>FYI: GNU Make 4.4 is coming closer, and it will bring along an
unprecedented set of incompatible changes (for make; that is, a
product that has been unchanged for like 20 years). Most won't
affect us, but some likely will. At the moment, I recommend users
to stay at GNU Make 4.2.x for building the JDK. In some
not-too-distant future, we will have to check what breaks with
make 4.3/4.4 and fix it.<br>
</p>
<div class="moz-forward-container">/Magnus<br>
<br>
-------- Forwarded Message --------
<table class="moz-email-headers-table" cellspacing="0" cellpadding="0" border="0">
<tbody>
<tr>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">Subject:
</th>
<td>GNU make 4.3.91 release candidate available</td>
</tr>
<tr>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">Date: </th>
<td>Tue, 18 Oct 2022 16:45:48 -0400</td>
</tr>
<tr>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">From: </th>
<td>Paul Smith <a class="moz-txt-link-rfc2396E" href="mailto:psmith@gnu.org"><psmith@gnu.org></a></td>
</tr>
<tr>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">Reply-To:
</th>
<td><a class="moz-txt-link-abbreviated" href="mailto:psmith@gnu.org">psmith@gnu.org</a></td>
</tr>
<tr>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">Organization:
</th>
<td>GNU's Not UNIX!</td>
</tr>
<tr>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">To: </th>
<td><a class="moz-txt-link-abbreviated" href="mailto:bug-make@gnu.org">bug-make@gnu.org</a></td>
</tr>
<tr>
<th valign="BASELINE" nowrap="nowrap" align="RIGHT">CC: </th>
<td><a class="moz-txt-link-abbreviated" href="mailto:coordinator@translationproject.org">coordinator@translationproject.org</a>,
<a class="moz-txt-link-abbreviated" href="mailto:platform-testers@gnu.org">platform-testers@gnu.org</a></td>
</tr>
</tbody>
</table>
<br>
<br>
--------------------------------------------------------------------<br>
GNU make is a tool which controls the generation of executables
and<br>
other non-source files of a program from the program's source
files.<br>
<br>
You can learn more at: <a class="moz-txt-link-freetext" href="https://www.gnu.org/software/make/">https://www.gnu.org/software/make/</a><br>
--------------------------------------------------------------------<br>
<br>
A new release candidate for GNU make 4.4 is available now for
download:<br>
<br>
4defb3f9cb1f49956cdb28befb3abafb make-4.3.91.tar.lz<br>
6738e93afc158bab8f1e63f053cbebca make-4.3.91.tar.gz<br>
<br>
You can obtain a copy from: <a class="moz-txt-link-freetext" href="https://alpha.gnu.org/gnu/make/">https://alpha.gnu.org/gnu/make/</a><br>
<br>
- NEWS
----------------------------------------------------------------<br>
<br>
Version 4.3.91 (18 Oct 2022)<br>
<br>
A complete list of bugs fixed in this version is available here:<br>
<br>
<a class="moz-txt-link-freetext" href="https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=109&set=custom">https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=109&set=custom</a><br>
<br>
* WARNING: Deprecation!<br>
The following systems are deprecated in this release:<br>
- OS/2 (EMX)<br>
- AmigaOS<br>
- Xenix<br>
- Cray<br>
In the NEXT release of GNU Make, support for these systems will be
removed.<br>
If you want to see them continue to be supported, contact
<a class="moz-txt-link-rfc2396E" href="mailto:bug-make@gnu.org"><bug-make@gnu.org></a>.<br>
<br>
* WARNING: Future backward-incompatibility!<br>
In the NEXT release of GNU Make, pattern rules will implement the
same<br>
behavior change for multiple targets as explicit grouped targets,
below: if<br>
any target of the rule is needed by the build, the recipe will be
invoked if<br>
any target of the rule is missing or out of date. During testing
some<br>
makefiles were found to contain pattern rules that do not build
all targets;<br>
this can cause issues so we are delaying this change for one
release cycle<br>
to allow these makefiles to be updated. GNU Make shows a warning
if it<br>
detects this situation: "pattern recipe did not update peer
target".<br>
<br>
* WARNING: Backward-incompatibility!<br>
GNU Make now uses temporary files in more situations than previous
releases.<br>
If your build system sets TMPDIR (or TMP or TEMP on Windows) and
deletes the<br>
contents during the build, or uses restrictive permissions, this
may cause<br>
problems. You can choose an alternative temporary directory only
for use by<br>
GNU Make by setting the new MAKE_TMPDIR environment variable
before invoking<br>
make. Note that this value CANNOT be set inside the makefile,
since make<br>
needs to find its temporary directory before the makefiles are
parsed.<br>
<br>
* WARNING: Backward-incompatibility!<br>
Previously each target in a explicit grouped target rule was
considered<br>
individually: if the targets needed by the build were not out of
date the<br>
recipe was not run even if other targets in the group were out of
date. Now<br>
if any of the grouped targets are needed by the build, then if any
of the<br>
grouped targets are out of date the recipe is run and all targets
in the<br>
group are considered updated.<br>
<br>
* WARNING: Backward-incompatibility!<br>
Previously if --no-print-directory was seen anywhere in the
environment or<br>
command line it would take precedence over any --print-directory.
Now, the<br>
last setting of directory printing options seen will be used, so a
command<br>
line such as "--no-print-directory -w" _will_ show directory
entry/exits.<br>
<br>
* WARNING: Backward-incompatibility!<br>
Previously the order in which makefiles were remade was not
explicitly<br>
stated, but it was (roughly) the inverse of the order in which
they were<br>
processed by make. In this release, the order in which makefiles
are<br>
rebuilt is the same order in which make processed them, and this
is defined<br>
to be true in the GNU Make manual.<br>
<br>
* WARNING: Backward-incompatibility!<br>
Previously only simple (one-letter) options were added to the
MAKEFLAGS<br>
variable that was visible while parsing makefiles. Now, all
options are<br>
available in MAKEFLAGS. If you want to check MAKEFLAGS for a
one-letter<br>
option, expanding "$(firstword -$(MAKEFLAGS))" is a reliable way
to return<br>
the set of one-letter options which can be examined via
findstring, etc.<br>
<br>
* WARNING: Backward-incompatibility!<br>
Previously makefile variables marked as export were not exported
to commands<br>
started by the $(shell ...) function. Now, all exported variables
are<br>
exported to $(shell ...). If this leads to recursion during
expansion, then<br>
for backward-compatibility the value from the original environment
is used.<br>
To detect this change search for 'shell-export' in the .FEATURES
variable.<br>
<br>
* WARNING: New build requirement<br>
GNU Make utilizes facilities from GNU Gnulib: Gnulib requires
certain C99<br>
features in the C compiler and so these features are required by
GNU Make:<br>
<a class="moz-txt-link-freetext" href="https://www.gnu.org/software/gnulib/manual/html_node/C99-features-assumed.html">https://www.gnu.org/software/gnulib/manual/html_node/C99-features-assumed.html</a><br>
The configure script should verify the compiler has these
features.<br>
<br>
* New feature: The .WAIT special target<br>
If the .WAIT target appears between two prerequisites of a target,
then<br>
GNU Make will wait for all of the targets to the left of .WAIT in
the list<br>
to complete before starting any of the targets to the right of
.WAIT.<br>
This feature is available in some other versions of make, and it
will be<br>
required by an upcoming version of the POSIX standard for make.<br>
Different patches were made by Alexey Neyman
<a class="moz-txt-link-rfc2396E" href="mailto:alex.neyman@auriga.ru"><alex.neyman@auriga.ru></a> (2005)<br>
and Steffen Nurpmeso <a class="moz-txt-link-rfc2396E" href="mailto:steffen@sdaoden.eu"><steffen@sdaoden.eu></a> (2020) that were
useful but the<br>
result is a different implementation (closer to Alexey's idea).<br>
<br>
* New feature: .NOTPARALLEL accepts prerequisites<br>
If the .NOTPARALLEL special target has prerequisites then all
prerequisites<br>
of those targets will be run serially (as if .WAIT was specified
between<br>
each prerequisite).<br>
<br>
* New feature: The .NOTINTERMEDIATE special target<br>
.NOTINTERMEDIATE Disables intermediate behavior for specific
files, for all<br>
files built using a pattern, or for the entire makefile.<br>
Implementation provided by Dmitry Goncharov
<a class="moz-txt-link-rfc2396E" href="mailto:dgoncharov@users.sf.net"><dgoncharov@users.sf.net></a><br>
<br>
* New feature: The $(let ...) function<br>
This function allows user-defined functions to define a set of
local<br>
variables: values can be assigned to these variables from within
the<br>
user-defined function and they will not impact global variable
assignments.<br>
Implementation provided by Jouke Witteveen
<a class="moz-txt-link-rfc2396E" href="mailto:j.witteveen@gmail.com"><j.witteveen@gmail.com></a><br>
<br>
* New feature: The $(intcmp ...) function<br>
This function allows conditional evaluation controlled by a
numerical<br>
comparison.<br>
Implementation provided by Jouke Witteveen
<a class="moz-txt-link-rfc2396E" href="mailto:j.witteveen@gmail.com"><j.witteveen@gmail.com></a><br>
<br>
* New feature: Improved support for -l / --load-average<br>
On systems that provide /proc/loadavg (Linux), GNU Make will use
it to<br>
determine the number of runnable jobs and use this as the current
load,<br>
avoiding the need for heuristics.<br>
Implementation provided by Sven C. Dack <a class="moz-txt-link-rfc2396E" href="mailto:sdack@gmx.com"><sdack@gmx.com></a><br>
<br>
* New feature: The --shuffle command line option<br>
This option reorders goals and prerequisites to simulate
non-determinism<br>
that may be seen using parallel build. Shuffle mode allows a form
of "fuzz<br>
testing" of parallel builds to verify that all prerequisites are
correctly<br>
described in the makefile.<br>
Implementation provided by Sergei Trofimovich
<a class="moz-txt-link-rfc2396E" href="mailto:siarheit@google.com"><siarheit@google.com></a><br>
<br>
* New feature: The --jobserver-style command line option and named
pipes<br>
A new jobserver method is used on systems where mkfifo(3) is
supported.<br>
This solves a number of obscure issues related to using the
jobserver<br>
and recursive invocations of GNU Make. This change means that
sub-makes<br>
will connect to the jobserver even if they are not marked as
recursive.<br>
It also means that other tools that want to participate in the
jobserver<br>
will need to be enhanced as described in the GNU Make manual.<br>
You can force GNU Make to use the simple pipe-based jobserver
(perhaps if<br>
you are integrating with other tools or older versions of GNU
Make) by<br>
adding the '--jobserver-style=pipe' option to the command line of
the<br>
top-level invocation of GNU Make, or via MAKEFLAGS or
GNUMAKEFLAGS.<br>
To detect this change search for 'jobserver-fifo' in the .FEATURES
variable.<br>
<br>
* Some POSIX systems (*BSD) do not allow locks to be taken on
pipes, which<br>
caused the output sync feature to not work properly there. Also
multiple<br>
invocations of make redirecting to the same output file (e.g.,
/dev/null)<br>
would cause hangs. Instead of locking stdout (which does have some
useful<br>
performance characteristics, but is not portable) create a
temporary file<br>
and lock that. Windows continues to use a mutex as before.<br>
<br>
* GNU Make has sometimes chosen unexpected, and sub-optimal,
chains of<br>
implicit rules due to the definition of "ought to exist" in the
implicit<br>
rule search algorithm, which considered any prerequisite mentioned
in the<br>
makefile as "ought to exist". This algorithm has been modified to
prefer<br>
prerequisites mentioned explicitly in the target being built and
only if<br>
that results in no matching rule, will GNU Make consider
prerequisites<br>
mentioned in other targets as "ought to exist".<br>
Implementation provided by Dmitry Goncharov
<a class="moz-txt-link-rfc2396E" href="mailto:dgoncharov@users.sf.net"><dgoncharov@users.sf.net></a><br>
<br>
* GNU Make was performing secondary expansion of all targets, even
targets<br>
which didn't need to be considered during the build. In this
release<br>
only targets which are considered will be secondarily expanded.<br>
Implementation provided by Dmitry Goncharov
<a class="moz-txt-link-rfc2396E" href="mailto:dgoncharov@users.sf.net"><dgoncharov@users.sf.net></a><br>
<br>
* If the MAKEFLAGS variable is modified in a makefile, it will be
re-parsed<br>
immediately rather than after all makefiles have been read. Note
that<br>
although all options are parsed immediately, some special effects
won't<br>
appear until after all makefiles are read.<br>
<br>
* The -I option accepts an argument "-" (e.g., "-I-") which means
"reset the<br>
list of search directories to empty". Among other things this can
be used<br>
to prevent GNU Make from searching in its default list of
directories.<br>
<br>
* New debug option "print" will show the recipe to be run, even
when silent<br>
mode is set, and new debug option "why" will show why a target is
rebuilt<br>
(which prerequisites caused the target to be considered out of
date).<br>
Implementation provided by David Boyce
<a class="moz-txt-link-rfc2396E" href="mailto:David.S.Boyce@gmail.com"><David.S.Boyce@gmail.com></a><br>
<br>
* The existing --trace option is made equivalent to
--debug=print,why<br>
<br>
* Target-specific variables can now be marked "unexport".<br>
<br>
* Exporting / unexporting target-specific variables is handled
correctly, so<br>
that the attribute of the most specific variable setting is used.<br>
<br>
* Special targets like .POSIX are detected upon definition,
ensuring that any<br>
change in behavior takes effect immediately, before the next line
is parsed.<br>
<br>
* When the jobserver is enabled and GNU Make decides it is
invoking a non-make<br>
sub-process and closes the jobserver pipes, it will now add a new
option to<br>
the MAKEFLAGS environment variable that disables the jobserver.<br>
This prevents sub-processes that invoke make from accidentally
using other<br>
open file descriptors as jobserver pipes. For more information see<br>
<a class="moz-txt-link-freetext" href="https://savannah.gnu.org/bugs/?57242">https://savannah.gnu.org/bugs/?57242</a> and
<a class="moz-txt-link-freetext" href="https://savannah.gnu.org/bugs/?62397">https://savannah.gnu.org/bugs/?62397</a><br>
<br>
* A long-standing issue with the directory cache has been
resolved: changes<br>
made as a side-effect of some other target's recipe are now
noticed as<br>
expected.<br>
<br>
* GNU Make can now be built for MS-Windows using the Tiny C tcc
compiler.<br>
Port provided by Christian Jullien <a class="moz-txt-link-rfc2396E" href="mailto:eligis@orange.fr"><eligis@orange.fr></a><br>
<br>
<br>
</div>
</body>
</html>