1
2BEGIN {
3	crates_len = 0
4	crate_name = "<unknown>"
5	crate_version = "<unknown>"
6	crate_source = "<unknown>"
7}
8
9/^name = ".*"/ {
10	crate_name = $3
11	gsub(/"/, "", crate_name)
12}
13
14/^version = ".*"/ {
15	crate_version = $3
16	gsub(/"/, "", crate_version)
17}
18
19/^source = ".*"/ {
20	crate_source = $3
21	gsub(/"/, "", crate_source)
22}
23
24/^\[\[package\]\]$/ {
25	add_crate()
26}
27
28function add_crate() {
29	if (crate_source ~ /^git\+/) {
30		gsub(/#/, "\\#", crate_source)
31		if (git_crates[crate_source]) {
32			git_crates[crate_source] = git_crates[crate_source] "," crate_name
33		} else {
34			git_crates[crate_source] = crate_name
35		}
36	} else if (crate_source == "registry+https://github.com/rust-lang/crates.io-index") {
37		crates[crates_len++] = sprintf("%s-%s", crate_name, crate_version)
38	}
39	crate_name = "<unknown>"
40	crate_version = "<unknown>"
41	crate_source = "<unknown>"
42}
43
44function print_array(start, arr, arrlen) {
45	end = " \\\n"
46	for (i = 0; i < arrlen; i++) {
47		if (i == arrlen - 1) {
48			end = "\n"
49		}
50		printf "%s\t%s%s", start, arr[i], end
51		start = "\t"
52	}
53}
54
55END {
56	add_crate()
57	for (crate_source in git_crates) {
58		crates[crates_len++] = git_crates[crate_source] "@" crate_source
59	}
60	print_array("CARGO_CRATES=", crates, crates_len)
61}
62