|
27 | 27 |
|
28 | 28 | in {
|
29 | 29 |
|
30 |
| - overlay = final: prev: overlay final prev; |
| 30 | + # Compat. |
| 31 | + overlay = |
| 32 | + builtins.trace |
| 33 | + "[1;31mwarning: rust-overlay's flake output `overlay` is deprecated in favor of `overlays.default`[0m" |
| 34 | + overlay; |
| 35 | + |
| 36 | + overlays = { |
| 37 | + default = overlay; |
| 38 | + rust-overlay = overlay; |
| 39 | + }; |
31 | 40 |
|
32 | 41 | } // flake-utils.lib.eachSystem allSystems (system: let
|
33 | 42 | pkgs = import nixpkgs { inherit system; overlays = [ overlay ]; };
|
34 | 43 | in rec {
|
35 |
| - # `defaultApp`, `defaultPackage` and `packages` are for human only. |
36 |
| - # They are subject to change and **DO NOT** depend on them in your flake. |
37 |
| - # Please use `overlay` instead. |
38 |
| - |
39 |
| - defaultApp = { |
40 |
| - type = "app"; |
41 |
| - program = "${defaultPackage}/bin/rustc"; |
42 |
| - }; |
43 |
| - defaultPackage = packages.rust; |
| 44 | + # TODO: Flake outputs except `overlay[s]` are not stabilized yet. |
44 | 45 |
|
45 | 46 | packages = let
|
| 47 | + select = version: comps: if version == "latest" then null else comps.default or null; |
46 | 48 | result =
|
47 | 49 | mapAttrs' (version: comps: {
|
48 |
| - name = "rust-${replaceStrings ["."] ["-"] version}"; |
49 |
| - value = comps.default or null; |
| 50 | + name = "rust_${replaceStrings ["."] ["_"] version}"; |
| 51 | + value = select version comps; |
50 | 52 | }) pkgs.rust-bin.stable //
|
51 | 53 | mapAttrs' (version: comps: {
|
52 |
| - name = "rust-nightly-${version}"; |
53 |
| - value = comps.default or null; |
| 54 | + name = "rust-nightly_${version}"; |
| 55 | + value = select version comps; |
54 | 56 | }) pkgs.rust-bin.nightly //
|
55 | 57 | mapAttrs' (version: comps: {
|
56 |
| - name = "rust-beta-${version}"; |
57 |
| - value = comps.default or null; |
| 58 | + name = "rust-beta_${version}"; |
| 59 | + value = select version comps; |
58 | 60 | }) pkgs.rust-bin.beta //
|
59 |
| - { |
60 |
| - rust = result.rust-latest; |
61 |
| - rust-nightly = result.rust-nightly-latest; |
62 |
| - rust-beta = result.rust-beta-latest; |
| 61 | + rec { |
| 62 | + rust = pkgs.rust-bin.stable.latest.default; |
| 63 | + rust-beta = pkgs.rust-bin.beta.latest.default; |
| 64 | + rust-nightly = pkgs.rust-bin.nightly.latest.default; |
| 65 | + default = rust; |
63 | 66 | };
|
64 | 67 | in filterAttrs (name: drv: drv != null) result;
|
65 | 68 |
|
|
69 | 72 |
|
70 | 73 | rustHostPlatform = pkgs.rust.toRustTarget pkgs.hostPlatform;
|
71 | 74 |
|
72 |
| - assertEq = lhs: rhs: { |
73 |
| - assertion = lhs == rhs; |
74 |
| - message = "`${lhs}` != `${rhs}`"; |
75 |
| - }; |
76 |
| - assertUrl = drv: url: let |
77 |
| - srcUrl = head drv.src.urls; |
78 |
| - in assertEq srcUrl url; |
79 |
| - |
| 75 | + assertEq = (flake-utils.lib.check-utils system).isEqual; |
| 76 | + assertUrl = drv: url: assertEq (head drv.src.urls) url; |
| 77 | + in |
80 | 78 | # Check only tier 1 targets.
|
81 |
| - assertions = optionalAttrs (elem system [ "aarch64-linux" "x86_64-linux" ]) { |
| 79 | + optionalAttrs (elem system [ "aarch64-linux" "x86_64-linux" ]) { |
82 | 80 | url-no-arch = assertUrl stable."1.48.0".rust-src "https://static.rust-lang.org/dist/2020-11-19/rust-src-1.48.0.tar.xz";
|
83 | 81 | url-kind-nightly = assertUrl nightly."2021-01-01".rustc "https://static.rust-lang.org/dist/2021-01-01/rustc-nightly-${rustHostPlatform}.tar.xz";
|
84 | 82 | url-kind-beta = assertUrl beta."2021-01-01".rustc "https://static.rust-lang.org/dist/2021-01-01/rustc-beta-${rustHostPlatform}.tar.xz";
|
|
94 | 92 | url-kind-1 = assertUrl stable."1.34.2".llvm-tools-preview "https://static.rust-lang.org/dist/2019-05-14/llvm-tools-1.34.2%20(6c2484dc3%202019-05-13)-${rustHostPlatform}.tar.xz";
|
95 | 93 | url-fix = assertUrl nightly."2019-01-10".rustc "https://static.rust-lang.org/dist/2019-01-10/rustc-nightly-${rustHostPlatform}.tar.xz";
|
96 | 94 |
|
| 95 | + # 1.30.0 has `rustfmt` still in preview state. |
| 96 | + rename-unavailable = assertEq (stable."1.30.0" ? rustfmt) false; |
97 | 97 | rename-available = assertEq stable."1.48.0".rustfmt stable."1.48.0".rustfmt-preview;
|
98 |
| - rename-unavailable = { |
99 |
| - assertion = !(stable."1.30.0" ? rustfmt); |
100 |
| - message = "1.30.0 has rustfmt still in preview state"; |
101 |
| - }; |
102 | 98 |
|
103 | 99 | latest-stable-legacy = assertEq pkgs.latest.rustChannels.stable.rustc stable.latest.rustc;
|
104 | 100 | latest-beta-legacy = assertEq pkgs.latest.rustChannels.beta.rustc beta.latest.rustc;
|
|
147 | 143 | extensions = [ "rustfmt" "rustc-dev" ];
|
148 | 144 | targets = [ "aarch64-unknown-linux-gnu" ];
|
149 | 145 | });
|
| 146 | + |
| 147 | + latest-nightly-default = rust-bin.selectLatestNightlyWith (toolchain: toolchain.default); |
| 148 | + |
| 149 | + # Darwin specific tests. |
150 | 150 | } // optionalAttrs (system == "aarch64-darwin") {
|
151 | 151 | url-forward = assertUrl
|
152 | 152 | nightly."2022-02-02".rust-docs
|
153 | 153 | "https://static.rust-lang.org/dist/2022-02-02/rust-docs-nightly-x86_64-apple-darwin.tar.xz";
|
154 |
| - }; |
155 |
| - |
156 |
| - checkDrvs = optionalAttrs (elem system [ "aarch64-linux" "x86_64-linux" ]) { |
157 |
| - latest-nightly-default = rust-bin.selectLatestNightlyWith (toolchain: toolchain.default); |
158 |
| - } // optionalAttrs (system == "aarch64-darwin") { |
159 | 154 | aarch64-darwin-use-x86-docs = rust-bin.stable."1.51.0".default.override {
|
160 | 155 | targets = [ "x86_64-apple-darwin" ];
|
161 | 156 | targetExtensions = [ "rust-docs" ];
|
162 | 157 | };
|
163 | 158 | };
|
164 |
| - |
165 |
| - failedAssertions = |
166 |
| - filter (msg: msg != null) ( |
167 |
| - mapAttrsToList |
168 |
| - (name: { assertion, message }: if assertion |
169 |
| - then null |
170 |
| - else "Assertion `${name}` failed: ${message}\n") |
171 |
| - assertions); |
172 |
| - |
173 |
| - in if failedAssertions == [] |
174 |
| - then checkDrvs |
175 |
| - else throw (builtins.toString failedAssertions); |
176 |
| - |
177 | 159 | });
|
178 | 160 | }
|
0 commit comments