How to force recompilation of preprocessed files (-F -pgmF ..)

Hi, I'm experimenting with a preprocessor to automatically generate test drivers[1]. The result depends on the existence of other files on the disk. When files are added or removed, the test driver has to be regenerated. Ideally ghc would just always recompile that single file (akin to make's .PHONY), and it should work with ghci's :reload and with cabal. I tried to touch the file within the preprocessor, but this does not work. It seems, that GHC checks the modification time only after preprocessing. Any ideas how to tackle this? Cheers, Simon [1] https://github.com/sol/hspec-discover

Hello Simon,
You can use Template Haskell's addDependentFile to register a
dependency on external files.
http://hackage.haskell.org/packages/archive/template-haskell/2.7.0.0/doc/htm...
You can also put -fforce-recomp in an OPTIONS_GHC pragma to ask GHC to
always recompile the file.
{-# OPTIONS_GHC -fforce-recomp #-}
Etienne Laurin
2012/5/17 Simon Hengel
Hi, I'm experimenting with a preprocessor to automatically generate test drivers[1]. The result depends on the existence of other files on the disk. When files are added or removed, the test driver has to be regenerated.
Ideally ghc would just always recompile that single file (akin to make's .PHONY), and it should work with ghci's :reload and with cabal.
I tried to touch the file within the preprocessor, but this does not work. It seems, that GHC checks the modification time only after preprocessing.
Any ideas how to tackle this?
Cheers, Simon

Hi Etienne, thanks for your reply.
You can use Template Haskell's addDependentFile to register a dependency on external files.
http://hackage.haskell.org/packages/archive/template-haskell/2.7.0.0/doc/htm...
That's interesting. But from what I've tried, it seems that it does not work with GHCi.
You can also put -fforce-recomp in an OPTIONS_GHC pragma to ask GHC to always recompile the file.
{-# OPTIONS_GHC -fforce-recomp #-}
I think it's amazing, that this works with ghc --make. But it does not work with GHCi, I created a ticket for that [1]. Cheers, Simon [1] http://hackage.haskell.org/trac/ghc/ticket/6105
participants (2)
-
Etienne Laurin
-
Simon Hengel