@@ -24,13 +24,14 @@ import Pkg.PParser
25import Paths_idris (getDataDir)
25import Paths_idris (getDataDir)
27+-- | Run the package through the idris compiler.
27-- To build a package:
29-- To build a package:
28-- * read the package description
30-- * read the package description
29-- * check all the library dependencies exist
31-- * check all the library dependencies exist
30-- * invoke the makefile if there is one
32-- * invoke the makefile if there is one
31-- * invoke idris on each module, with idris_opts
33-- * invoke idris on each module, with idris_opts
32-- * install everything into datadir/pname, if install flag is set
34-- * install everything into datadir/pname, if install flag is set
34buildPkg :: Bool -> (Bool, FilePath) -> IO ()
35buildPkg :: Bool -> (Bool, FilePath) -> IO ()
35buildPkg warnonly (install, fp)
36buildPkg warnonly (install, fp)
36 = do pkgdesc <- parseDesc fp
37 = do pkgdesc <- parseDesc fp
@@ -63,7 +64,33 @@ buildPkg warnonly (install, fp)
63 putStrLn $ "\t" ++ show ms
64 putStrLn $ "\t" ++ show ms
64 exitWith (ExitFailure 1)
65 exitWith (ExitFailure 1)
67+-- | Type check packages only
69+-- This differs from build in that executables are not built, if the
70+-- package contains an executable.
71+checkPkg :: Bool -- ^ Show Warnings
72+ -> FilePath -- ^ Path to ipkg file.
74+checkPkg warnonly fpath
75+ = do pkgdesc <-parseDesc fpath
76+ ok <- mapM (testLib warnonly (pkgname pkgdesc)) (libdeps pkgdesc)
78+ do dir <- getCurrentDirectory
79+ setCurrentDirectory $ dir </> sourcedir pkgdesc
80+ make (makefile pkgdesc)
81+ res <- buildMods (NoREPL : Verbose : idris_opts pkgdesc)
83+ setCurrentDirectory dir
85+ Nothing -> exitWith (ExitFailure 1)
88+ Just _ -> exitWith (ExitFailure 1)
91+-- | Clean Package build files
66−cleanPkg :: FilePath -> IO ()
92+cleanPkg :: FilePath -- ^ Path to ipkg file.
67cleanPkg fp
94cleanPkg fp
68 = do pkgdesc <- parseDesc fp
95 = do pkgdesc <- parseDesc fp
69 dir <- getCurrentDirectory
96 dir <- getCurrentDirectory
@@ -74,6 +101,7 @@ cleanPkg fp
74 Nothing -> return ()
101 Nothing -> return ()
75 Just s -> rmFile $ dir </> s
102 Just s -> rmFile $ dir </> s
77installPkg :: PkgDesc -> IO ()
105installPkg :: PkgDesc -> IO ()
78installPkg pkgdesc
106installPkg pkgdesc
79 = do dir <- getCurrentDirectory
107 = do dir <- getCurrentDirectory
@@ -83,6 +111,11 @@ installPkg pkgdesc
83 Just o -> return () -- do nothing, keep executable locally, for noe
111 Just o -> return () -- do nothing, keep executable locally, for noe
84 mapM_ (installObj (pkgname pkgdesc)) (objs pkgdesc)
112 mapM_ (installObj (pkgname pkgdesc)) (objs pkgdesc)
115+-- ---------------------------------------------------------- [ Helper Methods ]
116+-- Methods for building, testing, installing, and removal of idris
86buildMods :: [Opt] -> [Name] -> IO (Maybe IState)
119buildMods :: [Opt] -> [Name] -> IO (Maybe IState)
87buildMods opts ns = do let f = map (toPath . showCG) ns
120buildMods opts ns = do let f = map (toPath . showCG) ns
88-- putStrLn $ "MODULE: " ++ show f
121-- putStrLn $ "MODULE: " ++ show f
@@ -122,6 +155,7 @@ installIBC p m = do let f = toIBCFile m
122 where getDest (UN n) = ""
155 where getDest (UN n) = ""
123 getDest (NS n ns) = foldl1' (</>) (reverse (getDest n : map str ns))
156 getDest (NS n ns) = foldl1' (</>) (reverse (getDest n : map str ns))
125installObj :: String -> String -> IO ()
159installObj :: String -> String -> IO ()
126installObj p o = do d <- getTargetDir
160installObj p o = do d <- getTargetDir
127 let destdir = addTrailingPathSeparator (d </> p)
161 let destdir = addTrailingPathSeparator (d </> p)
@@ -136,12 +170,17 @@ mkDirCmd = "mkdir "
136mkDirCmd = "mkdir -p "
170mkDirCmd = "mkdir -p "
173+-- ------------------------------------------------------- [ Makefile Commands ]
174+-- | Invoke a Makefile's default target.
139make :: Maybe String -> IO ()
175make :: Maybe String -> IO ()
140make Nothing = return ()
176make Nothing = return ()
141make (Just s) = do system $ "make -f " ++ s
177make (Just s) = do system $ "make -f " ++ s
142 return ()
178 return ()
180+-- | Invoke a Makefile's clean target.
144clean :: Maybe String -> IO ()
181clean :: Maybe String -> IO ()
145clean Nothing = return ()
182clean Nothing = return ()
146clean (Just s) = do system $ "make -f " ++ s ++ " clean"
183clean (Just s) = do system $ "make -f " ++ s ++ " clean"
147 return ()
184 return ()
186+-- --------------------------------------------------------------------- [ EOF ]