bug-automake
[Top][All Lists]
Advanced

[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: Sam James
Subject: bug#54390: YACC rules don't check DESTDIR existence for VPATH builds
Date: Fri, 13 Jan 2023 06:29:56 +0000


> 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
$ /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?

Attachment: signature.asc
Description: Message signed with OpenPGP


reply via email to

[Prev in Thread] Current Thread [Next in Thread]