diff --git a/ChangeLog.md b/ChangeLog.md index 7c816071..dca36e11 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,8 @@ +## 0.2.0.0 + +* Minor fixes +* `pbGlobalInstall` + ## 0.1.0.0 First version of Stackage which is made available as its own package. The diff --git a/Stackage/CompleteBuild.hs b/Stackage/CompleteBuild.hs index ab587e94..6da91210 100644 --- a/Stackage/CompleteBuild.hs +++ b/Stackage/CompleteBuild.hs @@ -148,6 +148,7 @@ completeBuild buildType = withManager defaultManagerSettings $ \man -> do , pbLogDir = logDir , pbLog = hPut stdout , pbJobs = 8 + , pbGlobalInstall = False } performBuild pb >>= mapM_ putStrLn diff --git a/Stackage/PerformBuild.hs b/Stackage/PerformBuild.hs index e0e0883a..e2bff2aa 100644 --- a/Stackage/PerformBuild.hs +++ b/Stackage/PerformBuild.hs @@ -18,6 +18,7 @@ import Stackage.BuildPlan import Stackage.Prelude hiding (pi) import qualified Data.Map as Map import Control.Concurrent.STM.TSem +import Control.Monad.Writer.Strict (execWriter, tell) import Data.NonNull (fromNullable) import Control.Concurrent.Async (async) import System.IO.Temp (withSystemTempDirectory) @@ -55,6 +56,8 @@ data PerformBuild = PerformBuild , pbLog :: ByteString -> IO () , pbLogDir :: FilePath , pbJobs :: Int + , pbGlobalInstall :: Bool + -- ^ Register packages in the global database } data PackageInfo = PackageInfo @@ -106,7 +109,9 @@ withCounter counter = bracket_ withTSem sem = bracket_ (atomically $ waitTSem sem) (atomically $ signalTSem sem) -pbDatabase pb = pbInstallDest pb "pkgdb" +pbDatabase pb + | pbGlobalInstall pb = Nothing + | otherwise = Just $ pbInstallDest pb "pkgdb" pbBinDir pb = pbInstallDest pb "bin" pbLibDir pb = pbInstallDest pb "lib" pbDataDir pb = pbInstallDest pb "share" @@ -125,9 +130,10 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do let removeTree' fp = whenM (isDirectory fp) (removeTree fp) mapM_ removeTree' [pbInstallDest, pbLogDir] - createTree $ parent $ pbDatabase pb - withCheckedProcess (proc "ghc-pkg" ["init", fpToString (pbDatabase pb)]) - $ \ClosedStream Inherited Inherited -> return () + forM_ (pbDatabase pb) $ \db -> do + createTree $ parent db + withCheckedProcess (proc "ghc-pkg" ["init", fpToString db]) + $ \ClosedStream Inherited Inherited -> return () pbLog $ encodeUtf8 "Copying built-in Haddocks\n" copyBuiltInHaddocks (pbDocDir pb) @@ -157,8 +163,11 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do , sbBuildDir = builddir , sbPackageInfo = pi , sbRegisterMutex = mutex - , sbModifiedEnv = ("HASKELL_PACKAGE_SANDBOX", fpToString $ pbDatabase pb) - : map fixEnv env + , sbModifiedEnv = maybe + id + (\db -> (("HASKELL_PACKAGE_SANDBOX", fpToString db):)) + (pbDatabase pb) + (map fixEnv env) , sbHaddockFiles = haddockFiles } @@ -255,16 +264,17 @@ singleBuild pb@PerformBuild {..} SingleBuild {..} = createTree $ parent fp withBinaryFile (fpToString fp) WriteMode inner - configArgs = - [ "--package-db=clear" - , "--package-db=global" - , "--package-db=" ++ fpToText (pbDatabase pb) - , "--libdir=" ++ fpToText (pbLibDir pb) - , "--bindir=" ++ fpToText (pbBinDir pb) - , "--datadir=" ++ fpToText (pbDataDir pb) - , "--docdir=" ++ fpToText (pbDocDir pb) - , "--flags=" ++ flags - ] + configArgs = ($ []) $ execWriter $ do + tell' "--package-db=clear" + tell' "--package-db=global" + forM_ (pbDatabase pb) $ \db -> tell' $ "--package-db=" ++ fpToText db + tell' $ "--libdir=" ++ fpToText (pbLibDir pb) + tell' $ "--bindir=" ++ fpToText (pbBinDir pb) + tell' $ "--datadir=" ++ fpToText (pbDataDir pb) + tell' $ "--docdir=" ++ fpToText (pbDocDir pb) + tell' $ "--flags=" ++ flags + where + tell' x = tell (x:) flags :: Text flags = unwords $ map go $ mapToList pcFlagOverrides diff --git a/stackage.cabal b/stackage.cabal index 1ee00fe7..70135e13 100644 --- a/stackage.cabal +++ b/stackage.cabal @@ -1,5 +1,5 @@ name: stackage -version: 0.1.0.0 +version: 0.2.0.0 synopsis: "Stable Hackage," tools for creating a vetted set of packages from Hackage. description: Please see for a description and documentation. homepage: https://github.com/fpco/stackage