Skip to content

Commit 33746d6

Browse files
committed
merge target and targetSpec
1 parent fb16705 commit 33746d6

File tree

9 files changed

+170
-221
lines changed

9 files changed

+170
-221
lines changed

crate2nix/Cargo.nix

Lines changed: 52 additions & 61 deletions
Large diffs are not rendered by default.

crate2nix/src/render.rs

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ fn cfg_to_nix_expr_filter(
184184
})?;
185185
Ok(tera::Value::String(cfg_to_nix_expr(&expr)))
186186
} else {
187-
let condition = format!("(target == {})", escape_nix_string(key));
187+
let condition = format!("(target.name == {})", escape_nix_string(key));
188188
Ok(tera::Value::String(condition))
189189
}
190190
}
@@ -204,7 +204,7 @@ fn cfg_to_nix_expr(cfg: &CfgExpr) -> String {
204204
fn render(result: &mut String, cfg: &CfgExpr) {
205205
match cfg {
206206
CfgExpr::Value(Cfg::Name(name)) => {
207-
result.push_str(&format!("(targetSpec.{} or false)", target(name)));
207+
result.push_str(&format!("(target.{} or false)", target(name)));
208208
}
209209
CfgExpr::Value(Cfg::KeyPair(key, value)) => {
210210
let escaped_value = escape_nix_string(value);
@@ -213,13 +213,9 @@ fn cfg_to_nix_expr(cfg: &CfgExpr) -> String {
213213
} else if key == "target_feature" {
214214
format!("(builtins.elem {} targetFeatures)", escaped_value)
215215
} else if key == "target_family" {
216-
format!(
217-
"(builtins.elem {} targetSpec.{})",
218-
escaped_value,
219-
target(key)
220-
)
216+
format!("(builtins.elem {} target.{})", escaped_value, target(key))
221217
} else {
222-
format!("({} == targetSpec.{} or null)", escaped_value, target(key))
218+
format!("({} == target.{} or null)", escaped_value, target(key))
223219
});
224220
}
225221
CfgExpr::Not(expr) => {
@@ -272,7 +268,7 @@ fn test_render_cfg_to_nix_expr() {
272268
}
273269

274270
assert_eq!(
275-
"(targetSpec.\"unix\" or false)",
271+
"(target.\"unix\" or false)",
276272
&cfg_to_nix_expr(&name("unix"))
277273
);
278274
assert_eq!(
@@ -283,23 +279,23 @@ fn test_render_cfg_to_nix_expr() {
283279
]))
284280
);
285281
assert_eq!(
286-
"(builtins.elem \"unix\" targetSpec.\"family\")",
282+
"(builtins.elem \"unix\" target.\"family\")",
287283
&cfg_to_nix_expr(&kv("target_family", "unix"))
288284
);
289285
assert_eq!(
290-
"(\"linux\" == targetSpec.\"os\" or null)",
286+
"(\"linux\" == target.\"os\" or null)",
291287
&cfg_to_nix_expr(&kv("target_os", "linux"))
292288
);
293289
assert_eq!(
294-
"(!(\"linux\" == targetSpec.\"os\" or null))",
290+
"(!(\"linux\" == target.\"os\" or null))",
295291
&cfg_to_nix_expr(&CfgExpr::Not(Box::new(kv("target_os", "linux"))))
296292
);
297293
assert_eq!(
298-
"((targetSpec.\"unix\" or false) || (\"linux\" == targetSpec.\"os\" or null))",
294+
"((target.\"unix\" or false) || (\"linux\" == target.\"os\" or null))",
299295
&cfg_to_nix_expr(&CfgExpr::Any(vec![name("unix"), kv("target_os", "linux")]))
300296
);
301297
assert_eq!(
302-
"((targetSpec.\"unix\" or false) && (\"linux\" == targetSpec.\"os\" or null))",
298+
"((target.\"unix\" or false) && (\"linux\" == target.\"os\" or null))",
303299
&cfg_to_nix_expr(&CfgExpr::All(vec![name("unix"), kv("target_os", "linux")]))
304300
);
305301
assert_eq!("true", &cfg_to_nix_expr(&CfgExpr::All(vec![])));

crate2nix/templates/Cargo.nix.tera

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -220,7 +220,7 @@ rec {
220220
usesDefaultFeatures = false;
221221
{%- endif -%}
222222
{%- if dependency.target %}
223-
target = {target, targetSpec, features}: {{dependency.target | cfg_to_nix_expr | safe}};
223+
target = {target, features}: {{dependency.target | cfg_to_nix_expr | safe}};
224224
{%- endif %}
225225
{%- if dependency.features %}
226226
features = [ {% for feature in dependency.features %}{{feature}} {% endfor %}];
@@ -246,7 +246,7 @@ rec {
246246
usesDefaultFeatures = false;
247247
{%- endif -%}
248248
{%- if dependency.target %}
249-
target = {target, targetSpec, features}: {{dependency.target | cfg_to_nix_expr | safe}};
249+
target = {target, features}: {{dependency.target | cfg_to_nix_expr | safe}};
250250
{%- endif %}
251251
{%- if dependency.features %}
252252
features = [ {% for feature in dependency.features %}{{feature}} {% endfor %}];
@@ -271,7 +271,7 @@ rec {
271271
usesDefaultFeatures = false;
272272
{%- endif -%}
273273
{%- if dependency.target %}
274-
target = {target, targetSpec, features}: {{dependency.target | cfg_to_nix_expr | safe}};
274+
target = {target, features}: {{dependency.target | cfg_to_nix_expr | safe}};
275275
{%- endif %}
276276
{%- if dependency.features %}
277277
features = [ {% for feature in dependency.features %}{{feature}} {% endfor %}];

crate2nix/templates/nix/crate2nix/default.nix

Lines changed: 21 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ rec {
2424
Target (platform) data for conditional dependencies.
2525
This corresponds roughly to what buildRustCrate is setting.
2626
*/
27-
makeDefaultTargetSpec = platform: {
27+
makeDefaultTarget = platform: {
28+
name = platform.rust.rustcTarget;
29+
2830
unix = platform.isUnix;
2931
windows = platform.isWindows;
3032
fuchsia = true;
@@ -309,22 +311,21 @@ rec {
309311
, crateConfigs ? crates
310312
, buildRustCrateForPkgsFunc
311313
, runTests
312-
, makeTargetSpec ? makeDefaultTargetSpec
314+
, makeTarget ? makeDefaultTarget
313315
,
314316
}@args:
315317
assert (builtins.isAttrs crateConfigs);
316318
assert (builtins.isString packageId);
317319
assert (builtins.isList features);
318-
assert (builtins.isAttrs (makeTargetSpec stdenv.hostPlatform));
320+
assert (builtins.isAttrs (makeTarget stdenv.hostPlatform));
319321
assert (builtins.isBool runTests);
320322
let
321323
rootPackageId = packageId;
322324
mergedFeatures = mergePackageFeatures (
323325
args
324326
// {
325327
inherit rootPackageId;
326-
target = stdenv.hostPlatform.rust.rustcTarget;
327-
targetSpec = makeTargetSpec stdenv.hostPlatform // {
328+
target = makeTarget stdenv.hostPlatform // {
328329
test = runTests;
329330
};
330331
}
@@ -340,8 +341,7 @@ rec {
340341
packageId: value: buildByPackageIdForPkgsImpl self pkgs packageId
341342
)
342343
crateConfigs;
343-
target = pkgs.stdenv.hostPlatform.rust.rustcTarget;
344-
targetSpec = makeTargetSpec pkgs.stdenv.hostPlatform;
344+
target = makeTarget pkgs.stdenv.hostPlatform;
345345
build = mkBuiltByPackageIdByPkgs pkgs.buildPackages;
346346
};
347347
in
@@ -360,7 +360,7 @@ rec {
360360
);
361361
dependencies = dependencyDerivations {
362362
inherit features;
363-
inherit (self) target targetSpec;
363+
inherit (self) target;
364364
buildByPackageId =
365365
depPackageId:
366366
# proc_macro crates must be compiled for the build architecture
@@ -372,20 +372,20 @@ rec {
372372
};
373373
buildDependencies = dependencyDerivations {
374374
inherit features;
375-
inherit (self.build) target targetSpec;
375+
inherit (self.build) target;
376376
buildByPackageId = depPackageId: self.build.crates.${depPackageId};
377377
dependencies = crateConfig.buildDependencies or [ ];
378378
};
379379
dependenciesWithRenames =
380380
let
381381
buildDeps = filterEnabledDependencies {
382382
inherit features;
383-
inherit (self) target targetSpec;
383+
inherit (self) target;
384384
dependencies = crateConfig.dependencies or [ ] ++ devDependencies;
385385
};
386386
hostDeps = filterEnabledDependencies {
387387
inherit features;
388-
inherit (self.build) target targetSpec;
388+
inherit (self.build) target;
389389
dependencies = crateConfig.buildDependencies or [ ];
390390
};
391391
in
@@ -447,16 +447,14 @@ rec {
447447
, features
448448
, dependencies
449449
, target
450-
, targetSpec
451450
,
452451
}:
453452
assert (builtins.isList features);
454453
assert (builtins.isList dependencies);
455-
assert (builtins.isString target);
456-
assert (builtins.isAttrs targetSpec);
454+
assert (builtins.isAttrs target);
457455
let
458456
enabledDependencies = filterEnabledDependencies {
459-
inherit dependencies features target targetSpec;
457+
inherit dependencies features target;
460458
};
461459
depDerivation = dependency: buildByPackageId dependency.packageId;
462460
in
@@ -480,8 +478,7 @@ rec {
480478
# Returns various tools to debug a crate.
481479
debugCrate =
482480
{ packageId
483-
, target ? stdenv.hostPlatform.rust.rustcTarget
484-
, targetSpec ? makeDefaultTargetSpec stdenv.hostPlatform
481+
, target ? makeDefaultTarget stdenv.hostPlatform
485482
,
486483
}:
487484
assert (builtins.isString packageId);
@@ -503,10 +500,10 @@ rec {
503500
});
504501
mergedPackageFeatures = mergePackageFeatures {
505502
features = rootFeatures;
506-
inherit packageId target targetSpec;
503+
inherit packageId target;
507504
};
508505
diffedDefaultPackageFeatures = diffDefaultPackageFeatures {
509-
inherit packageId target targetSpec;
506+
inherit packageId target;
510507
};
511508
};
512509
in
@@ -524,14 +521,13 @@ rec {
524521
{ crateConfigs ? crates
525522
, packageId
526523
, target
527-
, targetSpec
528524
,
529525
}:
530526
assert (builtins.isAttrs crateConfigs);
531527
let
532528
prefixValues = prefix: lib.mapAttrs (n: v: { "${prefix}" = v; });
533529
mergedFeatures = prefixValues "crate2nix" (mergePackageFeatures {
534-
inherit crateConfigs packageId target targetSpec;
530+
inherit crateConfigs packageId target;
535531
features = [ "default" ];
536532
});
537533
configs = prefixValues "cargo" crateConfigs;
@@ -572,7 +568,6 @@ rec {
572568
, dependencyPath ? [ crates.${packageId}.crateName ]
573569
, featuresByPackageId ? { }
574570
, target
575-
, targetSpec
576571
, # Adds devDependencies to the crate with rootPackageId.
577572
runTests ? false
578573
, ...
@@ -583,8 +578,7 @@ rec {
583578
assert (builtins.isList features);
584579
assert (builtins.isList dependencyPath);
585580
assert (builtins.isAttrs featuresByPackageId);
586-
assert (builtins.isString target);
587-
assert (builtins.isAttrs targetSpec);
581+
assert (builtins.isAttrs target);
588582
assert (builtins.isBool runTests);
589583
let
590584
crateConfig = crateConfigs."${packageId}" or (builtins.throw "Package not found: ${packageId}");
@@ -605,7 +599,7 @@ rec {
605599
assert (builtins.isList dependencies);
606600
let
607601
enabledDependencies = filterEnabledDependencies {
608-
inherit dependencies target targetSpec;
602+
inherit dependencies target;
609603
features = enabledFeatures;
610604
};
611605
directDependencies = map depWithResolvedFeatures enabledDependencies;
@@ -628,7 +622,6 @@ rec {
628622
crateConfigs
629623
packageId
630624
target
631-
targetSpec
632625
runTests
633626
rootPackageId
634627
;
@@ -658,21 +651,19 @@ rec {
658651
{ dependencies
659652
, features
660653
, target
661-
, targetSpec
662654
,
663655
}:
664656
assert (builtins.isList dependencies);
665657
assert (builtins.isList features);
666-
assert (builtins.isString target);
667-
assert (builtins.isAttrs targetSpec);
658+
assert (builtins.isAttrs target);
668659

669660
lib.filter
670661
(
671662
dep:
672663
let
673664
targetFunc = dep.target or (features: true);
674665
in
675-
targetFunc { inherit features target targetSpec; }
666+
targetFunc { inherit features target; }
676667
&& (!(dep.optional or false) || builtins.any (doesFeatureEnableDependency dep) features)
677668
)
678669
dependencies;

crate2nix/templates/nix/crate2nix/tests/dependencyDerivations.nix

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,7 @@ let
2424
dependencyDerivations = features: dependencies:
2525
crate2nix.dependencyDerivations {
2626
buildByPackageId = p: fakeCrates.${p};
27-
target = stdenv.hostPlatform.rust.rustcTarget;
28-
targetSpec = crate2nix.makeDefaultTargetSpec stdenv.hostPlatform;
27+
target = crate2nix.makeDefaultTarget stdenv.hostPlatform;
2928
inherit features dependencies;
3029
};
3130
in

crate2nix/templates/nix/crate2nix/tests/packageFeatures.nix

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,7 @@ let
8787
packageId: features:
8888
crate2nix.mergePackageFeatures
8989
{
90-
target = stdenv.hostPlatform.rust.rustcTarget;
91-
targetSpec = crate2nix.makeDefaultTargetSpec stdenv.hostPlatform;
90+
target = crate2nix.makeDefaultTarget stdenv.hostPlatform;
9291
runTests = false;
9392
rootPackageId = packageId;
9493
inherit crateConfigs packageId features;

0 commit comments

Comments
 (0)