diff --git a/Mk/Scripts/cargo-crates.awk b/Mk/Scripts/cargo-crates.awk index 7a17e746a945..56b3beafac11 100644 --- a/Mk/Scripts/cargo-crates.awk +++ b/Mk/Scripts/cargo-crates.awk @@ -1,122 +1,122 @@ # MAINTAINER: rust@FreeBSD.org BEGIN { gh_tuple_len = 0 gl_tuple_len = 0 crates_len = 0 package_name = "" crate_name = "" crate_version = "" crate_source = "" gitlab_sites["https://gitlab.com"] = 1 gitlab_sites["https://gitlab.freedesktop.org"] = 1 gitlab_sites["https://gitlab.gnome.org"] = 1 gitlab_sites["https://gitlab.redox-os.org"] = 1 } /^name = ".*"/ { crate_name = $3 gsub(/"/, "", crate_name) package_name = $3 gsub("[^a-zA-Z_]", "", package_name) } /^version = ".*"/ { crate_version = $3 gsub(/"/, "", crate_version) } /^source = ".*"/ { crate_source = $3 gsub(/"/, "", crate_source) } /^\[\[package\]\]$/ { add_crate() } function add_crate() { if (crate_source == "registry+https://github.com/rust-lang/crates.io-index") { crates[crates_len++] = sprintf("%s-%s", crate_name, crate_version) } crate_name = "" crate_version = "" crate_source = "" } !gh_tuple_seen[$0] && /^source = "git\+(https|http|git):\/\/.*\/.*#.*"/ { gh_tuple_seen[$0] = 1 - split_url(substr($3, 1 + length("\"git+"), length($3) - 1 - length("\"git+"))) + split_url(url, substr($3, 1 + length("\"git+"), length($3) - 1 - length("\"git+"))) split(url["path"], path, "/") account = path[2] project = path[3] gsub("\.git$", "", project) if (match(url["query"], "^tag=")) { split(url["query"], tag_, "=") tag = tag_[2] } else { tag = url["fragment"] } added = 0 if (url["host"] == "github.com") { added = 1 gh_tuple[gh_tuple_len++] = sprintf(\ "%s:%s:%s:%s", account, project, tag, package_name) } else { repo_site = sprintf("%s://%s", url["scheme"], url["host"]) for (site in gitlab_sites) { if (repo_site != site) { continue } if (ENVIRON["GL_SITE"] == site) { gl_tuple[gl_tuple_len++] = sprintf(\ "%s:%s:%s:%s", account, project, tag, package_name) } else { gl_tuple[gl_tuple_len++] = sprintf(\ "%s:%s:%s:%s:%s", site, account, project, tag, package_name) } added = 1 break } } if (!added) { printf "Warning: Ignoring git source on line %d: %s\n", NR, $3 > "/dev/stderr" } } function print_array(start, arr, arrlen) { end = " \\\n" for (i = 0; i < arrlen; i++) { if (i == arrlen - 1) { end = "\n" } printf "%s\t%s%s", start, arr[i], end start = "\t" } } END { add_crate() if (gh_tuple_len > 0 && ENVIRON["USE_GITHUB"] == "") { printf "USE_GITHUB=\tnodefault\n" } print_array("GH_TUPLE=", gh_tuple, gh_tuple_len) if (gl_tuple_len > 0 && ENVIRON["USE_GITLAB"] == "") { printf "USE_GITLAB=\tnodefault\n" } print_array("GL_TUPLE=", gl_tuple, gl_tuple_len) print_array("CARGO_CRATES=", crates, crates_len) if (gh_tuple_len > 0) { printf "CARGO_USE_GITHUB=\tyes\n" } if (gl_tuple_len > 0) { printf "CARGO_USE_GITLAB=\tyes\n" } } diff --git a/Mk/Scripts/split-url.awk b/Mk/Scripts/split-url.awk index 8efc1b9c002a..d9adad8e7bcb 100644 --- a/Mk/Scripts/split-url.awk +++ b/Mk/Scripts/split-url.awk @@ -1,70 +1,70 @@ -function join_url( s, query_keys, i) { +function join_url(url, s, query_keys, i) { s = url["scheme"] "://" if (url["user"]) { s = s url["user"] if (url["password"]) { s = s ":" url["password"] } s = s "@" } s = s url["host"] if (url["port"]) { s = s ":" url["port"] } if (url["path"]) { s = s url["path"] } if (url["query"]) { split(url["query"], query_keys) s = s "?" for (i = 1; i <= length(query_keys); i++) { s = s query_keys[i] "=" url["query", query_keys[i]] if (i != length(query_keys)) { s = s ";" } } } if (url["fragment"]) { s = s "#" url["fragment"] } return s } -function split_url(s, url_scheme, url_fragment, url_query, url_query_parts, i, url_query_part, url_authority, url_auth, url_user, url_host) { +function split_url(url, s, url_scheme, url_fragment, url_query, url_query_parts, i, url_query_part, url_authority, url_auth, url_user, url_host) { delete url # scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment] split(s, url_scheme, "://") url["scheme"] = url_scheme[1] split(url_scheme[2], url_fragment, "#") url["fragment"] = url_fragment[2] split(url_fragment[1], url_query, "?") split(url_query[2], url_query_parts, "&") # url["query"] list of query keys (space separated) # url["query", key] value for (i = 1; i <= length(url_query_parts); i++) { split(url_query_parts[i], url_query_part, "=") url["query"] = url["query"] " " url_query_part[1] url["query", url_query_part[1]] = url_query_part[2] } split(url_query[1], url_authority, "/") url["path"] = substr(url_query[1], length(url_authority[1]) + 1) split(url_authority[1], url_auth, "@") if (length(url_auth) == 2) { split(url_auth[1], url_user, ":") url["user"] = url_user[1] url["password"] = url_user[2] split(url_auth[2], url_host, ":") } else { url["user"] = "" url["password"] = "" split(url_auth[1], url_host, ":") } url["host"] = url_host[1] url["port"] = url_host[2] }