From Fedora Project Wiki

Revision as of 21:36, 1 December 2022 by Codonell (talk | contribs)

GNU Make version 4.4

This is a proposed Change for Fedora Linux.
This document represents a proposed Change. As part of the Changes process, proposals are publicly announced in order to receive community feedback. This proposal will only be implemented if approved by the Fedora Engineering Steering Committee.

Summary

Rebase GNU make in Fedora 38 from make version 4.3 to make version 4.4.

Owner

Current status

  • Targeted release: Fedora Linux 38
  • Last updated: 2022-12-01
  • FESCo issue: <will be assigned by the Wrangler>
  • Tracker bug: <will be assigned by the Wrangler>
  • Release notes tracker: <will be assigned by the Wrangler>

Detailed Description

Make 4.4 was released on Oct 31, 2022. It includes many bug fixes and new features. Fedora has been carrying some patches to the 4.3 release which are included in 4.4, reducing the workload for Fedora builders.

Feedback

Benefit to Fedora

Stay up to date with upstream GNU make, make sure we have the latest bug fixes et al, be compatible with stock GNU make.

Scope

  • Proposal owners: Update to GNU make 4.4
  • Release engineering: [1]
  • Policies and guidelines: N/A (not needed for this Change)
  • Trademark approval: N/A (not needed for this Change)
  • Alignment with Objectives: n/a

Upgrade/compatibility impact

Users who have local projects using GNU make, which rely on features only available in older versions of GNU make, may need to tweak their Makefiles before rebuilding. Packages which were built previous to this upgrade will not be affected.

Specific backwards incompatibilities as called out in the NEWS file for make 4.4:

* 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.

How To Test

GNU make has its own testsuite and does not require specific hardware or testing outside of building the RPM.

User Experience

Users will get all bugfixes included in make 4.4 as well as any new features therein. The make 4.4 NEWS update will include more details.

Dependencies

Updating GNU make does not require any other change requests to complete first.

There are 9115 packages which explicitly BuildRequires "make". None of those packages will require a rebuild because of this update.

Contingency Plan

  • Contingency mechanism: Revert to make 4.3
  • Contingency deadline: Beta freeze. If there is a mass rebuild, preferably before then.
  • Blocks release? No


Documentation

GNU Make includes its own documentation. No additional documentation work is required. https://www.gnu.org/software/make/manual/

Release Notes

Full release notes can be found in make's NEWS file: http://git.savannah.gnu.org/cgit/make.git/tree/NEWS