-
-
Notifications
You must be signed in to change notification settings - Fork 74
/
Cargo.nix.tera
156 lines (149 loc) · 5.65 KB
/
Cargo.nix.tera
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# This file was @generated by cargo2nix {{ cargo2nix_version }}.
# It is not intended to be manually edited.
args@{
release ? true,
rootFeatures ? [
{%- for feature in root_features %}
"{{ feature }}"
{%- endfor %}
],
rustPackages,
buildRustPackages,
hostPlatform,
hostPlatformCpu ? null,
hostPlatformFeatures ? [],
target ? null,
codegenOpts ? null,
profileOpts ? null,
cargoUnstableFlags ? null,
rustcLinkFlags ? null,
rustcBuildFlags ? null,
mkRustCrate,
rustLib,
lib,
workspaceSrc,
ignoreLockHash,
}:
let
nixifiedLockHash = "{{ cargo_lock_hash }}";
workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc;
currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock);
lockHashIgnored = if ignoreLockHash
then builtins.trace "Ignoring lock hash" ignoreLockHash
else ignoreLockHash;
in if !lockHashIgnored && (nixifiedLockHash != currentLockHash) then
throw ("Cargo.nix ${nixifiedLockHash} is out of sync with Cargo.lock ${currentLockHash}")
else let
inherit (rustLib) fetchCratesIo fetchCrateLocal fetchCrateGit fetchCrateAlternativeRegistry expandFeatures decideProfile genDrvsByProfile;
profilesByName = {
{%- for name, profile in profiles %}
{{ name }} = builtins.fromTOML "{{ profile }}";
{%- endfor %}
};
rootFeatures' = expandFeatures rootFeatures;
overridableMkRustCrate = f:
let
drvs = genDrvsByProfile profilesByName ({ profile, profileName }: mkRustCrate ({ inherit release profile hostPlatformCpu hostPlatformFeatures target profileOpts codegenOpts cargoUnstableFlags rustcLinkFlags rustcBuildFlags; } // (f profileName)));
in { compileMode ? null, profileName ? decideProfile compileMode release }:
let drv = drvs.${profileName}; in if compileMode == null then drv else drv.override { inherit compileMode; };
in
{
cargo2nixVersion = "{{ cargo2nix_version }}";
workspace = {
{%- for crate in workspace_members %}
{{ crate.name }} = rustPackages.unknown.{{ crate.name }}."{{ crate.version }}";
{%- endfor %}
};
{%- for crate in crates %}
"{{ crate.registry }}".{{ crate.name }}."{{ crate.version }}" = overridableMkRustCrate (profileName: rec {
name = "{{ crate.name }}";
version = "{{ crate.version }}";
registry = "{{ crate.registry }}";
{%- if crate.source.CratesIo.sha256 %}
src = fetchCratesIo { inherit name version; sha256 = "{{ crate.source.CratesIo.sha256 }}"; };
{%- elif crate.source.Git.url %}
src = fetchCrateGit {
url = {{ crate.source.Git.url }};
name = "{{ crate.name }}";
version = "{{ crate.version }}";
rev = "{{ crate.source.Git.rev }}";
{%- if crate.source.Git.branch %}
ref = "{{ crate.source.Git.branch }}";
{%- endif -%}
};
{%- elif crate.source.Local.path %}
src = fetchCrateLocal workspaceSrc;
{%- elif crate.source.Registry.index %}
src = fetchCrateAlternativeRegistry {
index = {{ crate.source.Registry.index }};
name = "{{ crate.name }}";
version = "{{ crate.version }}";
sha256 = "{{ crate.source.Registry.sha256 }}";
};
{%- else %}
# ERROR: Could not resolve source: {{ crate.source | safe | json_encode() }}
{%- endif -%}
{%- if crate.features | length > 0 %}
features = builtins.concatLists [
{%- for feature in crate.features %}
{%- if feature.activated_by %}
(lib.optional ({{ feature.activated_by }}) "{{ feature.name }}")
{%- else %}
[ "{{ feature.name }}" ]
{%- endif %}
{%- endfor %}
];
{%- endif %}
{%- if crate.dependencies | length > 0 %}
dependencies = {
{%- for dep in crate.dependencies %}
{%- if dep.is_proc_macro -%}
{%- set package_set = 'buildRustPackages' -%}
{%- set profile = '{ profileName = "__noProfile"; }' -%}
{%- else -%}
{%- set package_set = 'rustPackages' -%}
{%- set profile = '{ inherit profileName; }' -%}
{%- endif -%}
{%- if dep.cfg_condition %}
{%- set attribute = '${ if ' ~ dep.cfg_condition ~ ' then "' ~ dep.extern_name ~ '" else null }' -%}
{%- else %}
{%- set attribute = dep.extern_name -%}
{%- endif %}
{{ attribute }} = ({{ package_set }}."{{ dep.registry }}".{{ dep.name }}."{{ dep.version }}" {{ profile }}).out;
{%- endfor %}
};
{%- endif %}
{%- if crate.dev_dependencies | length > 0 %}
devDependencies = {
{%- for dep in crate.dev_dependencies %}
{%- if dep.is_proc_macro -%}
{%- set package_set = 'buildRustPackages' -%}
{%- set profile = '{ profileName = "__noProfile"; }' -%}
{%- else -%}
{%- set package_set = 'rustPackages' -%}
{%- set profile = '{ inherit profileName; }' -%}
{%- endif -%}
{%- if dep.cfg_condition %}
{%- set attribute = '${ if ' ~ dep.cfg_condition ~ ' then "' ~ dep.extern_name ~ '" else null }' -%}
{%- else %}
{%- set attribute = dep.extern_name -%}
{%- endif %}
{{ attribute }} = ({{ package_set }}."{{ dep.registry }}".{{ dep.name }}."{{ dep.version }}" {{ profile }}).out;
{%- endfor %}
};
{%- endif %}
{%- if crate.build_dependencies | length > 0 %}
buildDependencies = {
{%- for dep in crate.build_dependencies %}
{%- if dep.cfg_condition %}
{%- set attribute = '${ if ' ~ dep.cfg_condition ~ ' then "' ~ dep.extern_name ~ '" else null }' -%}
{%- else %}
{%- set attribute = dep.extern_name -%}
{%- endif %}
{{ attribute }} = (buildRustPackages."{{ dep.registry }}".{{ dep.name }}."{{ dep.version }}" { profileName = "__noProfile"; }).out;
{%- endfor %}
};
{%- endif %}
});
{% endfor %}
}