@@ -20,17 +20,41 @@ import Distribution.Simple
2020import Distribution.Simple.PreProcess
2121import Distribution.Simple.Setup (ConfigFlags(..), CopyFlags(..), fromFlag)
2222import Distribution.PackageDescription (PackageDescription(..), FlagName(..))
23+import Distribution.Simple.Utils ( rawSystemExitCode, findProgramVersion )
2324import System.Exit
24−import Distribution.Simple.Utils (notice, installOrdinaryFiles)
25+import Distribution.Simple.Utils (info, notice, installOrdinaryFiles)
2526import Distribution.Simple.Program (simpleProgram, Program(..))
2627import Distribution.Simple.LocalBuildInfo
2728import Control.Monad (when)
2829
2930main :: IO ()
3031main = defaultMainWithHooks $ simpleUserHooks {
31− postCopy = installManPage
32+ -- enable hsb2hs preprocessor for .hsb files
33+ hookedPreProcessors = [ppBlobSuffixHandler]
34+ , hookedPrograms = [(simpleProgram "hsb2hs"){
35+ programFindVersion = \verbosity fp ->
36+ findProgramVersion "--version" id verbosity fp }]
37+ , postCopy = installManPage
3238 }
3339
40+ppBlobSuffixHandler :: PPSuffixHandler
41+ppBlobSuffixHandler = ("hsb", \_ lbi ->
42+ PreProcessor {
43+ platformIndependent = True,
44+ runPreProcessor = mkSimplePreProcessor $ \infile outfile verbosity ->
45+ do let embedData = case lookup (FlagName "embed_data_files")
46+ (configConfigurationsFlags (configFlags lbi)) of
47+ Just True -> True
48+ _ -> False
49+ when embedData $
50+ do info verbosity $ "Preprocessing " ++ infile ++ " to " ++ outfile
51+ ec <- rawSystemExitCode verbosity "hsb2hs"
52+ [infile, infile, outfile]
53+ case ec of
54+ ExitSuccess -> return ()
55+ ExitFailure _ -> error "hsb2hs is needed to build this program"
56+ })
57+
3458installManPage :: Args -> CopyFlags
3559 -> PackageDescription -> LocalBuildInfo -> IO ()
3660installManPage _ flags pkg lbi = do