- Add static pattern targets to the string cache.
[make.git] / NEWS
blob8004ab9f78568d8fbe8cdeb0b7967ceedae4e531
1 GNU make NEWS                                               -*-indented-text-*-
2   History of user-visible changes.
3   25 May 2009
5 See the end of this file for copyrights and conditions.
7 All changes mentioned here are more fully described in the GNU make
8 manual, which is contained in this distribution as the file doc/make.texi.
9 See the README file and the GNU make manual for instructions for
10 reporting bugs.
12 Version 3.81.90
14 * Compiling GNU make now requires a conforming ISO C 1989 compiler and
15   standard runtime library.
17 * The parser for variable assignments has been enhanced to allow multiple
18   modifiers ('export', 'override', 'private' (see below)) on the same line as
19   variables, including define/endef variables, and in any order.  Also, it is
20   possible to create variables and targets named as these modifiers.
22 * WARNING: Backward-incompatibility!
23   As a result of the parser changes, two backward-compatibility issues exist:
24   first, a prerequisite containing an "=" cannot be escaped with a backslash
25   any longer.  You must create a variable containing an "=" and use that
26   variable in the prerequisite.  Second, variable names can no longer contain
27   whitespace, unless you put the whitespace in a variable and use the
28   variable.
30 * New special variable: .RECIPEPREFIX allows you to reset the recipe
31   introduction character from the default (TAB) to something else.  The first
32   character of this variable value is the new recipe introduction character.
33   If the variable is set to the empty string, TAB is used again.  It can be
34   set and reset at will; recipes will use the value active when they were
35   first parsed.
37 * New variable modifier 'private': prefixing a variable assignment with the
38   modifier 'private' suppresses inheritance of that variable by
39   prerequisites.  This is most useful for target- and pattern-specific
40   variables.
43 Version 3.81
45 * GNU make is ported to OS/2.
47 * GNU make is ported to MinGW.  The MinGW build is only supported by
48   the build_w32.bat batch file; see the file README.W32 for more
49   details.
51 * WARNING: Future backward-incompatibility!
52   Up to and including this release, the '$?' variable does not contain
53   any prerequisite that does not exist, even though that prerequisite
54   might have caused the target to rebuild.  Starting with the _next_
55   release of GNU make, '$?' will contain all prerequisites that caused
56   the target to be considered out of date.  See this Savannah bug:
57   http://savannah.gnu.org/bugs/index.php?func=detailitem&item_id=16051
59 * WARNING: Backward-incompatibility!
60   GNU make now implements a generic "second expansion" feature on the
61   prerequisites of both explicit and implicit (pattern) rules.  In order
62   to enable this feature, the special target '.SECONDEXPANSION' must be
63   defined before the first target which takes advantage of it.  If this
64   feature is enabled then after all rules have been parsed the
65   prerequisites are expanded again, this time with all the automatic
66   variables in scope.  This means that in addition to using standard
67   SysV $$@ in prerequisites lists, you can also use complex functions
68   such as $$(notdir $$@) etc.  This behavior applies to implicit rules,
69   as well, where the second expansion occurs when the rule is matched.
70   However, this means that when '.SECONDEXPANSION' is enabled you must
71   double-quote any "$" in your filenames; instead of "foo: boo$$bar" you
72   now must write "foo: foo$$$$bar".  Note that the SysV $$@ etc. feature,
73   which used to be available by default, is now ONLY available when the
74   .SECONDEXPANSION target is defined.  If your makefiles take advantage
75   of this SysV feature you will need to update them.
77 * WARNING: Backward-incompatibility!
79   In order to comply with POSIX, the way in which GNU make processes
80   backslash-newline sequences in recipes has changed.  If your makefiles
81   use backslash-newline sequences inside of single-quoted strings in
82   recipes you will be impacted by this change.  See the GNU make manual
83   subsection "Splitting Recipe Lines" (node "Splitting Lines"), in
84   section "Recipe Syntax", chapter "Writing Recipe in Rules", for
85   details.
87 * WARNING: Backward-incompatibility!
88   Some previous versions of GNU make had a bug where "#" in a function
89   invocation such as $(shell ...) was treated as a make comment.  A
90   workaround was to escape these with backslashes.  This bug has been
91   fixed: if your makefile uses "\#" in a function invocation the
92   backslash is now preserved, so you'll need to remove it.
94 * New command line option: -L (--check-symlink-times).  On systems that
95   support symbolic links, if this option is given then GNU make will
96   use the most recent modification time of any symbolic links that are
97   used to resolve target files.  The default behavior remains as it
98   always has: use the modification time of the actual target file only.
100 * The "else" conditional line can now be followed by any other valid
101   conditional on the same line: this does not increase the depth of the
102   conditional nesting, so only one "endif" is required to close the
103   conditional.
105 * All pattern-specific variables that match a given target are now used
106   (previously only the first match was used).
108 * Target-specific variables can be marked as exportable using the
109   "export" keyword.
111 * In a recursive $(call ...) context, any extra arguments from the outer
112   call are now masked in the context of the inner call.
114 * Implemented a solution for the "thundering herd" problem with "-j -l".
115   This version of GNU make uses an algorithm suggested by Thomas Riedl
116   <thomas.riedl@siemens.com> to track the number of jobs started in the
117   last second and artificially adjust GNU make's view of the system's
118   load average accordingly.
120 * New special variables available in this release:
121    - .INCLUDE_DIRS: Expands to a list of directories that make searches
122      for included makefiles.
123    - .FEATURES: Contains a list of special features available in this
124      version of GNU make.
125    - .DEFAULT_GOAL: Set the name of the default goal make will
126      use if no goals are provided on the command line.
127    - MAKE_RESTARTS: If set, then this is the number of times this
128      instance of make has been restarted (see "How Makefiles Are Remade"
129      in the manual).
130    - New automatic variable: $| (added in 3.80, actually): contains all
131      the order-only prerequisites defined for the target.
133 * New functions available in this release:
134    - $(lastword ...) returns the last word in the list.  This gives
135      identical results as $(word $(words ...) ...), but is much faster.
136    - $(abspath ...) returns the absolute path (all "." and ".."
137      directories resolved, and any duplicate "/" characters removed) for
138      each path provided.
139    - $(realpath ...) returns the canonical pathname for each path
140      provided.  The canonical pathname is the absolute pathname, with
141      all symbolic links resolved as well.
142    - $(info ...) prints its arguments to stdout.  No makefile name or
143      line number info, etc. is printed.
144    - $(flavor ...) returns the flavor of a variable.
145    - $(or ...) provides a short-circuiting OR conditional: each argument
146      is expanded.  The first true (non-empty) argument is returned; no
147      further arguments are expanded.  Expands to empty if there are no
148      true arguments.
149    - $(and ...) provides a short-circuiting AND conditional: each
150      argument is expanded.  The first false (empty) argument is
151      returned; no further arguments are expanded.  Expands to the last
152      argument if all arguments are true.
154 * Changes made for POSIX compatibility:
155    - Only touch targets (under -t) if they have a recipe.
156    - Setting the SHELL make variable does NOT change the value of the
157      SHELL environment variable given to programs invoked by make.  As
158      an enhancement to POSIX, if you export the make variable SHELL then
159      it will be set in the environment, just as before.
161 * On MS Windows systems, explicitly setting SHELL to a pathname ending
162   in "cmd" or "cmd.exe" (case-insensitive) will force GNU make to use
163   the DOS command interpreter in batch mode even if a UNIX-like shell
164   could be found on the system.
166 * On VMS there is now support for case-sensitive filesystems such as ODS5.
167   See the readme.vms file for information.
169 * Parallel builds (-jN) no longer require a working Bourne shell on
170   Windows platforms.  They work even with the stock Windows shells, such
171   as cmd.exe and command.com.
173 * Updated to autoconf 2.59, automake 1.9.5, and gettext 0.14.1.  Users
174   should not be impacted.
176 * New translations for Swedish, Chinese (simplified), Ukrainian,
177   Belarusian, Finnish, Kinyarwandan, and Irish.  Many updated
178   translations.
180 A complete list of bugs fixed in this version is available here:
182   http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=103
185 Version 3.80
187 * A new feature exists: order-only prerequisites.  These prerequisites
188   affect the order in which targets are built, but they do not impact
189   the rebuild/no-rebuild decision of their dependents.  That is to say,
190   they allow you to require target B be built before target A, without
191   requiring that target A will always be rebuilt if target B is updated.
192   Patch for this feature provided by Greg McGary <greg@mcgary.org>.
194 * For compatibility with SysV make, GNU make now supports the peculiar
195   syntax $$@, $$(@D), and $$(@F) in the prerequisites list of a rule.
196   This syntax is only valid within explicit and static pattern rules: it
197   cannot be used in implicit (suffix or pattern) rules.  Edouard G. Parmelan
198   <egp@free.fr> provided a patch implementing this feature; however, I
199   decided to implement it in a different way.
201 * The argument to the "ifdef" conditional is now expanded before it's
202   tested, so it can be a constructed variable name.
204   Similarly, the arguments to "export" (when not used in a variable
205   definition context) and "unexport" are also now expanded.
207 * A new function is defined: $(value ...).  The argument to this
208   function is the _name_ of a variable.  The result of the function is
209   the value of the variable, without having been expanded.
211 * A new function is defined: $(eval ...).  The arguments to this
212   function should expand to makefile commands, which will then be
213   evaluated as if they had appeared in the makefile.  In combination
214   with define/endef multiline variable definitions this is an extremely
215   powerful capability.  The $(value ...) function is also sometimes
216   useful here.
218 * A new built-in variable is defined, $(MAKEFILE_LIST).  It contains a
219   list of each makefile GNU make has read, or started to read, in the
220   order in which they were encountered.  So, the last filename in the
221   list when a makefile is just being read (before any includes) is the
222   name of the current makefile.
224 * A new built-in variable is defined: $(.VARIABLES).  When it is
225   expanded it returns a complete list of variable names defined by all
226   makefiles at that moment.
228 * A new command line option is defined, -B or --always-make.  If
229   specified GNU make will consider all targets out-of-date even if they
230   would otherwise not be.
232 * The arguments to $(call ...) functions were being stored in $1, $2,
233   etc. as recursive variables, even though they are fully expanded
234   before assignment.  This means that escaped dollar signs ($$ etc.)
235   were not behaving properly.  Now the arguments are stored as simple
236   variables.  This may mean that if you added extra escaping to your
237   $(call ...) function arguments you will need to undo it now.
239 * The variable invoked by $(call ...) can now be recursive: unlike other
240   variables it can reference itself and this will not produce an error
241   when it is used as the first argument to $(call ...) (but only then).
243 * New pseudo-target .LOW_RESOLUTION_TIME, superseding the configure
244   option --disable-nsec-timestamps.  You might need this if your build
245   process depends on tools like "cp -p" preserving time stamps, since
246   "cp -p" (right now) doesn't preserve the subsecond portion of a time
247   stamp.
249 * Updated translations for French, Galician, German, Japanese, Korean,
250   and Russian.  New translations for Croatian, Danish, Hebrew, and
251   Turkish.
253 * Updated internationalization support to Gettext 0.11.5.
254   GNU make now uses Gettext's "external" feature, and does not include
255   any internationalization code itself.  Configure will search your
256   system for an existing implementation of GNU Gettext (only GNU Gettext
257   is acceptable) and use it if it exists.  If not, NLS will be disabled.
258   See ABOUT-NLS for more information.
260 * Updated to autoconf 2.54 and automake 1.7.  Users should not be impacted.
262 A complete list of bugs fixed in this version is available here:
264   http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102
267 Version 3.79.1
269 * .SECONDARY with no prerequisites now prevents any target from being
270   removed because make thinks it's an intermediate file, not just those
271   listed in the makefile.
273 * New configure option --disable-nsec-timestamps, but this was
274   superseded in later versions by the .LOW_RESOLUTION_TIME pseudo-target.
276 Version 3.79
278 * GNU make optionally supports internationalization and locales via the
279   GNU gettext (or local gettext if suitable) package.  See the ABOUT-NLS
280   file for more information on configuring GNU make for NLS.
282 * Previously, GNU make quoted variables such as MAKEFLAGS and
283   MAKEOVERRIDES for proper parsing by the shell.  This allowed them to
284   be used within make build scripts.  However, using them there is not
285   proper behavior: they are meant to be passed to subshells via the
286   environment.  Unfortunately the values were not quoted properly to be
287   passed through the environment.  This meant that make didn't properly
288   pass some types of command line values to submakes.
290   With this version we change that behavior: now these variables are
291   quoted properly for passing through the environment, which is the
292   correct way to do it.  If you previously used these variables
293   explicitly within a make rule you may need to re-examine your use for
294   correctness given this change.
296 * A new pseudo-target .NOTPARALLEL is available.  If defined, the
297   current makefile is run serially regardless of the value of -j.
298   However, submakes are still eligible for parallel execution.
300 * The --debug option has changed: it now allows optional flags
301   controlling the amount and type of debugging output.  By default only
302   a minimal amount information is generated, displaying the names of
303   "normal" targets (not makefiles) that were deemed out of date and in
304   need of being rebuilt.
306   Note that the -d option behaves as before: it takes no arguments and
307   all debugging information is generated.
309 * The `-p' (print database) output now includes filename and linenumber
310   information for variable definitions, to aid debugging.
312 * The wordlist function no longer reverses its arguments if the "start"
313   value is greater than the "end" value.  If that's true, nothing is
314   returned.
316 * Hartmut Becker provided many updates for the VMS port of GNU make.
317   See the readme.vms file for more details.
319 Version 3.78
321 * Two new functions, $(error ...) and $(warning ...) are available.  The
322   former will cause make to fail and exit immediately upon expansion of
323   the function, with the text provided as the error message.  The latter
324   causes the text provided to be printed as a warning message, but make
325   proceeds normally.
327 * A new function $(call ...) is available.  This allows users to create
328   their own parameterized macros and invoke them later.  Original
329   implementation of this function was provided by Han-Wen Nienhuys
330   <hanwen@cs.uu.nl>.
332 * A new function $(if ...) is available.  It provides if-then-else
333   capabilities in a builtin function.  Original implementation of this
334   function was provided by Han-Wen Nienhuys <hanwen@cs.uu.nl>.
336 * Make defines a new variable, .LIBPATTERNS.  This variable controls how
337   library dependency expansion (dependencies like ``-lfoo'') is performed.
339 * Make accepts CRLF sequences as well as traditional LF, for
340   compatibility with makefiles created on other operating systems.
342 * Make accepts a new option: -R, or --no-builtin-variables.  This option
343   disables the definition of the rule-specific builtin variables (CC,
344   LD, AR, etc.).  Specifying this option forces -r (--no-builtin-rules)
345   as well.
347 * A "job server" feature, suggested by Howard Chu <hyc@highlandsun.com>.
349   On systems that support POSIX pipe(2) semantics, GNU make can now pass
350   -jN options to submakes rather than forcing them all to use -j1.  The
351   top make and all its sub-make processes use a pipe to communicate with
352   each other to ensure that no more than N jobs are started across all
353   makes.  To get the old behavior of -j back, you can configure make
354   with the --disable-job-server option.
356 * The confusing term "dependency" has been replaced by the more accurate
357   and standard term "prerequisite", both in the manual and in all GNU make
358   output.
360 * GNU make supports the "big archive" library format introduced in AIX 4.3.
362 * GNU make supports large files on AIX, HP-UX, and IRIX.  These changes
363   were provided by Paul Eggert <eggert@twinsun.com>.  (Large file
364   support for Solaris and Linux was introduced in 3.77, but the
365   configuration had issues: these have also been resolved).
367 * The Windows 95/98/NT (W32) version of GNU make now has native support
368   for the Cygnus Cygwin release B20.1 shell (bash).
370 * The GNU make regression test suite, long available separately "under
371   the table", has been integrated into the release.  You can invoke it
372   by running "make check" in the distribution.  Note that it requires
373   Perl (either Perl 4 or Perl 5) to run.
375 Version 3.77
377 * Implement BSD make's "?=" variable assignment operator.  The variable
378   is assigned the specified value only if that variable is not already
379   defined.
381 * Make defines a new variable, "CURDIR", to contain the current working
382   directory (after the -C option, if any, has been processed).
383   Modifying this variable has no effect on the operation of make.
385 * Make defines a new default RCS rule, for new-style master file
386   storage: ``% :: RCS/%'' (note no ``,v'' suffix).
388   Make defines new default rules for DOS-style C++ file naming
389   conventions, with ``.cpp'' suffixes.  All the same rules as for
390   ``.cc'' and ``.C'' suffixes are provided, along with LINK.cpp and
391   COMPILE.cpp macros (which default to the same value as LINK.cc and
392   COMPILE.cc).  Note CPPFLAGS is still C preprocessor flags!  You should
393   use CXXFLAGS to change C++ compiler flags.
395 * A new feature, "target-specific variable values", has been added.
396   This is a large change so please see the appropriate sections of the
397   manual for full details.  Briefly, syntax like this:
399     TARGET: VARIABLE = VALUE
401   defines VARIABLE as VALUE within the context of TARGET.  This is
402   similar to SunOS make's "TARGET := VARIABLE = VALUE" feature.  Note
403   that the assignment may be of any type, not just recursive, and that
404   the override keyword is available.
406   COMPATIBILITY: This new syntax means that if you have any rules where
407   the first or second dependency has an equal sign (=) in its name,
408   you'll have to escape them with a backslash: "foo : bar\=baz".
409   Further, if you have any dependencies which already contain "\=",
410   you'll have to escape both of them: "foo : bar\\\=baz".
412 * A new appendix listing the most common error and warning messages
413   generated by GNU make, with some explanation, has been added to the
414   GNU make User's Manual.
416 * Updates to the GNU make Customs library support (see README.customs).
418 * Updates to the Windows 95/NT port from Rob Tulloh (see README.W32),
419   and to the DOS port from Eli Zaretski (see README.DOS).
421 Version 3.76.1
423 * Small (but serious) bug fix.  Quick rollout to get into the GNU source CD.
425 Version 3.76
427 * GNU make now uses automake to control Makefile.in generation.  This
428   should make it more consistent with the GNU standards.
430 * VPATH functionality has been changed to incorporate the VPATH+ patch,
431   previously maintained by Paul Smith <psmith@baynetworks.com>.  See the
432   manual.
434 * Make defines a new variable, `MAKECMDGOALS', to contain the goals that
435   were specified on the command line, if any.  Modifying this variable
436   has no effect on the operation of make.
438 * A new function, `$(wordlist S,E,TEXT)', is available: it returns a
439   list of words from number S to number E (inclusive) of TEXT.
441 * Instead of an error, detection of future modification times gives a
442   warning and continues.  The warning is repeated just before GNU make
443   exits, so it is less likely to be lost.
445 * Fix the $(basename) and $(suffix) functions so they only operate on
446   the last filename, not the entire string:
448       Command              Old Result             New Result
449       -------              ----------             ----------
450     $(basename a.b)        a                      a
451     $(basename a.b/c)      a                      a.b/c
452     $(suffix a.b)          b                      b
453     $(suffix a.b/c)        b/c                    <empty>
455 * The $(strip) function now removes newlines as well as TABs and spaces.
457 * The $(shell) function now changes CRLF (\r\n) pairs to a space as well
458   as newlines (\n).
460 * Updates to the Windows 95/NT port from Rob Tulloh (see README.W32).
462 * Eli Zaretskii has updated the port to 32-bit protected mode on MSDOS
463   and MS-Windows, building with the DJGPP v2 port of GNU C/C++ compiler
464   and utilities.  See README.DOS for details, and direct all questions
465   concerning this port to Eli Zaretskii <eliz@is.elta.co.il> or DJ
466   Delorie <dj@delorie.com>.
468 * John W. Eaton has updated the VMS port to support libraries and VPATH.
470 Version 3.75
472 * The directory messages printed by `-w' and implicitly in sub-makes,
473   are now omitted if Make runs no commands and has no other messages to print.
475 * Make now detects files that for whatever reason have modification times
476   in the future and gives an error.  Files with such impossible timestamps
477   can result from unsynchronized clocks, or archived distributions
478   containing bogus timestamps; they confuse Make's dependency engine
479   thoroughly.
481 * The new directive `sinclude' is now recognized as another name for
482   `-include', for compatibility with some other Makes.
484 * Aaron Digulla has contributed a port to AmigaDOS.  See README.Amiga for
485   details, and direct all Amiga-related questions to <digulla@fh-konstanz.de>.
487 * Rob Tulloh of Tivoli Systems has contributed a port to Windows NT or 95.
488   See README.W32 for details, and direct all Windows-related questions to
489   <rob_tulloh@tivoli.com>.
491 Version 3.73
493 * Converted to use Autoconf version 2, so `configure' has some new options.
494   See INSTALL for details.
496 * You can now send a SIGUSR1 signal to Make to toggle printing of debugging
497   output enabled by -d, at any time during the run.
499 Version 3.72
501 * DJ Delorie has ported Make to MS-DOS using the GO32 extender.
502   He is maintaining the DOS port, not the GNU Make maintainer;
503   please direct bugs and questions for DOS to <djgpp@sun.soe.clarkson.edu>.
504   MS-DOS binaries are available for FTP from ftp.simtel.net in
505   /pub/simtelnet/gnu/djgpp/.
507 * The `MAKEFLAGS' variable (in the environment or in a makefile) can now
508   contain variable definitions itself; these are treated just like
509   command line variable definitions.  Make will automatically insert any
510   variable definitions from the environment value of `MAKEFLAGS' or from
511   the command line, into the `MAKEFLAGS' value exported to children.  The
512   `MAKEOVERRIDES' variable previously included in the value of `$(MAKE)'
513   for sub-makes is now included in `MAKEFLAGS' instead.  As before, you can
514   reset `MAKEOVERRIDES' in your makefile to avoid putting all the variables
515   in the environment when its size is limited.
517 * If `.DELETE_ON_ERROR' appears as a target, Make will delete the target of
518   a rule if it has changed when its recipe exits with a nonzero status,
519   just as when the recipe gets a signal.
521 * The automatic variable `$+' is new.  It lists all the dependencies like
522   `$^', but preserves duplicates listed in the makefile.  This is useful
523   for linking rules, where library files sometimes need to be listed twice
524   in the link order.
526 * You can now specify the `.IGNORE' and `.SILENT' special targets with
527   dependencies to limit their effects to those files.  If a file appears as
528   a dependency of `.IGNORE', then errors will be ignored while running the
529   recipe to update that file.  Likewise if a file appears as a dependency
530   of `.SILENT', then the recipe to update that file will not be printed
531   before it is run.  (This change was made to conform to POSIX.2.)
533 Version 3.71
535 * The automatic variables `$(@D)', `$(%D)', `$(*D)', `$(<D)', `$(?D)', and
536   `$(^D)' now omit the trailing slash from the directory name.  (This change
537   was made to comply with POSIX.2.)
539 * The source distribution now includes the Info files for the Make manual.
540   There is no longer a separate distribution containing Info and DVI files.
542 * You can now set the variables `binprefix' and/or `manprefix' in
543   Makefile.in (or on the command line when installing) to install GNU make
544   under a name other than `make' (i.e., ``make binprefix=g install''
545   installs GNU make as `gmake').
547 * The built-in Texinfo rules use the new variables `TEXI2DVI_FLAGS' for
548   flags to the `texi2dvi' script, and `MAKEINFO_FLAGS' for flags to the
549   Makeinfo program.
551 * The exit status of Make when it runs into errors is now 2 instead of 1.
552   The exit status is 1 only when using -q and some target is not up to date.
553   (This change was made to comply with POSIX.2.)
555 Version 3.70
557 * It is no longer a fatal error to have a NUL character in a makefile.
558   You should never put a NUL in a makefile because it can have strange
559   results, but otherwise empty lines full of NULs (such as produced by
560   the `xmkmf' program) will always work fine.
562 * The error messages for nonexistent included makefiles now refer to the
563   makefile name and line number where the `include' appeared, so Emacs's
564   C-x ` command takes you there (in case it's a typo you need to fix).
566 Version 3.69
568 * Implicit rule search for archive member references is now done in the
569   opposite order from previous versions: the whole target name `LIB(MEM)'
570   first, and just the member name and parentheses `(MEM)' second.
572 * Make now gives an error for an unterminated variable or function reference.
573   For example, `$(foo' with no matching `)' or `${bar' with no matching `}'.
575 * The new default variable `MAKE_VERSION' gives the version number of
576   Make, and a string describing the remote job support compiled in (if any).
577   Thus the value (in this release) is something like `3.69' or `3.69-Customs'.
579 * Commands in an invocation of the `shell' function are no longer run
580   with a modified environment like recipes are.  As in versions before
581   3.68, they now run with the environment that `make' started with.  We
582   have reversed the change made in version 3.68 because it turned out to
583   cause a paradoxical situation in cases like:
585         export variable = $(shell echo value)
587   When Make attempted to put this variable in the environment for a
588   recipe, it would try expand the value by running the shell command
589   `echo value'.  In version 3.68, because it constructed an environment
590   for that shell command in the same way, Make would begin to go into an
591   infinite loop and then get a fatal error when it detected the loop.
593 * The recipe given for `.DEFAULT' is now used for phony targets with no
594   recipe.
596 Version 3.68
598 * You can list several archive member names inside parenthesis:
599   `lib(mem1 mem2 mem3)' is equivalent to `lib(mem1) lib(mem2) lib(mem3)'.
601 * You can use wildcards inside archive member references.  For example,
602   `lib(*.o)' expands to all existing members of `lib' whose names end in
603   `.o' (e.g. `lib(a.o) lib(b.o)'); `*.a(*.o)' expands to all such members
604   of all existing files whose names end in `.a' (e.g. `foo.a(a.o)
605   foo.a(b.o) bar.a(c.o) bar.a(d.o)'.
607 * A suffix rule `.X.a' now produces two pattern rules:
608         (%.o): %.X      # Previous versions produced only this.
609         %.a: %.X        # Now produces this as well, just like other suffixes.
611 * The new flag `--warn-undefined-variables' says to issue a warning message
612   whenever Make expands a reference to an undefined variable.
614 * The new `-include' directive is just like `include' except that there is
615   no error (not even a warning) for a nonexistent makefile.
617 * Commands in an invocation of the `shell' function are now run with a
618   modified environment like recipes are, so you can use `export' et al
619   to set up variables for them.  They used to run with the environment
620   that `make' started with.
622 Version 3.66
624 * `make --version' (or `make -v') now exits immediately after printing
625   the version number.
627 Version 3.65
629 * Make now supports long-named members in `ar' archive files.
631 Version 3.64
633 * Make now supports the `+=' syntax for a variable definition which appends
634   to the variable's previous value.  See the section `Appending More Text
635   to Variables' in the manual for full details.
637 * The new option `--no-print-directory' inhibits the `-w' or
638   `--print-directory' feature.  Make turns on `--print-directory'
639   automatically if you use `-C' or `--directory', and in sub-makes; some
640   users have found this behavior undesirable.
642 * The built-in implicit rules now support the alternative extension
643   `.txinfo' for Texinfo files, just like `.texinfo' and `.texi'.
645 Version 3.63
647 * Make now uses a standard GNU `configure' script.  See the new file
648   INSTALL for the new (and much simpler) installation procedure.
650 * There is now a shell script to build Make the first time, if you have no
651   other `make' program.  `build.sh' is created by `configure'; see README.
653 * GNU Make now completely conforms to the POSIX.2 specification for `make'.
655 * Elements of the `$^' and `$?' automatic variables that are archive
656   member references now list only the member name, as in Unix and POSIX.2.
658 * You should no longer ever need to specify the `-w' switch, which prints
659   the current directory before and after Make runs.  The `-C' switch to
660   change directory, and recursive use of Make, now set `-w' automatically.
662 * Multiple double-colon rules for the same target will no longer have their
663   recipes run simultaneously under -j, as this could result in the two
664   recipes trying to change the file at the same time and interfering with
665   one another.
667 * The `SHELL' variable is now never taken from the environment.
668   Each makefile that wants a shell other than the default (/bin/sh) must
669   set SHELL itself.  SHELL is always exported to child processes.
670   This change was made for compatibility with POSIX.2.
672 * Make now accepts long options.  There is now an informative usage message
673   that tells you what all the options are and what they do.  Try `make --help'.
675 * There are two new directives: `export' and `unexport'.  All variables are
676   no longer automatically put into the environments of the recipe lines that
677   Make runs.  Instead, only variables specified on the command line or in
678   the environment are exported by default.  To export others, use:
679         export VARIABLE
680   or you can define variables with:
681         export VARIABLE = VALUE
682   or:
683         export VARIABLE := VALUE
684   You can use just:
685         export
686   or:
687         .EXPORT_ALL_VARIABLES:
688   to get the old behavior.  See the node `Variables/Recursion' in the manual
689   for a full description.
691 * The recipe from the `.DEFAULT' special target is only applied to
692   targets which have no rules at all, not all targets with no recipe.
693   This change was made for compatibility with Unix make.
695 * All fatal error messages now contain `***', so they are easy to find in
696   compilation logs.
698 * Dependency file names like `-lNAME' are now replaced with the actual file
699   name found, as with files found by normal directory search (VPATH).
700   The library file `libNAME.a' may now be found in the current directory,
701   which is checked before VPATH; the standard set of directories (/lib,
702   /usr/lib, /usr/local/lib) is now checked last.
703   See the node `Libraries/Search' in the manual for full details.
705 * A single `include' directive can now specify more than one makefile to
706   include, like this:
707         include file1 file2
708   You can also use shell file name patterns in an `include' directive:
709         include *.mk
711 * The default directories to search for included makefiles, and for
712   libraries specified with `-lNAME', are now set by configuration.
714 * You can now use blanks as well as colons to separate the directories in a
715   search path for the `vpath' directive or the `VPATH' variable.
717 * You can now use variables and functions in the left hand side of a
718   variable assignment, as in "$(foo)bar = value".
720 * The `MAKE' variable is always defined as `$(MAKE_COMMAND) $(MAKEOVERRIDES)'.
721   The `MAKE_COMMAND' variable is now defined to the name with which make
722   was invoked.
724 * The built-in rules for C++ compilation now use the variables `$(CXX)' and
725   `$(CXXFLAGS)' instead of `$(C++)' and `$(C++FLAGS)'.  The old names had
726   problems with shells that cannot have `+' in environment variable names.
728 * The value of a recursively expanded variable is now expanded when putting
729   it into the environment for child processes.  This change was made for
730   compatibility with Unix make.
732 * A rule with no targets before the `:' is now accepted and ignored.
733   This change was made for compatibility with SunOS 4 make.
734   We do not recommend that you write your makefiles to take advantage of this.
736 * The `-I' switch can now be used in MAKEFLAGS, and are put there
737   automatically just like other switches.
739 Version 3.61
741 * Built-in rules for C++ source files with the `.C' suffix.
742   We still recommend that you use `.cc' instead.
744 * If a recipe is given too many times for a single target, the last one
745   given is used, and a warning message is printed.
747 * Error messages about makefiles are in standard GNU error format,
748   so C-x ` in Emacs works on them.
750 * Dependencies of pattern rules which contain no % need not actually exist
751   if they can be created (just like dependencies which do have a %).
753 Version 3.60
755 * A message is always printed when Make decides there is nothing to be done.
756   It used to be that no message was printed for top-level phony targets
757   (because "`phony' is up to date" isn't quite right).  Now a different
758   message "Nothing to be done for `phony'" is printed in that case.
760 * Archives on AIX now supposedly work.
762 * When the recipes specified for .DEFAULT are used to update a target,
763   the $< automatic variable is given the same value as $@ for that target.
764   This is how Unix make behaves, and this behavior is mandated by POSIX.2.
766 Version 3.59
768 * The -n, -q, and -t options are not put in the `MAKEFLAGS' and `MFLAG'
769   variables while remaking makefiles, so recursive makes done while remaking
770   makefiles will behave properly.
772 * If the special target `.NOEXPORT' is specified in a makefile,
773   only variables that came from the environment and variables
774   defined on the command line are exported.
776 Version 3.58
778 * Suffix rules may have dependencies (which are ignored).
780 Version 3.57
782 * Dependencies of the form `-lLIB' are searched for as /usr/local/lib/libLIB.a
783   as well as libLIB.a in /usr/lib, /lib, the current directory, and VPATH.
785 Version 3.55
787 * There is now a Unix man page for GNU Make.  It is certainly not a
788   replacement for the Texinfo manual, but it documents the basic
789   functionality and the switches.  For full documentation, you should
790   still read the Texinfo manual.  Thanks to Dennis Morse of Stanford
791   University for contributing the initial version of this.
793 * Variables which are defined by default (e.g., `CC') will no longer be
794   put into the environment for child processes.  (If these variables are
795   reset by the environment, makefiles, or the command line, they will
796   still go into the environment.)
798 * Makefiles which have recipes but no dependencies (and thus are always
799   considered out of date and in need of remaking), will not be remade (if they
800   were being remade only because they were makefiles).  This means that GNU
801   Make will no longer go into an infinite loop when fed the makefiles that
802   `imake' (necessary to build X Windows) produces.
804 * There is no longer a warning for using the `vpath' directive with an explicit
805 pathname (instead of a `%' pattern).
807 Version 3.51
809 * When removing intermediate files, only one `rm' command line is printed,
810   listing all file names.
812 * There are now automatic variables `$(^D)', `$(^F)', `$(?D)', and `$(?F)'.
813   These are the directory-only and file-only versions of `$^' and `$?'.
815 * Library dependencies given as `-lNAME' will use "libNAME.a" in the current
816   directory if it exists.
818 * The automatic variable `$($/)' is no longer defined.
820 * Leading `+' characters on a recipe line make that line be executed even
821   under -n, -t, or -q (as if the line contained `$(MAKE)').
823 * For recipe lines containing `$(MAKE)', `${MAKE}', or leading `+' characters,
824   only those lines are executed, not the entire recipe.
825   (This is how Unix make behaves for lines containing `$(MAKE)' or `${MAKE}'.)
827 Version 3.50
829 * Filenames in rules will now have ~ and ~USER expanded.
831 * The `-p' output has been changed so it can be used as a makefile.
832   (All information that isn't specified by makefiles is prefaced with comment
833   characters.)
835 Version 3.49
837 * The % character can be quoted with backslash in implicit pattern rules,
838   static pattern rules, `vpath' directives, and `patsubst', `filter', and
839   `filter-out' functions.  A warning is issued if a `vpath' directive's
840   pattern contains no %.
842 * The `wildcard' variable expansion function now expands ~ and ~USER.
844 * Messages indicating failed recipe lines now contain the target name:
845         make: *** [target] Error 1
847 * The `-p' output format has been changed somewhat to look more like
848   makefile rules and to give all information that Make has about files.
850 Version 3.48
852 Version 3.47
854 * The `-l' switch with no argument removes any previous load-average limit.
856 * When the `-w' switch is in effect, and Make has updated makefiles,
857   it will write a `Leaving directory' message before re-executing itself.
858   This makes the `directory change tracking' changes to Emacs's compilation
859   commands work properly.
861 Version 3.46
863 * The automatic variable `$*' is now defined for explicit rules,
864   as it is in Unix make.
866 Version 3.45
868 * The `-j' switch is now put in the MAKEFLAGS and MFLAGS variables when
869   specified without an argument (indicating infinite jobs).
870   The `-l' switch is not always put in the MAKEFLAGS and MFLAGS variables.
872 * Make no longer checks hashed directories after running recipes.
873   The behavior implemented in 3.41 caused too much slowdown.
875 Version 3.44
877 * A dependency is NOT considered newer than its dependent if
878   they have the same modification time.  The behavior implemented
879   in 3.43 conflicts with RCS.
881 Version 3.43
883 * Dependency loops are no longer fatal errors.
885 * A dependency is considered newer than its dependent if
886   they have the same modification time.
888 Version 3.42
890 * The variables F77 and F77FLAGS are now set by default to $(FC) and
891   $(FFLAGS).  Makefiles designed for System V make may use these variables in
892   explicit rules and expect them to be set.  Unfortunately, there is no way to
893   make setting these affect the Fortran implicit rules unless FC and FFLAGS
894   are not used (and these are used by BSD make).
896 Version 3.41
898 * Make now checks to see if its hashed directories are changed by recipes.
899   Other makes that hash directories (Sun, 4.3 BSD) don't do this.
901 Version 3.39
903 * The `shell' function no longer captures standard error output.
905 Version 3.32
907 * A file beginning with a dot can be the default target if it also contains
908   a slash (e.g., `../bin/foo').  (Unix make allows this as well.)
910 Version 3.31
912 * Archive member names are truncated to 15 characters.
914 * Yet more USG stuff.
916 * Minimal support for Microport System V (a 16-bit machine and a
917   brain-damaged compiler).  This has even lower priority than other USG
918   support, so if it gets beyond trivial, I will take it out completely.
920 * Revamped default implicit rules (not much visible change).
922 * The -d and -p options can come from the environment.
924 Version 3.30
926 * Improved support for USG and HPUX (hopefully).
928 * A variable reference like `$(foo:a=b)', if `a' contains a `%', is
929   equivalent to `$(patsubst a,b,$(foo))'.
931 * Defining .DEFAULT with no deps or recipe clears its recipe.
933 * New default implicit rules for .S (cpp, then as), and .sh (copy and
934   make executable).  All default implicit rules that use cpp (even
935   indirectly), use $(CPPFLAGS).
937 Version 3.29
939 * Giving the -j option with no arguments gives you infinite jobs.
941 Version 3.28
943 * New option: "-l LOAD" says not to start any new jobs while others are
944   running if the load average is not below LOAD (a floating-point number).
946 * There is support in place for implementations of remote command execution
947   in Make.  See the file remote.c.
949 Version 3.26
951 * No more than 10 directories will be kept open at once.
952   (This number can be changed by redefining MAX_OPEN_DIRECTORIES in dir.c.)
954 Version 3.25
956 * Archive files will have their modification times recorded before doing
957   anything that might change their modification times by updating an archive
958   member.
960 Version 3.20
962 * The `MAKELEVEL' variable is defined for use by makefiles.
964 Version 3.19
966 * The recursion level indications in error messages are much shorter than
967   they were in version 3.14.
969 Version 3.18
971 * Leading spaces before directives are ignored (as documented).
973 * Included makefiles can determine the default goal target.
974   (System V Make does it this way, so we are being compatible).
976 Version 3.14.
978 * Variables that are defaults built into Make will not be put in the
979   environment for children.  This just saves some environment space and,
980   except under -e, will be transparent to sub-makes.
982 * Error messages from sub-makes will indicate the level of recursion.
984 * Hopefully some speed-up for large directories due to a change in the
985   directory hashing scheme.
987 * One child will always get a standard input that is usable.
989 * Default makefiles that don't exist will be remade and read in.
991 Version 3.13.
993 * Count parentheses inside expansion function calls so you can
994   have nested calls: `$(sort $(foreach x,a b,$(x)))'.
996 Version 3.12.
998 * Several bug fixes, including USG and Sun386i support.
1000 * `shell' function to expand shell commands a la `
1002 * If the `-d' flag is given, version information will be printed.
1004 * The `-c' option has been renamed to `-C' for compatibility with tar.
1006 * The `-p' option no longer inhibits other normal operation.
1008 * Makefiles will be updated and re-read if necessary.
1010 * Can now run several recipes at once (parallelism), -j option.
1012 * Error messages will contain the level of Make recursion, if any.
1014 * The `MAKEFLAGS' and `MFLAGS' variables will be scanned for options after
1015   makefiles are read.
1017 * A double-colon rule with no dependencies will always have its recipe run.
1018   (This is how both the BSD and System V versions of Make do it.)
1020 Version 3.05
1022 (Changes from versions 1 through 3.05 were never recorded.  Sorry.)
1024 -------------------------------------------------------------------------------
1025 Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
1026 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
1027 Foundation, Inc.
1028 This file is part of GNU Make.
1030 GNU Make is free software; you can redistribute it and/or modify it under the
1031 terms of the GNU General Public License as published by the Free Software
1032 Foundation; either version 3 of the License, or (at your option) any later
1033 version.
1035 GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
1036 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
1037 A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
1039 You should have received a copy of the GNU General Public License along with
1040 this program.  If not, see <http://www.gnu.org/licenses/>.