From fada98e2d0d2fdda36476befdf4e9176f3e40dc7 Mon Sep 17 00:00:00 2001
From: Mikhail Glushenkov <the.dead.shall.rise@gmail.com>
Date: Fri, 16 Nov 2012 21:26:19 +0100
Subject: [PATCH] Use settings from ~/.cabal/config when creating a sandbox.

This way, the user won't be required to set things like 'split-objs'
individually for each sandbox.
---
 .../Distribution/Client/PackageEnvironment.hs | 28 +++++++++----------
 cabal-install/Distribution/Client/Sandbox.hs  |  7 +++--
 2 files changed, 18 insertions(+), 17 deletions(-)

diff --git a/cabal-install/Distribution/Client/PackageEnvironment.hs b/cabal-install/Distribution/Client/PackageEnvironment.hs
index ea6d5873c5..c688d2a901 100644
--- a/cabal-install/Distribution/Client/PackageEnvironment.hs
+++ b/cabal-install/Distribution/Client/PackageEnvironment.hs
@@ -25,8 +25,7 @@ module Distribution.Client.PackageEnvironment (
   ) where
 
 import Distribution.Client.Config      ( SavedConfig(..), commentSavedConfig,
-                                         initialSavedConfig, loadConfig,
-                                         configFieldDescriptions,
+                                         loadConfig, configFieldDescriptions,
                                          installDirsFields, defaultCompiler )
 import Distribution.Client.ParseUtils  ( parseFields, ppFields, ppSection )
 import Distribution.Client.Setup       ( GlobalFlags(..), ConfigExFlags(..)
@@ -132,19 +131,19 @@ basePackageEnvironment sandboxDir = do
 -- | Initial configuration that we write out to the package environment file if
 -- it does not exist. When the package environment gets loaded this
 -- configuration gets layered on top of 'basePackageEnvironment'.
-initialPackageEnvironment :: FilePath -> Compiler -> IO PackageEnvironment
-initialPackageEnvironment sandboxDir compiler = do
-  initialConf' <- initialSavedConfig
-  let baseConf =  commonPackageEnvironmentConfig sandboxDir
-  let initialConf = initialConf' `mappend` baseConf
+initialPackageEnvironment :: FilePath -> Compiler -> SavedConfig
+                             -> IO PackageEnvironment
+initialPackageEnvironment sandboxDir compiler userConfig = do
+  let commonConfig  = commonPackageEnvironmentConfig sandboxDir
+      initialConfig = userConfig `mappend` commonConfig
   return $ mempty {
-    pkgEnvSavedConfig = initialConf {
-       savedGlobalFlags = (savedGlobalFlags initialConf) {
+    pkgEnvSavedConfig = initialConfig {
+       savedGlobalFlags = (savedGlobalFlags initialConfig) {
           globalLocalRepos = [sandboxDir </> "packages"]
           },
        savedConfigureFlags = setPackageDB sandboxDir compiler
-                             (savedConfigureFlags initialConf),
-       savedInstallFlags = (savedInstallFlags initialConf) {
+                             (savedConfigureFlags initialConfig),
+       savedInstallFlags = (savedInstallFlags initialConfig) {
          installSummaryFile = [toPathTemplate (sandboxDir </>
                                                "logs" </> "build.log")]
          }
@@ -233,14 +232,15 @@ tryLoadPackageEnvironment verbosity pkgEnvDir = do
 
 -- | Create a new package environment file, replacing the existing one if it
 -- exists. Note that the path parameters should point to existing directories.
-createPackageEnvironment :: Verbosity -> FilePath -> FilePath -> Compiler
+createPackageEnvironment :: Verbosity -> FilePath -> FilePath
+                            -> Compiler -> SavedConfig
                             -> IO PackageEnvironment
-createPackageEnvironment verbosity sandboxDir pkgEnvDir compiler = do
+createPackageEnvironment verbosity sandboxDir pkgEnvDir compiler userConfig = do
   let path = pkgEnvDir </> sandboxPackageEnvironmentFile
   notice verbosity $ "Writing default package environment to " ++ path
 
   commentPkgEnv <- commentPackageEnvironment sandboxDir
-  initialPkgEnv <- initialPackageEnvironment sandboxDir compiler
+  initialPkgEnv <- initialPackageEnvironment sandboxDir compiler userConfig
   writePackageEnvironmentFile path commentPkgEnv initialPkgEnv
 
   user <- userPkgEnv verbosity pkgEnvDir
diff --git a/cabal-install/Distribution/Client/Sandbox.hs b/cabal-install/Distribution/Client/Sandbox.hs
index 2a59a30e9b..33cc085c6a 100644
--- a/cabal-install/Distribution/Client/Sandbox.hs
+++ b/cabal-install/Distribution/Client/Sandbox.hs
@@ -107,7 +107,7 @@ dumpPackageEnvironment verbosity _sandboxFlags = do
 
 -- | Entry point for the 'cabal sandbox-init' command.
 sandboxInit :: Verbosity -> SandboxFlags  -> GlobalFlags -> IO ()
-sandboxInit verbosity sandboxFlags _globalFlags = do
+sandboxInit verbosity sandboxFlags globalFlags = do
   -- Create the sandbox directory.
   let sandboxDir' = fromFlagOrDefault defaultSandboxLocation
                     (sandboxLocation sandboxFlags)
@@ -116,12 +116,13 @@ sandboxInit verbosity sandboxFlags _globalFlags = do
   notice verbosity $ "Using a sandbox located at " ++ sandboxDir
 
   -- Determine which compiler to use (using the value from ~/.cabal/config).
-  userConfig   <- loadConfig verbosity NoFlag NoFlag
+  userConfig   <- loadConfig verbosity (globalConfigFile globalFlags) NoFlag
   (comp, conf) <- configCompilerAux (savedConfigureFlags userConfig)
 
   -- Create the package environment file.
   pkgEnvDir <- getCurrentDirectory
-  pkgEnv    <- createPackageEnvironment verbosity sandboxDir pkgEnvDir comp
+  pkgEnv    <- createPackageEnvironment verbosity sandboxDir pkgEnvDir
+               comp userConfig
 
   -- Create the index file if it doesn't exist.
   indexFile <- tryGetIndexFilePath pkgEnv
-- 
GitLab