Repository : ssh://darcs.haskell.org//srv/darcs/packages/Cabal On branch : master
http://hackage.haskell.org/trac/ghc/changeset/1fe6681ab3dc2d33bfef7a6ff55a13cee03f6ced >--------------------------------------------------------------- commit 1fe6681ab3dc2d33bfef7a6ff55a13cee03f6ced Author: Duncan Coutts <[email protected]> Date: Tue Aug 12 16:21:43 2008 +0000 Regig install pipeline, pass the PackageDescription Rather than the GenericPackageDescription. >--------------------------------------------------------------- cabal-install/Distribution/Client/Install.hs | 52 ++++++++++++++++---------- 1 files changed, 32 insertions(+), 20 deletions(-) diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs index 71cb05b..d6389a9 100644 --- a/cabal-install/Distribution/Client/Install.hs +++ b/cabal-install/Distribution/Client/Install.hs @@ -60,7 +60,7 @@ import qualified Distribution.Client.InstallSymlink as InstallSymlink import Paths_cabal_install (getBinDir) import Distribution.Simple.Compiler - ( Compiler(compilerId), PackageDB(..) ) + ( CompilerId, Compiler(compilerId), PackageDB(..) ) import Distribution.Simple.Program (ProgramConfiguration, defaultProgramConfiguration) import Distribution.Simple.Configure (getInstalledPackages) import qualified Distribution.Simple.Setup as Cabal @@ -76,8 +76,9 @@ import Distribution.Simple.InstallDirs import Distribution.Package ( PackageIdentifier(..), Package(..), thisPackageVersion ) import Distribution.PackageDescription as PackageDescription - ( GenericPackageDescription(packageDescription) - , readPackageDescription ) + ( PackageDescription, readPackageDescription ) +import Distribution.PackageDescription.Configuration + ( finalizePackageDescription ) import Distribution.InstalledPackageInfo ( InstalledPackageInfo ) import Distribution.Version @@ -85,7 +86,7 @@ import Distribution.Version import Distribution.Simple.Utils as Utils ( notice, info, warn, die, intercalate ) import Distribution.System - ( buildOS, buildArch ) + ( OS, buildOS, Arch, buildArch ) import Distribution.Text ( display ) import Distribution.Verbosity as Verbosity @@ -156,10 +157,14 @@ installWithPlanner planner verbosity packageDB repos comp conf configFlags insta unless dryRun $ do logsDir <- defaultLogsDir + let os = InstallPlan.planOS installPlan + arch = InstallPlan.planArch installPlan + compid = InstallPlan.planCompiler installPlan installPlan' <- executeInstallPlan installPlan $ \cpkg -> - installConfiguredPackage configFlags cpkg $ \configFlags' apkg -> - installAvailablePackage verbosity apkg $ \pkg mpath -> + installConfiguredPackage os arch compid configFlags + cpkg $ \configFlags' src pkg -> + installAvailablePackage verbosity (packageId pkg) src $ \mpath -> installUnpackedPackage verbosity (setupScriptOptions installed) miscOptions configFlags' installFlags pkg mpath (useLogFile logsDir) @@ -353,25 +358,32 @@ executeInstallPlan plan installPkg = case InstallPlan.ready plan of -- versioned package dependencies. So we ignore any previous partial flag -- assignment or dependency constraints and use the new ones. -- -installConfiguredPackage :: Cabal.ConfigFlags -> ConfiguredPackage - -> (Cabal.ConfigFlags -> AvailablePackage -> a) +installConfiguredPackage :: OS -> Arch -> CompilerId + -> Cabal.ConfigFlags -> ConfiguredPackage + -> (Cabal.ConfigFlags -> AvailablePackageSource + -> PackageDescription -> a) -> a -installConfiguredPackage configFlags (ConfiguredPackage pkg flags deps) +installConfiguredPackage os arch comp configFlags + (ConfiguredPackage (AvailablePackage _ gpkg source) flags deps) installPkg = installPkg configFlags { Cabal.configConfigurationsFlags = flags, Cabal.configConstraints = map thisPackageVersion deps - } pkg + } source pkg + where + pkg = case finalizePackageDescription flags + (Nothing :: Maybe (PackageIndex PackageDescription)) + os arch comp [] gpkg of + Left _ -> error "finalizePackageDescription ConfiguredPackage failed" + Right (desc, _) -> desc installAvailablePackage - :: Verbosity -> AvailablePackage - -> (GenericPackageDescription -> Maybe FilePath -> IO BuildResult) + :: Verbosity -> PackageIdentifier -> AvailablePackageSource + -> (Maybe FilePath -> IO BuildResult) -> IO BuildResult -installAvailablePackage _ (AvailablePackage _ pkg LocalUnpackedPackage) - installPkg = installPkg pkg Nothing +installAvailablePackage _ _ LocalUnpackedPackage installPkg = + installPkg Nothing -installAvailablePackage verbosity - (AvailablePackage _ pkg (RepoTarballPackage repo)) installPkg = do - let pkgid = packageId pkg +installAvailablePackage verbosity pkgid (RepoTarballPackage repo) installPkg = do pkgPath <- fetchPackage verbosity repo pkgid tmp <- getTemporaryDirectory let tmpDirPath = tmp </> ("TMP" ++ display pkgid) @@ -384,14 +396,14 @@ installAvailablePackage verbosity exists <- doesFileExist descFilePath when (not exists) $ die $ "Package .cabal file not found: " ++ show descFilePath - installPkg pkg (Just path) + installPkg (Just path) installUnpackedPackage :: Verbosity -> SetupScriptOptions -> InstallMisc -> Cabal.ConfigFlags -> InstallFlags - -> GenericPackageDescription + -> PackageDescription -> Maybe FilePath -- ^ Directory to change to before starting the installation. -> Maybe (PackageIdentifier -> FilePath) -- ^ File to log output to (if any) -> IO BuildResult @@ -458,7 +470,7 @@ installUnpackedPackage verbosity scriptOptions miscOptions setupWrapper verbosity scriptOptions { useLoggingHandle = logFileHandle , useWorkingDir = workingDir } - (Just $ PackageDescription.packageDescription pkg) + (Just pkg) cmd flags [] reexec cmd = do -- look for our on executable file and re-exec ourselves using _______________________________________________ Cvs-libraries mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-libraries
