+-- Returns exitcode 0 if the given package is buildable or is a boot package,
+-- and 1 otherwise.
module Main (main) where
import Control.Monad
-import Data.Maybe
-import Distribution.PackageDescription
-import Distribution.Simple
-import Distribution.Simple.Utils
-import System.Cmd
+import System.Directory
import System.Environment
import System.Exit
+import System.IO
main :: IO ()
-main = do let verbosity = 0
- mustBeBuildables <- getMustBeBuildablePackages
- dfd <- defaultPackageDesc verbosity
- pkgDescr <- readPackageDescription verbosity dfd
- mInfolFile <- defaultHookedPackageDesc
- info <- case mInfolFile of
- Nothing -> return emptyHookedBuildInfo
- Just infoFile -> readHookedBuildInfo verbosity infoFile
- let pkgDescr' = updatePackageDescription info pkgDescr
- pkg = pkgName (package pkgDescr')
- mustBeBuildable = pkg `elem` mustBeBuildables
- buildInfos = map libBuildInfo (maybeToList (library pkgDescr'))
- ++ map buildInfo (executables pkgDescr')
- isBuildable = any buildable buildInfos
- when (mustBeBuildable || isBuildable) $ do
- args <- getArgs
- case args of
- prog : progArgs ->
- do ec <- rawSystem prog progArgs
- exitWith ec
- [] ->
- error "ifBuildable: No command given"
+main = do args <- getArgs
+ case args of
+ [package] ->
+ doit package
+ _ ->
+ error "Syntax: ifBuildable <package>"
+
+doit :: String -> IO ()
+doit package
+ = do setCurrentDirectory package
+ unbuildable <- doesFileExist "unbuildable"
+ if not unbuildable
+ then exitWith ExitSuccess
+ else do mustBeBuildables <- getMustBeBuildablePackages
+ if package `elem` mustBeBuildables
+ then exitWith ExitSuccess
+ else do hPutStrLn stderr "Warning: Package is unbuildable"
+ exitWith (ExitFailure 1)
getMustBeBuildablePackages :: IO [String]
getMustBeBuildablePackages
- = do xs <- readFile "../core-packages"
+ = do xs <- readFile "../boot-packages"
return $ filter ("readline" /=) $ lines xs
-