Change make license
[platform/upstream/make.git] / NEWS
diff --git a/NEWS b/NEWS
index 7e11787..e884df1 100644 (file)
--- a/NEWS
+++ b/NEWS
 GNU make NEWS                                               -*-indented-text-*-
   History of user-visible changes.
-  05 Oct 2014
+  19 January 2020
 
 See the end of this file for copyrights and conditions.
 
-All changes mentioned here are more fully described in the GNU make
-manual, which is contained in this distribution as the file doc/make.texi.
+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.
 \f
+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.
+
+* 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.
+
+\f
+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.
+
+\f
+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.
+
+\f
 Version 4.1 (05 Oct 2014)
 
 A complete list of bugs fixed in this version is available here:
 
-http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=105&set=custom
+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
@@ -29,12 +172,39 @@ http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=105&set
   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.
 \f
 Version 4.0 (09 Oct 2013)
 
 A complete list of bugs fixed in this version is available here:
 
-http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=101&set=custom
+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
@@ -138,7 +308,7 @@ Version 3.82 (28 Jul 2010)
 
 A complete list of bugs fixed in this version is available here:
 
-http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=104&set=custom
+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.
@@ -237,6 +407,57 @@ http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=104&set
   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.
+
 \f
 Version 3.81 (01 Apr 2006)
 
@@ -252,7 +473,7 @@ Version 3.81 (01 Apr 2006)
   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 http://savannah.gnu.org/bugs/?16051
+  See https://savannah.gnu.org/bugs/?16051
 
 * WARNING: Backward-incompatibility!
   GNU make now implements a generic "second expansion" feature on the
@@ -376,7 +597,7 @@ Version 3.81 (01 Apr 2006)
 
 A complete list of bugs fixed in this version is available here:
 
-  http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=103
+  https://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=103
 
 \f
 Version 3.80 (03 Oct 2002)
@@ -456,9 +677,45 @@ Version 3.80 (03 Oct 2002)
 
 * 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:
 
-  http://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102
+  https://savannah.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=102
 
 \f
 Version 3.79.1 (23 Jun 2000)
@@ -512,6 +769,56 @@ Version 3.79 (04 Apr 2000)
 
 * 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.
 \f
 Version 3.78 (22 Sep 1999)
 
@@ -614,6 +921,45 @@ Version 3.77 (28 Jul 1998)
 
 * 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 http://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.
 \f
 Version 3.76.1 (19 Sep 1997)
 
@@ -662,8 +1008,54 @@ Version 3.76 (16 Sep 1997)
   concerning this port to Eli Zaretskii <eliz@is.elta.co.il> or DJ
   Delorie <dj@delorie.com>.
 
-* John W. Eaton has updated the VMS port to support libraries and VPATH.
-\f
+* 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,
@@ -684,6 +1076,14 @@ Version 3.75 (27 Aug 1996)
 * 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.
 \f
 Version 3.73 (05 Apr 1995)
 
@@ -1219,7 +1619,7 @@ Version 3.05
 (Changes from versions 1 through 3.05 were never recorded.  Sorry.)
 \f
 -------------------------------------------------------------------------------
-Copyright (C) 1988-2014 Free Software Foundation, Inc.
+Copyright (C) 1988-2020 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