On 06/30/2016 02:30 AM, Markus Armbruster wrote: > John Snow <js...@redhat.com> writes: > >> On 06/28/2016 04:40 AM, Markus Armbruster wrote: >>> Sascha Silbe <si...@linux.vnet.ibm.com> writes: >>> >>>> Dear Paolo, >>>> >>>> Paolo Bonzini <pbonz...@redhat.com> writes: >>>> >>>>>> After applying your series on top of f12103af and running "./configure" >>>>>> in a clean working directory, I get the following errors for "make >>>>>> check-source": >>>>>> >>>>>> $ make check-source >>>>>> egrep: config-host.h: No such file or directory >>>>>> egrep: qmp-commands.h: No such file or directory >>>> [...] >>>>>> GEN aarch64-softmmu/config-devices.mak.tmp >>>>>> GEN aarch64-softmmu/config-devices.mak >>>>>> [...] >>>>>> GEN tests/test-qmp-introspect.h >>>>>> make: *** No rule to make target `tests/headers/audio/audio.o', needed >>>>>> by `check-headers'. Stop. >>>>> >>>>> Hi Sascha, >>>>> >>>>> these are all generated headers. In general, "make check" must be run >>>>> after "make", and I suppose the same holds for "make check-headers". >>>> >>>> Still no dice. The egrep error messages don't occur when running "make >>>> check-source" after a full "make" run, but the audio.o error still >>>> happens: >>>> >>>> $ make check-source >>>> make: *** No rule to make target `tests/headers/audio/audio.o', needed by >>>> `check-headers'. Stop. >>> >>> Works fine in my build tree, fails in a fresh clone, can't yet say why. >>> Thanks for reporting! >>> >> >> I tried to manually exclude audio/audio.h, but it goes on to barf on the >> next header in audio/. Not sure why your formula doesn't like that >> directory for us. > > "make -d tests/headers/audio/audio.c" immediately pinpoints the cause: > > [Lots of output about remaking makefiles...] > Updating goal targets.... > Considering target file 'tests/headers/audio/audio.c'. > File 'tests/headers/audio/audio.c' does not exist. > Looking for an implicit rule for 'tests/headers/audio/audio.c'. > Trying pattern rule with stem 'audio/audio'. > Trying rule prerequisite 'tests/header-test-template.c'. > Trying pattern rule with stem 'audio/audio'. > Trying rule prerequisite 'tests/header-test-template.c'. > Looking for a rule with intermediate file 'tests/header-test-template.c'. > Avoiding implicit rule recursion. > No implicit rule found for 'tests/headers/audio/audio.c'. > Finished prerequisites of target file 'tests/headers/audio/audio.c'. > Must remake target 'tests/headers/audio/audio.c'. > make: *** No rule to make target 'tests/headers/audio/audio.c'. Stop. > > I forgot to commit tests/header-test-template.c. Fixup posted. > >> (I *hate* Makefiles ...) > > Possibly for the wrong reasons ;-) >
My reason is: "Thus, programs must be written for people to read, and only incidentally for machines to execute." Makefiles appear to be trying their hardest to do the opposite. Thanks for the fixup! --js