openbsd-pkgspec.awk (789B)
1 # Copyright 2022 Jacob R. Edwards 2 # 3 # These functions get various parts of an OpenBSD package spec (as 4 # defined in packages-specs(7)) 5 6 function pkgflavor(pkg) 7 { 8 if (match(pkg, "-[0-9]?[^-]*-")) 9 return substr(pkg, RSTART + RLENGTH) 10 } 11 12 function pkgversion(pkg) 13 { 14 if (match(pkg, "-[0-9][^-]*")) 15 return substr(pkg, RSTART + 1, RLENGTH - 1) 16 } 17 18 function pkgstem(pkg) 19 { 20 return substr(pkg, 1, 21 match(pkg, "-([0-9]|-)") ? (RSTART - 1) : length(pkg)) 22 } 23 24 25 # Generate a regex for matching complete package specs from incomplete 26 # package specs. (Requires unreg.awk.) 27 function pkgregex(pkg, _, s, v, f) 28 { 29 if (!(s = pkgstem(pkg))) 30 return; 31 v = pkgversion(pkg); 32 f = pkgflavor(pkg); 33 return sprintf("^%s-%s%s$", unreg(s), (v ? unreg(v) : "[0-9][^-]+"), 34 (f ? ("-" unreg(f)) : "")); 35 }