summaryrefslogtreecommitdiffstats
path: root/bin/tweakmeta
diff options
context:
space:
mode:
Diffstat (limited to 'bin/tweakmeta')
-rwxr-xr-xbin/tweakmeta144
1 files changed, 71 insertions, 73 deletions
diff --git a/bin/tweakmeta b/bin/tweakmeta
index 8d86ad9..2900a94 100755
--- a/bin/tweakmeta
+++ b/bin/tweakmeta
@@ -1,9 +1,27 @@
-# pbjparse.awk
+#!/usr/bin/awk -f
##
-# Parse a .pbj data file and print a PKGMETA data file to stdout.
+# tweakmeta
+#
+# First read a PKGMETA file in the current directory, loading its values.
+# Next read a PKGTWEAK file from standard input.
+# The PKGTWEAK file tells us how to modify the PKGMETA data.
+# The modified PKGMETA is printed to standard output.
+#
# Justin Davis <jrcd83@gmail.com>
-BEGIN { PROG = "pbjparse" }
+BEGIN {
+ PROG = "tweakmeta"
+ if (system("test -r PKGMETA") != 0) {
+ print PROG ": PKGMETA file could not be read." | "cat 1>&2"
+ exit(errcode = 2)
+ }
+
+ FS = "\n"; RS = ""
+ while (getline<"PKGMETA" > 0)
+ for (i = 2; i <= NF; i++) pushval($1, $i)
+ close("PKGMETA")
+ FS = " "; RS = "\n"
+}
{ sub(/#.*/, "") }
@@ -12,115 +30,95 @@ $1 == "+" { pushval($2, joinfields(3)); next }
$1 == "-" { remval($2, $3); next }
$1 == "<" {
- i = findval($2, $3)
- stack[++stacklen] = pbvars[$2, i]
- remelem($2, i)
- next
+ i = findval($2, $3)
+ stack[++stacklen] = pbvars[$2, i]
+ remelem($2, i)
+ next
}
$1 == ">" {
- if (stacklen < 1)
- die("No values on the stack. Make sure you use '<' first.")
- pushval($2, stack[stacklen--])
- next
+ if (stacklen < 1)
+ die("No values on the stack. Make sure you use '<' first.")
+ pushval($2, stack[stacklen--])
+ next
}
$1 == "=" {
- if ($2 == "optdepends") die("cannot use '=' with optdepends.")
- remall($2)
- for (i=3; i<=NF; i++) pushval($2, $i)
- next
-}
-
-$1 == "!" {
- cmd = joinfields(2)
- while ((ret = cmd | getline) > 0) parsepbj()
- if (ret == -1) die("failed to run " cmd)
- close(cmd)
- next
+ if ($2 == "optdepends") die("cannot use '=' with optdepends.")
+ remall($2)
+ for (i=3; i<=NF; i++) pushval($2, $i)
+ next
}
-$1 == "|" { pbpipes[++pipecount] = joinfields(2); next }
-
# ignore lines of whitespace
$1 !~ /^[ \t]*$/ { die("invalid input: " $0) }
END {
- OFS = "\n"
- writemakepb()
-
- for (name in pbcount) {
- len = pbcount[name]
- if (len == 0) continue
-
- print name
- for (i=1; i<=len; i++) print pbvars[name, i]
- print ""
- }
-
- if (!seenpkgr) {
- pkger = ENVIRON["PACKAGER"]
- if (pkger == "") pkger = "Anonymous"
- print "packager\n" pkger
- }
+ if (errcode) exit(errcode)
+
+ OFS = "\n"
+
+ for (name in pbcount) {
+ len = pbcount[name]
+ if (len == 0) continue
+
+ print name
+ for (i=1; i<=len; i++) print pbvars[name, i]
+ print ""
+ }
+
+ if (!seenpkgr) {
+ pkger = ENVIRON["PACKAGER"]
+ if (pkger == "") pkger = "Anonymous"
+ print "packager", pkger, ""
+ }
}
function die (msg)
{
- printf "%s: error line %d: %s\n", PROG, FNR, msg | "cat 1>&2"
- exit 1
+ printf "%s: error line %d: %s\n", PROG, FNR, msg | "cat 1>&2"
+ exit(errcode = 1)
}
function joinfields (start, msg)
{
- msg = $(start++)
- while (start <= NF) msg = msg " " $(start++)
- return msg
+ msg = $(start++)
+ while (start <= NF) msg = msg " " $(start++)
+ return msg
}
function remall (field)
{
- pbcount[field] = 0
+ pbcount[field] = 0
}
function pushval (field, val)
{
- if (field == "packager") seenpkgr = 1
- pbvars[field, ++pbcount[field]] = val
+ if (field == "packager") seenpkgr = 1
+ pbvars[field, ++pbcount[field]] = val
}
function remval (field, prefix)
{
- remelem(field, findval(field, prefix))
+ remelem(field, findval(field, prefix))
}
function remelem (field, i, len)
{
- # TODO: error check if "i" is in bounds?
- len = pbcount[field]
- for (len = pbcount[field]; i < len; i++)
- pbvars[field, i] = pbvars[field, i+1]
- delete pbvars[field, i]
- pbcount[field]--
+ # TODO: error check if "i" is in bounds?
+ len = pbcount[field]
+ for (len = pbcount[field]; i < len; i++)
+ pbvars[field, i] = pbvars[field, i+1]
+ delete pbvars[field, i]
+ pbcount[field]--
}
function findval (field, prefix, i, len)
{
- len = pbcount[field]
- if (len == 0) die(field " is empty!")
+ len = pbcount[field]
+ if (len == 0) die(field " is empty!")
- for (i=1; i<=len; i++) if (pbvars[field, i] ~ "^" prefix) break
- if (i > len) die("could not find " prefix " in " field "'s values")
- return i
-}
-
-function writemakepb ()
-{
- tcmd = pbpipes[1]
- for (i = 2; i <= pipecount; i++) tcmd = tcmd " | \\\n " pbpipes[i]
- print "#!/bin/sh" > "makepb"
- print "PATH=" ENVIRON["PATH"] > "makepb"
- print "cat PKGMETA | " tcmd > "makepb"
- close("makepb")
- system("chmod +x makepb")
+ for (i=1; i<=len; i++) if (index(pbvars[field, i], prefix) == 0) break
+ if (i > len) die("could not find " prefix " in " field "'s values")
+ return i
}