mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-01-09 06:23:36 +00:00
df7b6e6acc
Notable changes (have a chance to break some projects): * 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 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. Notable features: * New feature: The --shuffle command line option This option reorders goals and prerequisites to simulate non-determinism that may be seen using parallel build. Shuffle mode allows a form of "fuzz testing" of parallel builds to verify that all prerequisites are correctly described in the makefile. Changes: https://lists.gnu.org/archive/html/bug-make/2022-10/msg00247.html
76 lines
2.6 KiB
Nix
76 lines
2.6 KiB
Nix
{ lib
|
|
, stdenv
|
|
, fetchurl
|
|
, guileSupport ? false, guile
|
|
# avoid guile depend on bootstrap to prevent dependency cycles
|
|
, inBootstrap ? false
|
|
, pkg-config
|
|
, gnumake
|
|
}:
|
|
|
|
let
|
|
guileEnabled = guileSupport && !inBootstrap;
|
|
in
|
|
|
|
stdenv.mkDerivation rec {
|
|
pname = "gnumake";
|
|
version = "4.4";
|
|
|
|
src = fetchurl {
|
|
url = "mirror://gnu/make/make-${version}.tar.gz";
|
|
sha256 = "sha256-WB9NToctp0s5Qch0IViYp9NYAvA3Mr3M7h1KeXkQXRg=";
|
|
};
|
|
|
|
# to update apply these patches with `git am *.patch` to https://git.savannah.gnu.org/git/make.git
|
|
patches = [
|
|
# Replaces /bin/sh with sh, see patch file for reasoning
|
|
./0001-No-impure-bin-sh.patch
|
|
# Purity: don't look for library dependencies (of the form `-lfoo') in /lib
|
|
# and /usr/lib. It's a stupid feature anyway. Likewise, when searching for
|
|
# included Makefiles, don't look in /usr/include and friends.
|
|
./0002-remove-impure-dirs.patch
|
|
];
|
|
|
|
nativeBuildInputs = lib.optionals guileEnabled [ pkg-config ];
|
|
buildInputs = lib.optionals guileEnabled [ guile ];
|
|
|
|
configureFlags = lib.optional guileEnabled "--with-guile"
|
|
|
|
# Make uses this test to decide whether it should keep track of
|
|
# subseconds. Apple made this possible with APFS and macOS 10.13.
|
|
# However, we still support macOS 10.11 and 10.12. Binaries built
|
|
# in Nixpkgs will be unable to use futimens to set mtime less than
|
|
# a second. So, tell Make to ignore nanoseconds in mtime here by
|
|
# overriding the autoconf test for the struct.
|
|
# See https://github.com/NixOS/nixpkgs/issues/51221 for discussion.
|
|
++ lib.optional stdenv.isDarwin "ac_cv_struct_st_mtim_nsec=no";
|
|
|
|
outputs = [ "out" "man" "info" ];
|
|
separateDebugInfo = true;
|
|
|
|
passthru.tests = {
|
|
# make sure that the override doesn't break bootstrapping
|
|
gnumakeWithGuile = gnumake.override { guileSupport = true; };
|
|
};
|
|
|
|
meta = with lib; {
|
|
description = "A tool to control the generation of non-source files from sources";
|
|
longDescription = ''
|
|
Make is a tool which controls the generation of executables and
|
|
other non-source files of a program from the program's source files.
|
|
|
|
Make gets its knowledge of how to build your program from a file
|
|
called the makefile, which lists each of the non-source files and
|
|
how to compute it from other files. When you write a program, you
|
|
should write a makefile for it, so that it is possible to use Make
|
|
to build and install the program.
|
|
'';
|
|
homepage = "https://www.gnu.org/software/make/";
|
|
|
|
license = licenses.gpl3Plus;
|
|
maintainers = [ maintainers.vrthra ];
|
|
mainProgram = "make";
|
|
platforms = platforms.all;
|
|
};
|
|
}
|