on master help sign in
Merge pull request #3968 from RyanGlScott/master
deca289Niklas Larsson
Setup.hs+33−18
@@ -1,11 +1,15 @@
1{-# LANGUAGE CPP #-}
1{-# LANGUAGE CPP #-}
2
2
3+#if !defined(MIN_VERSION_Cabal)
4+# define MIN_VERSION_Cabal(x,y,z) 0
5+#endif
6+
3import Control.Monad
7import Control.Monad
4import Data.IORef
8import Data.IORef
5import Control.Exception (SomeException, catch)
9import Control.Exception (SomeException, catch)
6
10
7import Distribution.Simple
11import Distribution.Simple
8−import Distribution.Simple.BuildPaths (autogenModulesDir)
12+import Distribution.Simple.BuildPaths
9import Distribution.Simple.InstallDirs as I
13import Distribution.Simple.InstallDirs as I
10import Distribution.Simple.LocalBuildInfo as L
14import Distribution.Simple.LocalBuildInfo as L
11import qualified Distribution.Simple.Setup as S
15import qualified Distribution.Simple.Setup as S
@@ -56,32 +60,37 @@ windres verbosity = P.runProgramInvocation verbosity . P.simpleProgramInvocation
56
60
57usesGMP :: S.ConfigFlags -> Bool
61usesGMP :: S.ConfigFlags -> Bool
58usesGMP flags =
62usesGMP flags =
59− case lookup (FlagName "gmp") (S.configConfigurationsFlags flags) of
63+ case lookup (mkFlagName "gmp") (S.configConfigurationsFlags flags) of
60 Just True -> True
64 Just True -> True
61 Just False -> False
65 Just False -> False
62 Nothing -> False
66 Nothing -> False
63
67
64execOnly :: S.ConfigFlags -> Bool
68execOnly :: S.ConfigFlags -> Bool
65execOnly flags =
69execOnly flags =
66− case lookup (FlagName "execonly") (S.configConfigurationsFlags flags) of
70+ case lookup (mkFlagName "execonly") (S.configConfigurationsFlags flags) of
67 Just True -> True
71 Just True -> True
68 Just False -> False
72 Just False -> False
69 Nothing -> False
73 Nothing -> False
70
74
71isRelease :: S.ConfigFlags -> Bool
75isRelease :: S.ConfigFlags -> Bool
72isRelease flags =
76isRelease flags =
73− case lookup (FlagName "release") (S.configConfigurationsFlags flags) of
77+ case lookup (mkFlagName "release") (S.configConfigurationsFlags flags) of
74 Just True -> True
78 Just True -> True
75 Just False -> False
79 Just False -> False
76 Nothing -> False
80 Nothing -> False
77
81
78isFreestanding :: S.ConfigFlags -> Bool
82isFreestanding :: S.ConfigFlags -> Bool
79isFreestanding flags =
83isFreestanding flags =
80− case lookup (FlagName "freestanding") (S.configConfigurationsFlags flags) of
84+ case lookup (mkFlagName "freestanding") (S.configConfigurationsFlags flags) of
81 Just True -> True
85 Just True -> True
82 Just False -> False
86 Just False -> False
83 Nothing -> False
87 Nothing -> False
84
88
89+#if !(MIN_VERSION_Cabal(2,0,0))
90+mkFlagName :: String -> FlagName
91+mkFlagName = FlagName
92+#endif
93+
85-- -----------------------------------------------------------------------------
94-- -----------------------------------------------------------------------------
86-- Clean
95-- Clean
87
96
@@ -151,20 +160,22 @@ generateToolchainModule verbosity srcDir toolDir = do
151 createDirectoryIfMissingVerbose verbosity True srcDir
160 createDirectoryIfMissingVerbose verbosity True srcDir
152 rewriteFile toolPath (commonContent ++ toolContent)
161 rewriteFile toolPath (commonContent ++ toolContent)
153
162
154−idrisConfigure _ flags _ local = do
163+idrisConfigure _ flags pkgdesc local = do
155 configureRTS
164 configureRTS
165+ withLibLBI pkgdesc local $ \_ libcfg -> do
166+ let libAutogenDir = autogenComponentModulesDir local libcfg
156− generateVersionModule verbosity (autogenModulesDir local) (isRelease (configFlags local))
167+ generateVersionModule verbosity libAutogenDir (isRelease (configFlags local))
157− if isFreestanding $ configFlags local
168+ if isFreestanding $ configFlags local
158− then do
169+ then do
159− toolDir <- lookupEnv "IDRIS_TOOLCHAIN_DIR"
170+ toolDir <- lookupEnv "IDRIS_TOOLCHAIN_DIR"
160− generateToolchainModule verbosity (autogenModulesDir local) toolDir
171+ generateToolchainModule verbosity libAutogenDir toolDir
161− targetDir <- lookupEnv "IDRIS_LIB_DIR"
172+ targetDir <- lookupEnv "IDRIS_LIB_DIR"
162− case targetDir of
173+ case targetDir of
163− Just d -> generateTargetModule verbosity (autogenModulesDir local) d
174+ Just d -> generateTargetModule verbosity libAutogenDir d
164− Nothing -> error $ "Trying to build freestanding without a target directory."
175+ Nothing -> error $ "Trying to build freestanding without a target directory."
165− ++ " Set it by defining IDRIS_LIB_DIR."
176+ ++ " Set it by defining IDRIS_LIB_DIR."
166− else
177+ else
167− generateToolchainModule verbosity (autogenModulesDir local) Nothing
178+ generateToolchainModule verbosity libAutogenDir Nothing
168 where
179 where
169 verbosity = S.fromFlag $ S.configVerbosity flags
180 verbosity = S.fromFlag $ S.configVerbosity flags
170 version = pkgVersion . package $ localPkgDescr local
181 version = pkgVersion . package $ localPkgDescr local
@@ -175,6 +186,10 @@ idrisConfigure _ flags _ local = do
175 -- the file after configure.
186 -- the file after configure.
176 configureRTS = make verbosity ["-C", "rts", "clean"]
187 configureRTS = make verbosity ["-C", "rts", "clean"]
177
188
189+#if !(MIN_VERSION_Cabal(2,0,0))
190+ autogenComponentModulesDir lbi _ = autogenModulesDir lbi
191+#endif
192+
178idrisPreSDist args flags = do
193idrisPreSDist args flags = do
179 let dir = S.fromFlag (S.sDistDirectory flags)
194 let dir = S.fromFlag (S.sDistDirectory flags)
180 let verb = S.fromFlag (S.sDistVerbosity flags)
195 let verb = S.fromFlag (S.sDistVerbosity flags)
idris.cabal+8
@@ -97,6 +97,14 @@ source-repository head
97 type: git
97 type: git
98 location: git://github.com/idris-lang/Idris-dev.git
98 location: git://github.com/idris-lang/Idris-dev.git
99
99
100+custom-setup
101+ setup-depends:
102+ Cabal >= 1.10 && <2.1,
103+ base >= 4 && <5,
104+ directory,
105+ filepath,
106+ process
107+
100Flag FFI
108Flag FFI
101 Description: Build support for libffi
109 Description: Build support for libffi
102 Default: False
110 Default: False