[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#54390: YACC rules don't check DESTDIR existence for VPATH builds
From: |
Mike Frysinger |
Subject: |
bug#54390: YACC rules don't check DESTDIR existence for VPATH builds |
Date: |
Fri, 13 Jan 2023 02:01:53 -0500 |
On 13 Jan 2023 06:29, Sam James wrote:
> > On 13 Jan 2023, at 06:13, Mike Frysinger <vapier@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