KiCS-0.9.0: Setup.hs
module Main where
import System.FilePath
import Distribution.Simple
import Distribution.Simple.Setup as SS
import Distribution.Simple.Program
import Distribution.Simple.LocalBuildInfo
import Distribution.Simple.PreProcess
import Distribution.PackageDescription
import Distribution.Verbosity
import Curry.Files.CymakePath
kics :: Program
kics = simpleProgram "kics"
cymake :: IO Program
cymake = do
call <- getCymake
return (simpleProgram (takeBaseName call))
{programFindLocation = \_-> return (Just call)}
main :: IO ()
main = do
cymakeProg <- cymake
defaultMainWithHooks simpleUserHooks
{hookedPrograms=kics:cymakeProg:hookedPrograms simpleUserHooks
,postConf=myPostConf
,hookedPreProcessors=[("curry",mkModule)]
}
unflag = fromFlagOrDefault silent
requireProg :: SS.Flag Verbosity -> LocalBuildInfo -> IO Program -> IO ()
requireProg verb lbi prog = do
p <- prog
requireProgram (unflag verb) p AnyVersion (withPrograms lbi)
return ()
callProg :: Verbosity -> LocalBuildInfo -> IO Program -> Args -> IO ()
callProg verb lbi prog args = do
p <- prog
rawSystemProgramConf verb p (withPrograms lbi) args
myPostConf :: Args -> ConfigFlags -> PackageDescription -> LocalBuildInfo -> IO ()
myPostConf args confFlags descrs lbi = do
let require = requireProg (configVerbosity confFlags) lbi
require cymake
postConf simpleUserHooks args confFlags descrs lbi
mkModule :: BuildInfo -> LocalBuildInfo -> PreProcessor
mkModule buildInfo lbi = PreProcessor
{platformIndependent = True
,runPreProcessor = mkSimplePreProcessor (runKics lbi)}
runKics :: LocalBuildInfo -> FilePath -> FilePath -> Verbosity -> IO ()
runKics lbi infile outfile verb = do
let call = callProg verb lbi
datadir = takeDirectory infile
-- nomake not supported
mapM (\ format -> call cymake ["-e",'-':'-':format,"-i"++datadir,infile])
["flat","extended-flat","acy","uacy","parse-only"]
call (return kics) ["-nomake","-o",outfile,infile]