GNU make 4.3.90 release candidate available

Paul Smith <[email protected]> Tue, 20 Sep 2022 14:36:05 -0400
Newsgroups gmane.comp.gnu.make.windows,gmane.comp.gnu.make.bugs
Organization GNU's Not UNIX!
Message-ID <[email protected]>
--=-/oUwCQL+72H1YVm+wiyS
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

    --------------------------------------------------------------------
    GNU make is a tool which controls the generation of executables and
    other non-source files of a program from the program's source files.

    You can learn more at: https://www.gnu.org/software/make/
    --------------------------------------------------------------------

A new release candidate for GNU make 4.4 is available now for download:

    0c3daaec8c81bf72f460677ccda32364  make-4.3.90.tar.lz
    54726144a7ae0465451f8ca0740f3d1f  make-4.3.90.tar.gz

You can obtain a copy from:  https://alpha.gnu.org/gnu/make/

- NEWS ----------------------------------------------------------------

Version 4.3.90 (20 Sep 2022)

A complete list of bugs fixed in this version is available here:

https://sv.gnu.org/bugs/index.php?group=3Dmake&report_id=3D111&fix_release_=
id=3D109&set=3Dcustom

* WARNING: Backward-incompatibility!
  Previously if --no-print-directory was seen anywhere in the environment o=
r
  command line it would take precedence over any --print-directory.  Now, t=
he
  last setting of directory printing options seen will be used, so a comman=
d
  line such as "--no-print-directory -w" _will_ show directory entry/exits.

* WARNING: Backward-incompatibility!
  Previously the order in which makefiles were remade was not explicitly
  stated, but it was (roughly) the inverse of the order in which they were
  processed by make.  In this release, the order in which makefiles are
  rebuilt is the same order in which make processed them, and this is defin=
ed
  to be true in the GNU make manual.

* WARNING: Backward-incompatibility!
  Previously only simple (one-letter) options were added to the MAKEFLAGS
  variable that was visible while parsing makefiles.  Now, all options are
  available in MAKEFLAGS.  If you want to check MAKEFLAGS for a one-letter
  option, expanding "$(firstword -$(MAKEFLAGS))" is a reliable way to retur=
n
  the set of one-letter options which can be examined via findstring, etc.

* WARNING: Backward-incompatibility!
  Previously makefile variables marked as export were not exported to comma=
nds
  started by the $(shell ...) function.  Now, all exported variables are
  exported to $(shell ...).  If this leads to recursion during expansion, t=
hen
  for backward-compatibility the value from the original environment is use=
d.
  To detect this change search for 'shell-export' in the .FEATURES variable=
.

* WARNING: New build requirement
  GNU make utilizes facilities from GNU Gnulib: Gnulib requires certain C99
  features in the C compiler and so these features are required by GNU make=
:
  https://www.gnu.org/software/gnulib/manual/html_node/C99-features-assumed=
.html
  The configure script should verify the compiler has these features.

* New feature: The .WAIT special target
  If the .WAIT target appears between two prerequisites of a target, then
  GNU make will wait for all of the targets to the left of .WAIT in the lis=
