On 13 Jan 2023 06:29, Sam James wrote: > > On 13 Jan 2023, at 06:13, Mike Frysinger <vap...@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. 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. Automake is VPATH-ing the source file. we prob should change that to use an explicit $(srcdir) prefix when nodist is not utilized. then it would always write the generated .c/.h to the source tree. -mike
signature.asc
Description: PGP signature