@@ -18,6 +18,7 @@ import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile,
18import Distribution.Compiler
18import Distribution.Compiler
19import Distribution.PackageDescription
19import Distribution.PackageDescription
20import Distribution.Text
20import Distribution.Text
21+import Distribution.Verbosity
22import System.Environment
23import System.Environment
23import System.Exit
24import System.Exit
@@ -115,6 +116,18 @@ gitHash = do h <- Control.Exception.catch (readProcess "git" ["rev-parse", "--sh
115 (\e -> let e' = (e :: SomeException) in return "PRE")
116 (\e -> let e' = (e :: SomeException) in return "PRE")
116 return $ takeWhile (/= '\n') h
117 return $ takeWhile (/= '\n') h
119+-- Generate a module that contains extra library directories passed
120+-- via command-line to cabal
121+generateBuildFlagsModule :: Verbosity -> FilePath -> [String] -> IO ()
122+generateBuildFlagsModule verbosity dir libdirs = do
123+ let buildFlagsModulePath = dir </> "BuildFlags_idris" Px.<.> "hs"
124+ putStrLn $ "Generating " ++ buildFlagsModulePath
125+ createDirectoryIfMissingVerbose verbosity True dir
126+ rewriteFile buildFlagsModulePath contents
127+ where contents = "module BuildFlags_idris where \n\n" ++
128+ "extraLibDirs :: [String]\n" ++
129+ "extraLibDirs = " ++ show libdirs
118-- Put the Git hash into a module for use in the program
131-- Put the Git hash into a module for use in the program
119-- For release builds, just put the empty string in the module
132-- For release builds, just put the empty string in the module
120generateVersionModule verbosity dir release = do
133generateVersionModule verbosity dir release = do
@@ -167,8 +180,10 @@ generateToolchainModule verbosity srcDir toolDir = do
168idrisConfigure _ flags pkgdesc local = do
181idrisConfigure _ flags pkgdesc local = do
169 configureRTS
182 configureRTS
170− withLibLBI pkgdesc local $ \_ libcfg -> do
183+ withLibLBI pkgdesc local $ \lib libcfg -> do
171 let libAutogenDir = autogenComponentModulesDir local libcfg
184 let libAutogenDir = autogenComponentModulesDir local libcfg
185+ let libDirs = extraLibDirs $ libBuildInfo lib
186+ generateBuildFlagsModule verbosity libAutogenDir libDirs
172 generateVersionModule verbosity libAutogenDir (isRelease (configFlags local))
187 generateVersionModule verbosity libAutogenDir (isRelease (configFlags local))
173 if isFreestanding $ configFlags local
188 if isFreestanding $ configFlags local
@@ -199,6 +214,7 @@ idrisPreSDist args flags = do
199 let dir = S.fromFlag (S.sDistDirectory flags)
214 let dir = S.fromFlag (S.sDistDirectory flags)
200 let verb = S.fromFlag (S.sDistVerbosity flags)
215 let verb = S.fromFlag (S.sDistVerbosity flags)
201 generateVersionModule verb "src" True
216 generateVersionModule verb "src" True
217+ generateBuildFlagsModule verb "src" []
202 generateTargetModule verb "src" "./libs"
218 generateTargetModule verb "src" "./libs"
203 generateToolchainModule verb "src" Nothing
219 generateToolchainModule verb "src" Nothing
204 preSDist simpleUserHooks args flags
220 preSDist simpleUserHooks args flags
@@ -250,7 +266,7 @@ idrisPreBuild args flags = do
250 return (Nothing, [])
266 return (Nothing, [])
253−idrisBuild _ flags _ local
269+idrisBuild _ flags _ local
254 = if (execOnly (configFlags local)) then buildRTS
270 = if (execOnly (configFlags local)) then buildRTS
255 else do buildStdLib
271 else do buildStdLib
@@ -272,7 +288,7 @@ idrisBuild _ flags _ local
272-- -----------------------------------------------------------------------------
288-- -----------------------------------------------------------------------------
273-- Copy/Install
289-- Copy/Install
275−idrisInstall verbosity copy pkg local
291+idrisInstall verbosity copy pkg local
276 = if (execOnly (configFlags local)) then installRTS
292 = if (execOnly (configFlags local)) then installRTS
277 else do installStdLib
293 else do installStdLib
278 installRTS
294 installRTS