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