David kiarie wrote:
Hmm, any consensus on this?
I looked at coreutils following Eric's suggestion, but didn't notice any
use of flex. I went back to the automake documented approach [1] and
peeked at the resulting generated files. src/Makefile.in contains
LEX_OUTPUT_ROOT = lex.yy
LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS)
.l.c:
$(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c
$@ -- $(LEXCOMPILE)
which during an actual make produces
/bin/sh ../build-aux/ylwrap xenconfig/libxlu_disk_l.l lex.yy.c
xenconfig/libxlu_disk_l.c -- flex
But later the build fails with
CC xenconfig/libvirt_xenconfig_la-xen_xl.lo
xenconfig/xen_xl.c:28:27: fatal error: libxlu_disk_l.h: No such file or
directory
#include "libxlu_disk_l.h"
Which is the problem I mentioned earlier in the thread about flex not
generating a header file. I naively tried hacking '--header-file' into
AM_LFLAGS (e.g. AM_LFLAGS=--header-file=$*.h), but flex wasn't happy
with that
make[2]: Entering directory `libvirt/src'
/bin/sh ../build-aux/ylwrap xenconfig/libxlu_disk_l.l lex.yy.c
xenconfig/libxlu_disk_l.c -- flex --header-file=xenconfig/libxlu_disk_l.h
flex: fatal internal error, freopen(headerfilename) failed
I banged my head on this for a while but couldn't find a resolution :-/.
The alternate approach is to use hand-crafted rules in src/Makefile.am,
as you've done. I'd prefer something a bit more generic like
%.c %.h:: %.l
@rm -f $*.[ch]
$(AM_V_GEN)$(LEX) --header-file=$*.h --outfile=$*.c $<
Which does work but has the two issues we discussed earlier:
- warning flags need relaxed when compiling the generated files
- generated files need to be excluded from syntax-check
The second issue is trivial, and although not obvious to me, I think
there are several devs on the list that can give hints.
Regards,
Jim
[1]
http://www.gnu.org/software/automake/manual/html_node/Yacc-and-Lex.html
On Fri, Sep 12, 2014 at 4:17 PM, Eric Blake <eblake(a)redhat.com>
wrote:
> On 09/11/2014 06:14 PM, Jim Fehlig wrote:
>
>
>> But also as mentioned before, I can't figure out how to convince
>> automake to tell flex to generate the header file as well as the .c file.
>>
>> Eric, do you have any experience with automake and flex? The following
>> thread makes it sound as though automake supports flex's
>> '--header-file=' option, but I can't find any hint on how to make it
work
>>
>>
http://lists.gnu.org/archive/html/bug-automake/2012-08/msg00069.html
>>
>>
> Quick reply here to acknowledge that you're waiting on me, although a
> more detailed reply may take me a few days...
>
> I haven't personally written a makefile with flex, but know that
> coreutils is such a project, so I plan to research how it gets things to
> work.
>
> --
> Eric Blake eblake redhat com +1-919-301-3266
> Libvirt virtualization library
http://libvirt.org
>
>