<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body>
    <p>FYI: GNU Make 4.4 is coming closer, and it will bring along an
      unprecedented set of incompatible changes (for make; that is, a
      product that has been unchanged for like 20 years). Most won't
      affect us, but some likely will. At the moment, I recommend users
      to stay at GNU Make 4.2.x for building the JDK. In some
      not-too-distant future, we will have to check what breaks with
      make 4.3/4.4 and fix it.<br>
    </p>
    <div class="moz-forward-container">/Magnus<br>
      <br>
      -------- Forwarded Message --------
      <table class="moz-email-headers-table" cellspacing="0" cellpadding="0" border="0">
        <tbody>
          <tr>
            <th valign="BASELINE" nowrap="nowrap" align="RIGHT">Subject:
            </th>
            <td>GNU make 4.3.91 release candidate available</td>
          </tr>
          <tr>
            <th valign="BASELINE" nowrap="nowrap" align="RIGHT">Date: </th>
            <td>Tue, 18 Oct 2022 16:45:48 -0400</td>
          </tr>
          <tr>
            <th valign="BASELINE" nowrap="nowrap" align="RIGHT">From: </th>
            <td>Paul Smith <a class="moz-txt-link-rfc2396E" href="mailto:psmith@gnu.org"><psmith@gnu.org></a></td>
          </tr>
          <tr>
            <th valign="BASELINE" nowrap="nowrap" align="RIGHT">Reply-To:
            </th>
            <td><a class="moz-txt-link-abbreviated" href="mailto:psmith@gnu.org">psmith@gnu.org</a></td>
          </tr>
          <tr>
            <th valign="BASELINE" nowrap="nowrap" align="RIGHT">Organization:
            </th>
            <td>GNU's Not UNIX!</td>
          </tr>
          <tr>
            <th valign="BASELINE" nowrap="nowrap" align="RIGHT">To: </th>
            <td><a class="moz-txt-link-abbreviated" href="mailto:bug-make@gnu.org">bug-make@gnu.org</a></td>
          </tr>
          <tr>
            <th valign="BASELINE" nowrap="nowrap" align="RIGHT">CC: </th>
            <td><a class="moz-txt-link-abbreviated" href="mailto:coordinator@translationproject.org">coordinator@translationproject.org</a>,
              <a class="moz-txt-link-abbreviated" href="mailto:platform-testers@gnu.org">platform-testers@gnu.org</a></td>
          </tr>
        </tbody>
      </table>
      <br>
      <br>
--------------------------------------------------------------------<br>
      GNU make is a tool which controls the generation of executables
      and<br>
      other non-source files of a program from the program's source
      files.<br>
      <br>
      You can learn more at: <a class="moz-txt-link-freetext" href="https://www.gnu.org/software/make/">https://www.gnu.org/software/make/</a><br>
--------------------------------------------------------------------<br>
      <br>
      A new release candidate for GNU make 4.4 is available now for
      download:<br>
      <br>
      4defb3f9cb1f49956cdb28befb3abafb make-4.3.91.tar.lz<br>
      6738e93afc158bab8f1e63f053cbebca make-4.3.91.tar.gz<br>
      <br>
      You can obtain a copy from: <a class="moz-txt-link-freetext" href="https://alpha.gnu.org/gnu/make/">https://alpha.gnu.org/gnu/make/</a><br>
      <br>
      - NEWS
      ----------------------------------------------------------------<br>
      <br>
      Version 4.3.91 (18 Oct 2022)<br>
      <br>
      A complete list of bugs fixed in this version is available here:<br>
      <br>
