rayonパッケージ
Revisão | f28ea4cea75c219d44c625064e8c97ad8dd5fe3e (tree) |
---|---|
Hora | 2020-04-08 06:35:28 |
Autor | dyknon <dyknon@user...> |
Commiter | dyknon |
debian files
@@ -0,0 +1,5 @@ | ||
1 | +rust-rayon (1.3.0-1) unstable; urgency=medium | |
2 | + | |
3 | + * Initial release | |
4 | + | |
5 | + -- dyknon <dyknon@users.osdn.me> Tue, 07 Apr 2020 20:54:50 +0900 |
@@ -0,0 +1,42 @@ | ||
1 | +Source: rust-rayon | |
2 | +Priority: optional | |
3 | +Maintainer: dyknon <dyknon@users.osdn.me> | |
4 | +Build-Depends: debhelper-compat (= 12), | |
5 | + cargo, python3:native, libjson-perl, | |
6 | + librust-crossbeam-deque-0.7+default-dev (>= 0.7.2), | |
7 | + librust-crossbeam-queue-0.2+default-dev (>= 0.2), | |
8 | + librust-crossbeam-utils+std-dev (>= 0.7), | |
9 | + librust-doc-comment-0.3+default-dev (>= 0.3), | |
10 | + librust-docopt-1+default-dev (>= 1), | |
11 | + librust-either-1-dev (>= 1.0), | |
12 | + librust-lazy-static-1+default-dev (>= 1), | |
13 | + librust-libc-0.2+default-dev (>= 0.2), | |
14 | + librust-num-cpus-1+default-dev (>= 1.2), | |
15 | + librust-rand-0.7+default-dev (>= 0.7), | |
16 | + librust-rand-xorshift-0.2+default-dev (>= 0.2), | |
17 | + librust-scoped-tls-1+default-dev (>= 1.0), | |
18 | + librust-serde-1+default-dev (>= 1.0.85), | |
19 | + librust-serde-1+derive-dev (>= 1.0.85) | |
20 | +Standards-Version: 4.5.0 | |
21 | +Section: rust | |
22 | +Homepage: https://github.com/rayon-rs/rayon | |
23 | +#Vcs-Browser: https://salsa.debian.org/debian/rust-rayon | |
24 | +#Vcs-Git: https://salsa.debian.org/debian/rust-rayon.git | |
25 | + | |
26 | +Package: librust-rayon-core-dev | |
27 | +Architecture: any | |
28 | +Multi-Arch: same | |
29 | +Depends: ${cargo:dep}, ${misc:Depends} | |
30 | +Recommends: ${cargo:rec} | |
31 | +Provides: ${cargo:prov} | |
32 | +Description: rust library crate rayon-core | |
33 | + Core APIs for Rayon | |
34 | + | |
35 | +Package: librust-rayon-dev | |
36 | +Architecture: any | |
37 | +Multi-Arch: same | |
38 | +Depends: ${cargo:dep}, ${misc:Depends} | |
39 | +Recommends: ${cargo:rec} | |
40 | +Provides: ${cargo:prov} | |
41 | +Description: rust library crate rayon | |
42 | + Simple work-stealing parallelism for Rust |
@@ -0,0 +1,35 @@ | ||
1 | +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ | |
2 | +Upstream-Name: rayon | |
3 | +Source: <https://github.com/rayon-rs/rayon> | |
4 | + | |
5 | +Files: * | |
6 | +Copyright: Copyright (c) 2010 The Rust Project Developers | |
7 | +License: Apache-2 or Expat | |
8 | + | |
9 | +Files: rayon-demo/src/nbody/nbody.rs | |
10 | +Copyright: Rust source (c) 2016 by the Rayon developers | |
11 | + Copyright (c) 2011, Intel Corporation | |
12 | +License: Apache-2 or Expat | |
13 | + Rayon is distributed under the terms of both the MIT license and the | |
14 | + Apache License (Version 2.0). See [LICENSE-APACHE](LICENSE-APACHE) and | |
15 | + [LICENSE-MIT](LICENSE-MIT) for details. Opening a pull requests is | |
16 | + assumed to signal agreement with these licensing terms. | |
17 | + | |
18 | +Files: debian/* | |
19 | +Copyright: 2020 dyknon <dyknon@users.osdn.me> | |
20 | +License: GPL-2+ | |
21 | + This package is free software; you can redistribute it and/or modify | |
22 | + it under the terms of the GNU General Public License as published by | |
23 | + the Free Software Foundation; either version 2 of the License, or | |
24 | + (at your option) any later version. | |
25 | + . | |
26 | + This package is distributed in the hope that it will be useful, | |
27 | + but WITHOUT ANY WARRANTY; without even the implied warranty of | |
28 | + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
29 | + GNU General Public License for more details. | |
30 | + . | |
31 | + You should have received a copy of the GNU General Public License | |
32 | + along with this program. If not, see <https://www.gnu.org/licenses/> | |
33 | + . | |
34 | + On Debian systems, the complete text of the GNU General | |
35 | + Public License version 2 can be found in "/usr/share/common-licenses/GPL-2". |
@@ -0,0 +1,537 @@ | ||
1 | +#!/usr/bin/perl | |
2 | + | |
3 | +use strict; | |
4 | +use warnings; | |
5 | +use utf8; | |
6 | +use JSON; | |
7 | +use Data::Dumper; | |
8 | + | |
9 | +our %opts; | |
10 | + | |
11 | +sub getopt{ | |
12 | + my @command; | |
13 | + my @options = ( | |
14 | + { | |
15 | + name => "manifest_path", | |
16 | + long => ["manifest-path"], | |
17 | + short => ["f"], | |
18 | + arg => 1, | |
19 | + },{ | |
20 | + name => "dev", | |
21 | + long => ["dev", "recommends"], | |
22 | + },{ | |
23 | + name => "pkg_version", | |
24 | + long => ["pkg-version"], | |
25 | + short => ["v"], | |
26 | + arg => 1, | |
27 | + },{ | |
28 | + name => "all_crates", | |
29 | + long => ["all-crates"], | |
30 | + short => ["c"], | |
31 | + },{ | |
32 | + name => "all_deps", | |
33 | + long => ["all-deps"], | |
34 | + },{ | |
35 | + name => "req_dev", | |
36 | + long => ["require-dev"], | |
37 | + } | |
38 | + ); | |
39 | + my %ret = ( | |
40 | + manifest_path => "Cargo.toml", | |
41 | + ); | |
42 | + my $str_arg = sub{ | |
43 | + my $name = shift; | |
44 | + my $value = shift; | |
45 | + if(ref($ret{$name})){ | |
46 | + push(@{$ret{$name}}, $value); | |
47 | + }else{ | |
48 | + $ret{$name} = $value; | |
49 | + } | |
50 | + }; | |
51 | + while(my $arg = shift){ | |
52 | + if($arg eq "--"){ | |
53 | + push(@command, @_); | |
54 | + last; | |
55 | + }elsif($arg =~ /^--([^=]+)(?:=(.*))?/){ | |
56 | + my ($type) = grep{grep{$1 eq $_}(@{$_->{long}})}(@options); | |
57 | + die "unknown option --$1" if(!$type); | |
58 | + if($type->{arg}){ | |
59 | + $str_arg->($type->{name}, $2 // shift); | |
60 | + }else{ | |
61 | + $ret{$type->{name}} = $type->{bool} // 1; | |
62 | + } | |
63 | + }elsif($arg =~ /^-(.+)/){ | |
64 | + my $opt = $1; | |
65 | + while($opt =~ /(.)/g){ | |
66 | + my ($type) = grep{grep{$1 eq $_}(@{$_->{short}})}(@options); | |
67 | + die "unknown option -$1" if(!$type); | |
68 | + if($type->{arg}){ | |
69 | + if(pos($opt) < length($opt)){ | |
70 | + $str_arg->($type->{name}, substr($opt, pos($opt))); | |
71 | + }else{ | |
72 | + $str_arg->($type->{name}, shift); | |
73 | + } | |
74 | + last; | |
75 | + }else{ | |
76 | + $ret{$type->{name}} = $type->{bool} // 1; | |
77 | + } | |
78 | + } | |
79 | + }else{ | |
80 | + push(@command, $arg); | |
81 | + } | |
82 | + } | |
83 | + ({%ret}, @command); | |
84 | +} | |
85 | + | |
86 | +sub uniq{ | |
87 | + my %u = map{($_, 1)}(@_); | |
88 | + keys(%u); | |
89 | +} | |
90 | + | |
91 | +sub get_metadata{ | |
92 | + local $/; | |
93 | + open(my $metad, "-|:raw", qw{cargo metadata --offline --no-deps | |
94 | + --format-version 1 --manifest-path}, shift); | |
95 | + my $ret = decode_json(<$metad>); | |
96 | + close($metad); | |
97 | + $ret; | |
98 | +} | |
99 | + | |
100 | +sub list_packages{ | |
101 | + my $metadata = shift; | |
102 | + my %orig_opts = %opts; | |
103 | + my @packages = sort(map{ | |
104 | + if($opts{all_crates} || !defined($_->{publish})){ | |
105 | + $_; | |
106 | + }else{ | |
107 | + (); | |
108 | + } | |
109 | + }(@{$metadata->{packages}})); | |
110 | + my @ret; | |
111 | + my $n; | |
112 | + while(@packages != @ret){ | |
113 | + $n = @ret; | |
114 | + local %opts = %orig_opts; | |
115 | + $opts{all_deps} = 1; | |
116 | + TEST: for my $package(@packages){ | |
117 | + my $pname = $package->{name}; | |
118 | + my %deps = get_deps($package); | |
119 | + while(my ($dep, $ver) = each(%deps)){ | |
120 | + $dep =~ s'/.*''; | |
121 | + my $listed = grep{$_->{name} eq $dep}(@packages); | |
122 | + my $before = grep{$_ eq $dep}(@ret); | |
123 | + next TEST if($listed && !$before); | |
124 | + } | |
125 | + push(@ret, $pname) if(!grep{$pname eq $_}(@ret)); | |
126 | + } | |
127 | + die "infinite loop" if($n == @ret); | |
128 | + } | |
129 | + @ret; | |
130 | +} | |
131 | + | |
132 | +sub get_package{ | |
133 | + my $metadata = shift; | |
134 | + my $pacname = shift; | |
135 | + [grep{$_->{name} eq $pacname}(@{$metadata->{packages}})]->[0]; | |
136 | +} | |
137 | + | |
138 | +sub list_features{ | |
139 | + my $package = shift; | |
140 | + uniq(keys(%{$package->{features}}), "default"); | |
141 | +} | |
142 | + | |
143 | +sub list_features_pac{ | |
144 | + my $package = shift; | |
145 | + my @not = get_features_provides_all($package); | |
146 | + map{ | |
147 | + my $f = $_; | |
148 | + my %deps = get_feature_deps($package, $f); | |
149 | + if((!grep{$f eq $_}(@not)) | |
150 | + && (keys(%deps) >= 2 || grep{defined}(values(%deps))) | |
151 | + ){ | |
152 | + $_; | |
153 | + }else{ | |
154 | + (); | |
155 | + } | |
156 | + }(list_features($package)); | |
157 | +} | |
158 | + | |
159 | +sub is_cfg_true{ | |
160 | + my $cfg = shift; | |
161 | + if($cfg =~ /^(all|any|not)\(\s*(.*)\)\s*$/){ | |
162 | + if($1 eq "all"){ | |
163 | + return 1 if($2 eq ""); | |
164 | + for(split(/,\s*/, $2)){ | |
165 | + return 0 if(!is_cfg_true($_)); | |
166 | + } | |
167 | + return 1; | |
168 | + }elsif($1 eq "any"){ | |
169 | + return 0 if($2 eq ""); | |
170 | + for(split(/,\s*/, $2)){ | |
171 | + return 1 if(!is_cfg_true($_)); | |
172 | + } | |
173 | + return 0; | |
174 | + }elsif($1 eq "not"){ | |
175 | + return !is_cfg_true($2); | |
176 | + }else{ | |
177 | + die; | |
178 | + } | |
179 | + }elsif($cfg =~ /^(?:r#)?([a-zA-Z][a-zA-Z0-9_]*|_[a-zA-Z0-9_]+)\s*(?:=(.+))?$/){ | |
180 | + my $id = $1; | |
181 | + my $str; | |
182 | + if(defined($2)){ | |
183 | + my $sl = $2; | |
184 | + if($sl =~ /^\s*r(#(?1)#|"((?:[^\r]|\r(?=\n))*?)")\s*(.)/){ | |
185 | + die "cfg(...) syntax error" if(length($3)); | |
186 | + $str = $2; | |
187 | + }elsif($sl =~ m/^ | |
188 | + \s* " | |
189 | + ( | |
190 | + (?: | |
191 | + [^"\\\r] | |
192 | + | \r(?=\n) | |
193 | + | \\ (?: | |
194 | + ["'nrt\\0] | |
195 | + | x[0-7][0-9a-fA-F] | |
196 | + | u\{ (?: [0-9A-Fa-f] _* ){1,6} \} | |
197 | + | \n | |
198 | + ) | |
199 | + )* | |
200 | + ) " \s* (.) | |
201 | + /x){ | |
202 | + die "cfg(...) syntax error" if(length($2)); | |
203 | + my $strr = $1; | |
204 | + $str = ""; | |
205 | + while($strr =~ m/\G | |
206 | + ([^"\\\r]) | |
207 | + | (\r)(?=\n) | |
208 | + | \\ (?: | |
209 | + (["']) | |
210 | + | ([nrt\\0]) | |
211 | + | x([0-7][0-9a-fA-F]) | |
212 | + | u\{ ( (?: [0-9A-Fa-f] _* ){1,6} ) \} | |
213 | + | \n \ * | |
214 | + ) | |
215 | + /xg){ | |
216 | + if(defined($1//$2//$3)){ | |
217 | + $str .= $1//$2//$3; | |
218 | + }elsif(defined($4)){ | |
219 | + $str .= "\n" if($4 eq "n"); | |
220 | + $str .= "\r" if($4 eq "r"); | |
221 | + $str .= "\t" if($4 eq "t"); | |
222 | + $str .= "\\" if($4 eq "\\"); | |
223 | + $str .= "\0" if($4 eq "0"); | |
224 | + }elsif(defined($5//$6)){ | |
225 | + my $hex = $5//$6; | |
226 | + $hex =~ s/_//g; | |
227 | + $str .= chr(hex($hex)); | |
228 | + } | |
229 | + } | |
230 | + }else{ | |
231 | + die "cfg(...) syntax error" if(length($3)); | |
232 | + } | |
233 | + } | |
234 | + | |
235 | + my %cfgs = ( | |
236 | + target_arch => undef, | |
237 | + target_feature => undef, | |
238 | + target_os => undef, | |
239 | + target_family => "unix", | |
240 | + unix => "set", | |
241 | + #windows => debian system is not windows | |
242 | + target_env => undef, | |
243 | + target_endian => undef, | |
244 | + target_pointer_width=> undef, | |
245 | + target_vendor => undef, | |
246 | + test => undef, | |
247 | + debug_assertions => undef, | |
248 | + proc_macro => undef, | |
249 | + ); | |
250 | + | |
251 | + return 0 if(!exists($cfgs{$id})); | |
252 | + return !defined($str) || $cfgs{$id} eq $str if(defined($cfgs{$id})); | |
253 | + | |
254 | + ... | |
255 | + }else{ | |
256 | + die "cfg(...) syntax error"; | |
257 | + } | |
258 | +} | |
259 | + | |
260 | +sub expand_dep{ | |
261 | + my $dep = shift; | |
262 | + if(!defined($dep)){ | |
263 | + return (); | |
264 | + } | |
265 | + if(defined($dep->{target})){ | |
266 | + if($dep->{target} =~ /^\s*cfg\(\s*(.*)\)\s*$/){ | |
267 | + return () if(!is_cfg_true($1)); | |
268 | + }else{ | |
269 | + die "unhandleable target specific dependency"; | |
270 | + } | |
271 | + } | |
272 | + ($dep->{name}.($dep->{uses_default_features}?"/default":""), $dep->{req}, | |
273 | + map{("$dep->{name}/$_", $dep->{req})}(@{$dep->{features}})); | |
274 | +} | |
275 | + | |
276 | +sub get_deps{ | |
277 | + my $package = shift; | |
278 | + my $feature = shift; | |
279 | + if($feature){ | |
280 | + return get_feature_deps($package, $feature); | |
281 | + } | |
282 | + my %deps; | |
283 | + for(@{$package->{dependencies}}){ | |
284 | + if($opts{all_deps} || !$_->{optional} | |
285 | + && ( | |
286 | + (($_->{kind}//"") ne "dev" xor $opts{dev}) || $opts{req_dev} | |
287 | + ) | |
288 | + ){ | |
289 | + %deps = (%deps, expand_dep($_)); | |
290 | + } | |
291 | + } | |
292 | + %deps; | |
293 | +} | |
294 | + | |
295 | +sub get_feature_deps{ | |
296 | + my $package = shift; | |
297 | + my $feature = shift; | |
298 | + my %deps; | |
299 | + return if($feature eq "default" && !$package->{features}{$feature}); | |
300 | + return if($opts{dev}); | |
301 | + for(@{$package->{features}{$feature}}){ | |
302 | + if($package->{features}{$_}){ | |
303 | + %deps = (%deps, "$_" => undef); | |
304 | + }else{ | |
305 | + if($_ =~ m{^([^/]+)/(.*)}){ | |
306 | + my $pac = $1; | |
307 | + my $feat = $2; | |
308 | + ($pac) = grep{ | |
309 | + ($_->{rename} // $_->{name}) eq $pac | |
310 | + && ($_->{kind}//"") ne "dev" | |
311 | + }(@{$package->{dependencies}}); | |
312 | + %deps = (%deps, "$pac->{name}/$feat" => $pac->{req}) if($pac); | |
313 | + }else{ | |
314 | + my $pac = $_; | |
315 | + %deps = (%deps, expand_dep(grep{ | |
316 | + ($_->{rename} // $_->{name}) eq $pac | |
317 | + && ($_->{kind}//"") ne "dev" | |
318 | + }(@{$package->{dependencies}}))); | |
319 | + } | |
320 | + } | |
321 | + } | |
322 | + %deps; | |
323 | +} | |
324 | + | |
325 | +sub is_feature_provided{ | |
326 | + my $package = shift; | |
327 | + my $feature = shift; | |
328 | + my $with = shift; | |
329 | + return 1 if(grep{$_ eq $feature}(@$with)); | |
330 | + my %deps = get_feature_deps($package, $feature); | |
331 | + while(my ($name, $ver) = each(%deps)){ | |
332 | + return 0 if(defined($ver)); | |
333 | + next if(grep{$_ eq $name}(@$with)); | |
334 | + if(is_feature_provided($package, $name, $with)){ | |
335 | + push(@$with, $name); | |
336 | + }else{ | |
337 | + return 0; | |
338 | + } | |
339 | + } | |
340 | + 1; | |
341 | +} | |
342 | + | |
343 | +sub get_features_provides_all{ | |
344 | + my $package = shift; | |
345 | + my @with_in = map{if(defined($_)){$_}else{()}}(@_); | |
346 | + my @with = @with_in; | |
347 | + map{ | |
348 | + my $n = $_; | |
349 | + if(!is_feature_provided($package, $n, \@with) || grep{$_ eq $n}(@with)){ | |
350 | + (); | |
351 | + }else{ | |
352 | + $n; | |
353 | + } | |
354 | + }(list_features($package)); | |
355 | +} | |
356 | + | |
357 | +sub get_features_provides{ | |
358 | + my $package = shift; | |
359 | + if(!@_ || (@_==1 && !defined($_[0]))){ | |
360 | + return get_features_provides_all($package); | |
361 | + } | |
362 | + my %not = map{$_, 1}(get_features_provides_all($package)); | |
363 | + map{if($not{$_}){()}else{$_}}(get_features_provides_all($package, @_)); | |
364 | +} | |
365 | + | |
366 | +sub gen_package_name{ | |
367 | + my $name = shift; | |
368 | + my $apiver = shift; | |
369 | + my $feature = shift; | |
370 | + | |
371 | + $name .= "-$apiver" if(defined($apiver)); | |
372 | + $name .= "+$feature" if(defined($feature)); | |
373 | + "librust-$name-dev"; | |
374 | +} | |
375 | + | |
376 | +sub gen_package_depend{ | |
377 | + my $oname = lc(shift); | |
378 | + my $name = $oname; | |
379 | + my $ver = shift; | |
380 | + my $feature; | |
381 | + | |
382 | + $name =~ s/_/-/g; | |
383 | + if($name =~ m{^([^/]+)/(.+)$}){ | |
384 | + $name = $1; | |
385 | + $feature = $2; | |
386 | + } | |
387 | + | |
388 | + if($ver =~ m/,/){ | |
389 | + map{gen_package_depend($oname, $_)}(split(/,/, $ver)); | |
390 | + }elsif($ver =~ m/^\s*\*\s*$/){ | |
391 | + gen_package_name($name, undef, $feature); | |
392 | + }elsif($ver =~ m/^\s*\^?\s*([0-9.]+)\s*$/){ | |
393 | + my $reqmin = $1; | |
394 | + my $apiv = $1; | |
395 | + $apiv =~ s/([1-9][0-9]*).*/$1/; | |
396 | + gen_package_name($name, $apiv, $feature) . " (>= $reqmin)"; | |
397 | + }elsif($ver =~ m/^\s*~\s*([0-9.]+)\s*$/){ | |
398 | + my $reqmin = $1; | |
399 | + my $apiv = $1; | |
400 | + $apiv =~ s/[0-9]+\.[0-9]+\K\..*//; | |
401 | + gen_package_name($name, $apiv, $feature) . " (>= $reqmin)"; | |
402 | + }elsif($ver =~ m/^\s*([0-9.]+)\.\*\s*$/){ | |
403 | + gen_package_name($name, $1, $feature); | |
404 | + }elsif($ver =~ m/^\s*(>=|>|<|<=|=)\s*([0-9.]+)\s*$/){ | |
405 | + my $op = $1; | |
406 | + my $v = $2; | |
407 | + if($op eq "="){ | |
408 | + map{gen_package_depend($oname, $_)}(">= $v", "<= $v"); | |
409 | + }elsif($op eq ">="){ | |
410 | + gen_package_name($name, undef, $feature) . " (>= $v)"; | |
411 | + }elsif($op eq ">"){ | |
412 | + gen_package_name($name, undef, $feature) . " (>= $v.0)"; | |
413 | + }elsif($op eq "<"){ | |
414 | + gen_package_name($name, undef, $feature) . " (<< $v)"; | |
415 | + }elsif($op eq "<="){ | |
416 | + gen_package_name($name, undef, $feature) . " (<< $v.0)"; | |
417 | + }else{ | |
418 | + die; | |
419 | + } | |
420 | + }else{ | |
421 | + die "unknown version restriction"; | |
422 | + } | |
423 | +} | |
424 | + | |
425 | +sub list_api_vars{ | |
426 | + my $package = shift; | |
427 | + my ($v, @le) = split(/\./, $package->{version}); | |
428 | + my @ret = ($v); | |
429 | + for(@le){ | |
430 | + push(@ret, ($v .= ".$_")); | |
431 | + } | |
432 | + @ret; | |
433 | +} | |
434 | + | |
435 | +sub convert_dep{ | |
436 | + my $package = shift; | |
437 | + my %deps = @_; | |
438 | + my @ret; | |
439 | + while(my ($k, $v) = each(%deps)){ | |
440 | + if(!defined($v)){ # feature | |
441 | + my $dep = gen_package_name($package->{name}, undef, $k); | |
442 | + $dep .= " (= $opts{pkg_version})" if($opts{pkg_version}); | |
443 | + push(@ret, $dep); | |
444 | + }else{ | |
445 | + push(@ret, gen_package_depend($k, $v)); | |
446 | + } | |
447 | + } | |
448 | + @ret; | |
449 | +} | |
450 | + | |
451 | +sub convert_provide{ | |
452 | + my $package = shift; | |
453 | + my @vars = list_api_vars($package); | |
454 | + map{ | |
455 | + my $f = $_; | |
456 | + map{ | |
457 | + gen_package_name($package->{name}, $_, $f) | |
458 | + . ($opts{pkg_version} ? " (= $opts{pkg_version})" : ""); | |
459 | + }(undef, @vars); | |
460 | + }(@_); | |
461 | +} | |
462 | + | |
463 | +my ($opts, @comm) = getopt(@ARGV); | |
464 | +%opts = %$opts; | |
465 | + | |
466 | +my $meta = get_metadata($opts{manifest_path}); | |
467 | + | |
468 | +die "give operation" if(!@comm); | |
469 | + | |
470 | +if($comm[0] eq "crates"){ | |
471 | + print(join("\n", list_packages($meta), "")); | |
472 | + exit; | |
473 | +}elsif($comm[0] eq "deb-control-template"){ | |
474 | + for(list_packages($meta)){ | |
475 | + my $crate = get_package($meta, $_); | |
476 | + my $name = $crate->{name}; $name =~ s/_/-/g; | |
477 | + my $desc = $crate->{description} // "DESCRIPTION"; | |
478 | + $desc =~ s/^/ /m; | |
479 | + print << "EOT"; | |
480 | + | |
481 | +Package: librust-$name-dev | |
482 | +Architecture: any | |
483 | +Multi-Arch: same | |
484 | +Depends: \${cargo:dep}, \${misc:Depends} | |
485 | +Recommends: \${cargo:rec} | |
486 | +Provides: \${cargo:prov} | |
487 | +Description: rust library crate $name | |
488 | +$desc | |
489 | +EOT | |
490 | + | |
491 | + for my $feature(sort(list_features_pac($crate))){ | |
492 | + print << "EOT"; | |
493 | + | |
494 | +Package: librust-$name+$feature-dev | |
495 | +Architecture: any | |
496 | +Multi-Arch: same | |
497 | +Depends: librust-$name-dev (= \${cargo:ver}), \${cargo:dep}, \${misc:Depends} | |
498 | +Provides: \${cargo:prov} | |
499 | +Description: $feature feature of rust library crate $name | |
500 | +$desc | |
501 | +EOT | |
502 | + } | |
503 | + } | |
504 | + exit; | |
505 | +} | |
506 | + | |
507 | +my $crate = $comm[1]; | |
508 | +die "give crate name" if(!$crate); | |
509 | +$crate = get_package($meta, $crate); | |
510 | +my $feature = $comm[2]; | |
511 | +if($comm[0] eq "version"){ | |
512 | + print("$crate->{version}\n"); | |
513 | +}elsif($comm[0] eq "manifest-path"){ | |
514 | + print("$crate->{manifest_path}\n"); | |
515 | +}elsif($comm[0] eq "features"){ | |
516 | + print(join("\n", sort(list_features($crate)), "")); | |
517 | +}elsif($comm[0] eq "features-pac"){ | |
518 | + print(join("\n", sort(list_features_pac($crate)), "")); | |
519 | +}elsif($comm[0] eq "provides"){ | |
520 | + print(join("\n", sort(get_features_provides($crate, $feature)),"")); | |
521 | +}elsif($comm[0] eq "depends"){ | |
522 | + my %deps = get_deps($crate, $feature); | |
523 | + print(join("\n", map({"$_ = $deps{$_}"} sort(keys(%deps))),"")); | |
524 | +}elsif($comm[0] eq "deb-provides"){ | |
525 | + my @bs; | |
526 | + @bs = map{ | |
527 | + gen_package_name($crate->{name}, $_, $feature) | |
528 | + . ($opts{pkg_version} ? " (= $opts{pkg_version})" : ""); | |
529 | + }(list_api_vars($crate)); | |
530 | + my @fs = sort(get_features_provides($crate, $feature)); | |
531 | + print(join(", ", @bs, convert_provide($crate, @fs))."\n"); | |
532 | +}elsif($comm[0] eq "deb-depends"){ | |
533 | + my %deps = get_deps($crate, $feature); | |
534 | + print(join(", ", sort(convert_dep($crate, %deps)))."\n"); | |
535 | +}else{ | |
536 | + die "unknown operation"; | |
537 | +} |
@@ -0,0 +1,3 @@ | ||
1 | +[DEFAULT] | |
2 | +pristine-tar = true | |
3 | +upstream-tag = upstream/%(version)s |
@@ -0,0 +1,93 @@ | ||
1 | +#!/usr/bin/make -f | |
2 | +include /usr/share/dpkg/pkg-info.mk | |
3 | +include /usr/share/dpkg/architecture.mk | |
4 | +include /usr/share/dpkg/buildflags.mk | |
5 | +include /usr/share/rustc/architecture.mk | |
6 | + | |
7 | +export CFLAGS CXXFLAGS CPPFLAGS LDFLAGS | |
8 | +export DEB_HOST_RUST_TYPE DEB_HOST_GNU_TYPE | |
9 | +export CARGO_HOME := $(shell pwd)/debian/cargo_home | |
10 | +CARGO_REGISTRY := $(shell pwd)/debian/cargo_registry | |
11 | + | |
12 | +DEB_CARGO=/usr/share/cargo/bin/cargo | |
13 | +DEB_VERSION_EPOCH=$(shell echo '$(DEB_VERSION)' | grep : | sed 's/:.*//' | sed 's/$$/:/') | |
14 | +DEB_VERSION_DEB=$(shell echo '$(DEB_VERSION)' | grep -- - | sed 's/.*-//' | sed 's/^/-/') | |
15 | + | |
16 | +%: | |
17 | + dh $@ | |
18 | + | |
19 | +execute_after_dh_clean: | |
20 | + rm -rf Cargo.lock debian/*.substvars debian/target \ | |
21 | + debian/cargo_registry debian/cargo_home | |
22 | + | |
23 | +override_dh_autoreconf: | |
24 | +override_dh_auto_test: | |
25 | +override_dh_auto_configure: | |
26 | + | |
27 | + | |
28 | +override_dh_auto_build: | |
29 | + set -e; \ | |
30 | + ./debian/deb-crateinfo.pl crates | while read name; do \ | |
31 | + manup="$$(./debian/deb-crateinfo.pl manifest-path $$name)"; \ | |
32 | + cd $${manup%/*}; \ | |
33 | + env DEB_CARGO_CRATE="$$name" $(DEB_CARGO) prepare-debian \ | |
34 | + '$(CARGO_REGISTRY)' --link-from-system; \ | |
35 | + cd -; \ | |
36 | + for crate in debian/target/package/*.crate; do \ | |
37 | + [ ! -f "$$crate" ] && continue; \ | |
38 | + dname=$$(tar -ztf "$$crate"|head -n1|sed 's"/.*""'); \ | |
39 | + tar -C '$(CARGO_REGISTRY)' -zxf "$$crate"; \ | |
40 | + echo '{"package":"","files":{}}' > \ | |
41 | + $(CARGO_REGISTRY)/"$$dname"/.cargo-checksum.json; \ | |
42 | + done; \ | |
43 | + $(DEB_CARGO) package --allow-dirty --offline \ | |
44 | + --target-dir debian/target \ | |
45 | + --manifest-path "$$(./debian/deb-crateinfo.pl manifest-path $$name)"; \ | |
46 | + done | |
47 | + | |
48 | +override_dh_auto_install: | |
49 | + set -e; \ | |
50 | + ./debian/deb-crateinfo.pl crates | while read name; do \ | |
51 | + version="$$(./debian/deb-crateinfo.pl version "$$name")"; \ | |
52 | + pacn="librust-$$(echo "$$name" | sed 's/_/-/g')-dev"; \ | |
53 | + regpath="debian/$$pacn/usr/share/cargo/registry"; \ | |
54 | + mkdir -p "$$regpath"; \ | |
55 | + tar -zxf debian/target/package/"$$name-$$version".crate \ | |
56 | + -C "$$regpath" \ | |
57 | + --exclude .gitignore \ | |
58 | + --exclude debian; \ | |
59 | + echo '{"package":"","files":{}}' > \ | |
60 | + "$$regpath"/"$$name-$$version"/.cargo-checksum.json; \ | |
61 | + done | |
62 | + | |
63 | +override_dh_gencontrol: | |
64 | + set -e; \ | |
65 | + ./debian/deb-crateinfo.pl crates | while read name; do\ | |
66 | + ver="$(DEB_VERSION_EPOCH)$$(./debian/deb-crateinfo.pl version "$$name")$(DEB_VERSION_DEB)";\ | |
67 | + sv="debian/librust-$$(echo "$$name" | sed 's/_/-/g')-dev.substvars";\ | |
68 | + echo -n "cargo:dep=" >> "$$sv";\ | |
69 | + ./debian/deb-crateinfo.pl deb-depends "$$name" >> "$$sv";\ | |
70 | + echo -n "cargo:rec=" >> "$$sv";\ | |
71 | + ./debian/deb-crateinfo.pl deb-depends --recommends "$$name" >> "$$sv";\ | |
72 | + echo -n "cargo:prov=" >> "$$sv";\ | |
73 | + ./debian/deb-crateinfo.pl deb-provides -v"$$ver" "$$name" >> "$$sv";\ | |
74 | + ./debian/deb-crateinfo.pl features-pac "$$name" | \ | |
75 | + while read ft; do\ | |
76 | + sv="debian/librust-$$(echo "$$name" | sed 's/_/-/g')+$$(echo "$$ft" | sed 's/_/-/g')-dev.substvars";\ | |
77 | + echo -n "cargo:dep=" >> "$$sv";\ | |
78 | + ./debian/deb-crateinfo.pl deb-depends "$$name" "$$ft" >> "$$sv";\ | |
79 | + echo -n "cargo:prov=" >> "$$sv";\ | |
80 | + ./debian/deb-crateinfo.pl deb-provides -v"$$ver" "$$name" "$$ft" >> "$$sv";\ | |
81 | + done;\ | |
82 | + done; \ | |
83 | + ./debian/deb-crateinfo.pl crates | while read name; do\ | |
84 | + namep="$$(echo "$$name" | sed 's/_/-/g')";\ | |
85 | + ver="$(DEB_VERSION_EPOCH)$$(./debian/deb-crateinfo.pl version "$$name")$(DEB_VERSION_DEB)";\ | |
86 | + dh_gencontrol -plibrust-$$namep-dev $$( \ | |
87 | + ./debian/deb-crateinfo.pl features-pac "$$name" | sed \ | |
88 | + -e 's/_/-/g' \ | |
89 | + -e 's/^/-plibrust-'"$$name"'+/' \ | |
90 | + -e 's/$$/-dev/' \ | |
91 | + ) -- -v"$$ver" -V"cargo:ver=$$ver";\ | |
92 | + done | |
93 | + |
@@ -0,0 +1 @@ | ||
1 | +3.0 (quilt) |