parallel gmake cannot have multiple targets:
authormirabilos <t.glaser@tarent.de>
Fri, 26 Jul 2019 18:18:30 +0000 (20:18 +0200)
committermirabilos <mirabilos@evolvis.org>
Fri, 26 Jul 2019 18:27:40 +0000 (20:27 +0200)
– they expand to multiple rules, running the recipe multiple times
  cf. https://www.gnu.org/software/make/manual/html_node/Multiple-Targets.html
– other solutions (from StackOverflow) require gmakeisms

so replace all dependencies on y.tab.h with y.tab.c, and
ctlwords.{h,pl} with ctlwords.c (necessitated because the
.c files are used in the .o rules); possible since the
prerequisites are never expanded in the recipes

(cherry picked from commit 3100ef089c2c801a1f4be8f3a94cea7a5bffa80c)

Build.sh
ctlwords.sh

index 5048aa2..20386c7 100644 (file)
--- a/Build.sh
+++ b/Build.sh
@@ -1555,18 +1555,19 @@ mps_OBJS=       print.o x11dummy.o
 
 all: mgp$E mgp2ps$E xmindpath$E xwintoppm$E mgp2html mgp2latex mgpnet
 
-ctlwords.c ctlwords.h ctlwords.pl: $(SRCDIR)/ctlwords.sh
+# also builds ctlwords.h and ctlwords.pl
+ctlwords.c: $(SRCDIR)/ctlwords.sh
        $(SH) $(SRCDIR)/ctlwords.sh
 
-mgp2html: ctlwords.pl $(SRCDIR)/contrib/mgp2html.pl.in
+mgp2html: ctlwords.c $(SRCDIR)/contrib/mgp2html.pl.in
        echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
            $(SRCDIR)/contrib/mgp2html.pl.in
 
-mgp2latex: ctlwords.pl $(SRCDIR)/contrib/mgp2latex.pl.in
+mgp2latex: ctlwords.c $(SRCDIR)/contrib/mgp2latex.pl.in
        echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
            $(SRCDIR)/contrib/mgp2latex.pl.in
 
-mgpnet: ctlwords.pl $(SRCDIR)/contrib/mgpnet.in
+mgpnet: ctlwords.c $(SRCDIR)/contrib/mgpnet.in
        echo '#!$(PERL)' | cat >$@ - ctlwords.pl \
            $(SRCDIR)/contrib/mgpnet.in
 
@@ -1589,7 +1590,8 @@ libmgpcommon.a: $(lib_OBJS)
        $(AR_CREATE) $@ $(lib_OBJS)
        $(RANLIB) $@
 
-y.tab.c y.tab.h: $(SRCDIR)/grammar.y
+# also builds y.tab.h
+y.tab.c: $(SRCDIR)/grammar.y
        $(YACC) -d $(SRCDIR)/grammar.y
 
 lex.yy.c: $(SRCDIR)/scanner.l
@@ -1621,7 +1623,7 @@ $dstbn.o: $srca
 EOF
 }
 xlih="image/xloadimage.h image/image.h"
-mgph="mgp.h $xlih ctlwords.h"
+mgph="mgp.h $xlih ctlwords.c" # ctlwords.h but that breaks parallel gmake
 defs='$(xmp_DEFS)'
 dofile contrib/xmindpath/main.c
 dofile contrib/xmindpath/uucplock.c contrib/xmindpath/pathnames.h
@@ -1655,7 +1657,7 @@ dofile y.tab.c $mgph
 dofile parse.c $mgph
 dofile plist.c $mgph
 dofile postscript.c $mgph
-dofile lex.yy.c $mgph y.tab.h
+dofile lex.yy.c $mgph y.tab.c # y.tab.h but that breaks parallel gmake
 dofile unimap.c $mgph
 dofile mgp.c $mgph
 dofile x11.c $mgph
index fac4729..7fe68b2 100644 (file)
@@ -141,20 +141,20 @@ setsup            int
 title          str
 EOF
 
-cat >>ctlwords.c~ <<\EOF
-       { NULL, 0, 0, 0 }
-};
-/* end of generated list */
+cat >>ctlwords.pl~ <<\EOF
+);
+# end of generated keyword list
+
 EOF
 
 cat >>ctlwords.h~ <<\EOF
 /* end of generated file */
 EOF
 
-cat >>ctlwords.pl~ <<\EOF
-);
-# end of generated keyword list
-
+cat >>ctlwords.c~ <<\EOF
+       { NULL, 0, 0, 0 }
+};
+/* end of generated list */
 EOF
 
 mv ctlwords.pl~ ctlwords.pl