Implement ifBuildable
[ghc-hetmet.git] / libraries / ifBuildable.hs
1
2 module Main (main) where
3
4 import Control.Monad
5 import Data.Maybe
6 import Distribution.PackageDescription
7 import Distribution.Simple
8 import Distribution.Simple.Utils
9 import System.Cmd
10 import System.Environment
11 import System.Exit
12
13 main :: IO ()
14 main = do let verbosity = 0
15           mustBeBuildables <- getMustBeBuildablePackages
16           dfd <- defaultPackageDesc verbosity
17           pkgDescr <- readPackageDescription verbosity dfd
18           mInfolFile <- defaultHookedPackageDesc
19           info <- case mInfolFile of
20                       Nothing -> return emptyHookedBuildInfo
21                       Just infoFile -> readHookedBuildInfo verbosity infoFile
22           let pkgDescr' = updatePackageDescription info pkgDescr
23               pkg = pkgName (package pkgDescr')
24               mustBeBuildable = pkg `elem` mustBeBuildables
25               buildInfos = map libBuildInfo (maybeToList (library pkgDescr'))
26                         ++ map buildInfo (executables pkgDescr')
27               isBuildable = any buildable buildInfos
28           when (mustBeBuildable || isBuildable) $ do
29               args <- getArgs
30               case args of
31                   prog : progArgs ->
32                       do ec <- rawSystem prog progArgs
33                          exitWith ec
34                   [] ->
35                       error "ifBuildable: No command given"
36
37 getMustBeBuildablePackages :: IO [String]
38 getMustBeBuildablePackages
39  = do xs <- readFile "../core-packages"
40       return $ filter ("readline" /=) $ lines xs
41