opensubscriber
   Find in this group all groups
 
The Haskell Cafe more information…

h : haskell-cafe@haskell.org 10 October 2009 • 11:17PM -0400

Re: [Haskell-cafe] How to add use custom preprocessor in cabal
by Duncan Coutts

REPLY TO AUTHOR
 
REPLY TO GROUP



On Thu, 2009-10-08 at 17:28 +0200, Bernd Brassel wrote:
> Hi folks,
>
> I am trying to integrate my own preprocessor into a cabal build  
> process. But there are several points that I get stuck with. Could  
> someone help me, please?
>
> A simplification of my problem:
> I have files "Abc.foo" and each of them should be transformed into  
> "Abc.hs" by calling function "transform". The resulting "Abc.hs" files  
> should then be exposed as Haskell library modules.
>
> 1. Question: How do I tell cabal that the file Abc.foo belongs to the  
> package?
> After reading the User's Guide I had the impression that I should  
> write something like
>
> Library
>    Eposed-Modules:
>        Abc.foo
>
> But this leads to a parse error.

Use

Library
  Exposed-Modules:
      Abc

It is a list of modules, not files.

> Adding a
>
> Data-Files:
>    Abc.foo
>
> to the heading, on the other hand, does not seem to do anything.

Right, those are for files that will be installed with the app and used
at runtime.

> 2. Question: How to add the preprocessor? I have tried
>
> main =
>    defaultMainWithHooks
>           simpleUserHooks{hookedPreProcessors=[("foo",transformation)]}
>
> transformation :: BuildInfo -> LocalBuildInfo -> PreProcessor

That looks right. Here's how to complete it (example taken from the
Cabal haddock docs for the PreProcess module):

transformation _ _ =
  PreProcessor {
    platformIndependent = True,
    runPreProcessor =
      mkSimplePreProcessor $ \inFile outFile verbosity -> do
        fail $ "transformation: " ++ inFile ++ " " ++ outFile
  }

and it works fine:

runghc Setup.hs build
Preprocessing library foo-1.0...
Setup.hs: transformation: Abc.foo dist/build/Abc.hs

> But under which circumstances will this function be called? Up to now  
> I have not succeeded in making cabal call this function.

It calls it when it goes and looks for the module Abc (ie Abc.hs
or .lhs), and since if does not find it, it'll check through the list of
preprocessors and go looking for the corresponding files, ie Abc.foo.

Duncan

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@hask...
http://www.haskell.org/mailman/listinfo/haskell-cafe

Bookmark with:

Delicious   Digg   reddit   Facebook   StumbleUpon

Related Messages

opensubscriber is not affiliated with the authors of this message nor responsible for its content.