catalyst-browser: init at 3.9.4 (#350552)
[NixPkgs.git] / pkgs / development / tools / build-managers / gnumake / default.nix
blobe5fc56c2249b054bbb0800eb7593f9456fa870d0
2   lib,
3   stdenv,
4   fetchurl,
5   autoreconfHook,
6   guileSupport ? false,
7   guile,
8   # avoid guile depend on bootstrap to prevent dependency cycles
9   inBootstrap ? false,
10   pkg-config,
11   gnumake,
14 let
15   guileEnabled = guileSupport && !inBootstrap;
18 stdenv.mkDerivation rec {
19   pname = "gnumake";
20   version = "4.4.1";
22   src = fetchurl {
23     url = "mirror://gnu/make/make-${version}.tar.gz";
24     sha256 = "sha256-3Rb7HWe/q3mnL16DkHNcSePo5wtJRaFasfgd23hlj7M=";
25   };
27   # To update patches:
28   #  $ version=4.4.1
29   #  $ git clone https://git.savannah.gnu.org/git/make.git
30   #  $ cd make && git checkout -b nixpkgs $version
31   #  $ git am --directory=../patches
32   #  $ # make changes, resolve conflicts, etc.
33   #  $ git format-patch --output-directory ../patches --diff-algorithm=histogram $version
34   #
35   # TODO: stdenv’s setup.sh should be aware of patch directories. It’s very
36   # convenient to keep them in a separate directory but we can defer listing the
37   # directory until derivation realization to avoid unnecessary Nix evaluations.
38   patches = lib.filesystem.listFilesRecursive ./patches;
40   nativeBuildInputs = [
41     autoreconfHook
42     pkg-config
43   ];
44   buildInputs = lib.optionals guileEnabled [ guile ];
46   configureFlags =
47     lib.optional guileEnabled "--with-guile"
49     # Make uses this test to decide whether it should keep track of
50     # subseconds. Apple made this possible with APFS and macOS 10.13.
51     # However, we still support macOS 10.11 and 10.12. Binaries built
52     # in Nixpkgs will be unable to use futimens to set mtime less than
53     # a second. So, tell Make to ignore nanoseconds in mtime here by
54     # overriding the autoconf test for the struct.
55     # See https://github.com/NixOS/nixpkgs/issues/51221 for discussion.
56     ++ lib.optional stdenv.hostPlatform.isDarwin "ac_cv_struct_st_mtim_nsec=no";
58   outputs = [
59     "out"
60     "man"
61     "info"
62   ];
63   separateDebugInfo = true;
65   passthru.tests = {
66     # make sure that the override doesn't break bootstrapping
67     gnumakeWithGuile = gnumake.override { guileSupport = true; };
68   };
70   meta = with lib; {
71     description = "Tool to control the generation of non-source files from sources";
72     longDescription = ''
73       Make is a tool which controls the generation of executables and
74       other non-source files of a program from the program's source files.
76       Make gets its knowledge of how to build your program from a file
77       called the makefile, which lists each of the non-source files and
78       how to compute it from other files. When you write a program, you
79       should write a makefile for it, so that it is possible to use Make
80       to build and install the program.
81     '';
82     homepage = "https://www.gnu.org/software/make/";
84     license = licenses.gpl3Plus;
85     maintainers = [ ];
86     mainProgram = "make";
87     platforms = platforms.all;
88   };