[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Integrating flexc++(1) and bisonc++(1) into Makefile.am
From: |
Will Estes |
Subject: |
Re: Integrating flexc++(1) and bisonc++(1) into Makefile.am |
Date: |
Wed, 12 Jul 2017 10:59:49 -0400 |
User-agent: |
Mutt/1.5.24 (2015-08-30) |
You might also have a look at the flex test suite to see various ways in which
automake is abused to build odd things for flex itself. There's a lot of edge
cases there and you might get ideas.
On Wednesday, 12 July 2017, 10:23 am -0400, Nick Bowler <address@hidden> wrote:
> Hello,
>
> On 7/12/17, Kip Warner <address@hidden> wrote:
> > My challenge is replicating their functionality for flexc++(1) and
> > bisonc++(1) in the absense of macros to make their usage easier in
> > Automake
> [...]
> > In trying to integrate the two tools into my build environment, I've
> > attempted the following in Makefile.am:
> [...]
> > BUILT_SOURCES = \
> [...]
> > Source/ParserBase.h \
> > Source/Parser.h \
> > Source/Parser.ih \
> > Source/Parser.cpp
> >
> > myprogram_SOURCES = \
> [...]
> > Source/Parser.cpp
> [...]
> > # Generate parser source from Backus-Naur grammar rules via bisonc++...
> > Source/ParserBase.h:
> > Source/Parser.h:
> > Source/Parser.ih:
> > Source/Parser.cpp: Source/Parser.ypp
> > $(BISONCPP) --target-directory=$(top_builddir)/Source $<
> >
> > FLEXCPP and BISONCPP are obtained via AC_PATH_PROG in configure.ac.
> >
> > This all works ok, but I suspect this is not an elegant solution and
> > there are some very good suggestions from this mailing list.
>
> There aren't really any "elegant" solutions. Make handles this kind of
> tool quite badly. It is possible to get things to work but it is always
> a tradeoff between flexibility of your build system and simplicity of
> your rules.
>
> If you are happy with this method then it is totally fine. Do make
> sure parallel builds work by testing them routinely (both clean and
> incrementally) -- I think listing everything in BUILT_SOURCES like you
> do probably "resolves" any parallelism problems here, (by reducing
> opportunities for parallelism).
>
> The Automake manual has section on writing portable make rules for tools
> that produce multiple outputs[1], with a discussion of various approaches
> and their limitations. I generally prefer approaches using a dedicated
> witness file.
>
> Finally, consider whether you want to distribute the generated parser
> sources. That way your users don't need these tools installed just to
> build your package.
>
> [1]
> https://www.gnu.org/software/automake/manual/automake.html#Multiple-Outputs
>
> Cheers,
> Nick
>
--
Will Estes
address@hidden