python3Packages.orjson: Disable failing tests on 32 bit
[NixPkgs.git] / pkgs / tools / package-management / nix / common.nix
blob95fbd0782b798cda7e0742d15dc3d9dc5043e52a
1 { lib, fetchFromGitHub
2 , version
3 , suffix ? ""
4 , sha256 ? null
5 , src ? fetchFromGitHub { owner = "NixOS"; repo = "nix"; rev = version; inherit sha256; }
6 , patches ? [ ]
7 }:
8 assert (sha256 == null) -> (src != null);
9 let
10   atLeast24 = lib.versionAtLeast version "2.4pre";
11   atLeast25 = lib.versionAtLeast version "2.5pre";
12   atLeast27 = lib.versionAtLeast version "2.7pre";
13   atLeast210 = lib.versionAtLeast version "2.10pre";
15 { stdenv
16 , autoconf-archive
17 , autoreconfHook
18 , bash
19 , bison
20 , boehmgc
21 , boost
22 , brotli
23 , busybox-sandbox-shell
24 , bzip2
25 , callPackage
26 , coreutils
27 , curl
28 , editline
29 , flex
30 , gnutar
31 , gtest
32 , gzip
33 , jq
34 , lib
35 , libarchive
36 , libcpuid
37 , libsodium
38 , lowdown
39 , mdbook
40 , nlohmann_json
41 , openssl
42 , perl
43 , pkg-config
44 , Security
45 , sqlite
46 , util-linuxMinimal
47 , xz
49 , enableDocumentation ? !atLeast24 || stdenv.hostPlatform == stdenv.buildPlatform
50 , enableStatic ? stdenv.hostPlatform.isStatic
51 , withAWS ? !enableStatic && (stdenv.isLinux || stdenv.isDarwin), aws-sdk-cpp
52 , withLibseccomp ? lib.meta.availableOn stdenv.hostPlatform libseccomp, libseccomp
54 , confDir
55 , stateDir
56 , storeDir
58   # passthru tests
59 , pkgsi686Linux
60 }: let
61 self = stdenv.mkDerivation {
62   pname = "nix";
64   version = "${version}${suffix}";
65   VERSION_SUFFIX = suffix;
67   inherit src patches;
69   outputs =
70     [ "out" "dev" ]
71     ++ lib.optionals enableDocumentation [ "man" "doc" ];
73   hardeningEnable = lib.optionals (!stdenv.isDarwin) [ "pie" ];
75   nativeBuildInputs = [
76     pkg-config
77   ] ++ lib.optionals atLeast24 [
78     autoconf-archive
79     autoreconfHook
80     bison
81     flex
82     jq
83   ] ++ lib.optionals (atLeast24 && enableDocumentation) [
84     (lib.getBin lowdown)
85     mdbook
86   ] ++ lib.optionals stdenv.isLinux [
87     util-linuxMinimal
88   ];
90   buildInputs = [
91     boost
92     brotli
93     bzip2
94     curl
95     editline
96     libsodium
97     openssl
98     sqlite
99     xz
100   ] ++ lib.optionals stdenv.isDarwin [
101     Security
102   ] ++ lib.optionals atLeast24 [
103     gtest
104     libarchive
105     lowdown
106   ] ++ lib.optionals (atLeast24 && stdenv.isx86_64) [
107     libcpuid
108   ] ++ lib.optionals withLibseccomp [
109     libseccomp
110   ] ++ lib.optionals withAWS [
111     aws-sdk-cpp
112   ];
114   propagatedBuildInputs = [
115     boehmgc
116   ] ++ lib.optionals (atLeast27) [
117     nlohmann_json
118   ];
120   NIX_LDFLAGS = lib.optionals (!atLeast24) [
121     # https://github.com/NixOS/nix/commit/3e85c57a6cbf46d5f0fe8a89b368a43abd26daba
122     (lib.optionalString enableStatic "-lssl -lbrotlicommon -lssh2 -lz -lnghttp2 -lcrypto")
123     # https://github.com/NixOS/nix/commits/74b4737d8f0e1922ef5314a158271acf81cd79f8
124     (lib.optionalString (stdenv.hostPlatform.system == "armv5tel-linux" || stdenv.hostPlatform.system == "armv6l-linux") "-latomic")
125   ];
127   preConfigure =
128     # Copy libboost_context so we don't get all of Boost in our closure.
129     # https://github.com/NixOS/nixpkgs/issues/45462
130     lib.optionalString (!enableStatic) ''
131       mkdir -p $out/lib
132       cp -pd ${boost}/lib/{libboost_context*,libboost_thread*,libboost_system*} $out/lib
133       rm -f $out/lib/*.a
134       ${lib.optionalString stdenv.isLinux ''
135         chmod u+w $out/lib/*.so.*
136         patchelf --set-rpath $out/lib:${stdenv.cc.cc.lib}/lib $out/lib/libboost_thread.so.*
137       ''}
138     '' +
139     # On all versions before c9f51e87057652db0013289a95deffba495b35e7, which
140     # removes config.nix entirely and is not present in 2.3.x, we need to
141     # patch around an issue where the Nix configure step pulls in the build
142     # system's bash and other utilities when cross-compiling.
143     lib.optionalString (stdenv.buildPlatform != stdenv.hostPlatform && !atLeast24) ''
144       mkdir tmp/
145       substitute corepkgs/config.nix.in tmp/config.nix.in \
146         --subst-var-by bash ${bash}/bin/bash \
147         --subst-var-by coreutils ${coreutils}/bin \
148         --subst-var-by bzip2 ${bzip2}/bin/bzip2 \
149         --subst-var-by gzip ${gzip}/bin/gzip \
150         --subst-var-by xz ${xz}/bin/xz \
151         --subst-var-by tar ${gnutar}/bin/tar \
152         --subst-var-by tr ${coreutils}/bin/tr
153       mv tmp/config.nix.in corepkgs/config.nix.in
154     '';
156   configureFlags = [
157     "--with-store-dir=${storeDir}"
158     "--localstatedir=${stateDir}"
159     "--sysconfdir=${confDir}"
160     "--enable-gc"
161   ] ++ lib.optionals (!enableDocumentation) [
162     "--disable-doc-gen"
163   ] ++ lib.optionals (!atLeast24) [
164     # option was removed in 2.4
165     "--disable-init-state"
166   ] ++ lib.optionals stdenv.isLinux [
167     "--with-sandbox-shell=${busybox-sandbox-shell}/bin/busybox"
168   ] ++ lib.optionals (stdenv.hostPlatform != stdenv.buildPlatform && stdenv.hostPlatform ? nix && stdenv.hostPlatform.nix ? system) [
169     "--with-system=${stdenv.hostPlatform.nix.system}"
170   ] ++ lib.optionals (!withLibseccomp) [
171     # RISC-V support in progress https://github.com/seccomp/libseccomp/pull/50
172     "--disable-seccomp-sandboxing"
173   ] ++ lib.optionals (atLeast210 && stdenv.cc.isGNU && !enableStatic) [
174     "--enable-lto"
175   ];
177   makeFlags = [
178     "profiledir=$(out)/etc/profile.d"
179   ] ++ lib.optional (stdenv.hostPlatform != stdenv.buildPlatform) "PRECOMPILE_HEADERS=0"
180     ++ lib.optional (stdenv.hostPlatform.isDarwin) "PRECOMPILE_HEADERS=1";
182   installFlags = [ "sysconfdir=$(out)/etc" ];
184   doInstallCheck = true;
185   installCheckTarget = if atLeast210 then "installcheck" else null;
187   # socket path becomes too long otherwise
188   preInstallCheck = lib.optionalString stdenv.isDarwin ''
189     export TMPDIR=$NIX_BUILD_TOP
190   ''
191   # See https://github.com/NixOS/nix/issues/5687
192   + lib.optionalString (atLeast25 && stdenv.isDarwin) ''
193     echo "exit 99" > tests/gc-non-blocking.sh
194   '';
196   separateDebugInfo = stdenv.isLinux && (atLeast24 -> !enableStatic);
198   enableParallelBuilding = true;
200   passthru = {
201     inherit aws-sdk-cpp boehmgc;
203     perl-bindings = perl.pkgs.toPerlModule (callPackage ./nix-perl.nix { nix = self; inherit Security; });
205     tests = {
206       nixi686 = pkgsi686Linux.nixVersions.${"nix_${lib.versions.major version}_${lib.versions.minor version}"};
207     };
208   };
210   meta = with lib; {
211     description = "Powerful package manager that makes package management reliable and reproducible";
212     longDescription = ''
213       Nix is a powerful package manager for Linux and other Unix systems that
214       makes package management reliable and reproducible. It provides atomic
215       upgrades and rollbacks, side-by-side installation of multiple versions of
216       a package, multi-user package management and easy setup of build
217       environments.
218     '';
219     homepage = "https://nixos.org/";
220     license = licenses.lgpl2Plus;
221     maintainers = with maintainers; [ eelco lovesegfault artturin ];
222     platforms = platforms.unix;
223     outputsToInstall = [ "out" ] ++ optional enableDocumentation "man";
224   };
226 in self