summaryrefslogtreecommitdiff
path: root/Setup.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Setup.hs')
-rw-r--r--Setup.hs17
1 files changed, 17 insertions, 0 deletions
diff --git a/Setup.hs b/Setup.hs
index c28e45fdd..a328c75a7 100644
--- a/Setup.hs
+++ b/Setup.hs
@@ -23,18 +23,35 @@ import Distribution.PackageDescription (PackageDescription(..), FlagName(..))
import System.Process ( rawSystem )
import System.FilePath ( (</>) )
import System.Directory ( findExecutable )
+import Distribution.Verbosity ( Verbosity )
import Distribution.Simple.Utils (info, notice, installOrdinaryFiles)
import Distribution.Simple.Setup
+import Distribution.Simple.Program (simpleProgram, Program(..))
import Distribution.Simple.LocalBuildInfo
+import Data.Version
+import System.Process (readProcess)
+import Text.ParserCombinators.ReadP (readP_to_S, skipSpaces, eof)
import Control.Monad (when)
main :: IO ()
main = defaultMainWithHooks $ simpleUserHooks {
-- enable hsb2hs preprocessor for .hsb files
hookedPreProcessors = [ppBlobSuffixHandler]
+ , hookedPrograms = [(simpleProgram "hsb2hs"){
+ programFindVersion = findHsb2hsVersion }]
, postCopy = installManPage
}
+findHsb2hsVersion :: Verbosity -> FilePath -> IO (Maybe Version)
+findHsb2hsVersion verb fp = do
+ outp <- readProcess fp ["--version"] ""
+ case readP_to_S (do v <- parseVersion
+ skipSpaces
+ eof
+ return v) outp of
+ ((v,""):_) -> return (Just v)
+ _ -> return Nothing
+
ppBlobSuffixHandler :: PPSuffixHandler
ppBlobSuffixHandler = ("hsb", \_ lbi ->
PreProcessor {