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.
See the README file and the GNU make manual for instructions for
reporting bugs.
\f
-Version 3.82
+Version 4.0 (09 Oct 2013)
+
+A complete list of bugs fixed in this version is available here:
+
+http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=101&set=custom
+
+* 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 <dsb@boyski.com>.
+ Reworked and enhanced by Frank Heckenbach <f.heckenbach@fh-soft.de>.
+ Windows support by Eli Zaretskii <eliz@gnu.org>.
+
+* 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 <Troy.Runkel@mathworks.com>
+
+* New feature: The .ONESHELL capability is now supported on Windows. Support
+ added by Eli Zaretskii <eliz@gnu.org>.
+
+* 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 http://austingroupbugs.net/view.php?id=330). 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.
+
+\f
+Version 3.82 (28 Jul 2010)
A complete list of bugs fixed in this version is available here:
* 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
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
multi-line variable assignment.
\f
-Version 3.81
+Version 3.81 (01 Apr 2006)
* GNU make is ported to OS/2.
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
http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=103
\f
-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
http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102
\f
-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
* New configure option --disable-nsec-timestamps, but this was
superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target.
\f
-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
returned.
* 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.
\f
-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
by running "make check" in the distribution. Note that it requires
Perl (either Perl 4 or Perl 5) to run.
\f
-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
* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32),
and to the DOS port from Eli Zaretski (see README.DOS).
\f
-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.
\f
-Version 3.76
+Version 3.76 (16 Sep 1997)
* GNU make now uses automake to control Makefile.in generation. This
should make it more consistent with the GNU standards.
* John W. Eaton has updated the VMS port to support libraries and VPATH.
\f
-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.
See README.W32 for details, and direct all Windows-related questions to
<rob_tulloh@tivoli.com>.
\f
-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.
* You can now send a SIGUSR1 signal to Make to toggle printing of debugging
output enabled by -d, at any time during the run.
\f
-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;
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.)
\f
-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
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.)
\f
-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
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).
\f
-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)'
* The recipe given for `.DEFAULT' is now used for phony targets with no
recipe.
\f
-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)'.
to set up variables for them. They used to run with the environment
that `make' started with.
\f
-Version 3.66
+Version 3.66 (21 May 1993)
* `make --version' (or `make -v') now exits immediately after printing
the version number.
\f
-Version 3.65
+Version 3.65 (09 May 1993)
* Make now supports long-named members in `ar' archive files.
\f
-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
* The built-in implicit rules now support the alternative extension
`.txinfo' for Texinfo files, just like `.texinfo' and `.texi'.
\f
-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.
(Changes from versions 1 through 3.05 were never recorded. Sorry.)
\f
-------------------------------------------------------------------------------
-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