> 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 $ /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?
signature.asc
Description: Message signed with OpenPGP