From Fedora Project Wiki


Use %make_build and %make_install macros

Summary

This change will update all spec files in Fedora that use make and replace the make invocations with either the %make_build or %make_install macros.

Owner

Current status

  • Targeted release: Fedora 33
  • Last updated: 2020-06-29
  • FESCo issue: #2420
  • Tracker bug: <will be assigned by the Wrangler>
  • Release notes tracker: <will be assigned by the Wrangler>

Detailed Description

The goal of this change is to standardize the usage of make in Fedora. All make invocations in spec files that don't use the install target will be modified to use the %make_build macro, and all make invocations that use the install target will be updated to use the %make_install macro. Any additional arguments to make that are not included in either the %make_build and %make_install will be preserved.

The %make_build macro enables parallel make builds using the -j option. In case a package does not build correctly with parallel make, then the -j1 flag will be added after the %make_build macro:

 %make_build -j1

All changes will be submitted to dist-git repositories via pull requests. Pull requests will be merged after 1 week if there are no objections or earlier if approved by the package maintainers.

A script will be used to apply the necessary changes to the spec files, and the result will be manually inspected before being merged.

All packages updated by this change request will be rebuilt after the spec file changes are merged.

Some packages already use the %make_build and %make_install macros. These packages will be left unchanged.

Feedback

Feedback from thread on devel list:

  • I've updated the proposal due to a suggestion to disable parallel builds for only the specific make command that fails to build, rather than using
 %global _smp_mflags -j1

Which would disable parallel builds globally for the entire spec file. The rationale is that if e.g. make check fails to build with parallel make, we don't need to disable parallel make in the %build section.

  • There are concerns that replacing all make invocations with %make_build, even in cases where there may not be any benefit e.g. for make html may cause build failures or make the spec file less readable. An alternative to replacing all make invocations would be only to replace make in make $BUILD_TARGET, make check, and make install with %make_{build,install}.

Benefit to Fedora

  • Reduced build times: Using the %make_build macros enables parallel make builds which will reduce build times for Fedora packages.
  • This will make it easier to enforce consistent build flag usage across all of Fedora.

Scope

  • Proposal owners: Update spec files and submit pull requests and do new package builds. Optional: Merge pull requests (Proposal Owner would need to request to be added to provenpackagers group)
  • Other developers: Package owners may merge pull requests and submit new builds if they want, but this is not required for them. A member of the provenpackagers group will be needed to merge pull requests.
  • Release engineering: #9533 (a check of an impact with Release Engineering is needed)
  • Policies and guidelines: Package guidelines already specify that packages should use these macros when possible. Documentation will be updated to clarify that %make_build should be used for all make invocations (besides make install), and also with instructions for packages that fail to build with parallel make.
  • Trademark approval: N/A (not needed for this Change)

Upgrade/compatibility impact

No impact.

How To Test

Updated packages will be build tested using the koji-simple-ci test that is automatically run when a new pull request is created.

User Experience

End-users will not notice any changes.

Dependencies

No real dependencies, each package can be updated independently.

Contingency Plan

  • Contingency mechanism: None. If not all packages are updated in time, then the work can continue into the next release.
  • Contingency deadline: All work will be done in the rawhide branch, and will not be backported into the f33 branch once it is created, so whatever gets done before the branch date will make it into the release.
  • Blocks release? No
  • Blocks product? No

Documentation

The packaging guidelines will be updated as described in the Scope Section.

Release Notes