path: root/NEWS
diff options
Diffstat (limited to 'NEWS')
1 files changed, 144 insertions, 34 deletions
diff --git a/NEWS b/NEWS
index 523c9a7..2227a35 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,6 @@
GNU make NEWS -*-indented-text-*-
History of user-visible changes.
- 28 July 2010
+ 09 Oct 2013
See the end of this file for copyrights and conditions.
@@ -9,7 +9,111 @@ 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
reporting bugs.
-Version 3.82
+Version 4.0 (09 Oct 2013)
+A complete list of bugs fixed in this version is available here:
+* WARNING: Backward-incompatibility!
+ If .POSIX is specified, then make adheres to the POSIX backslash/newline
+ handling requirements, which introduces the following changes to the
+ standard backslash/newline handling in non-recipe lines:
+ * Any trailing space before the backslash is preserved
+ * Each backslash/newline (plus subsequent whitespace) is converted to a
+ single space
+* New feature: GNU Guile integration
+ This version of GNU make can be compiled with GNU Guile integration.
+ GNU Guile serves as an embedded extension language for make.
+ See the "Guile Function" section in the GNU Make manual for details.
+ Currently GNU Guile 1.8 and 2.0+ are supported. In Guile 1.8 there is no
+ support for internationalized character sets. In Guile 2.0+, scripts can be
+ encoded in UTF-8.
+* New command line option: --output-sync (-O) enables grouping of output by
+ target or by recursive make. This is useful during parallel builds to avoid
+ mixing output from different jobs together giving hard-to-understand
+ results. Original implementation by David Boyce <>.
+ Reworked and enhanced by Frank Heckenbach <>.
+ Windows support by Eli Zaretskii <>.
+* New command line option: --trace enables tracing of targets. When enabled
+ the recipe to be invoked is printed even if it would otherwise be suppressed
+ by .SILENT or a "@" prefix character. Also before each recipe is run the
+ makefile name and linenumber where it was defined are shown as well as the
+ prerequisites that caused the target to be considered out of date.
+* New command line option argument: --debug now accepts a "n" (none) flag
+ which disables all debugging settings that are currently enabled.
+* New feature: The "job server" capability is now supported on Windows.
+ Implementation contributed by Troy Runkel <>
+* New feature: The .ONESHELL capability is now supported on Windows. Support
+ added by Eli Zaretskii <>.
+* New feature: "!=" shell assignment operator as an alternative to the
+ $(shell ...) function. Implemented for compatibility with BSD makefiles.
+ Note there are subtle differences between "!=" and $(shell ...). See the
+ description in the GNU make manual.
+ WARNING: Backward-incompatibility!
+ Variables ending in "!" previously defined as "variable!= value" will now be
+ interpreted as shell assignment. Change your assignment to add whitespace
+ between the "!" and "=": "variable! = value"
+* 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 It is
+ not necessary to define the .POSIX target to access this operator.
+* New feature: Loadable objects
+ This version of GNU make contains a "technology preview": the ability to
+ load dynamic objects into the make runtime. These objects can be created by
+ the user and can add extended functionality, usable by makefiles.
+* New function: $(file ...) writes to a file.
+* New variable: $(GNUMAKEFLAGS) will be parsed for make flags, just like
+ MAKEFLAGS is. It can be set in the environment or the makefile, containing
+ GNU make-specific flags to allow your makefile to be portable to other
+ versions of make. Once this variable is parsed, GNU make will set it to the
+ empty string so that flags will not be duplicated on recursion.
+* New variable: `MAKE_HOST' gives the name of the host architecture
+ make was compiled for. This is the same value you see after 'Built for'
+ when running 'make --version'.
+* Behavior of MAKEFLAGS and MFLAGS is more rigorously defined. All simple
+ flags are grouped together in the first word of MAKEFLAGS. No options that
+ accept arguments appear in the first word. If no simple flags are present
+ MAKEFLAGS begins with a space. Flags with both short and long versions
+ always use the short versions in MAKEFLAGS. Flags are listed in
+ alphabetical order using ASCII ordering. MFLAGS never begins with "- ".
+* Setting the -r and -R options in MAKEFLAGS inside a makefile now works as
+ expected, removing all built-in rules and variables, respectively.
+* If a recipe fails, the makefile name and linenumber of the recipe are shown.
+* A .RECIPEPREFIX setting is remembered per-recipe and variables expanded
+ in that recipe also use that recipe prefix setting.
+* In -p output, .RECIPEPREFIX settings are shown and all target-specific
+ variables are output as if in a makefile, instead of as comments.
+* On MS-Windows, recipes that use ".." quoting will no longer force
+ invocation of commands via temporary batch files and stock Windows
+ shells, they will be short-circuited and invoked directly. (In
+ other words, " is no longer a special character for stock Windows
+ shells.) This avoids hitting shell limits for command length when
+ quotes are used, but nothing else in the command requires the shell.
+ This change could potentially mean some minor incompatibilities in
+ behavior when the recipe uses quoted string on shell command lines.
+Version 3.82 (28 Jul 2010)
A complete list of bugs fixed in this version is available here:
@@ -18,14 +122,6 @@
* Compiling GNU make now requires a conforming ISO C 1989 compiler and
standard runtime library.
-* WARNING: Future backward-incompatibility!
- Wildcards are not documented as returning sorted values, but up to and
- including this release the results have been sorted and some makefiles are
- apparently depending on that. In the next release of GNU make, for
- performance reasons, we may remove that sorting. If your makefiles
- require sorted results from wildcard expansions, use the $(sort ...)
- function to request it explicitly.
* WARNING: Backward-incompatibility!
The POSIX standard for make was changed in the 2008 version in a
fundamentally incompatible way: make is required to invoke the shell as if
@@ -42,6 +138,21 @@
existing targets were provided in $?).
* WARNING: Backward-incompatibility!
+ Wildcards were not documented as returning sorted values, but the results
+ have been sorted up until this release.. If your makefiles require sorted
+ results from wildcard expansions, use the $(sort ...) function to request
+ it explicitly.
+* WARNING: Backward-incompatibility!
+ In previous versions of make it was acceptable to list one or more explicit
+ targets followed by one or more pattern targets in the same rule and it
+ worked "as expected". However, this was not documented as acceptable and if
+ you listed any explicit targets AFTER the pattern targets, the entire rule
+ would be mis-parsed. This release removes this ability completely: make
+ will generate an error message if you mix explicit and pattern targets in
+ the same rule.
+* WARNING: Backward-incompatibility!
As a result of parser enhancements, three backward-compatibility issues
exist: first, a prerequisite containing an "=" cannot be escaped with a
backslash any longer. You must create a variable containing an "=" and
@@ -115,7 +226,7 @@
multi-line variable assignment.
-Version 3.81
+Version 3.81 (01 Apr 2006)
* GNU make is ported to OS/2.
@@ -238,7 +349,7 @@ Version 3.81
could be found on the system.
* On VMS there is now support for case-sensitive filesystems such as ODS5.
- See the readme.vms file for information.
+ See the README.VMS file for information.
* Parallel builds (-jN) no longer require a working Bourne shell on
Windows platforms. They work even with the stock Windows shells, such
@@ -256,7 +367,7 @@ A complete list of bugs fixed in this version is available here:
-Version 3.80
+Version 3.80 (03 Oct 2002)
* A new feature exists: order-only prerequisites. These prerequisites
affect the order in which targets are built, but they do not impact
@@ -338,7 +449,7 @@ A complete list of bugs fixed in this version is available here:
-Version 3.79.1
+Version 3.79.1 (23 Jun 2000)
* .SECONDARY with no prerequisites now prevents any target from being
removed because make thinks it's an intermediate file, not just those
@@ -347,7 +458,7 @@ Version 3.79.1
* New configure option --disable-nsec-timestamps, but this was
superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target.
-Version 3.79
+Version 3.79 (04 Apr 2000)
* GNU make optionally supports internationalization and locales via the
GNU gettext (or local gettext if suitable) package. See the ABOUT-NLS
@@ -388,9 +499,9 @@ Version 3.79
* Hartmut Becker provided many updates for the VMS port of GNU make.
- See the readme.vms file for more details.
+ See the README.VMS file for more details.
-Version 3.78
+Version 3.78 (22 Sep 1999)
* Two new functions, $(error ...) and $(warning ...) are available. The
former will cause make to fail and exit immediately upon expansion of
@@ -446,7 +557,7 @@ Version 3.78
by running "make check" in the distribution. Note that it requires
Perl (either Perl 4 or Perl 5) to run.
-Version 3.77
+Version 3.77 (28 Jul 1998)
* Implement BSD make's "?=" variable assignment operator. The variable
is assigned the specified value only if that variable is not already
@@ -492,11 +603,11 @@ Version 3.77
* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32),
and to the DOS port from Eli Zaretski (see README.DOS).
-Version 3.76.1
+Version 3.76.1 (19 Sep 1997)
* Small (but serious) bug fix. Quick rollout to get into the GNU source CD.
-Version 3.76
+Version 3.76 (16 Sep 1997)
* GNU make now uses automake to control generation. This
should make it more consistent with the GNU standards.
@@ -541,7 +652,7 @@ Version 3.76
* John W. Eaton has updated the VMS port to support libraries and VPATH.
-Version 3.75
+Version 3.75 (27 Aug 1996)
* The directory messages printed by `-w' and implicitly in sub-makes,
are now omitted if Make runs no commands and has no other messages to print.
@@ -562,7 +673,7 @@ Version 3.75
See README.W32 for details, and direct all Windows-related questions to
-Version 3.73
+Version 3.73 (05 Apr 1995)
* Converted to use Autoconf version 2, so `configure' has some new options.
See INSTALL for details.
@@ -570,7 +681,7 @@ Version 3.73
* You can now send a SIGUSR1 signal to Make to toggle printing of debugging
output enabled by -d, at any time during the run.
-Version 3.72
+Version 3.72 (04 Nov 1994)
* DJ Delorie has ported Make to MS-DOS using the GO32 extender.
He is maintaining the DOS port, not the GNU Make maintainer;
@@ -604,7 +715,7 @@ Version 3.72
of `.SILENT', then the recipe to update that file will not be printed
before it is run. (This change was made to conform to POSIX.2.)
-Version 3.71
+Version 3.71 (21 May 1994)
* The automatic variables `$(@D)', `$(%D)', `$(*D)', `$(<D)', `$(?D)', and
`$(^D)' now omit the trailing slash from the directory name. (This change
@@ -626,7 +737,7 @@ Version 3.71
The exit status is 1 only when using -q and some target is not up to date.
(This change was made to comply with POSIX.2.)
-Version 3.70
+Version 3.70 (03 Jan 1994)
* It is no longer a fatal error to have a NUL character in a makefile.
You should never put a NUL in a makefile because it can have strange
@@ -637,7 +748,7 @@ Version 3.70
makefile name and line number where the `include' appeared, so Emacs's
C-x ` command takes you there (in case it's a typo you need to fix).
-Version 3.69
+Version 3.69 (07 Nov 1993)
* Implicit rule search for archive member references is now done in the
opposite order from previous versions: the whole target name `LIB(MEM)'
@@ -667,7 +778,7 @@ Version 3.69
* The recipe given for `.DEFAULT' is now used for phony targets with no
-Version 3.68
+Version 3.68 (28 Jul 1993)
* You can list several archive member names inside parenthesis:
`lib(mem1 mem2 mem3)' is equivalent to `lib(mem1) lib(mem2) lib(mem3)'.
@@ -693,16 +804,16 @@ Version 3.68
to set up variables for them. They used to run with the environment
that `make' started with.
-Version 3.66
+Version 3.66 (21 May 1993)
* `make --version' (or `make -v') now exits immediately after printing
the version number.
-Version 3.65
+Version 3.65 (09 May 1993)
* Make now supports long-named members in `ar' archive files.
-Version 3.64
+Version 3.64 (21 Apr 1993)
* Make now supports the `+=' syntax for a variable definition which appends
to the variable's previous value. See the section `Appending More Text
@@ -716,7 +827,7 @@ Version 3.64
* The built-in implicit rules now support the alternative extension
`.txinfo' for Texinfo files, just like `.texinfo' and `.texi'.
-Version 3.63
+Version 3.63 (22 Jan 1993)
* Make now uses a standard GNU `configure' script. See the new file
INSTALL for the new (and much simpler) installation procedure.
@@ -1096,9 +1207,8 @@ Version 3.05
(Changes from versions 1 through 3.05 were never recorded. Sorry.)
-Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-2010 Free Software Foundation, Inc. This file is part of GNU Make.
+Copyright (C) 1988-2013 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
terms of the GNU General Public License as published by the Free Software