From d277442df53a01343ba7c1df0bbd2a294058dcba Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Fri, 17 Aug 2018 12:59:23 +0200 Subject: [PATCH] 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. --- src/libexpr/local.mk | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/libexpr/local.mk b/src/libexpr/local.mk index daa3258f0..78c8b0dea 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