<a class="moz-txt-link-freetext" href="https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=109&set=custom">https://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=109&set=custom</a><br>
      <br>
      * WARNING: Deprecation!<br>
      The following systems are deprecated in this release:<br>
      - OS/2 (EMX)<br>
      - AmigaOS<br>
      - Xenix<br>
      - Cray<br>
      In the NEXT release of GNU Make, support for these systems will be
      removed.<br>
      If you want to see them continue to be supported, contact
      <a class="moz-txt-link-rfc2396E" href="mailto:bug-make@gnu.org"><bug-make@gnu.org></a>.<br>
      <br>
      * WARNING: Future backward-incompatibility!<br>
      In the NEXT release of GNU Make, pattern rules will implement the
      same<br>
      behavior change for multiple targets as explicit grouped targets,
      below: if<br>
      any target of the rule is needed by the build, the recipe will be
      invoked if<br>
      any target of the rule is missing or out of date. During testing
      some<br>
      makefiles were found to contain pattern rules that do not build
      all targets;<br>
      this can cause issues so we are delaying this change for one
      release cycle<br>
      to allow these makefiles to be updated. GNU Make shows a warning
      if it<br>
      detects this situation: "pattern recipe did not update peer
      target".<br>
      <br>
      * WARNING: Backward-incompatibility!<br>
      GNU Make now uses temporary files in more situations than previous
      releases.<br>
      If your build system sets TMPDIR (or TMP or TEMP on Windows) and
      deletes the<br>
      contents during the build, or uses restrictive permissions, this
      may cause<br>
      problems. You can choose an alternative temporary directory only
      for use by<br>
      GNU Make by setting the new MAKE_TMPDIR environment variable
      before invoking<br>
      make. Note that this value CANNOT be set inside the makefile,
      since make<br>
      needs to find its temporary directory before the makefiles are
      parsed.<br>
      <br>
      * WARNING: Backward-incompatibility!<br>
      Previously each target in a explicit grouped target rule was
      considered<br>
      individually: if the targets needed by the build were not out of
      date the<br>
      recipe was not run even if other targets in the group were out of
      date. Now<br>
      if any of the grouped targets are needed by the build, then if any
      of the<br>
      grouped targets are out of date the recipe is run and all targets
      in the<br>
      group are considered updated.<br>
      <br>
      * WARNING: Backward-incompatibility!<br>
      Previously if --no-print-directory was seen anywhere in the
      environment or<br>
      command line it would take precedence over any --print-directory.
      Now, the<br>
      last setting of directory printing options seen will be used, so a
      command<br>
      line such as "--no-print-directory -w" _will_ show directory
      entry/exits.<br>
      <br>
      * WARNING: Backward-incompatibility!<br>
      Previously the order in which makefiles were remade was not
      explicitly<br>
      stated, but it was (roughly) the inverse of the order in which
      they were<br>
      processed by make. In this release, the order in which makefiles
      are<br>
      rebuilt is the same order in which make processed them, and this
      is defined<br>
      to be true in the GNU Make manual.<br>
      <br>
      * WARNING: Backward-incompatibility!<br>
      Previously only simple (one-letter) options were added to the
      MAKEFLAGS<br>
      variable that was visible while parsing makefiles. Now, all
      options are<br>
      available in MAKEFLAGS. If you want to check MAKEFLAGS for a
      one-letter<br>
      option, expanding "$(firstword -$(MAKEFLAGS))" is a reliable way
      to return<br>
      the set of one-letter options which can be examined via
      findstring, etc.<br>
      <br>
      * WARNING: Backward-incompatibility!<br>
      Previously makefile variables marked as export were not exported
      to commands<br>
      started by the $(shell ...) function. Now, all exported variables
      are<br>
      exported to $(shell ...). If this leads to recursion during
      expansion, then<br>
      for backward-compatibility the value from the original environment
      is used.<br>
      To detect this change search for 'shell-export' in the .FEATURES
      variable.<br>
      <br>
      * WARNING: New build requirement<br>
      GNU Make utilizes facilities from GNU Gnulib: Gnulib requires
      certain C99<br>
      features in the C compiler and so these features are required by
      GNU Make:<br>
