]> git.lizzy.rs Git - plan9front.git/commitdiff
syscall: fix build problem caused by stale tab.h
authorkvik <kvik@a-b.xyz>
Wed, 23 Sep 2020 15:17:52 +0000 (17:17 +0200)
committerkvik <kvik@a-b.xyz>
Wed, 23 Sep 2020 15:17:52 +0000 (17:17 +0200)
Recently the script which generates tab.h and the code including it got
incompatibly changed.  People reported problems involving syntax errors
when trying to rebuild the system following a sysupdate.

The problem was with the script being embedded within a mkfile rule,
meaning that mk didn't notice it changing and therefore didn't rebuild
the target file.  For people who were rebuilding the system this meant
that the old tab.h got included, causing syntax errors.

This patch moves the codegen script into a file and tells mk about this
new dependency, so that tab.h will get rebuilt for everyone.  I also
took an opportunity to rewrite the script, hopefuly making it easier to
follow.

sys/src/cmd/syscall/mkfile
sys/src/cmd/syscall/mktab.awk [new file with mode: 0755]

index 18985a0ecf93bfe737afdd96183d337dc882a4ef..73af87d0b07dc0235a7baf803cc5b24b8c095092 100644 (file)
@@ -16,25 +16,8 @@ UPDATE=\
 
 SYSCALL=/sys/src/libc/9syscall/sys.h
 
-tab.h: $SYSCALL
-       awk '
-       BEGIN{ print "enum{" }
-       { printf "%s, ", $2 }
-       END{
-               print "READ, WRITE, NTAB"
-               print "};"
-       }' <$SYSCALL >$target 
-       awk '
-       BEGIN{ print "struct Call tab[] = {" }
-       { printf "[%s] \"%s\", (int(*)(...))%s,\n",
-               $2, tolower($2), tolower($2)
-       }
-       END{
-               print "[READ] \"read\", (int(*)(...))read,"
-               print "[WRITE] \"write\", (int(*)(...))write,"
-               print "[NTAB] nil, 0"
-               print "};"
-       }' <$SYSCALL >>$target
+tab.h: $SYSCALL mktab.awk
+       mktab.awk $SYSCALL >$target
 
 clean:V:
        rm -f *.[$OS] [$OS].out $TARG $HFILES
diff --git a/sys/src/cmd/syscall/mktab.awk b/sys/src/cmd/syscall/mktab.awk
new file mode 100755 (executable)
index 0000000..ab87080
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/awk -f
+{      e = e $2 ", "
+       s = s sprintf("[%s] \"%s\", (int(*)(...))%s,\n",
+               $2, tolower($2), tolower($2))
+}
+END{
+       e = e "READ, WRITE, NTAB"
+       s = s "[READ] \"read\", (int(*)(...))read,\n"
+       s = s "[WRITE] \"write\", (int(*)(...))write,\n"
+       s = s "[NTAB] nil, 0\n"
+       
+       print "enum{", e, "};"
+       print "struct Call tab[] = {\n", s, "};"
+}