pbGlobalInstall (pinging @manny-fp)

This commit is contained in:
Michael Snoyman 2014-12-16 09:00:19 +02:00
parent 443242b3cc
commit 771e1967de
4 changed files with 33 additions and 17 deletions

View File

@ -1,3 +1,8 @@
## 0.2.0.0
* Minor fixes
* `pbGlobalInstall`
## 0.1.0.0 ## 0.1.0.0
First version of Stackage which is made available as its own package. The First version of Stackage which is made available as its own package. The

View File

@ -148,6 +148,7 @@ completeBuild buildType = withManager defaultManagerSettings $ \man -> do
, pbLogDir = logDir , pbLogDir = logDir
, pbLog = hPut stdout , pbLog = hPut stdout
, pbJobs = 8 , pbJobs = 8
, pbGlobalInstall = False
} }
performBuild pb >>= mapM_ putStrLn performBuild pb >>= mapM_ putStrLn

View File

@ -18,6 +18,7 @@ import Stackage.BuildPlan
import Stackage.Prelude hiding (pi) import Stackage.Prelude hiding (pi)
import qualified Data.Map as Map import qualified Data.Map as Map
import Control.Concurrent.STM.TSem import Control.Concurrent.STM.TSem
import Control.Monad.Writer.Strict (execWriter, tell)
import Data.NonNull (fromNullable) import Data.NonNull (fromNullable)
import Control.Concurrent.Async (async) import Control.Concurrent.Async (async)
import System.IO.Temp (withSystemTempDirectory) import System.IO.Temp (withSystemTempDirectory)
@ -55,6 +56,8 @@ data PerformBuild = PerformBuild
, pbLog :: ByteString -> IO () , pbLog :: ByteString -> IO ()
, pbLogDir :: FilePath , pbLogDir :: FilePath
, pbJobs :: Int , pbJobs :: Int
, pbGlobalInstall :: Bool
-- ^ Register packages in the global database
} }
data PackageInfo = PackageInfo data PackageInfo = PackageInfo
@ -106,7 +109,9 @@ withCounter counter = bracket_
withTSem sem = bracket_ (atomically $ waitTSem sem) (atomically $ signalTSem sem) 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" pbBinDir pb = pbInstallDest pb </> "bin"
pbLibDir pb = pbInstallDest pb </> "lib" pbLibDir pb = pbInstallDest pb </> "lib"
pbDataDir pb = pbInstallDest pb </> "share" pbDataDir pb = pbInstallDest pb </> "share"
@ -125,9 +130,10 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
let removeTree' fp = whenM (isDirectory fp) (removeTree fp) let removeTree' fp = whenM (isDirectory fp) (removeTree fp)
mapM_ removeTree' [pbInstallDest, pbLogDir] mapM_ removeTree' [pbInstallDest, pbLogDir]
createTree $ parent $ pbDatabase pb forM_ (pbDatabase pb) $ \db -> do
withCheckedProcess (proc "ghc-pkg" ["init", fpToString (pbDatabase pb)]) createTree $ parent db
$ \ClosedStream Inherited Inherited -> return () withCheckedProcess (proc "ghc-pkg" ["init", fpToString db])
$ \ClosedStream Inherited Inherited -> return ()
pbLog $ encodeUtf8 "Copying built-in Haddocks\n" pbLog $ encodeUtf8 "Copying built-in Haddocks\n"
copyBuiltInHaddocks (pbDocDir pb) copyBuiltInHaddocks (pbDocDir pb)
@ -157,8 +163,11 @@ performBuild' pb@PerformBuild {..} = withBuildDir $ \builddir -> do
, sbBuildDir = builddir , sbBuildDir = builddir
, sbPackageInfo = pi , sbPackageInfo = pi
, sbRegisterMutex = mutex , sbRegisterMutex = mutex
, sbModifiedEnv = ("HASKELL_PACKAGE_SANDBOX", fpToString $ pbDatabase pb) , sbModifiedEnv = maybe
: map fixEnv env id
(\db -> (("HASKELL_PACKAGE_SANDBOX", fpToString db):))
(pbDatabase pb)
(map fixEnv env)
, sbHaddockFiles = haddockFiles , sbHaddockFiles = haddockFiles
} }
@ -255,16 +264,17 @@ singleBuild pb@PerformBuild {..} SingleBuild {..} =
createTree $ parent fp createTree $ parent fp
withBinaryFile (fpToString fp) WriteMode inner withBinaryFile (fpToString fp) WriteMode inner
configArgs = configArgs = ($ []) $ execWriter $ do
[ "--package-db=clear" tell' "--package-db=clear"
, "--package-db=global" tell' "--package-db=global"
, "--package-db=" ++ fpToText (pbDatabase pb) forM_ (pbDatabase pb) $ \db -> tell' $ "--package-db=" ++ fpToText db
, "--libdir=" ++ fpToText (pbLibDir pb) tell' $ "--libdir=" ++ fpToText (pbLibDir pb)
, "--bindir=" ++ fpToText (pbBinDir pb) tell' $ "--bindir=" ++ fpToText (pbBinDir pb)
, "--datadir=" ++ fpToText (pbDataDir pb) tell' $ "--datadir=" ++ fpToText (pbDataDir pb)
, "--docdir=" ++ fpToText (pbDocDir pb) tell' $ "--docdir=" ++ fpToText (pbDocDir pb)
, "--flags=" ++ flags tell' $ "--flags=" ++ flags
] where
tell' x = tell (x:)
flags :: Text flags :: Text
flags = unwords $ map go $ mapToList pcFlagOverrides flags = unwords $ map go $ mapToList pcFlagOverrides

View File

@ -1,5 +1,5 @@
name: stackage 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. synopsis: "Stable Hackage," tools for creating a vetted set of packages from Hackage.
description: Please see <http://www.stackage.org/package/stackage> for a description and documentation. description: Please see <http://www.stackage.org/package/stackage> for a description and documentation.
homepage: https://github.com/fpco/stackage homepage: https://github.com/fpco/stackage