summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorMichael Forney <mforney@mforney.org>2016-07-04 21:47:17 -0700
committerMichael Forney <mforney@mforney.org>2016-07-04 21:47:29 -0700
commit51e359b2f85ab367e7cab74066fe7f4e5ff1d4ac (patch)
tree9b3383f138a822e039c98dc922ed7c1bf06ac3a5 /core
parent26eb7fe8d8daa97430b7e5256878db47b25d2cd5 (diff)
tzdata: Fix gen.rc to not require contents of source files
This also fixes a symlink target calculation bug.
Diffstat (limited to 'core')
-rw-r--r--core/tz/gen.rc20
-rw-r--r--core/tz/tzdata.awk26
2 files changed, 29 insertions, 17 deletions
diff --git a/core/tz/gen.rc b/core/tz/gen.rc
index 6fb8af83..838de404 100644
--- a/core/tz/gen.rc
+++ b/core/tz/gen.rc
@@ -19,22 +19,8 @@ tzdata=(\
systemv\
factory\
)
-for(data in $tzdata) {
- zones=`{awk '/^Zone/ {print $2}' src/$data}
- if(! ~ $#zones 0) {
- outs='$outdir'/zoneinfo/$zones
- build $"outs zic '$srcdir'/$data
- for(zone in $zones) file share/zoneinfo/$zone '$outdir'/zoneinfo/$zone 644
- }
- links=`{awk '/^Link/ {print $2 " " $3}' src/$data}
- for(line in $links) {
- # TODO: Figure out how to do this better. Maybe just readlink
- # the symlinks constructed by zic?
- ifs=' ' {link=`{printf %s $line}}
- ifs='/' {parts=`{printf %s $link(1)}}
- target=`{awk 'BEGIN {for(i=1; i<'$#parts'; i++) printf "../"}'}^$link(1)
- sym share/zoneinfo/$link(2) $target
- }
-}
+build '$outdir'/tzdata.tree awk '$srcdir'/$tzdata '|' scripts/hash.rc '$dir/tzdata.awk' ; with\
+ expr '-f $dir/tzdata.awk out=$outdir/zoneinfo repo=$builddir/$repo.git'
+tree_inputs=($tree_inputs '$outdir'/tzdata.tree)
fetch git
diff --git a/core/tz/tzdata.awk b/core/tz/tzdata.awk
new file mode 100644
index 00000000..8bd70188
--- /dev/null
+++ b/core/tz/tzdata.awk
@@ -0,0 +1,26 @@
+# usage: awk -f tzdata.awk repo=out/root.git out=out/core/tz/zoneinfo [file...]
+
+function run(cmd) {
+ status = system(cmd)
+ if (status != 0)
+ exit status
+}
+
+BEGIN {
+ cmdfmt = "rc ./scripts/hash.rc %s %s share/zoneinfo/%s %s"
+}
+
+FNR == 1 {
+ run(sprintf("zic -d %s %s", out, FILENAME))
+}
+
+$1 == "Link" {
+ s = $3
+ gsub(/[^/]+/, "..", s)
+ s = substr(s, 1, length(s) - 2) $2
+ run(sprintf(cmdfmt, repo, 120000, $3, s))
+}
+
+$1 == "Zone" {
+ run(sprintf(cmdfmt, repo, 100644, $2, out "/" $2))
+}