Le 20 févr. 2012 à 14:58, Stefano Lattarini a écrit : > Hi Akim.
Hi Stefano, Thanks for the quick answer! > The following patch extends a test which is aimed at checking >> >> this, but does it in a non-vpath build :) >> > But the test is wrong, because it checks that the Yacc-generated .h and .c > files are placed in the $srcdir, while we expect them to be placed in the > $builddir. Do the tests added by your patch work for you? They don't work > for me (as I would have expected BTW). OK, so it is my expectations which are wrong. Probably in an attempt to have simple minded picture in my head, I expected the maintainer source tree to be alike an end user tarball. Since Automake ships the generated parsers and scanners, I expected it to generate these guys in srcdir, not builddir. So indeed the patch I proposed wanted to exhibit the failure, but it's my understanding that is incorrect. Hence the test failed, as _I_ expected. >> I have a question though. I don't understand how come >> Make realizes it must provide $@ in srcdir too. >> >> The Makefile.in features: >> >>> .y.c: >>> $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h >>> $*.h y.output $*.output -- $(YACCCOMPILE) >> >> and at runtime I have: >> >>> /bin/sh ../../build-aux/ylwrap ../../src/parse-gram.y y.tab.c >>> ../../src/parse-gram.c y.tab.h ../../src/parse-gram.h y.output >>> ../../src/parse-gram.output -- ./tests/bison -y -d -v --warnings=all,error >>> --report=all >>> updating ../../src/parse-gram.h >>> ../../src/parse-gram.output is unchanged >> >> which is what is expected, but I don't understand why >> it works: that $< is prefixed with $(srcdir), this I >> understand, but why does it appear on $@? >> > Unless I'm somehow sorely mistaken, that is not automake's doing; it's the > make implementation that does such a rewrite. Which is highly unexpected > BTW. Which make implementation are you using? It's GNU Make 3.81/3.82. Got it. It's the dep file that introduces the $(srcdir) part: src/src_bison-parse-gram.o: ../../src/parse-gram.c lib/config.h \ ../../src/system.h \ /usr/lib/gcc/i686-apple-darwin10/4.2.1/include/limits.h \ /usr/lib/gcc/i686-apple-darwin10/4.2.1/include/syslimits.h \ ... and it continues being propagated this way. Is there is a way to tell Automake I want the generation to be performed in srcdir? In the case of Bison, we do want to keep a copy in the repository. I guess I cannot use Automake for this.