@@ -1,24 +1,31 @@
11{-# LANGUAGE CPP #-}
2+import Control.Monad
3+import Data.IORef
4+
25import Distribution.Simple
36import Distribution.Simple.InstallDirs as I
47import Distribution.Simple.LocalBuildInfo as L
58import qualified Distribution.Simple.Setup as S
69import qualified Distribution.Simple.Program as P
710import Distribution.PackageDescription
11+import Distribution.Text
812
913import System.Exit
1014import System.FilePath ((</>), splitDirectories)
15+import System.Directory
1116import qualified System.FilePath.Posix as Px
1217import System.Process
1318
19+
1420-- After Idris is built, we need to check and install the prelude and other libs
1521
1622make verbosity = P.runProgramInvocation verbosity . P.simpleProgramInvocation "make"
23+mvn verbosity = P.runProgramInvocation verbosity . P.simpleProgramInvocation "mvn"
1724
1825#ifdef mingw32_HOST_OS
1926-- make on mingw32 exepects unix style separators
2027(<//>) = (Px.</>)
21−idrisCmd local = Px.joinPath $ splitDirectories $
28+idrisCmd local = Px.joinPath $ splitDirectories $
2229 ".." <//> buildDir local <//> "idris" <//> "idris"
2330#else
2431idrisCmd local = ".." </> buildDir local </> "idris" </> "idris"
@@ -28,6 +35,12 @@ cleanStdLib verbosity
2835 = do make verbosity [ "-C", "lib", "clean", "IDRIS=idris" ]
2936 make verbosity [ "-C", "effects", "clean", "IDRIS=idris" ]
3037
38+cleanJavaLib verbosity
39+ = do dirty <- doesDirectoryExist ("java" </> "target")
40+ when dirty $ mvn verbosity [ "-f", "java/pom.xml", "clean" ]
41+ pomExists <- doesFileExist ("java" </> "pom.xml")
42+ when pomExists $ removeFile ("java" </> "pom.xml")
43+
3144installStdLib pkg local verbosity copy
3245 = do let dirs = L.absoluteInstallDirs pkg local copy
3346 let idir = datadir dirs
@@ -51,6 +64,8 @@ installStdLib pkg local verbosity copy
5164 , "IDRIS=" ++ icmd
5265 ]
5366
67+installJavaLib verbosity = mvn verbosity [ "-f", "java/pom.xml", "install" ]
68+
5469-- This is a hack. I don't know how to tell cabal that a data file needs
5570-- installing but shouldn't be in the distribution. And it won't make the
5671-- distribution if it's not there, so instead I just delete
@@ -79,19 +94,44 @@ checkStdLib local verbosity
7994 , "IDRIS=" ++ icmd
8095 ]
8196
97+checkJavaLib verbosity = mvn verbosity [ "-f", "java/pom.xml", "package" ]
98+
99+noJavaFlag flags =
100+ case lookup (FlagName "nojava") (S.configConfigurationsFlags flags) of
101+ Just True -> True
102+ Just False -> False
103+ Nothing -> False
104+
105+preparePom version
106+ = do pomTemplate <- readFile ("java" </> "pom_template.xml")
107+ writeFile ("java" </> "pom.xml") (unlines . map insertVersion $ lines pomTemplate)
108+ where
109+ insertVersion " <version></version>" = " <version>" ++ display version ++ "</version>"
110+ insertVersion other = other
111+
82112-- Install libraries during both copy and install
83113-- See http://hackage.haskell.org/trac/hackage/ticket/718
84−main = defaultMainWithHooks $ simpleUserHooks
114+main = do
115+ defaultMainWithHooks $ simpleUserHooks
85116 { postCopy = \ _ flags pkg lbi -> do
86− installStdLib pkg lbi (S.fromFlag $ S.copyVerbosity flags)
117+ let verb = S.fromFlag $ S.copyVerbosity flags
118+ installStdLib pkg lbi verb
87119 (S.fromFlag $ S.copyDest flags)
88120 , postInst = \ _ flags pkg lbi -> do
89− installStdLib pkg lbi (S.fromFlag $ S.installVerbosity flags)
121+ let verb = (S.fromFlag $ S.installVerbosity flags)
122+ installStdLib pkg lbi verb
90123 NoCopyDest
124+ unless (noJavaFlag $ configFlags lbi) (installJavaLib verb)
91125 , postConf = \ _ flags _ lbi -> do
92126 removeLibIdris lbi (S.fromFlag $ S.configVerbosity flags)
127+ unless (noJavaFlag $ configFlags lbi)
128+ (preparePom . pkgVersion . package $ localPkgDescr lbi)
93129 , postClean = \ _ flags _ _ -> do
94− cleanStdLib (S.fromFlag $ S.cleanVerbosity flags)
130+ let verb = S.fromFlag $ S.cleanVerbosity flags
131+ cleanStdLib verb
132+ cleanJavaLib verb
95133 , postBuild = \ _ flags _ lbi -> do
96− checkStdLib lbi (S.fromFlag $ S.buildVerbosity flags)
134+ let verb = S.fromFlag $ S.buildVerbosity flags
135+ checkStdLib lbi verb
136+ unless (noJavaFlag $ configFlags lbi) (checkJavaLib verb)
97137 }