about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2018-08-17T10·59+0200
committerEelco Dolstra <edolstra@gmail.com>2018-08-17T10·59+0200
commitd277442df53a01343ba7c1df0bbd2a294058dcba (patch)
tree0c4df7b947be75b89d4a9fdc4f756d67b318b471
parent19265ed26c5bd25b299896ed851bda6c444cf1a8 (diff)
Fix parser/lexer generation with parallel make
Fun fact: rules with multiple targets don't work properly with 'make
-j'. For example, a rule like

  a b: c
    touch a b

is equivalent to

  a: c
    touch a b

  b: c
    touch a b

so with 'make -j', the 'touch' command will be run twice. See
e.g. https://stackoverflow.com/questions/2973445/gnu-makefile-rule-generating-a-few-targets-from-a-single-source-file.
-rw-r--r--src/libexpr/local.mk8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/libexpr/local.mk b/src/libexpr/local.mk
index daa3258f0d3c..78c8b0deae60 100644
--- a/src/libexpr/local.mk
+++ b/src/libexpr/local.mk
@@ -20,10 +20,14 @@ libexpr_LDFLAGS_PROPAGATED = $(BDW_GC_LIBS)
 
 libexpr_ORDER_AFTER := $(d)/parser-tab.cc $(d)/parser-tab.hh $(d)/lexer-tab.cc $(d)/lexer-tab.hh
 
-$(d)/parser-tab.cc $(d)/parser-tab.hh: $(d)/parser.y
+$(d)/parser-tab.hh: $(d)/parser-tab.cc
+
+$(d)/parser-tab.cc: $(d)/parser.y
 	$(trace-gen) bison -v -o $(libexpr_DIR)/parser-tab.cc $< -d
 
-$(d)/lexer-tab.cc $(d)/lexer-tab.hh: $(d)/lexer.l
+$(d)/lexer-tab.hh: $(d)/lexer-tab.cc
+
+$(d)/lexer-tab.cc: $(d)/lexer.l
 	$(trace-gen) flex --outfile $(libexpr_DIR)/lexer-tab.cc --header-file=$(libexpr_DIR)/lexer-tab.hh $<
 
 clean-files += $(d)/parser-tab.cc $(d)/parser-tab.hh $(d)/lexer-tab.cc $(d)/lexer-tab.hh