Fix ifBuildable
authorIan Lynagh <igloo@earth.li>
Fri, 1 Aug 2008 14:17:31 +0000 (14:17 +0000)
committerIan Lynagh <igloo@earth.li>
Fri, 1 Aug 2008 14:17:31 +0000 (14:17 +0000)
libraries/Makefile
libraries/ifBuildable.hs

index 9282d2b..9ff8db4 100644 (file)
@@ -147,7 +147,7 @@ subdirs:
 
 HERE_ABS=$(FPTOOLS_TOP_ABS)/libraries
 
-IFBUILDABLE=ifBuildable/ifBuildable $(HERE_ABS)/boot-packages
+IFBUILDABLE=ifBuildable/ifBuildable $(FPTOOLS_TOP_ABS)/packages
 
 CABAL_GHC_FLAGS = -Wall
 ifeq "$(ghc_ge_605)" "NO"
index 3f8813b..7364a11 100644 (file)
@@ -12,25 +12,29 @@ import System.IO
 main :: IO ()
 main = do args <- getArgs
           case args of
-              [bootPackagesFile, package] ->
-                  doit bootPackagesFile package
+              [packagesFile, package] ->
+                  doit packagesFile package
               _ ->
-                  error "Syntax: ifBuildable <boot-packages-file> <package>"
+                  error "Syntax: ifBuildable <packages-file> <package>"
 
 doit :: FilePath -> String -> IO ()
-doit bootPackagesFile package
+doit packagesFile package
  = do setCurrentDirectory package
       unbuildable <- doesFileExist "unbuildable"
       if not unbuildable
          then exitWith ExitSuccess
-         else do mustBeBuildables <- getMustBeBuildables bootPackagesFile
+         else do mustBeBuildables <- getMustBeBuildables packagesFile
                  if package `elem` mustBeBuildables
                      then exitWith ExitSuccess
                      else do hPutStrLn stderr "Warning: Package is unbuildable"
                              exitWith (ExitFailure 1)
 
 getMustBeBuildables :: FilePath -> IO [String]
-getMustBeBuildables bootPackagesFile
- = do xs <- readFile bootPackagesFile
-      return $ filter ("editline" /=) $ lines xs
+getMustBeBuildables packagesFile
+ = do xs <- readFile packagesFile
+      let nonCommentLines = filter (("#" /=) . take 1) $ lines xs
+          requiredLines = filter ((2 == ) . length) $ map words nonCommentLines
+          requiredLibraries = [ x | 'l':'i':'b':'r':'a':'r':'i':'e':'s':'/':x
+                                    <- map head requiredLines ]
+      return $ filter ("editline" /=) requiredLibraries