@@ -20,17 +20,14 @@ import Distribution.Simple
20import Distribution.Simple.PreProcess
20import Distribution.Simple.PreProcess
21import Distribution.Simple.Setup (ConfigFlags(..))
21import Distribution.Simple.Setup (ConfigFlags(..))
22import Distribution.PackageDescription (PackageDescription(..), FlagName(..))
22import Distribution.PackageDescription (PackageDescription(..), FlagName(..))
23−import System.Process ( rawSystem )
23+import Distribution.Simple.Utils ( rawSystemExitCode, findProgramVersion )
24−import System.FilePath ( (</>) )
25−import System.Directory ( findExecutable )
24+import System.Exit
26import Distribution.Verbosity ( Verbosity )
25import Distribution.Verbosity ( Verbosity )
27import Distribution.Simple.Utils (info, notice, installOrdinaryFiles)
26import Distribution.Simple.Utils (info, notice, installOrdinaryFiles)
28import Distribution.Simple.Setup
27import Distribution.Simple.Setup
29import Distribution.Simple.Program (simpleProgram, Program(..))
28import Distribution.Simple.Program (simpleProgram, Program(..))
30import Distribution.Simple.LocalBuildInfo
29import Distribution.Simple.LocalBuildInfo
31import Data.Version
30import Data.Version
32−import System.Process (readProcess)
33−import Text.ParserCombinators.ReadP (readP_to_S, skipSpaces, eof)
34import Control.Monad (when)
31import Control.Monad (when)
35import qualified Control.Exception as E
32import qualified Control.Exception as E
@@ -39,23 +36,11 @@ main = defaultMainWithHooks $ simpleUserHooks {
39 -- enable hsb2hs preprocessor for .hsb files
36 -- enable hsb2hs preprocessor for .hsb files
40 hookedPreProcessors = [ppBlobSuffixHandler]
37 hookedPreProcessors = [ppBlobSuffixHandler]
41 , hookedPrograms = [(simpleProgram "hsb2hs"){
38 , hookedPrograms = [(simpleProgram "hsb2hs"){
42− programFindVersion = findHsb2hsVersion }]
39+ programFindVersion = \verbosity fp ->
40+ findProgramVersion "--version" id verbosity fp }]
43 , postCopy = installManPage
41 , postCopy = installManPage
46−findHsb2hsVersion :: Verbosity -> FilePath -> IO (Maybe Version)
47−findHsb2hsVersion verb fp = do
48− let handleExitFailure :: IOError -> IO (Maybe Version)
49− handleExitFailure _ = return Nothing
50− E.handle handleExitFailure $ do
51− outp <- readProcess fp ["--version"] ""
52− case readP_to_S (do v <- parseVersion
56− ((v,""):_) -> return (Just v)
59ppBlobSuffixHandler :: PPSuffixHandler
44ppBlobSuffixHandler :: PPSuffixHandler
60ppBlobSuffixHandler = ("hsb", \_ lbi ->
45ppBlobSuffixHandler = ("hsb", \_ lbi ->
61 PreProcessor {
46 PreProcessor {
@@ -67,11 +52,11 @@ ppBlobSuffixHandler = ("hsb", \_ lbi ->
67 _ -> False
52 _ -> False
68 when embedData $
53 when embedData $
69 do info verbosity $ "Preprocessing " ++ infile ++ " to " ++ outfile
54 do info verbosity $ "Preprocessing " ++ infile ++ " to " ++ outfile
70− hsb2hsPath <- findExecutable "hsb2hs"
55+ ec <- rawSystemExitCode verbosity "hsb2hs"
72− Just p -> rawSystem p [infile, infile, outfile]
56+ [infile, infile, outfile]
58+ ExitSuccess -> return ()
73− Nothing -> error "hsb2hs is needed to build this program: cabal install hsb2hs"
59+ ExitFailure _ -> error "hsb2hs is needed to build this program"
77installManPage :: Args -> CopyFlags
62installManPage :: Args -> CopyFlags
@@ -80,6 +65,6 @@ installManPage _ flags pkg lbi = do
80 let verbosity = fromFlag (copyVerbosity flags)
65 let verbosity = fromFlag (copyVerbosity flags)
81 let copydest = fromFlag (copyDest flags)
66 let copydest = fromFlag (copyDest flags)
82 let mandest = mandir (absoluteInstallDirs pkg lbi copydest)
67 let mandest = mandir (absoluteInstallDirs pkg lbi copydest)
83− </> "man1"
68+ ++ "/man1"
84 notice verbosity $ "Copying man page to " ++ mandest
69 notice verbosity $ "Copying man page to " ++ mandest
85 installOrdinaryFiles verbosity mandest [("man", "pandoc.1")]
70 installOrdinaryFiles verbosity mandest [("man", "pandoc.1")]