t
  to complete before starting any of the targets to the right of .WAIT.
  This feature is available in some other versions of make, and it will be
  required by an upcoming version of the POSIX standard for make.
  Different patches were made by Alexey Neyman <[email protected]> (200=
5)
  and Steffen Nurpmeso <[email protected]> (2020) that were useful but the
  result is a different implementation (closer to Alexey's idea).

* New feature: .NOTPARALLEL accepts prerequisites
  If the .NOTPARALLEL special target has prerequisites then all prerequisit=
es
  of those targets will be run serially (as if .WAIT was specified between
  each prerequisite).

* New feature: The .NOTINTERMEDIATE special target
  .NOTINTERMEDIATE Disables intermediate behavior for specific files, for a=
ll
  files built using a pattern, or for the entire makefile.
  Implementation provided by Dmitry Goncharov <[email protected]>

* New feature: The $(let ...) function
  This function allows user-defined functions to define a set of local
  variables: values can be assigned to these variables from within the
  user-defined function and they will not impact global variable assignment=
s.
  Implementation provided by Jouke Witteveen <[email protected]>

* New feature: The $(intcmp ...) function
  This function allows conditional evaluation controlled by a numerical
  comparison.
  Implementation provided by Jouke Witteveen <[email protected]>

* New feature: Improved support for -l / --load-average
  On systems that provide /proc/loadavg (Linux), GNU make will use it to
  determine the number of runnable jobs and use this as the current load,
  avoiding the need for heuristics.
  Implementation provided by Sven C. Dack <[email protected]>

* New feature: The --shuffle command line option
  This option reorders goals and prerequisites to simulate non-determinism
  that may be seen using parallel build.  Shuffle mode allows a form of "fu=
zz
  testing" of parallel builds to verify that all prerequisites are correctl=
y
  described in the makefile.
  Implementation provided by Sergei Trofimovich <[email protected]>

* New feature: The --jobserver-style command line option and named pipes
  A new jobserver method is used on systems where mkfifo(3) is supported.
  This solves a number of obscure issues related to using the jobserver
  and recursive invocations of GNU make.  This change means that sub-makes
  will connect to the jobserver even if they are not marked as recursive.
  It also means that other tools that want to participate in the jobserver
  will need to be enhanced as described in the GNU make manual.
  You can force GNU make to use the simple pipe-based jobserver (perhaps if
  you are integrating with other tools or older versions of GNU make) by
  adding the '--jobserver-style=3Dpipe' option to the command line of the
  top-level invocation of GNU make, or via MAKEFLAGS or GNUMAKEFLAGS.
  To detect this change search for 'jobserver-fifo' in the .FEATURES variab=
le.

* New feature: The MAKE_TMPDIR environment variable
  If you prefer that GNU make place temporary files in a different director=
y
  than the standard TMPDIR (or TMP or TEMP on Windows), set the MAKE_TMPDIR
  environment variable before starting make (this value CANNOT be set insid=
e
  the makefile, since make needs to find its temporary directory before the
  makefiles are parsed).  This is useful for build systems which reset TMPD=
IR
  and clean it out during the build process.

* Some POSIX systems (*BSD) do not allow locks to be taken on pipes, which
  caused the output sync feature to not work properly there.  Also multiple
  invocations of make redirecting to the same output file (e.g., /dev/null)
  would cause hangs.  Instead of locking stdout (which does have some usefu=
l
  performance characteristics, but is not portable) create a temporary file
  and lock that.  Windows continues to use a mutex as before.

* GNU make has sometimes chosen unexpected, and sub-optimal, chains of
  implicit rules due to the definition of "ought to exist" in the implicit
  rule search algorithm, which considered any prerequisite mentioned in the
  makefile as "ought to exist".  This algorithm has been modified to prefer
  prerequisites mentioned explicitly in the target being built and only if
  that results in no matching rule, will GNU make consider prerequisites
  mentioned in other targets as "ought to exist".
  Implementation provided by Dmitry Goncharov <[email protected]>

* GNU make was performing secondary expansion of all targets, even targets
  which didn't need to be considered during the build.  In this release
  only targets which are considered will be secondarily expanded.
  Implementation provided by Dmitry Goncharov <[email protected]>

* If the MAKEFLAGS variable is modified in a makefile, it will be re-parsed
  immediately rather than after all makefiles have been read.  Note that
  although all options are parsed immediately, some special effects won't
  appear until after all makefiles are read.

* The -I option accepts an argument "-" (e.g., "-I-") which means "reset th=
e
  list of search directories to empty".  Among other things this can be use=
d
  to prevent GNU make from searching in its default list of directories.

* New debug option "print" will show the recipe to be run, even when silent
  mode is set, and new debug option "why" will show why a target is rebuilt
  (which prerequisites caused the target to be considered out of date).
  Implementation provided by David Boyce <[email protected]>

* The existing --trace option is made equivalent to --debug=3Dprint,why

* Target-specific variables can now be marked "unexport".

* Exporting / unexporting target-specific variables is handled correctly, s=
o
  that the attribute of the most specific variable setting is used.

* Special targets like .POSIX are detected upon definition, ensuring that a=
ny
  change in behavior takes effect immediately, before the next line is pars=
ed.

* When the jobserver is enabled and GNU make decides it is invoking a non-m=
ake
  sub-process and closes the jobserver pipes, it will now add a new option =
to
  the MAKEFLAGS environment variable that disables the jobserver.
  This prevents sub-processes that invoke make from accidentally using othe=
r
  open file descriptors as jobserver pipes.  For more information see
  https://savannah.gnu.org/bugs/?57242 and https://savannah.gnu.org/bugs/?6=
2397

* A long-standing issue with the directory cache has been resolved: changes
  made as a side-effect of some other target's recipe are now noticed as
  expected.

* GNU Make can now be built for MS-Windows using the Tiny C tcc compiler.
  Port provided by Christian Jullien <[email protected]>


--=-/oUwCQL+72H1YVm+wiyS
Content-Type: application/pgp-signature; name="signature.asc"
Content-Description: This is a digitally signed message part

-----BEGIN PGP SIGNATURE-----

iQIzBAABCAAdFiEEslCKkBAviuOxKgCQ3qzKrtt4E3oFAmMqCBUACgkQ3qzKrtt4
E3o+Nw//QZK788ykNI+adftllqLgUd6TXpb814EvvmEntHegW0TC34mieyllIIvd
uIDnKxJBA9FwRG3+KFuUiHfWUTRM5SCdCkxDagkGyBICPoUrt/rHIu3Gp8tL9kkd
sf12pxKr9P4joeI02qocHisu1rR6SqYgUjYPBvExV4TBHSnvfPYRmrBorhvpdwhc
jtUDpQlApCDexZZ/uGoz64fu8XLWurC++mF0pHfiypirkCCeJfCBpQeuO1lE6JzZ
C00oS39Ym8rH/6nDZpRg0+WDbjhRSKjAji2jqGr/jwZe9iUIn3Z8d25lR6vBJSei
7JgZ8eOm6zDG2h+kivi4qkRm/4jgNzouvGMWl2mm5LoPF/GFkgpmOftwZSssi40Q
UX2e7TJ/TUBg0wSGQqUas5k83ykClJ0e26f6j69TM8573VdJqE34PWCNWjKPNuCn
621N7OvJNGLT045ccLGIwerfCgOT21R/x2P1atYHioaL1mKtOLhDdIGAjx+RrVwC
q+gb10vU8AFmwDDkc1zEk/63Z45VHXzepdGSI3y7eOY6w+d6QT73jcW3CMf8keNQ
RWCgdHu0LHHpw/Il718CWfcsWKWhjGkH9AXNFJs3sI32XDm6UmEwj1EESdTDKFWA
Prb4ONwrP1GDlq0t9Ai0i+NgfWPd5RdjbJZyWMuWLwc286eR7UQ=
=iKOU
-----END PGP SIGNATURE-----

--=-/oUwCQL+72H1YVm+wiyS--