on master help sign in
pbGlobalInstall (pinging @manny-fp)
commit771e1967de5cc1689afbe54b7c46d58d3e305500 authorMichael Snoyman <michael@snoyman.com> dateTue 16 Dec 2014, 09:00 (12 years ago) parent443242b
4 files changed+33−17
ChangeLog.md+5 Stackage/CompleteBuild.hs+1 Stackage/PerformBuild.hs+26−16 stackage.cabal+1−1
ChangeLog.md+5
@@ -1,3 +1,8 @@
1+## 0.2.0.0
2+
3+* Minor fixes
4+* `pbGlobalInstall`
5+
16## 0.1.0.0
27
38First version of Stackage which is made available as its own package. The
Stackage/CompleteBuild.hs+1
@@ -148,6 +148,7 @@ completeBuild buildType = withManager defaultManagerSettings $ \man -> do
148148 , pbLogDir = logDir
149149 , pbLog = hPut stdout
150150 , pbJobs = 8
151+ , pbGlobalInstall = False
151152 }
152153 performBuild pb >>= mapM_ putStrLn
153154
Stackage/PerformBuild.hs+26−16
@@ -18,6 +18,7 @@ import Stackage.BuildPlan
1818import Stackage.Prelude hiding (pi)
1919import qualified Data.Map as Map
2020import Control.Concurrent.STM.TSem
21+import Control.Monad.Writer.Strict (execWriter, tell)
2122import Data.NonNull (fromNullable)
2223import Control.Concurrent.Async (async)
2324import System.IO.Temp (withSystemTempDirectory)
@@ -55,6 +56,8 @@ data PerformBuild = PerformBuild
5556 , pbLog :: ByteString -> IO ()
5657 , pbLogDir :: FilePath
5758 , pbJobs :: Int
59+ , pbGlobalInstall :: Bool
60+ -- ^ Register packages in the global database
5861 }
5962
6063data PackageInfo = PackageInfo
@@ -106,7 +109,9 @@ withCounter counter = bracket_
106109
107110withTSem sem = bracket_ (atomically $ waitTSem sem) (atomically $ signalTSem sem)
108111
109−pbDatabase pb = pbInstallDest pb </> "pkgdb"
112+pbDatabase pb
113+ | pbGlobalInstall pb = Nothing
114+ | otherwise = Just $ pbInstallDest pb </> "pkgdb"
110115pbBinDir pb = pbInstallDest pb </> "bin"
111116pbLibDir pb = pbInstallDest pb </> "lib"
112117pbDataDir pb = pbInstallDest pb </> "share"
@@ -125,9 +130,10 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
125130 let removeTree' fp = whenM (isDirectory fp) (removeTree fp)
126131 mapM_ removeTree' [pbInstallDest, pbLogDir]
127132
128− createTree $ parent $ pbDatabase pb
129− withCheckedProcess (proc "ghc-pkg" ["init", fpToString (pbDatabase pb)])
130− $ \ClosedStream Inherited Inherited -> return ()
133+ forM_ (pbDatabase pb) $ \db -> do
134+ createTree $ parent db
135+ withCheckedProcess (proc "ghc-pkg" ["init", fpToString db])
136+ $ \ClosedStream Inherited Inherited -> return ()
131137 pbLog $ encodeUtf8 "Copying built-in Haddocks\n"
132138 copyBuiltInHaddocks (pbDocDir pb)
133139
@@ -157,8 +163,11 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
157163 , sbBuildDir = builddir
158164 , sbPackageInfo = pi
159165 , sbRegisterMutex = mutex
160− , sbModifiedEnv = ("HASKELL_PACKAGE_SANDBOX", fpToString $ pbDatabase pb)
161− : map fixEnv env
166+ , sbModifiedEnv = maybe
167+ id
168+ (\db -> (("HASKELL_PACKAGE_SANDBOX", fpToString db):))
169+ (pbDatabase pb)
170+ (map fixEnv env)
162171 , sbHaddockFiles = haddockFiles
163172 }
164173
@@ -255,16 +264,17 @@ singleBuild pb@PerformBuild {..} SingleBuild {..} =
255264 createTree $ parent fp
256265 withBinaryFile (fpToString fp) WriteMode inner
257266
258− configArgs =
259− [ "--package-db=clear"
260− , "--package-db=global"
261− , "--package-db=" ++ fpToText (pbDatabase pb)
262− , "--libdir=" ++ fpToText (pbLibDir pb)
263− , "--bindir=" ++ fpToText (pbBinDir pb)
264− , "--datadir=" ++ fpToText (pbDataDir pb)
265− , "--docdir=" ++ fpToText (pbDocDir pb)
266− , "--flags=" ++ flags
267− ]
267+ configArgs = ($ []) $ execWriter $ do
268+ tell' "--package-db=clear"
269+ tell' "--package-db=global"
270+ forM_ (pbDatabase pb) $ \db -> tell' $ "--package-db=" ++ fpToText db
271+ tell' $ "--libdir=" ++ fpToText (pbLibDir pb)
272+ tell' $ "--bindir=" ++ fpToText (pbBinDir pb)
273+ tell' $ "--datadir=" ++ fpToText (pbDataDir pb)
274+ tell' $ "--docdir=" ++ fpToText (pbDocDir pb)
275+ tell' $ "--flags=" ++ flags
276+ where
277+ tell' x = tell (x:)
268278
269279 flags :: Text
270280 flags = unwords $ map go $ mapToList pcFlagOverrides
stackage.cabal+1−1
@@ -1,5 +1,5 @@
11name: stackage
2−version: 0.1.0.0
2+version: 0.2.0.0
33synopsis: "Stable Hackage," tools for creating a vetted set of packages from Hackage.
44description: Please see <http://www.stackage.org/package/stackage> for a description and documentation.
55homepage: https://github.com/fpco/stackage