mirror of
https://github.com/mirror/make.git
synced 2024-12-25 20:30:10 +08:00
a9e3eb1eec
Add a warning to control circular dependency detection. Use "warn" as the default action to be backward-compatible. * src/warning.h (enum warning_type): Add warning type wt_circular_dep. * src/warning.c (warn_init): Set default wt_circular_dep to w_warn. * src/remake.c (update_file_1): Consult the circular-dep warning to handle circular dependencies. * tests/scripts/options/warn: Test --warn circular-dep flag. * tests/scripts/variables/WARNINGS: Test .WARNINGS circular-dep flag. * doc/make.texi: Document circular-dep warning. * doc/make.1: Ditto.
1965 lines
88 KiB
Plaintext
1965 lines
88 KiB
Plaintext
GNU Make NEWS -*-indented-text-*-
|
||
History of user-visible changes.
|
||
26 February 2023
|
||
|
||
See the end of this file for copyrights and conditions.
|
||
|
||
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
|
||
reporting bugs.
|
||
|
||
|
||
Version 4.4.90 (26 Feb 2023)
|
||
|
||
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=111&set=custom
|
||
|
||
* WARNING: Removed AmigaOS support!
|
||
This version of GNU Make no longer supports AmigaOS. If you need support
|
||
for AmigaOS please use one of the older versions of GNU Make.
|
||
|
||
* WARNING: Loaded Object ABI incompatibility!
|
||
This release changes the loaded object feature from "technology preview" to
|
||
fully-supported feature. However, it introduces an ABI incompatibility with
|
||
previous releases: the setup function now takes an ABI version as its first
|
||
argument. At compile time you can test the GMK_ABI_VERSION constant to
|
||
detect which ABI should be used. At runtime your initialization function
|
||
can check the provided ABI version to verify it's being loaded correctly.
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
Parsing of the first argument in ifeq/ifneq with () has been cleaned up.
|
||
When locating the separating "," any variable reference (single char as well
|
||
as using $() or ${}) is skipped. However parentheses that are not part of
|
||
or contained in variable references will not be counted. This means that
|
||
things like "ifeq ((foo,bar),)" are now syntax errors. Use a variable to
|
||
hide the comma if needed: "COMMA = ," / "ifeq ((foo$(COMMA)bar),)".
|
||
See https://savannah.gnu.org/bugs/index.php?64402
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
If -e is given all environment variables will now have an origin of
|
||
"environment override" even if they are not otherwise set in the makefile.
|
||
See https://savannah.gnu.org/bugs/index.php?64803
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
The behavior of appending to pattern-specific variables has been clarified
|
||
when combined with command-line settings or -e overrides.
|
||
See https://savannah.gnu.org/bugs/index.php?64822
|
||
|
||
* NOTE: Deprecated behavior.
|
||
The check in GNU Make 4.3 for suffix rules with prerequisites didn't check
|
||
single-suffix rules, only double-suffix rules. Add the missing check.
|
||
|
||
* New feature: Any assignment operator can be made conditional
|
||
GNU Make has long supported the conditional operator "?=" which creates a
|
||
recursive variable set to a value if and only if the variable is not already
|
||
defined. In this release, the "?" can precede any assignment operator to
|
||
make it conditional. For example, "?:=" creates a simply-expanded variable
|
||
and expands the right-hand side if and only if the variable is not already
|
||
defined. The constructs "?::=", "?:::=", and "?!=" also behave as expected.
|
||
|
||
* New feature: Unload function for loaded objects
|
||
When a loaded object needs to be unloaded by GNU Make, it will invoke an
|
||
unload function (if one is defined) beforehand that allows the object to
|
||
perform cleanup operations.
|
||
Original idea and implementation: Dmitry Goncharov <dgoncharov@users.sf.net>
|
||
|
||
* New feature: Makefile warning reporting control
|
||
A new option "--warn" controls reporting of warnings for makefiles. Actions
|
||
can be set to "ignore", "warn", or "error". Two new warnings are reported:
|
||
assigning to invalid variable names, and referencing invalid variable names
|
||
(both set to "warn" by default), in addition to the existing warning for
|
||
undefined variables (defaults to "ignore"). "--warn-undefined-variables" is
|
||
deprecated, and is translated to "--warn=undefined-vars" internally.
|
||
|
||
* New feature: Control warnings with the .WARNINGS variable
|
||
In addition to --warn from the command line, which takes effect for make
|
||
invoked recursively, warnings can be controlled only for the current
|
||
instance of make using the .WARNINGS variable.
|
||
|
||
* New feature: Printing targets defined by the makefile
|
||
A new option "--print-targets" will print all explicit, non-special targets
|
||
defined in the makefiles, one per line, then exit with success. No recipes
|
||
are invoked and no makefiles are re-built.
|
||
|
||
* Warnings for detecting circular dependencies are controllable via warning
|
||
reporting, with the name "circular-dep".
|
||
|
||
* 'make --print-data-base' (or 'make -p') now outputs time of day
|
||
using the same form as for file timestamps, e.g., "2023-05-10
|
||
10:43:57.570558743". Previously it used the form "Wed May 10
|
||
10:43:57 2023", which has less detail and is harder to compare.
|
||
|
||
* Conditional statements starting with the recipe prefix were sometimes
|
||
interpreted in previous versions. As per the documentation, lines starting
|
||
with the recipe prefix are now never considered conditional statements.
|
||
|
||
* Tests in the regression test suite now are run in their own directory to
|
||
avoid cross-contamination and allow cleanup if the tests are interrupted.
|
||
More information is printed about failing tests.
|
||
|
||
|
||
Version 4.4.1 (26 Feb 2023)
|
||
|
||
This release is primarily a bug-fix release.
|
||
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=110&set=custom
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
In previous releases it was not well-defined when updates to MAKEFLAGS made
|
||
inside a makefile would be visible. This release ensures they are visible
|
||
immediately, even when invoking $(shell ...) functions. Also, command line
|
||
variable assignments are now always present in MAKEFLAGS, even when parsing
|
||
makefiles.
|
||
Implementation provided by Dmitry Goncharov <dgoncharov@users.sf.net>
|
||
|
||
* New feature: Parallel builds of archives
|
||
Previously it was not possible to use parallel builds with archives. It is
|
||
still not possible using the built-in rules, however you can now override
|
||
the built-in rules with a slightly different set of rules and use parallel
|
||
builds with archive creation. See the "Dangers When Using Archives" section
|
||
of the GNU Make manual, and https://savannah.gnu.org/bugs/index.php?14927
|
||
|
||
* Previously target-specific variables would inherit their "export" capability
|
||
from parent target-specific variables even if they were marked private. Now
|
||
private parent target-specific variables have no affect. For more details
|
||
see https://savannah.gnu.org/bugs/index.php?61463
|
||
|
||
* Disable FIFO jobserver on GNU/Hurd and Cygwin
|
||
Experimentation shows that the new FIFO-based jobserver doesn't work well on
|
||
GNU/Hurd or Cygwin: revert these systems to use the pipe-based jobserver.
|
||
|
||
* Updates to allow building on OS/2
|
||
Provided by KO Myung-Hun <komh78@gmail.com>
|
||
|
||
* New platform: GNU Make is supported on z/OS
|
||
Thanks to Igor Todorovski <itodorov@ca.ibm.com> for the patches and testing
|
||
assistance.
|
||
|
||
|
||
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>
|
||
|
||
|
||
Version 4.3 (19 Jan 2020)
|
||
|
||
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=108&set=custom
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
Number signs (#) appearing inside a macro reference or function invocation
|
||
no longer introduce comments and should not be escaped with backslashes:
|
||
thus a call such as:
|
||
foo := $(shell echo '#')
|
||
is legal. Previously the number sign needed to be escaped, for example:
|
||
foo := $(shell echo '\#')
|
||
Now this latter will resolve to "\#". If you want to write makefiles
|
||
portable to both versions, assign the number sign to a variable:
|
||
H := \#
|
||
foo := $(shell echo '$H')
|
||
This was claimed to be fixed in 3.81, but wasn't, for some reason.
|
||
To detect this change search for 'nocomment' in the .FEATURES variable.
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
Previously appending using '+=' to an empty variable would result in a value
|
||
starting with a space. Now the initial space is only added if the variable
|
||
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
|
||
prerequisites are ignored by the pattern rules. POSIX specifies that in
|
||
order to be a suffix rule there can be no prerequisites defined. In this
|
||
release if POSIX mode is enabled then rules with prerequisites cannot be
|
||
suffix rules. If POSIX mode is not enabled then the previous behavior is
|
||
preserved (a pattern rule with no extra prerequisites is created) AND a
|
||
warning about this behavior is generated:
|
||
warning: ignoring prerequisites on suffix rule definition
|
||
The POSIX behavior will be adopted as the only behavior in a future release
|
||
of GNU Make so please resolve any warnings.
|
||
|
||
* New feature: Grouped explicit targets
|
||
Pattern rules have always had the ability to generate multiple targets with
|
||
a single invocation of the recipe. It's now possible to declare that an
|
||
explicit rule generates multiple targets with a single invocation. To use
|
||
this, replace the ":" token with "&:" in the rule. To detect this feature
|
||
search for 'grouped-target' in the .FEATURES special variable.
|
||
Implementation contributed by Kaz Kylheku <kaz@kylheku.com>
|
||
|
||
* New feature: .EXTRA_PREREQS variable
|
||
Words in this variable are considered prerequisites of targets but they are
|
||
not added to any of the automatic variable values when expanding the
|
||
recipe. This variable can either be global (applies to all targets) or
|
||
a target-specific variable. To detect this feature search for 'extra-prereqs'
|
||
in the .FEATURES special variable.
|
||
Implementation contributed by Christof Warlich <cwarlich@gmx.de>
|
||
|
||
* Makefiles can now specify the '-j' option in their MAKEFLAGS variable and
|
||
this will cause make to enable that parallelism mode.
|
||
|
||
* GNU Make will now use posix_spawn() on systems where it is available.
|
||
If you prefer to use fork/exec even on systems where posix_spawn() is
|
||
present, you can use the --disable-posix-spawn option to configure.
|
||
Implementation contributed by Aron Barath <baratharon@caesar.elte.hu>
|
||
|
||
* Error messages printed when invoking non-existent commands have been cleaned
|
||
up and made consistent.
|
||
|
||
* The previous limit of 63 jobs under -jN on MS-Windows is now
|
||
increased to 4095. That limit includes the subprocess started by
|
||
the $(shell) function.
|
||
|
||
* A new option --no-silent has been added, that cancels the effect of the
|
||
-s/--silent/--quiet flag.
|
||
|
||
* A new option -E has been added as a short alias for --eval.
|
||
|
||
* All wildcard expansion within GNU Make, including $(wildcard ...), will sort
|
||
the results. See https://savannah.gnu.org/bugs/index.php?52076
|
||
|
||
* Interoperate with newer GNU libc and musl C runtime libraries.
|
||
|
||
* Performance improvements provided by Paolo Bonzini <pbonzini@redhat.com>
|
||
|
||
GNU Make Developer News
|
||
|
||
* Import the GNU standard bootstrap script to replace the hand-rolled
|
||
"make update" method for building code from a GNU Make Git repository.
|
||
|
||
* Rework the source distribution to move source files into the src/*
|
||
subdirectory. This aligns with modern best practices in GNU.
|
||
|
||
* Replace local portability code with Gnulib content. Unfortunately due to a
|
||
problem with Gnulib support for getloadavg, this forces a requirement on
|
||
Automake 1.16 or above in order to build from Git. See README.git.
|
||
|
||
|
||
Version 4.2.1 (10 Jun 2016)
|
||
|
||
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=107&set=custom
|
||
|
||
This release is a bug-fix release.
|
||
|
||
|
||
Version 4.2 (22 May 2016)
|
||
|
||
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=106&set=custom
|
||
|
||
* New variable: $(.SHELLSTATUS) is set to the exit status of the last != or
|
||
$(shell ...) function invoked in this instance of make. This will be "0" if
|
||
successful or not "0" if not successful. The variable value is unset if no
|
||
!= or $(shell ...) function has been invoked.
|
||
|
||
* The $(file ...) function can now read from a file with $(file <FILE).
|
||
The function is expanded to the contents of the file. The contents are
|
||
expanded verbatim except that the final newline, if any, is stripped.
|
||
|
||
* The makefile line numbers shown by GNU Make now point directly to the
|
||
specific line in the recipe where the failure or warning occurred.
|
||
Sample changes suggested by Brian Vandenberg <phantall@gmail.com>
|
||
|
||
* The interface to GNU Make's "jobserver" is stable as documented in the
|
||
manual, for tools which may want to access it.
|
||
|
||
WARNING: Backward-incompatibility! The internal-only command line option
|
||
--jobserver-fds has been renamed for publishing, to --jobserver-auth.
|
||
|
||
* The amount of parallelism can be determined by querying MAKEFLAGS, even when
|
||
the job server is enabled (previously MAKEFLAGS would always contain only
|
||
"-j", with no number, when job server was enabled).
|
||
|
||
* VMS-specific changes:
|
||
|
||
* Perl test harness now works.
|
||
|
||
* Full support for converting Unix exit status codes to VMS exit status
|
||
codes. BACKWARD INCOMPATIBILITY Notice: On a child failure the VMS exit
|
||
code is now the encoded Unix exit status that Make usually generates, not
|
||
the VMS exit status of the child.
|
||
|
||
|
||
Version 4.1 (05 Oct 2014)
|
||
|
||
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=105&set=custom
|
||
|
||
* New variables: $(MAKE_TERMOUT) and $(MAKE_TERMERR) are set to non-empty
|
||
values if stdout or stderr, respectively, are believed to be writing to a
|
||
terminal. These variables are exported by default.
|
||
|
||
* Allow a no-text-argument form of the $(file ...) function. Without a text
|
||
argument nothing is written to the file: it is simply opened in the
|
||
requested mode, then closed again.
|
||
|
||
* Change the fatal error for mixed explicit and implicit rules, that was
|
||
introduced in GNU Make 3.82, to a non-fatal error. However, this syntax is
|
||
still deprecated and may return to being illegal in a future version of GNU
|
||
make. Makefiles that rely on this syntax should be fixed.
|
||
See https://savannah.gnu.org/bugs/?33034
|
||
|
||
* VMS-specific changes:
|
||
|
||
* Support for library files added, including support for using the GNV ar
|
||
utility.
|
||
|
||
* Partial support for properly encoding Unix exit status codes into VMS exit
|
||
status codes.
|
||
|
||
WARNING: Backward-incompatibility! These are different exit status codes
|
||
than Make exited with in the past.
|
||
|
||
* Macros to hold the current make command are set up to translate the
|
||
argv[0] string to a VMS format path name and prefix it with "MCR " so that
|
||
the macro has a space in it.
|
||
|
||
WARNING: Backward-incompatibility! This may break complex makefiles that
|
||
do processing on those macros. This is unlikely because so much in that
|
||
area was not and is still not currently working on VMS, it is unlikely to
|
||
find such a complex makefile, so this is more likely to impact
|
||
construction of a future makefile.
|
||
|
||
* A command file is always used to run the commands for a recipe.
|
||
|
||
WARNING: Backward-incompatibility! Running the make self tests has
|
||
exposed that there are significant differences in behavior when running
|
||
with the command file mode. It is unknown if this will be noticed by most
|
||
existing VMS makefiles.
|
||
|
||
Version 4.0 (09 Oct 2013)
|
||
|
||
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=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 https://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.
|
||
|
||
|
||
Version 3.82 (28 Jul 2010)
|
||
|
||
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=104&set=custom
|
||
|
||
* Compiling GNU Make now requires a conforming ISO C 1989 compiler and
|
||
standard runtime library.
|
||
|
||
* 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
|
||
the '-e' flag were provided. Because this would break many makefiles that
|
||
have been written to conform to the original text of the standard, the
|
||
default behavior of GNU Make remains to invoke the shell with simply '-c'.
|
||
However, any makefile specifying the .POSIX special target will follow the
|
||
new POSIX standard and pass '-e' to the shell. See also .SHELLFLAGS
|
||
below.
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
The '$?' variable now contains all prerequisites that caused the target to
|
||
be considered out of date, even if they do not exist (previously only
|
||
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!
|
||
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
|
||
use that variable in the prerequisite. Second, variable names can no
|
||
longer contain whitespace, unless you put the whitespace in a variable and
|
||
use the variable. Third, in previous versions of make it was sometimes
|
||
not flagged as an error for explicit and pattern targets to appear in the
|
||
same rule. Now this is always reported as an error.
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
The pattern-specific variables and pattern rules are now applied in the
|
||
shortest stem first order instead of the definition order (variables
|
||
and rules with the same stem length are still applied in the definition
|
||
order). This produces the usually-desired behavior where more specific
|
||
patterns are preferred. To detect this feature search for 'shortest-stem'
|
||
in the .FEATURES special variable.
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
The library search behavior has changed to be compatible with the standard
|
||
linker behavior. Prior to this version for prerequisites specified using
|
||
the -lfoo syntax make first searched for libfoo.so in the current
|
||
directory, vpath directories, and system directories. If that didn't yield
|
||
a match, make then searched for libfoo.a in these directories. Starting
|
||
with this version make searches first for libfoo.so and then for libfoo.a
|
||
in each of these directories in order.
|
||
|
||
* New command line option: --eval=STRING causes STRING to be evaluated as
|
||
makefile syntax (akin to using the $(eval ...) function). The evaluation
|
||
is performed after all default rules and variables are defined, but before
|
||
any makefiles are read.
|
||
|
||
* New special variable: .RECIPEPREFIX allows you to reset the recipe
|
||
introduction character from the default (TAB) to something else. The
|
||
first character of this variable value is the new recipe introduction
|
||
character. If the variable is set to the empty string, TAB is used again.
|
||
It can be set and reset at will; recipes will use the value active when
|
||
they were first parsed. To detect this feature check the value of
|
||
$(.RECIPEPREFIX).
|
||
|
||
* New special variable: .SHELLFLAGS allows you to change the options passed
|
||
to the shell when it invokes recipes. By default the value will be "-c"
|
||
(or "-ec" if .POSIX is set).
|
||
|
||
* New special target: .ONESHELL instructs make to invoke a single instance
|
||
of the shell and provide it with the entire recipe, regardless of how many
|
||
lines it contains. As a special feature to allow more straightforward
|
||
conversion of makefiles to use .ONESHELL, any recipe line control
|
||
characters ('@', '+', or '-') will be removed from the second and
|
||
subsequent recipe lines. This happens _only_ if the SHELL value is deemed
|
||
to be a standard POSIX-style shell. If not, then no interior line control
|
||
characters are removed (as they may be part of the scripting language used
|
||
with the alternate SHELL).
|
||
|
||
* New variable modifier 'private': prefixing a variable assignment with the
|
||
modifier 'private' suppresses inheritance of that variable by
|
||
prerequisites. This is most useful for target- and pattern-specific
|
||
variables.
|
||
|
||
* New make directive: 'undefine' allows you to undefine a variable so that
|
||
it appears as if it was never set. Both $(flavor) and $(origin) functions
|
||
will return 'undefined' for such a variable. To detect this feature search
|
||
for 'undefine' in the .FEATURES special variable.
|
||
|
||
* The parser for variable assignments has been enhanced to allow multiple
|
||
modifiers ('export', 'override', 'private') on the same line as variables,
|
||
including define/endef variables, and in any order. Also, it is possible
|
||
to create variables and targets named as these modifiers.
|
||
|
||
* The 'define' make directive now allows a variable assignment operator
|
||
after the variable name, to allow for simple, conditional, or appending
|
||
multi-line variable assignment.
|
||
|
||
* VMS-specific changes:
|
||
|
||
* Michael Gehre (at VISTEC-SEMI dot COM) supplied a fix for a problem with
|
||
timestamps of object modules in OLBs. The timestamps were not correctly
|
||
adjusted to GMT based time, if the local VMS time was using a daylight
|
||
saving algorithm and if daylight saving was switched off.
|
||
|
||
* John Eisenbraun (at HP dot COM) supplied fixes and and an enhancement to
|
||
append output redirection in action lines.
|
||
|
||
* Rework of ctrl+c and ctrl+y handling.
|
||
|
||
* Fix a problem with cached strings, which showed on case-insensitive file
|
||
systems.
|
||
|
||
* Build fixes for const-ified code in VMS specific sources.
|
||
|
||
* A note on appending the redirected output. With this change, a simple
|
||
mechanism is implemented to make ">>" work in action lines. In VMS
|
||
there is no simple feature like ">>" to have DCL command or program
|
||
output redirected and appended to a file. GNU Make for VMS already
|
||
implements the redirection of output. If such a redirection is detected,
|
||
an ">" on the action line, GNU Make creates a DCL command procedure to
|
||
execute the action and to redirect its output. Based on that, now ">>"
|
||
is also recognized and a similar but different command procedure is
|
||
created to implement the append. The main idea here is to create a
|
||
temporary file which collects the output and which is appended to the
|
||
wanted output file. Then the temporary file is deleted. This is all done
|
||
in the command procedure to keep changes in make small and simple. This
|
||
obviously has some limitations but it seems good enough compared with
|
||
the current ">" implementation. (And in my opinion, redirection is not
|
||
really what GNU Make has to do.) With this approach, it may happen that
|
||
the temporary file is not yet appended and is left in SYS$SCRATCH.
|
||
The temporary file names look like "CMDxxxxx.". Any time the created
|
||
command procedure can not complete, this happens. Pressing Ctrl+Y to
|
||
abort make is one case. In case of Ctrl+Y the associated command
|
||
procedure is left in SYS$SCRATCH as well. Its name is CMDxxxxx.COM.
|
||
|
||
* Change in the Ctrl+Y handling. The CtrlY handler now uses $delprc to
|
||
delete all children. This way also actions with DCL commands will be
|
||
stopped. As before the CtrlY handler then sends SIGQUIT to itself,
|
||
which is handled in common code.
|
||
|
||
* Change in deleteing temporary command files. Temporary command files
|
||
are now deleted in the vms child termination handler. That deletes
|
||
them even if a Ctrl+C was pressed.
|
||
|
||
* The behavior of pressing Ctrl+C is not changed. It still has only an
|
||
effect, after the current action is terminated. If that doesn't happen
|
||
or takes too long, Ctrl+Y should be used instead.
|
||
|
||
|
||
Version 3.81 (01 Apr 2006)
|
||
|
||
* GNU Make is ported to OS/2.
|
||
|
||
* GNU Make is ported to MinGW. The MinGW build is only supported by
|
||
the build_w32.bat batch file; see the file README.W32 for more
|
||
details.
|
||
|
||
* WARNING: Future backward-incompatibility!
|
||
Up to and including this release, the '$?' variable does not contain
|
||
any prerequisite that does not exist, even though that prerequisite
|
||
might have caused the target to rebuild. Starting with the _next_
|
||
release of GNU Make, '$?' will contain all prerequisites that caused
|
||
the target to be considered out of date.
|
||
See https://savannah.gnu.org/bugs/?16051
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
GNU Make now implements a generic "second expansion" feature on the
|
||
prerequisites of both explicit and implicit (pattern) rules. In order
|
||
to enable this feature, the special target '.SECONDEXPANSION' must be
|
||
defined before the first target which takes advantage of it. If this
|
||
feature is enabled then after all rules have been parsed the
|
||
prerequisites are expanded again, this time with all the automatic
|
||
variables in scope. This means that in addition to using standard
|
||
SysV $$@ in prerequisites lists, you can also use complex functions
|
||
such as $$(notdir $$@) etc. This behavior applies to implicit rules,
|
||
as well, where the second expansion occurs when the rule is matched.
|
||
However, this means that when '.SECONDEXPANSION' is enabled you must
|
||
double-quote any "$" in your filenames; instead of "foo: boo$$bar" you
|
||
now must write "foo: foo$$$$bar". Note that the SysV $$@ etc. feature,
|
||
which used to be available by default, is now ONLY available when the
|
||
.SECONDEXPANSION target is defined. If your makefiles take advantage
|
||
of this SysV feature you will need to update them.
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
In order to comply with POSIX, the way in which GNU Make processes
|
||
backslash-newline sequences in recipes has changed. If your makefiles
|
||
use backslash-newline sequences inside of single-quoted strings in
|
||
recipes you will be impacted by this change. See the GNU Make manual
|
||
subsection "Splitting Recipe Lines" (node "Splitting Lines"), in
|
||
section "Recipe Syntax", chapter "Writing Recipe in Rules", for
|
||
details.
|
||
|
||
* WARNING: Backward-incompatibility!
|
||
Some previous versions of GNU Make had a bug where "#" in a function
|
||
invocation such as $(shell ...) was treated as a make comment. A
|
||
workaround was to escape these with backslashes. This bug has been
|
||
fixed: if your makefile uses "\#" in a function invocation the
|
||
backslash is now preserved, so you'll need to remove it.
|
||
|
||
* New command line option: -L (--check-symlink-times). On systems that
|
||
support symbolic links, if this option is given then GNU Make will
|
||
use the most recent modification time of any symbolic links that are
|
||
used to resolve target files. The default behavior remains as it
|
||
always has: use the modification time of the actual target file only.
|
||
|
||
* The "else" conditional line can now be followed by any other valid
|
||
conditional on the same line: this does not increase the depth of the
|
||
conditional nesting, so only one "endif" is required to close the
|
||
conditional.
|
||
|
||
* All pattern-specific variables that match a given target are now used
|
||
(previously only the first match was used).
|
||
|
||
* Target-specific variables can be marked as exportable using the
|
||
"export" keyword.
|
||
|
||
* In a recursive $(call ...) context, any extra arguments from the outer
|
||
call are now masked in the context of the inner call.
|
||
|
||
* Implemented a solution for the "thundering herd" problem with "-j -l".
|
||
This version of GNU Make uses an algorithm suggested by Thomas Riedl
|
||
<thomas.riedl@siemens.com> to track the number of jobs started in the
|
||
last second and artificially adjust GNU Make's view of the system's
|
||
load average accordingly.
|
||
|
||
* New special variables available in this release:
|
||
- .INCLUDE_DIRS: Expands to a list of directories that make searches
|
||
for included makefiles.
|
||
- .FEATURES: Contains a list of special features available in this
|
||
version of GNU Make.
|
||
- .DEFAULT_GOAL: Set the name of the default goal make will
|
||
use if no goals are provided on the command line.
|
||
- MAKE_RESTARTS: If set, then this is the number of times this
|
||
instance of make has been restarted (see "How Makefiles Are Remade"
|
||
in the manual).
|
||
- New automatic variable: $| (added in 3.80, actually): contains all
|
||
the order-only prerequisites defined for the target.
|
||
|
||
* New functions available in this release:
|
||
- $(lastword ...) returns the last word in the list. This gives
|
||
identical results as $(word $(words ...) ...), but is much faster.
|
||
- $(abspath ...) returns the absolute path (all "." and ".."
|
||
directories resolved, and any duplicate "/" characters removed) for
|
||
each path provided.
|
||
- $(realpath ...) returns the canonical pathname for each path
|
||
provided. The canonical pathname is the absolute pathname, with
|
||
all symbolic links resolved as well.
|
||
- $(info ...) prints its arguments to stdout. No makefile name or
|
||
line number info, etc. is printed.
|
||
- $(flavor ...) returns the flavor of a variable.
|
||
- $(or ...) provides a short-circuiting OR conditional: each argument
|
||
is expanded. The first true (non-empty) argument is returned; no
|
||
further arguments are expanded. Expands to empty if there are no
|
||
true arguments.
|
||
- $(and ...) provides a short-circuiting AND conditional: each
|
||
argument is expanded. The first false (empty) argument is
|
||
returned; no further arguments are expanded. Expands to the last
|
||
argument if all arguments are true.
|
||
|
||
* Changes made for POSIX compatibility:
|
||
- Only touch targets (under -t) if they have a recipe.
|
||
- Setting the SHELL make variable does NOT change the value of the
|
||
SHELL environment variable given to programs invoked by make. As
|
||
an enhancement to POSIX, if you export the make variable SHELL then
|
||
it will be set in the environment, just as before.
|
||
|
||
* On MS Windows systems, explicitly setting SHELL to a pathname ending
|
||
in "cmd" or "cmd.exe" (case-insensitive) will force GNU Make to use
|
||
the DOS command interpreter in batch mode even if a UNIX-like shell
|
||
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.
|
||
|
||
* Parallel builds (-jN) no longer require a working Bourne shell on
|
||
Windows platforms. They work even with the stock Windows shells, such
|
||
as cmd.exe and command.com.
|
||
|
||
* Updated to autoconf 2.59, automake 1.9.5, and gettext 0.14.1. Users
|
||
should not be impacted.
|
||
|
||
* New translations for Swedish, Chinese (simplified), Ukrainian,
|
||
Belarusian, Finnish, Kinyarwandan, and Irish. Many updated
|
||
translations.
|
||
|
||
A complete list of bugs fixed in this version is available here:
|
||
|
||
https://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=103
|
||
|
||
|
||
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
|
||
the rebuild/no-rebuild decision of their dependents. That is to say,
|
||
they allow you to require target B be built before target A, without
|
||
requiring that target A will always be rebuilt if target B is updated.
|
||
Patch for this feature provided by Greg McGary <greg@mcgary.org>.
|
||
|
||
* For compatibility with SysV make, GNU Make now supports the peculiar
|
||
syntax $$@, $$(@D), and $$(@F) in the prerequisites list of a rule.
|
||
This syntax is only valid within explicit and static pattern rules: it
|
||
cannot be used in implicit (suffix or pattern) rules. Edouard G. Parmelan
|
||
<egp@free.fr> provided a patch implementing this feature; however, I
|
||
decided to implement it in a different way.
|
||
|
||
* The argument to the "ifdef" conditional is now expanded before it's
|
||
tested, so it can be a constructed variable name.
|
||
|
||
Similarly, the arguments to "export" (when not used in a variable
|
||
definition context) and "unexport" are also now expanded.
|
||
|
||
* A new function is defined: $(value ...). The argument to this
|
||
function is the _name_ of a variable. The result of the function is
|
||
the value of the variable, without having been expanded.
|
||
|
||
* A new function is defined: $(eval ...). The arguments to this
|
||
function should expand to makefile commands, which will then be
|
||
evaluated as if they had appeared in the makefile. In combination
|
||
with define/endef multiline variable definitions this is an extremely
|
||
powerful capability. The $(value ...) function is also sometimes
|
||
useful here.
|
||
|
||
* A new built-in variable is defined, $(MAKEFILE_LIST). It contains a
|
||
list of each makefile GNU Make has read, or started to read, in the
|
||
order in which they were encountered. So, the last filename in the
|
||
list when a makefile is just being read (before any includes) is the
|
||
name of the current makefile.
|
||
|
||
* A new built-in variable is defined: $(.VARIABLES). When it is
|
||
expanded it returns a complete list of variable names defined by all
|
||
makefiles at that moment.
|
||
|
||
* A new command line option is defined, -B or --always-make. If
|
||
specified GNU Make will consider all targets out-of-date even if they
|
||
would otherwise not be.
|
||
|
||
* The arguments to $(call ...) functions were being stored in $1, $2,
|
||
etc. as recursive variables, even though they are fully expanded
|
||
before assignment. This means that escaped dollar signs ($$ etc.)
|
||
were not behaving properly. Now the arguments are stored as simple
|
||
variables. This may mean that if you added extra escaping to your
|
||
$(call ...) function arguments you will need to undo it now.
|
||
|
||
* The variable invoked by $(call ...) can now be recursive: unlike other
|
||
variables it can reference itself and this will not produce an error
|
||
when it is used as the first argument to $(call ...) (but only then).
|
||
|
||
* New pseudo-target .LOW_RESOLUTION_TIME, superseding the configure
|
||
option --disable-nsec-timestamps. You might need this if your build
|
||
process depends on tools like "cp -p" preserving time stamps, since
|
||
"cp -p" (right now) doesn't preserve the subsecond portion of a time
|
||
stamp.
|
||
|
||
* Updated translations for French, Galician, German, Japanese, Korean,
|
||
and Russian. New translations for Croatian, Danish, Hebrew, and
|
||
Turkish.
|
||
|
||
* Updated internationalization support to Gettext 0.11.5.
|
||
GNU Make now uses Gettext's "external" feature, and does not include
|
||
any internationalization code itself. Configure will search your
|
||
system for an existing implementation of GNU Gettext (only GNU Gettext
|
||
is acceptable) and use it if it exists. If not, NLS will be disabled.
|
||
See ABOUT-NLS for more information.
|
||
|
||
* Updated to autoconf 2.54 and automake 1.7. Users should not be impacted.
|
||
|
||
* VMS-specific changes:
|
||
|
||
* In default.c define variable ARCH as IA64 for VMS on Itanium systems.
|
||
|
||
* In makefile.vms avoid name collision for glob and globfree.
|
||
|
||
* This is the VMS port of GNU Make done by Hartmut.Becker@compaq.com.
|
||
|
||
It is based on the specific version 3.77k and on 3.78.1. 3.77k was done
|
||
by Klaus Kämpf <kkaempf@rmi.de>, the code was based on the VMS port of
|
||
GNU Make 3.60 by Mike Moretti.
|
||
|
||
It was ported on OpenVMS/Alpha V7.1, DECC V5.7-006. It was re-build and
|
||
tested on OpenVMS/Alpha V7.2, OpenVMS/VAX 7.1 and 5.5-2. Different
|
||
versions of DECC were used. VAXC was tried: it fails; but it doesn't
|
||
seem worth to get it working. There are still some PTRMISMATCH warnings
|
||
during the compile. Although perl is working on VMS the test scripts
|
||
don't work. The function $shell is still missing.
|
||
|
||
There is a known bug in some of the VMS CRTLs. It is in the shipped
|
||
versions of VMS V7.2 and V7.2-1 and in the currently (October 1999)
|
||
available ECOs for VMS V7.1 and newer versions. It is fixed in versions
|
||
shipped with newer VMS versions and all ECO kits after October 1999. It
|
||
only shows up during the daylight saving time period (DST): stat()
|
||
returns a modification time 1 hour ahead. This results in GNU Make
|
||
warning messages. For a just created source you will see:
|
||
|
||
$ gmake x.exe
|
||
gmake.exe;1: *** Warning: File 'x.c' has modification time in the future
|
||
(940582863 > 940579269)
|
||
cc /obj=x.obj x.c
|
||
link x.obj /exe=x.exe
|
||
gmake.exe;1: *** Warning: Clock skew detected. Your build may be
|
||
incomplete.
|
||
|
||
|
||
A complete list of bugs fixed in this version is available here:
|
||
|
||
https://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102
|
||
|
||
|
||
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
|
||
listed in the makefile.
|
||
|
||
* New configure option --disable-nsec-timestamps, but this was
|
||
superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target.
|
||
|
||
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
|
||
file for more information on configuring GNU Make for NLS.
|
||
|
||
* Previously, GNU Make quoted variables such as MAKEFLAGS and
|
||
MAKEOVERRIDES for proper parsing by the shell. This allowed them to
|
||
be used within make build scripts. However, using them there is not
|
||
proper behavior: they are meant to be passed to subshells via the
|
||
environment. Unfortunately the values were not quoted properly to be
|
||
passed through the environment. This meant that make didn't properly
|
||
pass some types of command line values to submakes.
|
||
|
||
With this version we change that behavior: now these variables are
|
||
quoted properly for passing through the environment, which is the
|
||
correct way to do it. If you previously used these variables
|
||
explicitly within a make rule you may need to re-examine your use for
|
||
correctness given this change.
|
||
|
||
* A new pseudo-target .NOTPARALLEL is available. If defined, the
|
||
current makefile is run serially regardless of the value of -j.
|
||
However, submakes are still eligible for parallel execution.
|
||
|
||
* The --debug option has changed: it now allows optional flags
|
||
controlling the amount and type of debugging output. By default only
|
||
a minimal amount information is generated, displaying the names of
|
||
"normal" targets (not makefiles) that were deemed out of date and in
|
||
need of being rebuilt.
|
||
|
||
Note that the -d option behaves as before: it takes no arguments and
|
||
all debugging information is generated.
|
||
|
||
* The `-p' (print database) output now includes filename and linenumber
|
||
information for variable definitions, to aid debugging.
|
||
|
||
* The wordlist function no longer reverses its arguments if the "start"
|
||
value is greater than the "end" value. If that's true, nothing is
|
||
returned.
|
||
|
||
* Hartmut Becker provided many updates for the VMS port of GNU Make.
|
||
See the README.VMS file for more details.
|
||
|
||
* VMS-specific changes:
|
||
|
||
* Fix a problem with automatically remaking makefiles. GNU Make uses an
|
||
execve to restart itself after a successful remake of the makefile. On
|
||
UNIX systems execve replaces the running program with a new one and
|
||
resets all signal handling to the default. On VMS execve creates a child
|
||
process, signal and exit handlers of the parent are still active, and,
|
||
unfortunately, corrupt the exit code from the child. Fix in job.c:
|
||
ignore SIGCHLD.
|
||
|
||
* Added some switches to reflect latest features of DECC. Modifications in
|
||
makefile.vms.
|
||
|
||
* Set some definitions to reflect latest features of DECC. Modifications in
|
||
config.h-vms (which is copied to config.h).
|
||
|
||
* Added extern strcmpi declaration to avoid 'implicitly declared' messages.
|
||
Modification in make.h.
|
||
|
||
* Default rule for C++, conditionals for gcc (GCC_IS_NATIVE) or DEC/Digital/
|
||
Compaq c/c++ compilers. Modifications in default.c.
|
||
|
||
* Usage of opendir() and friends, suppress file version. Modifications in
|
||
dir.c.
|
||
|
||
* Added VMS specific code to handle ctrl+c and ctrl+y to abort make.
|
||
Modifications in job.c.
|
||
|
||
* Added support to have case sensitive targets and dependencies but to
|
||
still use case blind file names. This is especially useful for Java
|
||
makefiles on VMS:
|
||
|
||
.SUFFIXES :
|
||
.SUFFIXES : .class .java
|
||
.java.class :
|
||
javac "$<
|
||
HelloWorld.class : HelloWorld.java
|
||
|
||
* A new macro WANT_CASE_SENSITIVE_TARGETS in config.h-vms was introduced.
|
||
It needs to be enabled to get this feature; default is disabled. The
|
||
macro HAVE_CASE_INSENSITIVE_FS must not be touched: it is still enabled.
|
||
Modifications in file.c and config.h-vms.
|
||
|
||
* Bootstrap make to start building make is still makefile.com, but make
|
||
needs to be re-made with a make to make a correct version: ignore all
|
||
possible warnings, delete all objects, rename make.exe to a different
|
||
name and run it.
|
||
|
||
* Made some minor modifications to the bootstrap build makefile.com.
|
||
|
||
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
|
||
the function, with the text provided as the error message. The latter
|
||
causes the text provided to be printed as a warning message, but make
|
||
proceeds normally.
|
||
|
||
* A new function $(call ...) is available. This allows users to create
|
||
their own parameterized macros and invoke them later. Original
|
||
implementation of this function was provided by Han-Wen Nienhuys
|
||
<hanwen@cs.uu.nl>.
|
||
|
||
* A new function $(if ...) is available. It provides if-then-else
|
||
capabilities in a builtin function. Original implementation of this
|
||
function was provided by Han-Wen Nienhuys <hanwen@cs.uu.nl>.
|
||
|
||
* Make defines a new variable, .LIBPATTERNS. This variable controls how
|
||
library dependency expansion (dependencies like ``-lfoo'') is performed.
|
||
|
||
* Make accepts CRLF sequences as well as traditional LF, for
|
||
compatibility with makefiles created on other operating systems.
|
||
|
||
* Make accepts a new option: -R, or --no-builtin-variables. This option
|
||
disables the definition of the rule-specific builtin variables (CC,
|
||
LD, AR, etc.). Specifying this option forces -r (--no-builtin-rules)
|
||
as well.
|
||
|
||
* A "job server" feature, suggested by Howard Chu <hyc@highlandsun.com>.
|
||
|
||
On systems that support POSIX pipe(2) semantics, GNU Make can now pass
|
||
-jN options to submakes rather than forcing them all to use -j1. The
|
||
top make and all its sub-make processes use a pipe to communicate with
|
||
each other to ensure that no more than N jobs are started across all
|
||
makes. To get the old behavior of -j back, you can configure make
|
||
with the --disable-job-server option.
|
||
|
||
* The confusing term "dependency" has been replaced by the more accurate
|
||
and standard term "prerequisite", both in the manual and in all GNU Make
|
||
output.
|
||
|
||
* GNU Make supports the "big archive" library format introduced in AIX 4.3.
|
||
|
||
* GNU Make supports large files on AIX, HP-UX, and IRIX. These changes
|
||
were provided by Paul Eggert <eggert@twinsun.com>. (Large file
|
||
support for Solaris and Linux was introduced in 3.77, but the
|
||
configuration had issues: these have also been resolved).
|
||
|
||
* The Windows 95/98/NT (W32) version of GNU Make now has native support
|
||
for the Cygnus Cygwin release B20.1 shell (bash).
|
||
|
||
* The GNU Make regression test suite, long available separately "under
|
||
the table", has been integrated into the release. You can invoke it
|
||
by running "make check" in the distribution. Note that it requires
|
||
Perl (either Perl 4 or Perl 5) to run.
|
||
|
||
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
|
||
defined.
|
||
|
||
* Make defines a new variable, "CURDIR", to contain the current working
|
||
directory (after the -C option, if any, has been processed).
|
||
Modifying this variable has no effect on the operation of make.
|
||
|
||
* Make defines a new default RCS rule, for new-style master file
|
||
storage: ``% :: RCS/%'' (note no ``,v'' suffix).
|
||
|
||
Make defines new default rules for DOS-style C++ file naming
|
||
conventions, with ``.cpp'' suffixes. All the same rules as for
|
||
``.cc'' and ``.C'' suffixes are provided, along with LINK.cpp and
|
||
COMPILE.cpp macros (which default to the same value as LINK.cc and
|
||
COMPILE.cc). Note CPPFLAGS is still C preprocessor flags! You should
|
||
use CXXFLAGS to change C++ compiler flags.
|
||
|
||
* A new feature, "target-specific variable values", has been added.
|
||
This is a large change so please see the appropriate sections of the
|
||
manual for full details. Briefly, syntax like this:
|
||
|
||
TARGET: VARIABLE = VALUE
|
||
|
||
defines VARIABLE as VALUE within the context of TARGET. This is
|
||
similar to SunOS make's "TARGET := VARIABLE = VALUE" feature. Note
|
||
that the assignment may be of any type, not just recursive, and that
|
||
the override keyword is available.
|
||
|
||
COMPATIBILITY: This new syntax means that if you have any rules where
|
||
the first or second dependency has an equal sign (=) in its name,
|
||
you'll have to escape them with a backslash: "foo : bar\=baz".
|
||
Further, if you have any dependencies which already contain "\=",
|
||
you'll have to escape both of them: "foo : bar\\\=baz".
|
||
|
||
* A new appendix listing the most common error and warning messages
|
||
generated by GNU Make, with some explanation, has been added to the
|
||
GNU Make User's Manual.
|
||
|
||
* Updates to the GNU Make Customs library support (see README.customs).
|
||
|
||
* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32),
|
||
and to the DOS port from Eli Zaretski (see README.DOS).
|
||
|
||
* VMS-specific changes:
|
||
|
||
* This is the VMS port of GNU Make.
|
||
It is based on the VMS port of GNU Make 3.60 by Mike Moretti.
|
||
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 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
|
||
mcr sys$disk:[]program.exe < input.txt > output.txt &> error.txt
|
||
|
||
* Makefile variables are looked up in the current environment. You can set
|
||
symbols or logicals in DCL and evaluate them in the Makefile via
|
||
$(<name-of-symbol-or-logical>). Variables defined in the Makefile
|
||
override VMS symbols/logicals !
|
||
|
||
* Functions for file names are working now. See the GNU Make manual for
|
||
$(dir ...) and $(wildcard ...). Unix-style and VMS-style names are
|
||
supported as arguments.
|
||
|
||
* The default rules are set up for GNU C. Building an executable from a
|
||
single source file is as easy as 'make file.exe'.
|
||
|
||
* The variable $(ARCH) is predefined as ALPHA or VAX resp. Makefiles for
|
||
different VMS systems can now be written by checking $(ARCH) as in
|
||
ifeq ($(ARCH),ALPHA)
|
||
$(ECHO) "On the Alpha"
|
||
else
|
||
$(ECHO) "On the VAX"
|
||
endif
|
||
|
||
* Command lines of excessive length are correctly broken and written to a
|
||
batch file in sys$scratch for later execution. There's no limit to the
|
||
lengths of commands (and no need for .opt files :-) any more.
|
||
|
||
* Empty commands are handled correctly and don't end in a new DCL process.
|
||
|
||
Version 3.76.1 (19 Sep 1997)
|
||
|
||
* Small (but serious) bug fix. Quick rollout to get into the GNU source CD.
|
||
|
||
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.
|
||
|
||
* VPATH functionality has been changed to incorporate the VPATH+ patch,
|
||
previously maintained by Paul Smith <psmith@baynetworks.com>. See the
|
||
manual.
|
||
|
||
* Make defines a new variable, `MAKECMDGOALS', to contain the goals that
|
||
were specified on the command line, if any. Modifying this variable
|
||
has no effect on the operation of make.
|
||
|
||
* A new function, `$(wordlist S,E,TEXT)', is available: it returns a
|
||
list of words from number S to number E (inclusive) of TEXT.
|
||
|
||
* Instead of an error, detection of future modification times gives a
|
||
warning and continues. The warning is repeated just before GNU Make
|
||
exits, so it is less likely to be lost.
|
||
|
||
* Fix the $(basename) and $(suffix) functions so they only operate on
|
||
the last filename, not the entire string:
|
||
|
||
Command Old Result New Result
|
||
------- ---------- ----------
|
||
$(basename a.b) a a
|
||
$(basename a.b/c) a a.b/c
|
||
$(suffix a.b) b b
|
||
$(suffix a.b/c) b/c <empty>
|
||
|
||
* The $(strip) function now removes newlines as well as TABs and spaces.
|
||
|
||
* The $(shell) function now changes CRLF (\r\n) pairs to a space as well
|
||
as newlines (\n).
|
||
|
||
* Updates to the Windows 95/NT port from Rob Tulloh (see README.W32).
|
||
|
||
* Eli Zaretskii has updated the port to 32-bit protected mode on MSDOS
|
||
and MS-Windows, building with the DJGPP v2 port of GNU C/C++ compiler
|
||
and utilities. See README.DOS for details, and direct all questions
|
||
concerning this port to Eli Zaretskii <eliz@is.elta.co.il> or DJ
|
||
Delorie <dj@delorie.com>.
|
||
|
||
* VMS-specific changes:
|
||
|
||
* John W. Eaton has updated the VMS port to support libraries and VPATH.
|
||
|
||
* The cd command is supported if it's called as $(CD). This invokes
|
||
the 'builtin_cd' command which changes the directory.
|
||
Calling 'set def' doesn't do the trick, since a sub-shell is
|
||
spawned for this command, the directory is changed *in this sub-shell*
|
||
and the sub-shell ends.
|
||
|
||
* Libraries are not supported. They were in GNU Make 3.60 but somehow I
|
||
didn't care porting the code. If there is enough interest, I'll do it at
|
||
some later time.
|
||
|
||
* The variable $^ separates files with commas instead of spaces (It's the
|
||
natural thing to do for VMS).
|
||
|
||
* See defaults.c for VMS default suffixes and my definitions for default
|
||
rules and variables.
|
||
|
||
* The shell function is not implemented yet.
|
||
|
||
* Load average routines haven't been implemented for VMS yet.
|
||
|
||
* The default include directory for including other makefiles is
|
||
SYS$SYSROOT:[SYSLIB] (I don't remember why I didn't just use
|
||
SYS$LIBRARY: instead; maybe it wouldn't work that way).
|
||
|
||
* The default makefiles make looks for are: makefile.vms, gnumakefile,
|
||
makefile., and gnumakefile. .
|
||
|
||
* The stat() function and handling of time stamps in VMS is broken, so I
|
||
replaced it with a hack in vmsfunctions.c. I will provide a full rewrite
|
||
somewhere in the future. Be warned, the time resolution inside make is
|
||
less than what vms provides. This might be a problem on the faster Alphas.
|
||
|
||
* You can use a : in a filename only if you precede it with a backslash ('\').
|
||
E.g.- hobbes\:[bogas.files]
|
||
|
||
* Make ignores success, informational, or warning errors (-S-, -I-, or -W-).
|
||
But it will stop on -E- and -F- errors. (unless you do something
|
||
to override this in your makefile, or whatever).
|
||
|
||
* Remote stuff isn't implemented yet.
|
||
|
||
* Multiple line DCL commands, such as "if" statements, must be put inside
|
||
command files. You can run a command file by using \@.
|
||
|
||
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.
|
||
|
||
* Make now detects files that for whatever reason have modification times
|
||
in the future and gives an error. Files with such impossible timestamps
|
||
can result from unsynchronized clocks, or archived distributions
|
||
containing bogus timestamps; they confuse Make's dependency engine
|
||
thoroughly.
|
||
|
||
* The new directive `sinclude' is now recognized as another name for
|
||
`-include', for compatibility with some other Makes.
|
||
|
||
* Aaron Digulla has contributed a port to AmigaDOS. See README.Amiga for
|
||
details, and direct all Amiga-related questions to <digulla@fh-konstanz.de>.
|
||
|
||
* Rob Tulloh of Tivoli Systems has contributed a port to Windows NT or 95.
|
||
See README.W32 for details, and direct all Windows-related questions to
|
||
<rob_tulloh@tivoli.com>.
|
||
|
||
* VMS-specific changes:
|
||
|
||
* Lots of default settings are adapted for VMS. See default.c.
|
||
|
||
* Long command lines are now converted to command files.
|
||
|
||
* Comma (',') as a separator is now allowed. See makefile.vms for an example.
|
||
|
||
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.
|
||
|
||
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;
|
||
please direct bugs and questions for DOS to <djgpp@sun.soe.clarkson.edu>.
|
||
MS-DOS binaries are available for FTP from ftp.simtel.net in
|
||
/pub/simtelnet/gnu/djgpp/.
|
||
|
||
* The `MAKEFLAGS' variable (in the environment or in a makefile) can now
|
||
contain variable definitions itself; these are treated just like
|
||
command line variable definitions. Make will automatically insert any
|
||
variable definitions from the environment value of `MAKEFLAGS' or from
|
||
the command line, into the `MAKEFLAGS' value exported to children. The
|
||
`MAKEOVERRIDES' variable previously included in the value of `$(MAKE)'
|
||
for sub-makes is now included in `MAKEFLAGS' instead. As before, you can
|
||
reset `MAKEOVERRIDES' in your makefile to avoid putting all the variables
|
||
in the environment when its size is limited.
|
||
|
||
* If `.DELETE_ON_ERROR' appears as a target, Make will delete the target of
|
||
a rule if it has changed when its recipe exits with a nonzero status,
|
||
just as when the recipe gets a signal.
|
||
|
||
* The automatic variable `$+' is new. It lists all the dependencies like
|
||
`$^', but preserves duplicates listed in the makefile. This is useful
|
||
for linking rules, where library files sometimes need to be listed twice
|
||
in the link order.
|
||
|
||
* You can now specify the `.IGNORE' and `.SILENT' special targets with
|
||
dependencies to limit their effects to those files. If a file appears as
|
||
a dependency of `.IGNORE', then errors will be ignored while running the
|
||
recipe to update that file. Likewise if a file appears as a dependency
|
||
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 (21 May 1994)
|
||
|
||
* The automatic variables `$(@D)', `$(%D)', `$(*D)', `$(<D)', `$(?D)', and
|
||
`$(^D)' now omit the trailing slash from the directory name. (This change
|
||
was made to comply with POSIX.2.)
|
||
|
||
* The source distribution now includes the Info files for the Make manual.
|
||
There is no longer a separate distribution containing Info and DVI files.
|
||
|
||
* You can now set the variables `binprefix' and/or `manprefix' in
|
||
Makefile.in (or on the command line when installing) to install GNU Make
|
||
under a name other than `make' (i.e., ``make binprefix=g install''
|
||
installs GNU Make as `gmake').
|
||
|
||
* The built-in Texinfo rules use the new variables `TEXI2DVI_FLAGS' for
|
||
flags to the `texi2dvi' script, and `MAKEINFO_FLAGS' for flags to the
|
||
Makeinfo program.
|
||
|
||
* The exit status of Make when it runs into errors is now 2 instead of 1.
|
||
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 (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
|
||
results, but otherwise empty lines full of NULs (such as produced by
|
||
the `xmkmf' program) will always work fine.
|
||
|
||
* The error messages for nonexistent included makefiles now refer to the
|
||
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 (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)'
|
||
first, and just the member name and parentheses `(MEM)' second.
|
||
|
||
* Make now gives an error for an unterminated variable or function reference.
|
||
For example, `$(foo' with no matching `)' or `${bar' with no matching `}'.
|
||
|
||
* The new default variable `MAKE_VERSION' gives the version number of
|
||
Make, and a string describing the remote job support compiled in (if any).
|
||
Thus the value (in this release) is something like `3.69' or `3.69-Customs'.
|
||
|
||
* Commands in an invocation of the `shell' function are no longer run
|
||
with a modified environment like recipes are. As in versions before
|
||
3.68, they now run with the environment that `make' started with. We
|
||
have reversed the change made in version 3.68 because it turned out to
|
||
cause a paradoxical situation in cases like:
|
||
|
||
export variable = $(shell echo value)
|
||
|
||
When Make attempted to put this variable in the environment for a
|
||
recipe, it would try expand the value by running the shell command
|
||
`echo value'. In version 3.68, because it constructed an environment
|
||
for that shell command in the same way, Make would begin to go into an
|
||
infinite loop and then get a fatal error when it detected the loop.
|
||
|
||
* The recipe given for `.DEFAULT' is now used for phony targets with no
|
||
recipe.
|
||
|
||
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)'.
|
||
|
||
* You can use wildcards inside archive member references. For example,
|
||
`lib(*.o)' expands to all existing members of `lib' whose names end in
|
||
`.o' (e.g. `lib(a.o) lib(b.o)'); `*.a(*.o)' expands to all such members
|
||
of all existing files whose names end in `.a' (e.g. `foo.a(a.o)
|
||
foo.a(b.o) bar.a(c.o) bar.a(d.o)'.
|
||
|
||
* A suffix rule `.X.a' now produces two pattern rules:
|
||
(%.o): %.X # Previous versions produced only this.
|
||
%.a: %.X # Now produces this as well, just like other suffixes.
|
||
|
||
* The new flag `--warn-undefined-variables' says to issue a warning message
|
||
whenever Make expands a reference to an undefined variable.
|
||
|
||
* The new `-include' directive is just like `include' except that there is
|
||
no error (not even a warning) for a nonexistent makefile.
|
||
|
||
* Commands in an invocation of the `shell' function are now run with a
|
||
modified environment like recipes are, so you can use `export' et al
|
||
to set up variables for them. They used to run with the environment
|
||
that `make' started with.
|
||
|
||
Version 3.66 (21 May 1993)
|
||
|
||
* `make --version' (or `make -v') now exits immediately after printing
|
||
the version number.
|
||
|
||
Version 3.65 (09 May 1993)
|
||
|
||
* Make now supports long-named members in `ar' archive files.
|
||
|
||
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
|
||
to Variables' in the manual for full details.
|
||
|
||
* The new option `--no-print-directory' inhibits the `-w' or
|
||
`--print-directory' feature. Make turns on `--print-directory'
|
||
automatically if you use `-C' or `--directory', and in sub-makes; some
|
||
users have found this behavior undesirable.
|
||
|
||
* The built-in implicit rules now support the alternative extension
|
||
`.txinfo' for Texinfo files, just like `.texinfo' and `.texi'.
|
||
|
||
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.
|
||
|
||
* There is now a shell script to build Make the first time, if you have no
|
||
other `make' program. `build.sh' is created by `configure'; see README.
|
||
|
||
* GNU Make now completely conforms to the POSIX.2 specification for `make'.
|
||
|
||
* Elements of the `$^' and `$?' automatic variables that are archive
|
||
member references now list only the member name, as in Unix and POSIX.2.
|
||
|
||
* You should no longer ever need to specify the `-w' switch, which prints
|
||
the current directory before and after Make runs. The `-C' switch to
|
||
change directory, and recursive use of Make, now set `-w' automatically.
|
||
|
||
* Multiple double-colon rules for the same target will no longer have their
|
||
recipes run simultaneously under -j, as this could result in the two
|
||
recipes trying to change the file at the same time and interfering with
|
||
one another.
|
||
|
||
* The `SHELL' variable is now never taken from the environment.
|
||
Each makefile that wants a shell other than the default (/bin/sh) must
|
||
set SHELL itself. SHELL is always exported to child processes.
|
||
This change was made for compatibility with POSIX.2.
|
||
|
||
* Make now accepts long options. There is now an informative usage message
|
||
that tells you what all the options are and what they do. Try `make --help'.
|
||
|
||
* There are two new directives: `export' and `unexport'. All variables are
|
||
no longer automatically put into the environments of the recipe lines that
|
||
Make runs. Instead, only variables specified on the command line or in
|
||
the environment are exported by default. To export others, use:
|
||
export VARIABLE
|
||
or you can define variables with:
|
||
export VARIABLE = VALUE
|
||
or:
|
||
export VARIABLE := VALUE
|
||
You can use just:
|
||
export
|
||
or:
|
||
.EXPORT_ALL_VARIABLES:
|
||
to get the old behavior. See the node `Variables/Recursion' in the manual
|
||
for a full description.
|
||
|
||
* The recipe from the `.DEFAULT' special target is only applied to
|
||
targets which have no rules at all, not all targets with no recipe.
|
||
This change was made for compatibility with Unix make.
|
||
|
||
* All fatal error messages now contain `***', so they are easy to find in
|
||
compilation logs.
|
||
|
||
* Dependency file names like `-lNAME' are now replaced with the actual file
|
||
name found, as with files found by normal directory search (VPATH).
|
||
The library file `libNAME.a' may now be found in the current directory,
|
||
which is checked before VPATH; the standard set of directories (/lib,
|
||
/usr/lib, /usr/local/lib) is now checked last.
|
||
See the node `Libraries/Search' in the manual for full details.
|
||
|
||
* A single `include' directive can now specify more than one makefile to
|
||
include, like this:
|
||
include file1 file2
|
||
You can also use shell file name patterns in an `include' directive:
|
||
include *.mk
|
||
|
||
* The default directories to search for included makefiles, and for
|
||
libraries specified with `-lNAME', are now set by configuration.
|
||
|
||
* You can now use blanks as well as colons to separate the directories in a
|
||
search path for the `vpath' directive or the `VPATH' variable.
|
||
|
||
* You can now use variables and functions in the left hand side of a
|
||
variable assignment, as in "$(foo)bar = value".
|
||
|
||
* The `MAKE' variable is always defined as `$(MAKE_COMMAND) $(MAKEOVERRIDES)'.
|
||
The `MAKE_COMMAND' variable is now defined to the name with which make
|
||
was invoked.
|
||
|
||
* The built-in rules for C++ compilation now use the variables `$(CXX)' and
|
||
`$(CXXFLAGS)' instead of `$(C++)' and `$(C++FLAGS)'. The old names had
|
||
problems with shells that cannot have `+' in environment variable names.
|
||
|
||
* The value of a recursively expanded variable is now expanded when putting
|
||
it into the environment for child processes. This change was made for
|
||
compatibility with Unix make.
|
||
|
||
* A rule with no targets before the `:' is now accepted and ignored.
|
||
This change was made for compatibility with SunOS 4 make.
|
||
We do not recommend that you write your makefiles to take advantage of this.
|
||
|
||
* The `-I' switch can now be used in MAKEFLAGS, and are put there
|
||
automatically just like other switches.
|
||
|
||
Version 3.61
|
||
|
||
* Built-in rules for C++ source files with the `.C' suffix.
|
||
We still recommend that you use `.cc' instead.
|
||
|
||
* If a recipe is given too many times for a single target, the last one
|
||
given is used, and a warning message is printed.
|
||
|
||
* Error messages about makefiles are in standard GNU error format,
|
||
so C-x ` in Emacs works on them.
|
||
|
||
* Dependencies of pattern rules which contain no % need not actually exist
|
||
if they can be created (just like dependencies which do have a %).
|
||
|
||
Version 3.60
|
||
|
||
* A message is always printed when Make decides there is nothing to be done.
|
||
It used to be that no message was printed for top-level phony targets
|
||
(because "`phony' is up to date" isn't quite right). Now a different
|
||
message "Nothing to be done for `phony'" is printed in that case.
|
||
|
||
* Archives on AIX now supposedly work.
|
||
|
||
* When the recipes specified for .DEFAULT are used to update a target,
|
||
the $< automatic variable is given the same value as $@ for that target.
|
||
This is how Unix make behaves, and this behavior is mandated by POSIX.2.
|
||
|
||
Version 3.59
|
||
|
||
* The -n, -q, and -t options are not put in the `MAKEFLAGS' and `MFLAG'
|
||
variables while remaking makefiles, so recursive makes done while remaking
|
||
makefiles will behave properly.
|
||
|
||
* If the special target `.NOEXPORT' is specified in a makefile,
|
||
only variables that came from the environment and variables
|
||
defined on the command line are exported.
|
||
|
||
Version 3.58
|
||
|
||
* Suffix rules may have dependencies (which are ignored).
|
||
|
||
Version 3.57
|
||
|
||
* Dependencies of the form `-lLIB' are searched for as /usr/local/lib/libLIB.a
|
||
as well as libLIB.a in /usr/lib, /lib, the current directory, and VPATH.
|
||
|
||
Version 3.55
|
||
|
||
* There is now a Unix man page for GNU Make. It is certainly not a
|
||
replacement for the Texinfo manual, but it documents the basic
|
||
functionality and the switches. For full documentation, you should
|
||
still read the Texinfo manual. Thanks to Dennis Morse of Stanford
|
||
University for contributing the initial version of this.
|
||
|
||
* Variables which are defined by default (e.g., `CC') will no longer be
|
||
put into the environment for child processes. (If these variables are
|
||
reset by the environment, makefiles, or the command line, they will
|
||
still go into the environment.)
|
||
|
||
* Makefiles which have recipes but no dependencies (and thus are always
|
||
considered out of date and in need of remaking), will not be remade (if they
|
||
were being remade only because they were makefiles). This means that GNU
|
||
Make will no longer go into an infinite loop when fed the makefiles that
|
||
`imake' (necessary to build X Windows) produces.
|
||
|
||
* There is no longer a warning for using the `vpath' directive with an explicit
|
||
pathname (instead of a `%' pattern).
|
||
|
||
Version 3.51
|
||
|
||
* When removing intermediate files, only one `rm' command line is printed,
|
||
listing all file names.
|
||
|
||
* There are now automatic variables `$(^D)', `$(^F)', `$(?D)', and `$(?F)'.
|
||
These are the directory-only and file-only versions of `$^' and `$?'.
|
||
|
||
* Library dependencies given as `-lNAME' will use "libNAME.a" in the current
|
||
directory if it exists.
|
||
|
||
* The automatic variable `$($/)' is no longer defined.
|
||
|
||
* Leading `+' characters on a recipe line make that line be executed even
|
||
under -n, -t, or -q (as if the line contained `$(MAKE)').
|
||
|
||
* For recipe lines containing `$(MAKE)', `${MAKE}', or leading `+' characters,
|
||
only those lines are executed, not the entire recipe.
|
||
(This is how Unix make behaves for lines containing `$(MAKE)' or `${MAKE}'.)
|
||
|
||
Version 3.50
|
||
|
||
* Filenames in rules will now have ~ and ~USER expanded.
|
||
|
||
* The `-p' output has been changed so it can be used as a makefile.
|
||
(All information that isn't specified by makefiles is prefaced with comment
|
||
characters.)
|
||
|
||
Version 3.49
|
||
|
||
* The % character can be quoted with backslash in implicit pattern rules,
|
||
static pattern rules, `vpath' directives, and `patsubst', `filter', and
|
||
`filter-out' functions. A warning is issued if a `vpath' directive's
|
||
pattern contains no %.
|
||
|
||
* The `wildcard' variable expansion function now expands ~ and ~USER.
|
||
|
||
* Messages indicating failed recipe lines now contain the target name:
|
||
make: *** [target] Error 1
|
||
|
||
* The `-p' output format has been changed somewhat to look more like
|
||
makefile rules and to give all information that Make has about files.
|
||
|
||
Version 3.48
|
||
|
||
Version 3.47
|
||
|
||
* The `-l' switch with no argument removes any previous load-average limit.
|
||
|
||
* When the `-w' switch is in effect, and Make has updated makefiles,
|
||
it will write a `Leaving directory' message before re-executing itself.
|
||
This makes the `directory change tracking' changes to Emacs's compilation
|
||
commands work properly.
|
||
|
||
Version 3.46
|
||
|
||
* The automatic variable `$*' is now defined for explicit rules,
|
||
as it is in Unix make.
|
||
|
||
Version 3.45
|
||
|
||
* The `-j' switch is now put in the MAKEFLAGS and MFLAGS variables when
|
||
specified without an argument (indicating infinite jobs).
|
||
The `-l' switch is not always put in the MAKEFLAGS and MFLAGS variables.
|
||
|
||
* Make no longer checks hashed directories after running recipes.
|
||
The behavior implemented in 3.41 caused too much slowdown.
|
||
|
||
Version 3.44
|
||
|
||
* A dependency is NOT considered newer than its dependent if
|
||
they have the same modification time. The behavior implemented
|
||
in 3.43 conflicts with RCS.
|
||
|
||
Version 3.43
|
||
|
||
* Dependency loops are no longer fatal errors.
|
||
|
||
* A dependency is considered newer than its dependent if
|
||
they have the same modification time.
|
||
|
||
Version 3.42
|
||
|
||
* The variables F77 and F77FLAGS are now set by default to $(FC) and
|
||
$(FFLAGS). Makefiles designed for System V make may use these variables in
|
||
explicit rules and expect them to be set. Unfortunately, there is no way to
|
||
make setting these affect the Fortran implicit rules unless FC and FFLAGS
|
||
are not used (and these are used by BSD make).
|
||
|
||
Version 3.41
|
||
|
||
* Make now checks to see if its hashed directories are changed by recipes.
|
||
Other makes that hash directories (Sun, 4.3 BSD) don't do this.
|
||
|
||
Version 3.39
|
||
|
||
* The `shell' function no longer captures standard error output.
|
||
|
||
Version 3.32
|
||
|
||
* A file beginning with a dot can be the default target if it also contains
|
||
a slash (e.g., `../bin/foo'). (Unix make allows this as well.)
|
||
|
||
Version 3.31
|
||
|
||
* Archive member names are truncated to 15 characters.
|
||
|
||
* Yet more USG stuff.
|
||
|
||
* Minimal support for Microport System V (a 16-bit machine and a
|
||
brain-damaged compiler). This has even lower priority than other USG
|
||
support, so if it gets beyond trivial, I will take it out completely.
|
||
|
||
* Revamped default implicit rules (not much visible change).
|
||
|
||
* The -d and -p options can come from the environment.
|
||
|
||
Version 3.30
|
||
|
||
* Improved support for USG and HPUX (hopefully).
|
||
|
||
* A variable reference like `$(foo:a=b)', if `a' contains a `%', is
|
||
equivalent to `$(patsubst a,b,$(foo))'.
|
||
|
||
* Defining .DEFAULT with no deps or recipe clears its recipe.
|
||
|
||
* New default implicit rules for .S (cpp, then as), and .sh (copy and
|
||
make executable). All default implicit rules that use cpp (even
|
||
indirectly), use $(CPPFLAGS).
|
||
|
||
Version 3.29
|
||
|
||
* Giving the -j option with no arguments gives you infinite jobs.
|
||
|
||
Version 3.28
|
||
|
||
* New option: "-l LOAD" says not to start any new jobs while others are
|
||
running if the load average is not below LOAD (a floating-point number).
|
||
|
||
* There is support in place for implementations of remote command execution
|
||
in Make. See the file remote.c.
|
||
|
||
Version 3.26
|
||
|
||
* No more than 10 directories will be kept open at once.
|
||
(This number can be changed by redefining MAX_OPEN_DIRECTORIES in dir.c.)
|
||
|
||
Version 3.25
|
||
|
||
* Archive files will have their modification times recorded before doing
|
||
anything that might change their modification times by updating an archive
|
||
member.
|
||
|
||
Version 3.20
|
||
|
||
* The `MAKELEVEL' variable is defined for use by makefiles.
|
||
|
||
Version 3.19
|
||
|
||
* The recursion level indications in error messages are much shorter than
|
||
they were in version 3.14.
|
||
|
||
Version 3.18
|
||
|
||
* Leading spaces before directives are ignored (as documented).
|
||
|
||
* Included makefiles can determine the default goal target.
|
||
(System V Make does it this way, so we are being compatible).
|
||
|
||
Version 3.14.
|
||
|
||
* Variables that are defaults built into Make will not be put in the
|
||
environment for children. This just saves some environment space and,
|
||
except under -e, will be transparent to sub-makes.
|
||
|
||
* Error messages from sub-makes will indicate the level of recursion.
|
||
|
||
* Hopefully some speed-up for large directories due to a change in the
|
||
directory hashing scheme.
|
||
|
||
* One child will always get a standard input that is usable.
|
||
|
||
* Default makefiles that don't exist will be remade and read in.
|
||
|
||
Version 3.13.
|
||
|
||
* Count parentheses inside expansion function calls so you can
|
||
have nested calls: `$(sort $(foreach x,a b,$(x)))'.
|
||
|
||
Version 3.12.
|
||
|
||
* Several bug fixes, including USG and Sun386i support.
|
||
|
||
* `shell' function to expand shell commands a la `
|
||
|
||
* If the `-d' flag is given, version information will be printed.
|
||
|
||
* The `-c' option has been renamed to `-C' for compatibility with tar.
|
||
|
||
* The `-p' option no longer inhibits other normal operation.
|
||
|
||
* Makefiles will be updated and re-read if necessary.
|
||
|
||
* Can now run several recipes at once (parallelism), -j option.
|
||
|
||
* Error messages will contain the level of Make recursion, if any.
|
||
|
||
* The `MAKEFLAGS' and `MFLAGS' variables will be scanned for options after
|
||
makefiles are read.
|
||
|
||
* A double-colon rule with no dependencies will always have its recipe run.
|
||
(This is how both the BSD and System V versions of Make do it.)
|
||
|
||
Version 3.05
|
||
|
||
(Changes from versions 1 through 3.05 were never recorded. Sorry.)
|
||
|
||
-------------------------------------------------------------------------------
|
||
Copyright (C) 1988-2024 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
|
||
Foundation; either version 3 of the License, or (at your option) any later
|
||
version.
|
||
|
||
GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
|
||
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 <https://www.gnu.org/licenses/>.
|