@@ -18,6 +18,7 @@ import Distribution.Simple.Utils (createDirectoryIfMissingVerbose, rewriteFile,
1818import Distribution.Compiler
1919import Distribution.PackageDescription
2020import Distribution.Text
21+import Distribution.Verbosity
2122
2223import System.Environment
2324import System.Exit
@@ -115,6 +116,18 @@ gitHash = do h <- Control.Exception.catch (readProcess "git" ["rev-parse", "--sh
115116 (\e -> let e' = (e :: SomeException) in return "PRE")
116117 return $ takeWhile (/= '\n') h
117118
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
130+
118131-- Put the Git hash into a module for use in the program
119132-- For release builds, just put the empty string in the module
120133generateVersionModule verbosity dir release = do
@@ -167,8 +180,10 @@ generateToolchainModule verbosity srcDir toolDir = do
167180
168181idrisConfigure _ flags pkgdesc local = do
169182 configureRTS
170− withLibLBI pkgdesc local $ \_ libcfg -> do
183+ withLibLBI pkgdesc local $ \lib libcfg -> do
171184 let libAutogenDir = autogenComponentModulesDir local libcfg
185+ let libDirs = extraLibDirs $ libBuildInfo lib
186+ generateBuildFlagsModule verbosity libAutogenDir libDirs
172187 generateVersionModule verbosity libAutogenDir (isRelease (configFlags local))
173188 if isFreestanding $ configFlags local
174189 then do
@@ -199,6 +214,7 @@ idrisPreSDist args flags = do
199214 let dir = S.fromFlag (S.sDistDirectory flags)
200215 let verb = S.fromFlag (S.sDistVerbosity flags)
201216 generateVersionModule verb "src" True
217+ generateBuildFlagsModule verb "src" []
202218 generateTargetModule verb "src" "./libs"
203219 generateToolchainModule verb "src" Nothing
204220 preSDist simpleUserHooks args flags
@@ -250,7 +266,7 @@ idrisPreBuild args flags = do
250266 return (Nothing, [])
251267#endif
252268
253−idrisBuild _ flags _ local
269+idrisBuild _ flags _ local
254270 = if (execOnly (configFlags local)) then buildRTS
255271 else do buildStdLib
256272 buildRTS
@@ -272,7 +288,7 @@ idrisBuild _ flags _ local
272288-- -----------------------------------------------------------------------------
273289-- Copy/Install
274290
275−idrisInstall verbosity copy pkg local
291+idrisInstall verbosity copy pkg local
276292 = if (execOnly (configFlags local)) then installRTS
277293 else do installStdLib
278294 installRTS