on master help sign in
Support builds that doesn't use cabal for libs and rts
67f7373niklas
Setup.hs+49−8
@@ -13,8 +13,9 @@ import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile)
13import Distribution.PackageDescription
13import Distribution.PackageDescription
14import Distribution.Text
14import Distribution.Text
15
15
16+import System.Environment
16import System.Exit
17import System.Exit
17−import System.FilePath ((</>), splitDirectories)
18+import System.FilePath ((</>), splitDirectories,isAbsolute)
18import System.Directory
19import System.Directory
19import qualified System.FilePath.Posix as Px
20import qualified System.FilePath.Posix as Px
20import System.Process
21import System.Process
@@ -70,6 +71,12 @@ isRelease flags =
70 Just False -> False
71 Just False -> False
71 Nothing -> False
72 Nothing -> False
72
73
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
73-- -----------------------------------------------------------------------------
80-- -----------------------------------------------------------------------------
74-- Clean
81-- Clean
75
82
@@ -98,12 +105,12 @@ gitHash = do h <- Control.Exception.catch (readProcess "git" ["rev-parse", "--sh
98-- Put the Git hash into a module for use in the program
105-- Put the Git hash into a module for use in the program
99-- For release builds, just put the empty string in the module
106-- For release builds, just put the empty string in the module
100generateVersionModule verbosity dir release = do
107generateVersionModule verbosity dir release = do
101− hash <- gitHash
108+ hash <- gitHash
102− let versionModulePath = dir </> "Version_idris" Px.<.> "hs"
109+ let versionModulePath = dir </> "Version_idris" Px.<.> "hs"
103− putStrLn $ "Generating " ++ versionModulePath ++
110+ putStrLn $ "Generating " ++ versionModulePath ++
104 if release then " for release" else (" for prerelease " ++ hash)
111 if release then " for release" else (" for prerelease " ++ hash)
105− createDirectoryIfMissingVerbose verbosity True dir
112+ createDirectoryIfMissingVerbose verbosity True dir
106− rewriteFile versionModulePath (versionModuleContents hash)
113+ rewriteFile versionModulePath (versionModuleContents hash)
107
114
108 where versionModuleContents h = "module Version_idris where\n\n" ++
115 where versionModuleContents h = "module Version_idris where\n\n" ++
109 "gitHash :: String\n" ++
116 "gitHash :: String\n" ++
@@ -111,9 +118,38 @@ generateVersionModule verbosity dir release = do
111 then "gitHash = \"\"\n"
118 then "gitHash = \"\"\n"
112 else "gitHash = \"-git:" ++ h ++ "\"\n"
119 else "gitHash = \"-git:" ++ h ++ "\"\n"
113
120
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+
114idrisConfigure _ flags _ local = do
144idrisConfigure _ flags _ local = do
115 configureRTS
145 configureRTS
116 generateVersionModule verbosity (autogenModulesDir local) (isRelease (configFlags local))
146 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.")
117 where
153 where
118 verbosity = S.fromFlag $ S.configVerbosity flags
154 verbosity = S.fromFlag $ S.configVerbosity flags
119 version = pkgVersion . package $ localPkgDescr local
155 version = pkgVersion . package $ localPkgDescr local
@@ -128,12 +164,16 @@ idrisPreSDist args flags = do
128 let dir = S.fromFlag (S.sDistDirectory flags)
164 let dir = S.fromFlag (S.sDistDirectory flags)
129 let verb = S.fromFlag (S.sDistVerbosity flags)
165 let verb = S.fromFlag (S.sDistVerbosity flags)
130 generateVersionModule verb ("src") True
166 generateVersionModule verb ("src") True
167+ generateTargetModule verb "src" "./libs"
131 preSDist simpleUserHooks args flags
168 preSDist simpleUserHooks args flags
132
169
133idrisPostSDist args flags desc lbi = do
170idrisPostSDist args flags desc lbi = do
134 Control.Exception.catch (do let file = "src" </> "Version_idris" Px.<.> "hs"
171 Control.Exception.catch (do let file = "src" </> "Version_idris" Px.<.> "hs"
172+ let targetFile = "src" </> "Target_idris" Px.<.> "hs"
135− putStrLn $ "Removing generated module " ++ file
173+ putStrLn $ "Removing generated modules:\n "
174+ ++ file ++ "\n" ++ targetFile
175+ removeFile file
136− removeFile file)
176+ removeFile targetFile)
137 (\e -> let e' = (e :: SomeException) in return ())
177 (\e -> let e' = (e :: SomeException) in return ())
138 postSDist simpleUserHooks args flags desc lbi
178 postSDist simpleUserHooks args flags desc lbi
139
179
@@ -168,6 +208,7 @@ idrisBuild _ flags _ local = do
168 gmpflag True = ["GMP=-DIDRIS_GMP"]
208 gmpflag True = ["GMP=-DIDRIS_GMP"]
169
209
170
210
211+
171-- -----------------------------------------------------------------------------
212-- -----------------------------------------------------------------------------
172-- Copy/Install
213-- Copy/Install
173
214
idris.cabal+8
@@ -511,6 +511,11 @@ Flag release
511 Default: False
511 Default: False
512 manual: True
512 manual: True
513
513
514+Flag freestanding
515+ Description: Build an Idris that doesn't use cabal
516+ Default: False
517+ manual: True
518+
514Library
519Library
515 hs-source-dirs: src
520 hs-source-dirs: src
516 Exposed-modules:
521 Exposed-modules:
@@ -683,6 +688,9 @@ Library
683 if flag(curses)
688 if flag(curses)
684 build-depends: hscurses
689 build-depends: hscurses
685 cpp-options: -DCURSES
690 cpp-options: -DCURSES
691+ if flag(freestanding)
692+ other-modules: Target_idris
693+ cpp-options: -DFREESTANDING
686
694
687Executable idris
695Executable idris
688 Main-is: Main.hs
696 Main-is: Main.hs
src/IRTS/CodegenC.hs−1
@@ -7,7 +7,6 @@ import IRTS.Simplified
7import IRTS.System
7import IRTS.System
8import IRTS.CodegenCommon
8import IRTS.CodegenCommon
9import Idris.Core.TT
9import Idris.Core.TT
10−import Paths_idris
11import Util.System
10import Util.System
12
11
13import Numeric
12import Numeric
src/IRTS/CodegenJavaScript.hs+1−1
@@ -8,7 +8,7 @@ import IRTS.Lang
8import IRTS.Simplified
8import IRTS.Simplified
9import IRTS.CodegenCommon
9import IRTS.CodegenCommon
10import Idris.Core.TT
10import Idris.Core.TT
11−import Paths_idris
11+import IRTS.System
12import Util.System
12import Util.System
13
13
14import Control.Arrow
14import Control.Arrow
src/IRTS/CodegenLLVM.hs−1
@@ -9,7 +9,6 @@ import qualified Idris.Core.TT as TT
9import Idris.Core.TT (ArithTy(..), IntTy(..), NativeTy(..), nativeTyWidth)
9import Idris.Core.TT (ArithTy(..), IntTy(..), NativeTy(..), nativeTyWidth)
10
10
11import Util.System
11import Util.System
12−import Paths_idris
13
12
14import LLVM.General.Context
13import LLVM.General.Context
15import LLVM.General.Diagnostic
14import LLVM.General.Diagnostic
src/IRTS/Compiler.hs−2
@@ -47,8 +47,6 @@ import System.Directory
47import System.Environment
47import System.Environment
48import System.FilePath ((</>), addTrailingPathSeparator)
48import System.FilePath ((</>), addTrailingPathSeparator)
49
49
50−import Paths_idris
51−
52compile :: Codegen -> FilePath -> Term -> Idris ()
50compile :: Codegen -> FilePath -> Term -> Idris ()
53compile codegen f tm
51compile codegen f tm
54 = do checkMVs -- check for undefined metavariables
52 = do checkMVs -- check for undefined metavariables
src/IRTS/System.hs+7−2
@@ -1,6 +1,6 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2−module IRTS.System(getTargetDir,getCC,getLibFlags,getIdrisLibDir,
2+module IRTS.System(getDataFileName, getDataDir, getTargetDir,getCC,getLibFlags,getIdrisLibDir,
3− getIncFlags,getMvn,getExecutablePom) where
3+ getIncFlags,getMvn,getExecutablePom, version) where
4
4
5import Util.System
5import Util.System
6
6
@@ -9,7 +9,12 @@ import Data.Maybe (fromMaybe)
9import System.FilePath ((</>), addTrailingPathSeparator)
9import System.FilePath ((</>), addTrailingPathSeparator)
10import System.Environment
10import System.Environment
11
11
12+#ifdef FREESTANDING
13+import Target_idris
14+import Paths_idris (version)
15+#else
12import Paths_idris
16import Paths_idris
17+#endif
13
18
14getCC :: IO String
19getCC :: IO String
15getCC = fromMaybe "gcc" <$> environment "IDRIS_CC"
20getCC = fromMaybe "gcc" <$> environment "IDRIS_CC"
src/Idris/AbsSyntax.hs−2
@@ -14,8 +14,6 @@ import Idris.IdeSlave hiding (Opt(..))
14import IRTS.CodegenCommon
14import IRTS.CodegenCommon
15import Util.DynamicLinker
15import Util.DynamicLinker
16
16
17−import Paths_idris
18−
19import System.Console.Haskeline
17import System.Console.Haskeline
20import System.IO
18import System.IO
21
19
src/Idris/AbsSyntaxTree.hs−2
@@ -15,8 +15,6 @@ import Util.DynamicLinker
15
15
16import Idris.Colours
16import Idris.Colours
17
17
18−import Paths_idris
19−
20import System.Console.Haskeline
18import System.Console.Haskeline
21import System.IO
19import System.IO
22
20
src/Idris/DSL.hs−1
@@ -3,7 +3,6 @@
3module Idris.DSL where
3module Idris.DSL where
4
4
5import Idris.AbsSyntax
5import Idris.AbsSyntax
6−import Paths_idris
7
6
8import Idris.Core.TT
7import Idris.Core.TT
9import Idris.Core.Evaluate
8import Idris.Core.Evaluate
src/Idris/ElabDecls.hs−1
@@ -19,7 +19,6 @@ import Idris.PartialEval
19import Idris.DeepSeq
19import Idris.DeepSeq
20import Idris.Output (iputStrLn, pshow, iWarn)
20import Idris.Output (iputStrLn, pshow, iWarn)
21import IRTS.Lang
21import IRTS.Lang
22−import Paths_idris
23
22
24import Idris.Core.TT
23import Idris.Core.TT
25import Idris.Core.Elaborate hiding (Tactic(..))
24import Idris.Core.Elaborate hiding (Tactic(..))
src/Idris/IdrisDoc.hs+1−1
@@ -14,7 +14,7 @@ import Idris.AbsSyntax
14import Idris.Docs
14import Idris.Docs
15import Idris.Docstrings (nullDocstring)
15import Idris.Docstrings (nullDocstring)
16
16
17−import Paths_idris (getDataFileName)
17+import IRTS.System (getDataFileName)
18
18
19import Control.Monad (forM_)
19import Control.Monad (forM_)
20import Control.Monad.Trans.Error
20import Control.Monad.Trans.Error
src/Idris/Imports.hs−1
@@ -4,7 +4,6 @@ import Idris.AbsSyntax
4import Idris.Error
4import Idris.Error
5
5
6import Idris.Core.TT
6import Idris.Core.TT
7−import Paths_idris
8
7
9import System.FilePath
8import System.FilePath
10import System.Directory
9import System.Directory
src/Idris/REPL.hs+1−1
@@ -34,7 +34,6 @@ import Idris.Interactive
34import Idris.WhoCalls
34import Idris.WhoCalls
35import Idris.TypeSearch (searchByType)
35import Idris.TypeSearch (searchByType)
36
36
37−import Paths_idris
38import Version_idris (gitHash)
37import Version_idris (gitHash)
39import Util.System
38import Util.System
40import Util.DynamicLinker
39import Util.DynamicLinker
@@ -48,6 +47,7 @@ import Idris.Core.Constraints
48
47
49import IRTS.Compiler
48import IRTS.Compiler
50import IRTS.CodegenCommon
49import IRTS.CodegenCommon
50+import IRTS.System
51
51
52import Data.List.Split (splitOn)
52import Data.List.Split (splitOn)
53import qualified Data.Text as T
53import qualified Data.Text as T
src/Pkg/PParser.hs−2
@@ -10,8 +10,6 @@ import Idris.AbsSyntaxTree
10import Idris.ParseHelpers
10import Idris.ParseHelpers
11import Idris.CmdOptions
11import Idris.CmdOptions
12
12
13−import Paths_idris
14−
15import Control.Monad.State.Strict
13import Control.Monad.State.Strict
16import Control.Applicative
14import Control.Applicative
17
15
src/Pkg/Package.hs−2
@@ -29,8 +29,6 @@ import IRTS.System
29
29
30import Pkg.PParser
30import Pkg.PParser
31
31
32−import Paths_idris (getDataDir)
33−
34-- To build a package:
32-- To build a package:
35-- * read the package description
33-- * read the package description
36-- * check all the library dependencies exist
34-- * check all the library dependencies exist