ww: select sources by Go platform suffixes
This commit is contained in:
@@ -582,9 +582,108 @@ fn pkgisreg(path: str) bool = {
|
||||
};
|
||||
};
|
||||
|
||||
fn pkgnamerangeis(name: str, start: i32, end: i32, word: str) bool = {
|
||||
if (end < start || end - start != word.len) { return false; };
|
||||
let i: i32 = 0;
|
||||
for (i < end - start) {
|
||||
if (name[start + i] != word[i]) { return false; };
|
||||
i += 1;
|
||||
};
|
||||
return true;
|
||||
};
|
||||
|
||||
fn pkgknownos(name: str, start: i32, end: i32) bool = {
|
||||
return pkgnamerangeis(name, start, end, "aix")
|
||||
|| pkgnamerangeis(name, start, end, "android")
|
||||
|| pkgnamerangeis(name, start, end, "darwin")
|
||||
|| pkgnamerangeis(name, start, end, "dragonfly")
|
||||
|| pkgnamerangeis(name, start, end, "freebsd")
|
||||
|| pkgnamerangeis(name, start, end, "hurd")
|
||||
|| pkgnamerangeis(name, start, end, "illumos")
|
||||
|| pkgnamerangeis(name, start, end, "ios")
|
||||
|| pkgnamerangeis(name, start, end, "js")
|
||||
|| pkgnamerangeis(name, start, end, "linux")
|
||||
|| pkgnamerangeis(name, start, end, "nacl")
|
||||
|| pkgnamerangeis(name, start, end, "netbsd")
|
||||
|| pkgnamerangeis(name, start, end, "openbsd")
|
||||
|| pkgnamerangeis(name, start, end, "plan9")
|
||||
|| pkgnamerangeis(name, start, end, "solaris")
|
||||
|| pkgnamerangeis(name, start, end, "wasip1")
|
||||
|| pkgnamerangeis(name, start, end, "windows")
|
||||
|| pkgnamerangeis(name, start, end, "zos");
|
||||
};
|
||||
|
||||
fn pkgknownarch(name: str, start: i32, end: i32) bool = {
|
||||
return pkgnamerangeis(name, start, end, "386")
|
||||
|| pkgnamerangeis(name, start, end, "amd64")
|
||||
|| pkgnamerangeis(name, start, end, "amd64p32")
|
||||
|| pkgnamerangeis(name, start, end, "arm")
|
||||
|| pkgnamerangeis(name, start, end, "armbe")
|
||||
|| pkgnamerangeis(name, start, end, "arm64")
|
||||
|| pkgnamerangeis(name, start, end, "arm64be")
|
||||
|| pkgnamerangeis(name, start, end, "loong64")
|
||||
|| pkgnamerangeis(name, start, end, "mips")
|
||||
|| pkgnamerangeis(name, start, end, "mipsle")
|
||||
|| pkgnamerangeis(name, start, end, "mips64")
|
||||
|| pkgnamerangeis(name, start, end, "mips64le")
|
||||
|| pkgnamerangeis(name, start, end, "mips64p32")
|
||||
|| pkgnamerangeis(name, start, end, "mips64p32le")
|
||||
|| pkgnamerangeis(name, start, end, "ppc")
|
||||
|| pkgnamerangeis(name, start, end, "ppc64")
|
||||
|| pkgnamerangeis(name, start, end, "ppc64le")
|
||||
|| pkgnamerangeis(name, start, end, "riscv")
|
||||
|| pkgnamerangeis(name, start, end, "riscv64")
|
||||
|| pkgnamerangeis(name, start, end, "s390")
|
||||
|| pkgnamerangeis(name, start, end, "s390x")
|
||||
|| pkgnamerangeis(name, start, end, "sparc")
|
||||
|| pkgnamerangeis(name, start, end, "sparc64")
|
||||
|| pkgnamerangeis(name, start, end, "wasm");
|
||||
};
|
||||
|
||||
fn pkgtargettag(name: str, start: i32, end: i32) bool = {
|
||||
return pkgnamerangeis(name, start, end, "linux")
|
||||
|| pkgnamerangeis(name, start, end, "amd64");
|
||||
};
|
||||
|
||||
// Recursive discovery must decide platform eligibility before a source can
|
||||
// enter any production or test package graph.
|
||||
fn pkgsourceplatform(name: str) bool = {
|
||||
let stem: i32 = 0;
|
||||
let hasunderscore: bool = false;
|
||||
for (stem < name.len && name[stem] != '.') {
|
||||
if (name[stem] == '_') { hasunderscore = true; };
|
||||
stem += 1;
|
||||
};
|
||||
if (!hasunderscore) { return true; };
|
||||
|
||||
let end: i32 = stem;
|
||||
let last: i32 = end;
|
||||
for (last > 0 && name[last - 1] != '_') { last -= 1; };
|
||||
if (pkgnamerangeis(name, last, end, "test")) {
|
||||
if (last == 0) { return true; };
|
||||
end = last - 1;
|
||||
last = end;
|
||||
for (last > 0 && name[last - 1] != '_') { last -= 1; };
|
||||
};
|
||||
if (last == 0) { return true; };
|
||||
|
||||
let prevend: i32 = last - 1;
|
||||
let prev: i32 = prevend;
|
||||
for (prev > 0 && name[prev - 1] != '_') { prev -= 1; };
|
||||
if (prev < prevend && pkgknownos(name, prev, prevend)
|
||||
&& pkgknownarch(name, last, end)) {
|
||||
return pkgtargettag(name, last, end)
|
||||
&& pkgtargettag(name, prev, prevend);
|
||||
};
|
||||
if (pkgknownos(name, last, end) || pkgknownarch(name, last, end)) {
|
||||
return pkgtargettag(name, last, end);
|
||||
};
|
||||
return true;
|
||||
};
|
||||
|
||||
fn pkgkeepfile(name: str) bool = {
|
||||
if (name.len <= 3 || name[0] == '.' || name[0] == '_') { return false; };
|
||||
return strings.hassuffix(name, ".ww");
|
||||
return strings.hassuffix(name, ".ww") && pkgsourceplatform(name);
|
||||
};
|
||||
|
||||
type pkgmatcher = struct {
|
||||
|
||||
Reference in New Issue
Block a user