From 3c0e6480d5057dd616457a0ac0458e60946c9849 Mon Sep 17 00:00:00 2001
From: "Edward Z. Yang" <ezyang@cs.stanford.edu>
Date: Tue, 27 Jan 2015 10:26:49 -0800
Subject: [PATCH] Version test whether or not to use single-file package
 database, helps #2320 some more.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
(cherry picked from commit 61fdb06c7df8b77886a8f1a848340ea7bad85461)
---
 Cabal/Distribution/Simple/Build.hs         | 16 +++++++++-------
 Cabal/Distribution/Simple/GHC.hs           |  1 +
 Cabal/Distribution/Simple/GHCJS.hs         |  3 +++
 Cabal/Distribution/Simple/LHC.hs           |  1 +
 Cabal/Distribution/Simple/Program/HcPkg.hs |  1 +
 5 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/Cabal/Distribution/Simple/Build.hs b/Cabal/Distribution/Simple/Build.hs
index e4920446b2..d6ced9824a 100644
--- a/Cabal/Distribution/Simple/Build.hs
+++ b/Cabal/Distribution/Simple/Build.hs
@@ -450,15 +450,17 @@ createInternalPackageDB verbosity lbi distPref = do
       LHC   -> createWith $ LHC.hcPkgInfo   (withPrograms lbi)
       _     -> return packageDB
     where
-      dbDir = distPref </> "package.conf.inplace"
-      packageDB = SpecificPackageDB dbDir
+      dbPath = distPref </> "package.conf.inplace"
+      packageDB = SpecificPackageDB dbPath
       createWith hpi = do
-        dir_exists <- doesDirectoryExist dbDir
+        dir_exists <- doesDirectoryExist dbPath
         if dir_exists
-            then removeDirectoryRecursive dbDir
-            else do file_exists <- doesFileExist dbDir
-                    when file_exists $ removeFile dbDir
-        HcPkg.init hpi verbosity dbDir
+            then removeDirectoryRecursive dbPath
+            else do file_exists <- doesFileExist dbPath
+                    when file_exists $ removeFile dbPath
+        if HcPkg.useSingleFileDb hpi
+            then writeFile dbPath "[]"
+            else HcPkg.init hpi verbosity dbPath
         return packageDB
 
 addInternalBuildTools :: PackageDescription -> LocalBuildInfo -> BuildInfo
diff --git a/Cabal/Distribution/Simple/GHC.hs b/Cabal/Distribution/Simple/GHC.hs
index 69588dd72b..a630e503a6 100644
--- a/Cabal/Distribution/Simple/GHC.hs
+++ b/Cabal/Distribution/Simple/GHC.hs
@@ -1039,6 +1039,7 @@ hcPkgInfo conf = HcPkg.HcPkgInfo { HcPkg.hcPkgProgram    = ghcPkgProg
                                  , HcPkg.noPkgDbStack    = v < [6,9]
                                  , HcPkg.noVerboseFlag   = v < [6,11]
                                  , HcPkg.flagPackageConf = v < [7,5]
+                                 , HcPkg.useSingleFileDb = v < [7,9]
                                  }
   where
     v               = versionBranch ver
diff --git a/Cabal/Distribution/Simple/GHCJS.hs b/Cabal/Distribution/Simple/GHCJS.hs
index dc84419e57..94807bd37b 100644
--- a/Cabal/Distribution/Simple/GHCJS.hs
+++ b/Cabal/Distribution/Simple/GHCJS.hs
@@ -879,9 +879,12 @@ hcPkgInfo conf = HcPkg.HcPkgInfo { HcPkg.hcPkgProgram    = ghcjsPkgProg
                                  , HcPkg.noPkgDbStack    = False
                                  , HcPkg.noVerboseFlag   = False
                                  , HcPkg.flagPackageConf = False
+                                 , HcPkg.useSingleFileDb = v < [7,9]
                                  }
   where
+    v                 = versionBranch ver
     Just ghcjsPkgProg = lookupProgram ghcjsPkgProgram conf
+    Just ver          = programVersion ghcjsPkgProg
 
 -- | Get the JavaScript file name and command and arguments to run a
 --   program compiled by GHCJS
diff --git a/Cabal/Distribution/Simple/LHC.hs b/Cabal/Distribution/Simple/LHC.hs
index fd115e87b3..c0bc5952e7 100644
--- a/Cabal/Distribution/Simple/LHC.hs
+++ b/Cabal/Distribution/Simple/LHC.hs
@@ -794,6 +794,7 @@ hcPkgInfo conf = HcPkg.HcPkgInfo { HcPkg.hcPkgProgram    = lhcPkgProg
                                  , HcPkg.noPkgDbStack    = False
                                  , HcPkg.noVerboseFlag   = False
                                  , HcPkg.flagPackageConf = False
+                                 , HcPkg.useSingleFileDb = True
                                  }
   where
     Just lhcPkgProg = lookupProgram lhcPkgProgram conf
diff --git a/Cabal/Distribution/Simple/Program/HcPkg.hs b/Cabal/Distribution/Simple/Program/HcPkg.hs
index 4eae5241ec..a2276fff11 100644
--- a/Cabal/Distribution/Simple/Program/HcPkg.hs
+++ b/Cabal/Distribution/Simple/Program/HcPkg.hs
@@ -73,6 +73,7 @@ data HcPkgInfo = HcPkgInfo
   , noPkgDbStack    :: Bool -- ^ no package DB stack supported
   , noVerboseFlag   :: Bool -- ^ hc-pkg does not support verbosity flags
   , flagPackageConf :: Bool -- ^ use package-conf option instead of package-db
+  , useSingleFileDb :: Bool -- ^ requires single file package database
   }
 
 -- | Call @hc-pkg@ to initialise a package database at the location {path}.
-- 
GitLab