GNU Make version 4.4
Summary
Rebase GNU make in Fedora 38 from make version 4.3 to make version 4.4.
Owner
- Name: DJ Delorie
- Email: dj@redhat.com
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
- Other developers: Package owners relying on makefile features specific to older versions of GNU make may FTBFS and need to tweak their Makefiles. A mass prebuild run has identified at least two (apron due to https://savannah.gnu.org/bugs/?57778 and pcmciautils due to https://savannah.gnu.org/bugs/?60435)
- 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