on master help sign in
Support builds that doesn't use cabal for libs and rts
commit67f7373189a74e41434053610f6dddd222bb9a30 authorniklas <niklas@mm.st> dateTue 24 Jun 2014, 01:05 (12 years ago) parent18c33c5
16 files changed+67−28
Setup.hs+49−8 idris.cabal+8 src/IRTS/CodegenC.hs−1 src/IRTS/CodegenJavaScript.hs+1−1 src/IRTS/CodegenLLVM.hs−1 src/IRTS/Compiler.hs−2 src/IRTS/System.hs+7−2 src/Idris/AbsSyntax.hs−2 src/Idris/AbsSyntaxTree.hs−2 src/Idris/DSL.hs−1 src/Idris/ElabDecls.hs−1 src/Idris/IdrisDoc.hs+1−1 src/Idris/Imports.hs−1 src/Idris/REPL.hs+1−1 src/Pkg/PParser.hs−2 src/Pkg/Package.hs−2
Setup.hs+49−8
@@ -13,8 +13,9 @@ import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile)
1313import Distribution.PackageDescription
1414import Distribution.Text
1515
16+import System.Environment
1617import System.Exit
17−import System.FilePath ((</>), splitDirectories)
18+import System.FilePath ((</>), splitDirectories,isAbsolute)
1819import System.Directory
1920import qualified System.FilePath.Posix as Px
2021import System.Process
@@ -70,6 +71,12 @@ isRelease flags =
7071 Just False -> False
7172 Nothing -> False
7273
74+isFreestanding :: S.ConfigFlags -> Bool
75+isFreestanding flags =
76+ case lookup (FlagName "freestanding") (S.configConfigurationsFlags flags) of
77+ Just True -> True
78+ Just False -> False
79+ Nothing -> False
7380-- -----------------------------------------------------------------------------
7481-- Clean
7582
@@ -98,12 +105,12 @@ gitHash = do h <- Control.Exception.catch (readProcess "git" ["rev-parse", "--sh
98105-- Put the Git hash into a module for use in the program
99106-- For release builds, just put the empty string in the module
100107generateVersionModule verbosity dir release = do
101− hash <- gitHash
102− let versionModulePath = dir </> "Version_idris" Px.<.> "hs"
103− putStrLn $ "Generating " ++ versionModulePath ++
108+ hash <- gitHash
109+ let versionModulePath = dir </> "Version_idris" Px.<.> "hs"
110+ putStrLn $ "Generating " ++ versionModulePath ++
104111 if release then " for release" else (" for prerelease " ++ hash)
105− createDirectoryIfMissingVerbose verbosity True dir
106− rewriteFile versionModulePath (versionModuleContents hash)
112+ createDirectoryIfMissingVerbose verbosity True dir
113+ rewriteFile versionModulePath (versionModuleContents hash)
107114
108115 where versionModuleContents h = "module Version_idris where\n\n" ++
109116 "gitHash :: String\n" ++
@@ -111,9 +118,38 @@ generateVersionModule verbosity dir release = do
111118 then "gitHash = \"\"\n"
112119 else "gitHash = \"-git:" ++ h ++ "\"\n"
113120
121+-- Generate a module that contains the lib path for a freestanding Idris
122+generateTargetModule verbosity dir targetDir = do
123+ absPath <- return $ isAbsolute targetDir
124+ let targetModulePath = dir </> "Target_idris" Px.<.> "hs"
125+ putStrLn $ "Generating " ++ targetModulePath
126+ createDirectoryIfMissingVerbose verbosity True dir
127+ rewriteFile targetModulePath (versionModuleContents absPath targetDir)
128+ where versionModuleContents absolute td = "module Target_idris where\n\n" ++
129+ "import System.FilePath\n" ++
130+ "import System.Environment\n" ++
131+ "getDataDir :: IO String\n" ++
132+ if absolute
133+ then "getDataDir = return \"" ++ td ++ "\"\n"
134+ else "getDataDir = do \n" ++
135+ " expath <- getExecutablePath\n" ++
136+ " execDir <- return $ dropFileName expath\n" ++
137+ " return $ execDir ++ \"" ++ td ++ "\"\n"
138+ ++ "getDataFileName :: FilePath -> IO FilePath\n"
139+ ++ "getDataFileName name = do\n"
140+ ++ " dir <- getDataDir\n"
141+ ++ " return (dir ++ \"/\" ++ name)"
142+
143+
114144idrisConfigure _ flags _ local = do
115145 configureRTS
116146 generateVersionModule verbosity (autogenModulesDir local) (isRelease (configFlags local))
147+ when (isFreestanding $ configFlags local) (do
148+ targetDir <- lookupEnv "IDRIS_INSTALL_DIR"
149+ case targetDir of
150+ Just d -> generateTargetModule verbosity (autogenModulesDir local) d
151+ Nothing -> error $ "Trying to build freestanding without a target directory."
152+ ++ " Set it by defining IDRIS_INSTALL_DIR.")
117153 where
118154 verbosity = S.fromFlag $ S.configVerbosity flags
119155 version = pkgVersion . package $ localPkgDescr local
@@ -128,12 +164,16 @@ idrisPreSDist args flags = do
128164 let dir = S.fromFlag (S.sDistDirectory flags)
129165 let verb = S.fromFlag (S.sDistVerbosity flags)
130166 generateVersionModule verb ("src") True
167+ generateTargetModule verb "src" "./libs"
131168 preSDist simpleUserHooks args flags
132169
133170idrisPostSDist args flags desc lbi = do
134171 Control.Exception.catch (do let file = "src" </> "Version_idris" Px.<.> "hs"
135− putStrLn $ "Removing generated module " ++ file
136− removeFile file)
172+ let targetFile = "src" </> "Target_idris" Px.<.> "hs"
173+ putStrLn $ "Removing generated modules:\n "
174+ ++ file ++ "\n" ++ targetFile
175+ removeFile file
176+ removeFile targetFile)
137177 (\e -> let e' = (e :: SomeException) in return ())
138178 postSDist simpleUserHooks args flags desc lbi
139179
@@ -168,6 +208,7 @@ idrisBuild _ flags _ local = do
168208 gmpflag True = ["GMP=-DIDRIS_GMP"]
169209
170210
211+
171212-- -----------------------------------------------------------------------------
172213-- Copy/Install
173214
idris.cabal+8
@@ -511,6 +511,11 @@ Flag release
511511 Default: False
512512 manual: True
513513
514+Flag freestanding
515+ Description: Build an Idris that doesn't use cabal
516+ Default: False
517+ manual: True
518+
514519Library
515520 hs-source-dirs: src
516521 Exposed-modules:
@@ -683,6 +688,9 @@ Library
683688 if flag(curses)
684689 build-depends: hscurses
685690 cpp-options: -DCURSES
691+ if flag(freestanding)
692+ other-modules: Target_idris
693+ cpp-options: -DFREESTANDING
686694
687695Executable idris
688696 Main-is: Main.hs
src/IRTS/CodegenC.hs−1
@@ -7,7 +7,6 @@ import IRTS.Simplified
77import IRTS.System
88import IRTS.CodegenCommon
99import Idris.Core.TT
10−import Paths_idris
1110import Util.System
1211
1312import Numeric
src/IRTS/CodegenJavaScript.hs+1−1
@@ -8,7 +8,7 @@ import IRTS.Lang
88import IRTS.Simplified
99import IRTS.CodegenCommon
1010import Idris.Core.TT
11−import Paths_idris
11+import IRTS.System
1212import Util.System
1313
1414import Control.Arrow
src/IRTS/CodegenLLVM.hs−1
@@ -9,7 +9,6 @@ import qualified Idris.Core.TT as TT
99import Idris.Core.TT (ArithTy(..), IntTy(..), NativeTy(..), nativeTyWidth)
1010
1111import Util.System
12−import Paths_idris
1312
1413import LLVM.General.Context
1514import LLVM.General.Diagnostic
src/IRTS/Compiler.hs−2
@@ -47,8 +47,6 @@ import System.Directory
4747import System.Environment
4848import System.FilePath ((</>), addTrailingPathSeparator)
4949
50−import Paths_idris
51−
5250compile :: Codegen -> FilePath -> Term -> Idris ()
5351compile codegen f tm
5452 = do checkMVs -- check for undefined metavariables
src/IRTS/System.hs+7−2
@@ -1,6 +1,6 @@
11{-# LANGUAGE CPP #-}
2−module IRTS.System(getTargetDir,getCC,getLibFlags,getIdrisLibDir,
3− getIncFlags,getMvn,getExecutablePom) where
2+module IRTS.System(getDataFileName, getDataDir, getTargetDir,getCC,getLibFlags,getIdrisLibDir,
3+ getIncFlags,getMvn,getExecutablePom, version) where
44
55import Util.System
66
@@ -9,7 +9,12 @@ import Data.Maybe (fromMaybe)
99import System.FilePath ((</>), addTrailingPathSeparator)
1010import System.Environment
1111
12+#ifdef FREESTANDING
13+import Target_idris
14+import Paths_idris (version)
15+#else
1216import Paths_idris
17+#endif
1318
1419getCC :: IO String
1520getCC = fromMaybe "gcc" <$> environment "IDRIS_CC"
src/Idris/AbsSyntax.hs−2
@@ -14,8 +14,6 @@ import Idris.IdeSlave hiding (Opt(..))
1414import IRTS.CodegenCommon
1515import Util.DynamicLinker
1616
17−import Paths_idris
18−
1917import System.Console.Haskeline
2018import System.IO
2119
src/Idris/AbsSyntaxTree.hs−2
@@ -15,8 +15,6 @@ import Util.DynamicLinker
1515
1616import Idris.Colours
1717
18−import Paths_idris
19−
2018import System.Console.Haskeline
2119import System.IO
2220
src/Idris/DSL.hs−1
@@ -3,7 +3,6 @@
33module Idris.DSL where
44
55import Idris.AbsSyntax
6−import Paths_idris
76
87import Idris.Core.TT
98import Idris.Core.Evaluate
src/Idris/ElabDecls.hs−1
@@ -19,7 +19,6 @@ import Idris.PartialEval
1919import Idris.DeepSeq
2020import Idris.Output (iputStrLn, pshow, iWarn)
2121import IRTS.Lang
22−import Paths_idris
2322
2423import Idris.Core.TT
2524import Idris.Core.Elaborate hiding (Tactic(..))
src/Idris/IdrisDoc.hs+1−1
@@ -14,7 +14,7 @@ import Idris.AbsSyntax
1414import Idris.Docs
1515import Idris.Docstrings (nullDocstring)
1616
17−import Paths_idris (getDataFileName)
17+import IRTS.System (getDataFileName)
1818
1919import Control.Monad (forM_)
2020import Control.Monad.Trans.Error
src/Idris/Imports.hs−1
@@ -4,7 +4,6 @@ import Idris.AbsSyntax
44import Idris.Error
55
66import Idris.Core.TT
7−import Paths_idris
87
98import System.FilePath
109import System.Directory
src/Idris/REPL.hs+1−1
@@ -34,7 +34,6 @@ import Idris.Interactive
3434import Idris.WhoCalls
3535import Idris.TypeSearch (searchByType)
3636
37−import Paths_idris
3837import Version_idris (gitHash)
3938import Util.System
4039import Util.DynamicLinker
@@ -48,6 +47,7 @@ import Idris.Core.Constraints
4847
4948import IRTS.Compiler
5049import IRTS.CodegenCommon
50+import IRTS.System
5151
5252import Data.List.Split (splitOn)
5353import qualified Data.Text as T
src/Pkg/PParser.hs−2
@@ -10,8 +10,6 @@ import Idris.AbsSyntaxTree
1010import Idris.ParseHelpers
1111import Idris.CmdOptions
1212
13−import Paths_idris
14−
1513import Control.Monad.State.Strict
1614import Control.Applicative
1715
src/Pkg/Package.hs−2
@@ -29,8 +29,6 @@ import IRTS.System
2929
3030import Pkg.PParser
3131
32−import Paths_idris (getDataDir)
33−
3432-- To build a package:
3533-- * read the package description
3634-- * check all the library dependencies exist