Internal custom preprocessor example.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dist |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module A where | |
a :: String | |
a = "hello from A" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Main where | |
import A | |
main :: IO () | |
main = putStrLn a |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: internal-preprocessor-test | |
version: 0.1.0.0 | |
synopsis: Internal custom preprocessor example. | |
description: See https://github.com/haskell/cabal/issues/1541#issuecomment-30155513 | |
license: GPL-3 | |
author: Mikhail Glushenkov | |
maintainer: mikhail.glushenkov@gmail.com | |
category: Testing | |
build-type: Custom | |
cabal-version: >=1.10 | |
-- Note that exe comes before the library. | |
-- The reason is backwards compat: old versions of Cabal (< 1.18) | |
-- don't have a proper component build graph, so components are | |
-- built in declaration order. | |
executable my-custom-preprocessor | |
main-is: MyCustomPreprocessor.hs | |
build-depends: base >=4.6 && <4.7, directory >= 1.0 | |
default-language: Haskell2010 | |
library | |
exposed-modules: A | |
build-depends: base >=4.6 && <4.7 | |
build-tools: my-custom-preprocessor | |
-- ^ Note the internal dependency. | |
default-language: Haskell2010 | |
executable hello-world | |
main-is: Hello.hs | |
build-depends: base >=4.6 && <4.7, internal-preprocessor-test | |
default-language: Haskell2010 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module Main where | |
import System.Directory | |
import System.Environment | |
main :: IO () | |
main = do | |
(source:target:_) <- getArgs | |
copyFile source target |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{-# OPTIONS_GHC -Wall #-} | |
import Distribution.PackageDescription | |
import Distribution.Simple | |
import Distribution.Simple.LocalBuildInfo | |
import Distribution.Simple.PreProcess | |
import Distribution.Simple.Utils | |
import System.Exit | |
import System.FilePath | |
import System.Process (rawSystem) | |
main :: IO () | |
main = defaultMainWithHooks | |
simpleUserHooks { hookedPreProcessors = [("pre", myCustomPreprocessor)] } | |
where | |
myCustomPreprocessor :: BuildInfo -> LocalBuildInfo -> PreProcessor | |
myCustomPreprocessor _bi lbi = | |
PreProcessor { | |
platformIndependent = True, | |
runPreProcessor = mkSimplePreProcessor $ \inFile outFile verbosity -> | |
do info verbosity ("Preprocessing " ++ inFile ++ " to " ++ outFile) | |
callProcess progPath [inFile, outFile] | |
} | |
where | |
builddir = buildDir lbi | |
progName = "my-custom-preprocessor" | |
progPath = builddir </> progName </> progName | |
-- Backwards compat with process < 1.2. | |
callProcess :: FilePath -> [String] -> IO () | |
callProcess path args = | |
do exitCode <- rawSystem path args | |
case exitCode of ExitSuccess -> return () | |
f@(ExitFailure _) -> fail $ "callProcess " ++ show path | |
++ " " ++ show args ++ " failed: " | |
++ show f |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment