1{ pkgs, callPackage }:
2
3with pkgs;
4
5{
6 cc-wrapper =
7 with builtins;
8 let
9 pkgNames = (attrNames pkgs);
10 llvmTests =
11 let
12 pkgSets = lib.pipe pkgNames [
13 (filter (lib.hasPrefix "llvmPackages"))
14 (filter (n: n != "rocmPackages.llvm"))
15 # Are throw aliases.
16 (filter (n: n != "llvmPackages_rocm"))
17 (filter (n: n != "llvmPackages_latest"))
18 (filter (n: n != "llvmPackages_6"))
19 (filter (n: n != "llvmPackages_7"))
20 (filter (n: n != "llvmPackages_8"))
21 (filter (n: n != "llvmPackages_9"))
22 (filter (n: n != "llvmPackages_10"))
23 (filter (n: n != "llvmPackages_11"))
24 ];
25 tests = lib.genAttrs pkgSets (
26 name:
27 recurseIntoAttrs {
28 clang = callPackage ./cc-wrapper { stdenv = pkgs.${name}.stdenv; };
29 libcxx = callPackage ./cc-wrapper { stdenv = pkgs.${name}.libcxxStdenv; };
30 }
31 );
32 in
33 tests;
34 gccTests =
35 let
36 pkgSets = lib.pipe (attrNames pkgs) (
37 [
38 (filter (lib.hasPrefix "gcc"))
39 (filter (lib.hasSuffix "Stdenv"))
40 (filter (n: n != "gccCrossLibcStdenv"))
41 (filter (n: n != "gcc49Stdenv"))
42 (filter (n: n != "gcc6Stdenv"))
43 (filter (n: n != "gcc7Stdenv"))
44 (filter (n: n != "gcc8Stdenv"))
45 ]
46 ++
47 lib.optionals
48 (
49 !(
50 (stdenv.buildPlatform.isLinux && stdenv.buildPlatform.isx86_64)
51 && (stdenv.hostPlatform.isLinux && stdenv.hostPlatform.isx86_64)
52 )
53 )
54 [
55 (filter (n: !lib.hasSuffix "MultiStdenv" n))
56 ]
57 );
58 in
59 lib.genAttrs pkgSets (name: callPackage ./cc-wrapper { stdenv = pkgs.${name}; });
60 in
61 recurseIntoAttrs {
62 default = callPackage ./cc-wrapper { };
63
64 supported = stdenv.mkDerivation {
65 name = "cc-wrapper-supported";
66 builtGCC =
67 let
68 inherit (lib) filterAttrs;
69 sets = lib.pipe gccTests [
70 (filterAttrs (_: v: lib.meta.availableOn stdenv.hostPlatform v.stdenv.cc))
71 # Broken
72 (filterAttrs (n: _: n != "gccMultiStdenv"))
73 ];
74 in
75 toJSON sets;
76
77 builtLLVM =
78 let
79 inherit (lib) filterAttrs;
80 sets = lib.pipe llvmTests [
81 (filterAttrs (_: v: lib.meta.availableOn stdenv.hostPlatform v.clang.stdenv.cc))
82 (filterAttrs (_: v: lib.meta.availableOn stdenv.hostPlatform v.libcxx.stdenv.cc))
83 ];
84 in
85 toJSON sets;
86 buildCommand = ''
87 touch $out
88 '';
89 };
90
91 llvmTests = recurseIntoAttrs llvmTests;
92 gccTests = recurseIntoAttrs gccTests;
93 };
94
95 devShellTools = callPackage ../build-support/dev-shell-tools/tests { };
96
97 stdenv-inputs = callPackage ./stdenv-inputs { };
98 stdenv = recurseIntoAttrs (callPackage ./stdenv { });
99
100 hardeningFlags = recurseIntoAttrs (callPackage ./cc-wrapper/hardening.nix { });
101 hardeningFlags-gcc = recurseIntoAttrs (
102 callPackage ./cc-wrapper/hardening.nix {
103 stdenv = gccStdenv;
104 }
105 );
106 hardeningFlags-clang = recurseIntoAttrs (
107 callPackage ./cc-wrapper/hardening.nix {
108 stdenv = llvmPackages.stdenv;
109 }
110 );
111
112 config = callPackage ./config.nix { };
113
114 top-level = callPackage ./top-level { };
115
116 haskell = callPackage ./haskell { };
117
118 hooks = recurseIntoAttrs (callPackage ./hooks { });
119
120 cc-multilib-gcc = callPackage ./cc-wrapper/multilib.nix { stdenv = gccMultiStdenv; };
121 cc-multilib-clang = callPackage ./cc-wrapper/multilib.nix { stdenv = clangMultiStdenv; };
122
123 compress-drv = callPackage ../build-support/compress-drv/test.nix { };
124
125 fetchurl = recurseIntoAttrs (callPackages ../build-support/fetchurl/tests.nix { });
126 fetchtorrent = recurseIntoAttrs (callPackages ../build-support/fetchtorrent/tests.nix { });
127 fetchpatch = recurseIntoAttrs (callPackages ../build-support/fetchpatch/tests.nix { });
128 fetchpatch2 = recurseIntoAttrs (
129 callPackages ../build-support/fetchpatch/tests.nix { fetchpatch = fetchpatch2; }
130 );
131 fetchDebianPatch = recurseIntoAttrs (callPackages ../build-support/fetchdebianpatch/tests.nix { });
132 fetchzip = recurseIntoAttrs (callPackages ../build-support/fetchzip/tests.nix { });
133 fetchgit = recurseIntoAttrs (callPackages ../build-support/fetchgit/tests.nix { });
134 fetchFirefoxAddon = recurseIntoAttrs (
135 callPackages ../build-support/fetchfirefoxaddon/tests.nix { }
136 );
137 fetchPypiLegacy = recurseIntoAttrs (callPackages ../build-support/fetchpypilegacy/tests.nix { });
138
139 install-shell-files = recurseIntoAttrs (callPackage ./install-shell-files { });
140
141 checkpointBuildTools = callPackage ./checkpointBuild { };
142
143 kernel-config = callPackage ./kernel.nix { };
144
145 ld-library-path = callPackage ./ld-library-path { };
146
147 cross = recurseIntoAttrs (callPackage ./cross { });
148
149 php = recurseIntoAttrs (callPackages ./php { });
150
151 pkg-config = recurseIntoAttrs (callPackage ../top-level/pkg-config/tests.nix { }) // {
152 __recurseIntoDerivationForReleaseJobs = true;
153 };
154
155 buildRustCrate = recurseIntoAttrs (callPackage ../build-support/rust/build-rust-crate/test { });
156 importCargoLock = recurseIntoAttrs (callPackage ../build-support/rust/test/import-cargo-lock { });
157
158 vim = callPackage ./vim { };
159
160 nixos-functions = callPackage ./nixos-functions { };
161
162 nixosOptionsDoc = recurseIntoAttrs (callPackage ../../nixos/lib/make-options-doc/tests.nix { });
163
164 overriding = callPackage ./overriding.nix { };
165
166 texlive = recurseIntoAttrs (callPackage ./texlive { });
167
168 cuda = callPackage ./cuda { };
169
170 trivial-builders = callPackage ../build-support/trivial-builders/test/default.nix { };
171
172 writers = callPackage ../build-support/writers/test.nix { };
173
174 testers = callPackage ../build-support/testers/test/default.nix { };
175
176 dhall = callPackage ./dhall { };
177
178 cue-validation = callPackage ./cue { };
179
180 coq = callPackage ./coq { };
181
182 dotnet = recurseIntoAttrs (callPackages ./dotnet { });
183
184 makeHardcodeGsettingsPatch = recurseIntoAttrs (callPackage ./make-hardcode-gsettings-patch { });
185
186 makeWrapper = callPackage ./make-wrapper { };
187 makeBinaryWrapper = callPackage ./make-binary-wrapper {
188 makeBinaryWrapper = pkgs.makeBinaryWrapper.override {
189 # Enable sanitizers in the tests only, to avoid the performance cost in regular usage.
190 # The sanitizers cause errors on aarch64-darwin, see https://github.com/NixOS/nixpkgs/pull/150079#issuecomment-994132734
191 sanitizers =
192 pkgs.lib.optionals (!(pkgs.stdenv.hostPlatform.isDarwin && pkgs.stdenv.hostPlatform.isAarch64))
193 [
194 "undefined"
195 "address"
196 ];
197 };
198 };
199
200 pkgs-lib = recurseIntoAttrs (import ../pkgs-lib/tests { inherit pkgs; });
201
202 buildFHSEnv = recurseIntoAttrs (callPackages ./buildFHSEnv { });
203
204 auto-patchelf-hook = callPackage ./auto-patchelf-hook { };
205
206 # Accumulate all passthru.tests from arrayUtilities into a single attribute set.
207 arrayUtilities = recurseIntoAttrs (
208 lib.concatMapAttrs (
209 name: value:
210 lib.optionalAttrs (value ? passthru.tests) {
211 ${name} = value.passthru.tests;
212 }
213 ) arrayUtilities
214 );
215
216 srcOnly = callPackage ../build-support/src-only/tests.nix { };
217
218 systemd = callPackage ./systemd { };
219
220 replaceVars = recurseIntoAttrs (callPackage ./replace-vars { });
221
222 substitute = recurseIntoAttrs (callPackage ./substitute { });
223
224 build-environment-info = callPackage ./build-environment-info { };
225
226 rust-hooks = recurseIntoAttrs (callPackages ../build-support/rust/hooks/test { });
227}