blob: ac2be6a9289baabe1e6b34706b20e26e0b1b0003 [file] [log] [blame]
tokens: fix parallel builds
Currently, tokens.h and token_vars.h are each generated by a call to
mktokens, which means mktokens is called twice.
But mktokens generates both in a single run.
This means that, with a fast-enough machine, the call to mktokens that
generates tokens.h may finish before the call that generates
token_vars.h. Then tokens.h is transiently incomplete (it can even be
empty). By the time it is fully generated in the second run, a compile
job that ends up using token.h may have already started, and the source
file would include an in complete token.h and would be missing some
token definitions.
We fix that by making token.h a dependency of token_vars.h, with a
dummy recipe (to force it not being PHONY). The actual recipe is for
token_vars.h
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
diff -durN dash-0.5.8.orig/src/Makefile.am dash-0.5.8/src/Makefile.am
--- dash-0.5.8.orig/src/Makefile.am 2014-09-28 10:19:32.000000000 +0200
+++ dash-0.5.8/src/Makefile.am 2017-03-07 09:53:28.579811603 +0100
@@ -45,7 +45,14 @@
mktokens mkbuiltins builtins.def.in mkinit.c \
mknodes.c nodetypes nodes.c.pat mksyntax.c mksignames.c
-token.h token_vars.h: mktokens
+# Both token.h and token_vars.h are generated by a single call
+# to mktokens. However, token.h is the only file that is used
+# as a dependency, so we must ensure token_vars.h is generated
+# first.
+token.h: token_vars.h
+ @:
+
+token_vars.h: mktokens
sh $^
builtins.def: builtins.def.in $(top_builddir)/config.h