<a class="moz-txt-link-freetext" href="https://www.gnu.org/software/gnulib/manual/html_node/C99-features-assumed.html">https://www.gnu.org/software/gnulib/manual/html_node/C99-features-assumed.html</a><br>
      The configure script should verify the compiler has these
      features.<br>
      <br>
      * New feature: The .WAIT special target<br>
      If the .WAIT target appears between two prerequisites of a target,
      then<br>
      GNU Make will wait for all of the targets to the left of .WAIT in
      the list<br>
      to complete before starting any of the targets to the right of
      .WAIT.<br>
      This feature is available in some other versions of make, and it
      will be<br>
      required by an upcoming version of the POSIX standard for make.<br>
      Different patches were made by Alexey Neyman
      <a class="moz-txt-link-rfc2396E" href="mailto:alex.neyman@auriga.ru"><alex.neyman@auriga.ru></a> (2005)<br>
      and Steffen Nurpmeso <a class="moz-txt-link-rfc2396E" href="mailto:steffen@sdaoden.eu"><steffen@sdaoden.eu></a> (2020) that were
      useful but the<br>
      result is a different implementation (closer to Alexey's idea).<br>
      <br>
      * New feature: .NOTPARALLEL accepts prerequisites<br>
      If the .NOTPARALLEL special target has prerequisites then all
      prerequisites<br>
      of those targets will be run serially (as if .WAIT was specified
      between<br>
      each prerequisite).<br>
      <br>
      * New feature: The .NOTINTERMEDIATE special target<br>
      .NOTINTERMEDIATE Disables intermediate behavior for specific
      files, for all<br>
      files built using a pattern, or for the entire makefile.<br>
      Implementation provided by Dmitry Goncharov
      <a class="moz-txt-link-rfc2396E" href="mailto:dgoncharov@users.sf.net"><dgoncharov@users.sf.net></a><br>
      <br>
      * New feature: The $(let ...) function<br>
      This function allows user-defined functions to define a set of
      local<br>
      variables: values can be assigned to these variables from within
      the<br>
      user-defined function and they will not impact global variable
      assignments.<br>
      Implementation provided by Jouke Witteveen
      <a class="moz-txt-link-rfc2396E" href="mailto:j.witteveen@gmail.com"><j.witteveen@gmail.com></a><br>
      <br>
      * New feature: The $(intcmp ...) function<br>
      This function allows conditional evaluation controlled by a
      numerical<br>
      comparison.<br>
      Implementation provided by Jouke Witteveen
      <a class="moz-txt-link-rfc2396E" href="mailto:j.witteveen@gmail.com"><j.witteveen@gmail.com></a><br>
      <br>
      * New feature: Improved support for -l / --load-average<br>
      On systems that provide /proc/loadavg (Linux), GNU Make will use
      it to<br>
      determine the number of runnable jobs and use this as the current
      load,<br>
      avoiding the need for heuristics.<br>
      Implementation provided by Sven C. Dack <a class="moz-txt-link-rfc2396E" href="mailto:sdack@gmx.com"><sdack@gmx.com></a><br>
      <br>
      * New feature: The --shuffle command line option<br>
      This option reorders goals and prerequisites to simulate
      non-determinism<br>
      that may be seen using parallel build. Shuffle mode allows a form
      of "fuzz<br>
      testing" of parallel builds to verify that all prerequisites are
      correctly<br>
      described in the makefile.<br>
      Implementation provided by Sergei Trofimovich
      <a class="moz-txt-link-rfc2396E" href="mailto:siarheit@google.com"><siarheit@google.com></a><br>
      <br>
      * New feature: The --jobserver-style command line option and named
      pipes<br>
      A new jobserver method is used on systems where mkfifo(3) is
      supported.<br>
      This solves a number of obscure issues related to using the
      jobserver<br>
      and recursive invocations of GNU Make. This change means that
      sub-makes<br>
      will connect to the jobserver even if they are not marked as
      recursive.<br>
      It also means that other tools that want to participate in the
      jobserver<br>
      will need to be enhanced as described in the GNU Make manual.<br>
      You can force GNU Make to use the simple pipe-based jobserver
      (perhaps if<br>
      you are integrating with other tools or older versions of GNU
      Make) by<br>
      adding the '--jobserver-style=pipe' option to the command line of
      the<br>
      top-level invocation of GNU Make, or via MAKEFLAGS or
      GNUMAKEFLAGS.<br>
      To detect this change search for 'jobserver-fifo' in the .FEATURES
      variable.<br>
      <br>
      * Some POSIX systems (*BSD) do not allow locks to be taken on
      pipes, which<br>
      caused the output sync feature to not work properly there. Also
      multiple<br>
      invocations of make redirecting to the same output file (e.g.,
      /dev/null)<br>
      would cause hangs. Instead of locking stdout (which does have some
      useful<br>
      performance characteristics, but is not portable) create a
      temporary file<br>
      and lock that. Windows continues to use a mutex as before.<br>
      <br>
      * GNU Make has sometimes chosen unexpected, and sub-optimal,
      chains of<br>
      implicit rules due to the definition of "ought to exist" in the
      implicit<br>
      rule search algorithm, which considered any prerequisite mentioned
      in the<br>
      makefile as "ought to exist". This algorithm has been modified to
      prefer<br>
      prerequisites mentioned explicitly in the target being built and
      only if<br>
      that results in no matching rule, will GNU Make consider
      prerequisites<br>
      mentioned in other targets as "ought to exist".<br>
      Implementation provided by Dmitry Goncharov
      <a class="moz-txt-link-rfc2396E" href="mailto:dgoncharov@users.sf.net"><dgoncharov@users.sf.net></a><br>
      <br>
      * GNU Make was performing secondary expansion of all targets, even
      targets<br>
      which didn't need to be considered during the build. In this
      release<br>
      only targets which are considered will be secondarily expanded.<br>
      Implementation provided by Dmitry Goncharov
      <a class="moz-txt-link-rfc2396E" href="mailto:dgoncharov@users.sf.net"><dgoncharov@users.sf.net></a><br>
      <br>
      * If the MAKEFLAGS variable is modified in a makefile, it will be
      re-parsed<br>
      immediately rather than after all makefiles have been read. Note
      that<br>
      although all options are parsed immediately, some special effects
      won't<br>
      appear until after all makefiles are read.<br>
      <br>
      * The -I option accepts an argument "-" (e.g., "-I-") which means
      "reset the<br>
      list of search directories to empty". Among other things this can
      be used<br>
      to prevent GNU Make from searching in its default list of
      directories.<br>
      <br>
      * New debug option "print" will show the recipe to be run, even
      when silent<br>
      mode is set, and new debug option "why" will show why a target is
      rebuilt<br>
      (which prerequisites caused the target to be considered out of
      date).<br>
      Implementation provided by David Boyce
      <a class="moz-txt-link-rfc2396E" href="mailto:David.S.Boyce@gmail.com"><David.S.Boyce@gmail.com></a><br>
      <br>
      * The existing --trace option is made equivalent to
      --debug=print,why<br>
      <br>
      * Target-specific variables can now be marked "unexport".<br>
      <br>
      * Exporting / unexporting target-specific variables is handled
      correctly, so<br>
      that the attribute of the most specific variable setting is used.<br>
      <br>
      * Special targets like .POSIX are detected upon definition,
      ensuring that any<br>
      change in behavior takes effect immediately, before the next line
      is parsed.<br>
      <br>
      * When the jobserver is enabled and GNU Make decides it is
      invoking a non-make<br>
      sub-process and closes the jobserver pipes, it will now add a new
      option to<br>
      the MAKEFLAGS environment variable that disables the jobserver.<br>
      This prevents sub-processes that invoke make from accidentally
      using other<br>
      open file descriptors as jobserver pipes. For more information see<br>
      <a class="moz-txt-link-freetext" href="https://savannah.gnu.org/bugs/?57242">https://savannah.gnu.org/bugs/?57242</a> and
      <a class="moz-txt-link-freetext" href="https://savannah.gnu.org/bugs/?62397">https://savannah.gnu.org/bugs/?62397</a><br>
      <br>
      * A long-standing issue with the directory cache has been
      resolved: changes<br>
      made as a side-effect of some other target's recipe are now
      noticed as<br>
      expected.<br>
      <br>
      * GNU Make can now be built for MS-Windows using the Tiny C tcc
      compiler.<br>
      Port provided by Christian Jullien <a class="moz-txt-link-rfc2396E" href="mailto:eligis@orange.fr"><eligis@orange.fr></a><br>
      <br>
      <br>
    </div>
  </body>
</html>