make option suggestion

Neil Mitchell ndmitchell at gmail.com
Mon Nov 6 16:37:18 EST 2006


Hi

Just for completeness, I came up with a proposal that would solve all
this, but in a very non-cabal style way.

Taking an example of happy, every generated file (File.hs) would have
as its first line:

{-# ORIGIN happy sourcefile.y -options -to -happy #-}

Then you just modify all haskell generating tools to output this
(easy) and suddenly the whole problem of preprocessors goes away.

I realise its not the "cabal" style way of doing it - since the
information gets put in the generated files etc - but it is pretty
simple.

You can also add to the file Happy.y:
{-# GENERATE happy sourcefile.y -options -to -happy #-}

To complete the other side of the generation.

Thanks

Neil

On 11/6/06, Duncan Coutts <duncan.coutts at worc.ox.ac.uk> wrote:
> I think this kind of build system feature ought to go into Cabal so it
> can be used more widely and without people needing Makefiles.
>
> I admit that we're not there yet with how easy it is to generate source
> files.
>
> Duncan
>
> On Mon, 2006-11-06 at 21:12 +0000, Frederik Eaton wrote:
> > Hello,
> >
> > I have a proposal for ghc. I think that it should take a new option,
> > say "--make-command". This will specify a command to be run whenever a
> > source file is read in by ghc. The command will be passed an argument,
> > which is the name of the source file. The idea is that the command can
> > be used to create auto-generated "source" files when ghc needs them.
> >
> > The purpose of this would be the following. Suppose I have a source
> > file, say Source.hs, which is generated from some template, say
> > Source.hs.in. If I edit Source.hs.in, and compile my program with 'ghc
> > --make', then the copy of Source.hs which ghc uses will be out of
> > date. That's because ghc doesn't know about the fact that Source.hs is
> > generated from Source.hs.in. If I use ghc, then I'll have to remember
> > to manually generate a new version of Source.hs every time I modify
> > Source.hs.in.
> >
> > But under the present proposal, I would simply write a Makefile with
> > the rules for generating Source.hs, and then pass --make-command=make
> > to ghc. For instance, my Makefile might say:
> >
> > Source.hs: Source.hs.in
> >     $(TAC) < $< > $@
> >
> > Then every time I run ghc, and Source.hs is out of date, an up-to-date
> > version of Source.hs will be generated automatically - because ghc
> > will call 'make Source.hs' before reading it in.
> >
> > Does this sound like a good idea?
> >
> > Frederik
> >
>
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>


More information about the Glasgow-haskell-users mailing list