Bump to 4.4
[platform/upstream/make.git] / NEWS
diff --git a/NEWS b/NEWS
index e884df1..c370b0a 100644 (file)
--- a/NEWS
+++ b/NEWS
-GNU make NEWS                                               -*-indented-text-*-
+GNU Make NEWS                                               -*-indented-text-*-
   History of user-visible changes.
-  19 January 2020
+  31 October 2022
 
 See the end of this file for copyrights and conditions.
 
-All user-visible changes are more fully described in the GNU make manual,
+All user-visible changes are more fully described in the GNU Make manual,
 which is contained in this distribution as the file doc/make.texi.
-See the README file and the GNU make manual for instructions for
+See the README file and the GNU Make manual for instructions for
 reporting bugs.
 \f
+Version 4.4 (31 Oct 2022)
+
+A complete list of bugs fixed in this version is available here:
+
+https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=109&set=custom
+
+* WARNING: Deprecation!
+  The following systems are deprecated in this release:
+    - OS/2 (EMX)
+    - AmigaOS
+    - Xenix
+    - Cray
+  In the NEXT release of GNU Make, support for these systems will be removed.
+  If you want to see them continue to be supported, contact <bug-make@gnu.org>.
+
+* WARNING: Future backward-incompatibility!
+  In the NEXT release of GNU Make, pattern rules will implement the same
+  behavior change for multiple targets as explicit grouped targets, below: if
+  any target of the rule is needed by the build, the recipe will be invoked if
+  any target of the rule is missing or out of date.  During testing some
+  makefiles were found to contain pattern rules that do not build all targets;
+  this can cause issues so we are delaying this change for one release cycle
+  to allow these makefiles to be updated.  GNU Make shows a warning if it
+  detects this situation: "pattern recipe did not update peer target".
+
+* WARNING: Backward-incompatibility!
+  GNU Make now uses temporary files in more situations than previous releases.
+  If your build system sets TMPDIR (or TMP or TEMP on Windows) and deletes the
+  contents during the build, or uses restrictive permissions, this may cause
+  problems.  You can choose an alternative temporary directory only for use by
+  GNU Make by setting the new MAKE_TMPDIR environment variable before invoking
+  make.  Note that this value CANNOT be set inside the makefile, since make
+  needs to find its temporary directory before the makefiles are parsed.
+
+* WARNING: Backward-incompatibility!
+  Previously each target in a explicit grouped target rule was considered
+  individually: if the targets needed by the build were not out of date the
+  recipe was not run even if other targets in the group were out of date.  Now
+  if any of the grouped targets are needed by the build, then if any of the
+  grouped targets are out of date the recipe is run and all targets in the
+  group are considered updated.
+
+* WARNING: Backward-incompatibility!
+  Previously if --no-print-directory was seen anywhere in the environment or
+  command line it would take precedence over any --print-directory.  Now, the
+  last setting of directory printing options seen will be used, so a command
+  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 defined
+  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 return
+  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 commands
+  started by the $(shell ...) function.  Now, all exported variables are
+  exported to $(shell ...).  If this leads to recursion during expansion, then
+  for backward-compatibility the value from the original environment is used.
+  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 list
+  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 <alex.neyman@auriga.ru> (2005)
+  and Steffen Nurpmeso <steffen@sdaoden.eu> (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 prerequisites
+  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 all
+  files built using a pattern, or for the entire makefile.
+  Implementation provided by Dmitry Goncharov <dgoncharov@users.sf.net>
+
+* 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 assignments.
+  Implementation provided by Jouke Witteveen <j.witteveen@gmail.com>
+
+* New feature: The $(intcmp ...) function
+  This function allows conditional evaluation controlled by a numerical
+  comparison.
+  Implementation provided by Jouke Witteveen <j.witteveen@gmail.com>
+
+* 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 <sdack@gmx.com>
+
+* 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 "fuzz
+  testing" of parallel builds to verify that all prerequisites are correctly
+  described in the makefile.
+  Implementation provided by Sergei Trofimovich <siarheit@google.com>
+
+* 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=pipe' 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 variable.
+
+* 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 useful
+  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 <dgoncharov@users.sf.net>
+
+* 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 <dgoncharov@users.sf.net>
+
+* 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 the
+  list of search directories to empty".  Among other things this can be used
+  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 <David.S.Boyce@gmail.com>
+
+* The existing --trace option is made equivalent to --debug=print,why
+
+* Target-specific variables can now be marked "unexport".
+
+* Exporting / unexporting target-specific variables is handled correctly, so
+  that the attribute of the most specific variable setting is used.
+
+* Special targets like .POSIX are detected upon definition, ensuring that any
+  change in behavior takes effect immediately, before the next line is parsed.
+
+* When the pipe-based jobserver is enabled and GNU Make decides it is invoking
+  a non-make 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 other
+  open file descriptors as jobserver pipes.  For more information see
+  https://savannah.gnu.org/bugs/?57242 and https://savannah.gnu.org/bugs/?62397
+
+* 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 <eligis@orange.fr>
+
+\f
 Version 4.3 (19 Jan 2020)
 
 A complete list of bugs fixed in this version is available here:
@@ -35,6 +227,13 @@ https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=108&se
   already contains some value.  Similarly, appending an empty string does not
   add a trailing space.
 
+* WARNING: Backward-incompatibility!
+  Previously using the .SILENT pseudo-target in a makefile would force all
+  sub-makes to be invoked with the '-s' option, effectively making all
+  sub-makes silent as well.  In this release .SILENT only affects the current
+  invocation of make.  A side-effect of this is that .SILENT will no longer
+  enable the --no-print-directory option, which using -s will do.
+
 * NOTE: Deprecated behavior.
   Contrary to the documentation, suffix rules with prerequisites are being
   treated BOTH as simple targets AND as pattern rules.  Further, the
@@ -256,7 +455,7 @@ https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=101&se
 * New feature: "::=" simple assignment operator as defined by POSIX in 2012.
   This operator has identical functionality to ":=" in GNU make, but will be
   portable to any implementation of make conforming to a sufficiently new
-  version of POSIX (see http://austingroupbugs.net/view.php?id=330).  It is
+  version of POSIX (see https://austingroupbugs.net/view.php?id=330).  It is
   not necessary to define the .POSIX target to access this operator.
 
 * New feature: Loadable objects
@@ -929,7 +1128,7 @@ Version 3.77 (28 Jul 1998)
     This port was done by Klaus Kämpf <kkaempf@rmi.de>
 
   * There is first-level support available from proGIS Software, Germany.
-    Visit their web-site at http://www.progis.de to get information
+    Visit their web-site at https://www.progis.de to get information
     about other vms software and forthcoming updates to gnu make.
 
   * /bin/sh style I/O redirection is supported. You can now write lines like
@@ -1619,7 +1818,7 @@ Version 3.05
 (Changes from versions 1 through 3.05 were never recorded.  Sorry.)
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1988-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2022 Free Software Foundation, Inc.
 This file is part of GNU Make.
 
 GNU Make is free software; you can redistribute it and/or modify it under the
@@ -1632,4 +1831,4 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License along with
-this program.  If not, see <http://www.gnu.org/licenses/>.
+this program.  If not, see <https://www.gnu.org/licenses/>.