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