Package: automake;
Reported by: Sam James <sam <at> gentoo.org>
Date: Mon, 14 Mar 2022 17:35:01 UTC
Severity: normal
Tags: notabug
View this message in rfc822 format
From: Sam James <sam <at> gentoo.org> To: Mike Frysinger <vapier <at> gentoo.org> Cc: 54390 <at> debbugs.gnu.org Subject: bug#54390: YACC rules don't check DESTDIR existence for VPATH builds Date: Fri, 13 Jan 2023 07:07:39 +0000
[Message part 1 (text/plain, inline)]
> On 13 Jan 2023, at 07:01, Mike Frysinger <vapier <at> gentoo.org> wrote: > > On 13 Jan 2023 06:29, Sam James wrote: >>> On 13 Jan 2023, at 06:13, Mike Frysinger <vapier <at> gentoo.org> wrote: >>> On 14 Mar 2022 17:21, Sam James wrote: >>>> It appears that YACC rules don't check for whether the destination directory exists before executing ylwrap. >>>> >>>> When trying to package libaacs (https://code.videolan.org/videolan/libaacs) with an out-of-source build, I hit an unexpected build failure: >>>> ``` >>>> /var/tmp/portage/media-libs/libaacs-0.11.1/work/libaacs-0.11.1/src/file/keydbcfg-parser.y: warning: fix-its can be applied. Rerun with option '--update'. [-Wother] >>>> /var/tmp/portage/media-libs/libaacs-0.11.1/work/libaacs-0.11.1/build-aux/ylwrap: 206: cannot create ../src/file/keydbcfg-parser.c: Directory nonexistent >>>> updating src/file/keydbcfg-parser.h >>>> mv: cannot move 'tmp-keydbcfg-parser.h' to '../src/file/keydbcfg-parser.h': No such file or directory >>>> make: *** [Makefile:1150: src/file/keydbcfg-parser.c] Error 2 >>>> ``` >>>> >>>> I can workaround this by running `mkdir -p ${BUILD_DIR}/src/file` to ensure that the necessary directory exists within the build directory beforehand, but >>>> it feels like I shouldn't have to. >>>> >>>> Their Makefile.am can be found here: https://code.videolan.org/videolan/libaacs/-/blob/master/Makefile.am. Snippet: >>>> ``` >>>> libaacs_la_SOURCES=\ >>>> src/libaacs/aacs.h \ >>>> [...] >>>> src/file/dirs.h \ >>>> src/file/file.h \ >>>> src/file/file.c \ >>>> src/file/filesystem.h \ >>>> src/file/filesystem.c \ >>>> src/file/keydbcfg.c \ >>>> src/file/keydbcfg.h \ >>>> src/file/keydb.h \ >>>> src/file/keydbcfg-parser.y \ >>>> src/file/keydbcfg-lexer.l \ >>>> src/file/mmc_device.h \ >>>> [...] >>>> ``` >>>> >>>> While src/libaacs exists within the build dir, src/file/ doesn't exist at all, hence the failure. >>>> >>>> automake yacc rules should mkdir -p the needed directories within the build dir for VPATH builds before running ylwrap/yacc. >>> >>> i think there's more to it. if you're using a release tarball for this project >>> created by `make dist`, then you shouldn't be running yacc in the first place. >>> >>> https://www.gnu.org/software/automake/manual/html_node/Yacc-and-Lex.html >> >> Curiosity got the better of me (see previous reply) so: >> ``` >> $ cd /tmp >> $ git clone https://code.videolan.org/videolan/libaacs/ >> $(cd libaacs && ./bootstrap.sh) >> $mkdir libaacs-oos && cd libaacs > > guessing you meant `cd libaacs-oos` > >> $ /tmp/libaacs/configure YACC=bison LEX=flex >> $ make >> $ make >> YACC src/file/keydbcfg-parser.c >> keydbcfg-parser.tab.c is unchanged >> keydbcfg-parser.tab.h is unchanged >> make[1]: Entering directory '/tmp/libaacs-oos' >> YACC src/file/keydbcfg-parser.c >> keydbcfg-parser.tab.c is unchanged >> keydbcfg-parser.tab.h is unchanged >> make[1]: Leaving directory '/tmp/libaacs-oos' >> make all-am >> make[1]: Entering directory '/tmp/libaacs-oos' >> YACC src/file/keydbcfg-parser.c >> keydbcfg-parser.tab.c is unchanged >> keydbcfg-parser.tab.h is unchanged >> CC src/file/keydbcfg-parser.lo >> cc1: fatal error: src/file/keydbcfg-parser.c: No such file or directory >> compilation terminated. >> make[1]: *** [Makefile:1009: src/file/keydbcfg-parser.lo] Error 1 >> make[1]: Leaving directory '/tmp/libaacs-oos' >> make: *** [Makefile:638: all] Error 2 >> ``` >> >> so it's still looking in the source rather than the build directory for the generated file? > > i'm not sure what you're trying to show here. that running make twice in a > row produces weird/inconsistent results ? if that's the case, that's not > the behavior i'm seeing over here. > No, that was just an error in copying stuff into email. It happens with running make once, so it should be: ``` $ cd /tmp $ git clone https://code.videolan.org/videolan/libaacs/ $ (cd libaacs && ./bootstrap) $ mkdir libaacs-oos && cd libaacs-oos $ /tmp/libaacs/configure YACC=bison LEX=flex $ make YACC src/file/keydbcfg-parser.c updating keydbcfg-parser.tab.c updating keydbcfg-parser.tab.h make[1]: Entering directory '/tmp/libaacs-oos' YACC src/file/keydbcfg-parser.c keydbcfg-parser.tab.c is unchanged keydbcfg-parser.tab.h is unchanged make[1]: Leaving directory '/tmp/libaacs-oos' LEX src/file/keydbcfg-lexer.c make all-am make[1]: Entering directory '/tmp/libaacs-oos' CC src/examples/aacs_info-aacs_info.o CC src/libaacs/aacs.lo CC src/libaacs/cci.lo CC src/libaacs/content_cert.lo CC src/libaacs/crypto.lo CC src/libaacs/mkb.lo CC src/libaacs/mmc.lo CC src/libaacs/unit_key.lo CC src/file/file.lo CC src/file/filesystem.lo CC src/file/keydbcfg.lo YACC src/file/keydbcfg-parser.c keydbcfg-parser.tab.c is unchanged keydbcfg-parser.tab.h is unchanged CC src/file/keydbcfg-parser.lo cc1: fatal error: src/file/keydbcfg-parser.c: No such file or directory compilation terminated. make[1]: *** [Makefile:1009: src/file/keydbcfg-parser.lo] Error 1 make[1]: Leaving directory '/tmp/libaacs-oos' make: *** [Makefile:638: all] Error 2 ``` You can't reproduce the build failure? > i'll note that the default configure+make works because dependency tracking > is enabled which prepopulates the directory tree. it's failing for you in > Gentoo because econf automatically adds --disable-dependency-tracking which > turns all that logic off, and the directory tree doesn't exist. I'm not sure how that corresponds with when I run configure manually as above? What am I missing, or am I misunderstanding? Thanks.
[signature.asc (application/pgp-signature, attachment)]
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.