After almost three years of development, the release of the GNU Make build system 4.4 has taken place. In addition to bug fixes, the new version features the following changes:
- The OS/2 (EMX), AmigaOS, Xenix, and Cray platforms have been declared deprecated, with support set to cease in the next release.
- The requirements for the build environment have been increased; a compiler supporting elements from the C99 standard is now necessary to build GNU Gnulib.
- A special build target .WAIT has been added, allowing the suspension of the execution of specific targets until the completion of builds for other targets.
- The .NOTPARALLEL special build target now includes the capability to specify prerequisites (files needed for the target build) for sequential execution of related targets (as if a .WAIT had been placed between each prerequisite).
- A special build target .NOTINTERMEDIATE has been introduced, disabling behavior related to the use of intermediate targets (.INTERMEDIATE) for specified files, files matching a pattern, or the entire makefile.
- The $(let …) function has been implemented, allowing the definition of local variables in user-defined functions.
- The $(intcmp …) function for comparing numbers has been implemented.
- When using the '-l' (—load-average) option to determine the number of jobs to run, data from the /proc/loadavg file concerning system load is now taken into account.
- The option '—shuffle' has been added to randomize prerequisites, enabling non-deterministic behavior during parallel builds (for example, for fuzz testing the correctness of prerequisite definitions in the makefile).
- On systems with mkfifo support, a new method of interaction with the jobserver during parallel job execution is implemented, based on named pipes. The old method using unnamed pipes can be reverted by using the option '—jobserver-style=pipe'.
- The use of temporary files during operation has been expanded (there may be issues when the build system sets an alternative directory for temporary files (TMPDIR) and removes content from TMPDIR during the build).
Source: opennet.ru
