shake: Re-jig dir positions

This commit is contained in:
Chris Done 2015-01-15 12:22:14 +01:00
parent 1abef8ff44
commit 1d4b4268b3

View File

@ -78,9 +78,7 @@ shakePlan haddockFiles registerLock pb shakeDir = do
target (targetForDocs shakeDir name (ppVersion plan)) $ target (targetForDocs shakeDir name (ppVersion plan)) $
do need [targetForPackage shakeDir name (ppVersion plan)] do need [targetForPackage shakeDir name (ppVersion plan)]
packageDocs haddockFiles shakeDir pb plan name packageDocs haddockFiles shakeDir pb plan name
if True want haddockTargets
then want haddockTargets
else want packageTargets
where versionMappings = M.toList (M.map ppVersion (bpPackages (pbPlan pb))) where versionMappings = M.toList (M.map ppVersion (bpPackages (pbPlan pb)))
corePackages = M.keys $ siCorePackages $ bpSystemInfo $ pbPlan pb corePackages = M.keys $ siCorePackages $ bpSystemInfo $ pbPlan pb
normalPackages = filter (not . (`elem` corePackages) . fst) $ normalPackages = filter (not . (`elem` corePackages) . fst) $
@ -104,7 +102,7 @@ packageDocs haddockFiles shakeDir pb plan name = do
where haddocksFlag = pcHaddocks $ ppConstraints plan where haddocksFlag = pcHaddocks $ ppConstraints plan
defaultEnv pwd = [( "HASKELL_PACKAGE_SANDBOX" defaultEnv pwd = [( "HASKELL_PACKAGE_SANDBOX"
, pwd <//> buildDatabase shakeDir) | pbGlobalInstall pb] , pwd <//> buildDatabase shakeDir) | pbGlobalInstall pb]
pkgDir = shakeDir <//> nameVer pkgDir = shakeDir <//> "packages" <//> nameVer
nameVer = display name ++ nameVer = display name ++
"-" ++ "-" ++
display (ppVersion plan) display (ppVersion plan)
@ -139,7 +137,7 @@ packageTarget haddockFiles registerLock pb shakeDir name plan = do
M.keys $ M.filter libAndExe $ sdPackages $ ppDesc plan M.keys $ M.filter libAndExe $ sdPackages $ ppDesc plan
pwd <- liftIO getCurrentDirectory pwd <- liftIO getCurrentDirectory
env <- liftIO (fmap (Env . (++ defaultEnv pwd)) getEnvironment) env <- liftIO (fmap (Env . (++ defaultEnv pwd)) getEnvironment)
unpack shakeDir nameVer unpack shakeDir name nameVer
configure shakeDir pkgDir env pb plan configure shakeDir pkgDir env pb plan
() <- cmd cwd env "cabal" "build" "--ghc-options=-O0" () <- cmd cwd env "cabal" "build" "--ghc-options=-O0"
register pkgDir env registerLock register pkgDir env registerLock
@ -148,7 +146,7 @@ packageTarget haddockFiles registerLock pb shakeDir name plan = do
cwd = Cwd pkgDir cwd = Cwd pkgDir
defaultEnv pwd = [( "HASKELL_PACKAGE_SANDBOX" defaultEnv pwd = [( "HASKELL_PACKAGE_SANDBOX"
, pwd <//> buildDatabase shakeDir) | pbGlobalInstall pb] , pwd <//> buildDatabase shakeDir) | pbGlobalInstall pb]
pkgDir = shakeDir <//> nameVer pkgDir = shakeDir <//> "packages" <//> nameVer
nameVer = display name ++ nameVer = display name ++
"-" ++ "-" ++
display (ppVersion plan) display (ppVersion plan)
@ -166,26 +164,25 @@ fetchedTarget shakeDir pb = do
makeFile (targetForFetched shakeDir) makeFile (targetForFetched shakeDir)
-- | Unpack the package. -- | Unpack the package.
unpack :: FilePath -> String -> Action () unpack :: FilePath -> PackageName -> String -> Action ()
unpack shakeDir nameVer = do unpack shakeDir name nameVer = do
unpacked <- liftIO (doesDirectoryExist pkgDir) unpacked <- liftIO (doesFileExist (pkgDir <//> display name ++ ".cabal"))
unless unpacked $ unless unpacked $
cmd (Cwd shakeDir) "cabal" "unpack" nameVer do liftIO (catch (removeDirectoryRecursive pkgDir)
where pkgDir = shakeDir <//> nameVer (\(_ :: IOException) -> return ()))
cmd (Cwd (shakeDir <//> "packages")) "cabal" "unpack" nameVer
where pkgDir = shakeDir <//> "packages" <//> nameVer
-- | Configure the given package. -- | Configure the given package.
configure :: FilePath -> FilePath -> CmdOption -> PerformBuild -> PackagePlan -> Action () configure :: FilePath -> FilePath -> CmdOption -> PerformBuild -> PackagePlan -> Action ()
configure shakeDir pkgDir env pb plan = do configure shakeDir pkgDir env pb plan = do
configured <- liftIO $ doesFileExist $ pkgDir <//> "dist" <//> pwd <- liftIO getCurrentDirectory
"setup-config" cmd
unless configured $ (Cwd pkgDir)
do pwd <- liftIO getCurrentDirectory env
cmd "cabal"
(Cwd pkgDir) "configure"
env (opts pwd)
"cabal"
"configure"
(opts pwd)
where opts pwd = [ "--package-db=clear" where opts pwd = [ "--package-db=clear"
, "--package-db=global" , "--package-db=global"
, "--libdir=" ++ pbLibDir shakeDir , "--libdir=" ++ pbLibDir shakeDir
@ -287,12 +284,12 @@ buildDatabase shakeDir = shakeDir <//> "pkgdb"
-- pre-fetched. -- pre-fetched.
targetForFetched :: FilePath -> FilePath targetForFetched :: FilePath -> FilePath
targetForFetched shakeDir = targetForFetched shakeDir =
shakeDir <//> "fetched" shakeDir <//> "packages-fetched"
-- | Get the target file for a package. -- | Get the target file for a package.
targetForPackage :: FilePath -> PackageName -> Version -> FilePath targetForPackage :: FilePath -> PackageName -> Version -> FilePath
targetForPackage shakeDir name version = targetForPackage shakeDir name version =
shakeDir <//> "packages" <//> nameVer shakeDir <//> "packages" <//> nameVer <//> "dist" <//> "shake-build"
where nameVer = display name ++ where nameVer = display name ++
"-" ++ "-" ++
display version display version
@ -300,7 +297,7 @@ targetForPackage shakeDir name version =
-- | Get the target file for a package. -- | Get the target file for a package.
targetForDocs :: FilePath -> PackageName -> Version -> FilePath targetForDocs :: FilePath -> PackageName -> Version -> FilePath
targetForDocs shakeDir name version = targetForDocs shakeDir name version =
shakeDir <//> "docs" <//> nameVer shakeDir <//> "packages" <//> nameVer <//> "dist" <//> "shake-docs"
where nameVer = display name ++ where nameVer = display name ++
"-" ++ "-" ++
display version display version
@ -308,7 +305,7 @@ targetForDocs shakeDir name version =
-- | Get a package database path. -- | Get a package database path.
targetForDb :: FilePath -> FilePath targetForDb :: FilePath -> FilePath
targetForDb shakeDir = targetForDb shakeDir =
shakeDir <//> "pkgdb-built" shakeDir <//> "pkgdb-initialized"
-- | Declare a target, returning the target name. -- | Declare a target, returning the target name.
target :: FilePattern -> Action () -> Rules FilePattern target :: FilePattern -> Action () -> Rules FilePattern