Skip to content

Commit c209ca5

Browse files
committed
Temporary hacks for data-dirs in tests etc
1 parent 8ccaa72 commit c209ca5

File tree

3 files changed

+87
-7
lines changed

3 files changed

+87
-7
lines changed

Cabal/src/Distribution/Simple/Program/Db.hs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ module Distribution.Simple.Program.Db
6767
, ConfiguredProgs
6868
, updateUnconfiguredProgs
6969
, updateConfiguredProgs
70+
71+
-- SetupHooks TODO: hack
72+
, updatePathProgDb
7073
) where
7174

7275
import Distribution.Compat.Prelude
@@ -466,6 +469,24 @@ reconfigurePrograms verbosity paths argss progdb = do
466469
where
467470
progs = catMaybes [lookupKnownProgram name progdb | (name, _) <- paths]
468471

472+
-- SetupHooks TODO: hack
473+
updatePathProgDb :: Verbosity -> [(String, Maybe String)] -> ProgramDb -> IO ProgramDb
474+
updatePathProgDb verbosity envOverrides progdb =
475+
updatePathProgs verbosity envOverrides progs progdb
476+
where
477+
progs = Map.elems $ configuredProgs progdb
478+
479+
updatePathProgs :: Verbosity -> [(String, Maybe String)] -> [ConfiguredProgram] -> ProgramDb -> IO ProgramDb
480+
updatePathProgs verbosity envOverrides progs progdb =
481+
foldM (flip (updatePathProg verbosity envOverrides)) progdb progs
482+
483+
updatePathProg :: Verbosity -> [(String, Maybe String)] -> ConfiguredProgram -> ProgramDb -> IO ProgramDb
484+
updatePathProg _verbosity envOverrides prog progdb = do
485+
newPath <- programSearchPathAsPATHVar (progSearchPath progdb)
486+
let prog' = prog { programOverrideEnv = [("PATH", Just newPath)] ++ envOverrides }
487+
-- SetupHooks TODO: don't just replace the old but augment it?
488+
return $ updateProgram prog' progdb
489+
469490
-- | Check that a program is configured and available to be run.
470491
--
471492
-- It raises an exception if the program could not be configured, otherwise

Cabal/src/Distribution/Simple/Test/ExeV10.hs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,15 @@ import qualified Distribution.Simple.LocalBuildInfo as LBI
2222
, buildDir
2323
, depLibraryPaths
2424
)
25+
import Distribution.Simple.Program
26+
import Distribution.Simple.Program.Db
27+
import Distribution.Simple.Program.Find
28+
import Distribution.Simple.Program.Run
2529
import Distribution.Simple.Setup.Common
2630
import Distribution.Simple.Setup.Test
2731
import Distribution.Simple.Test.Log
2832
import Distribution.Simple.Utils
29-
import Distribution.System
33+
import Distribution.System ( Platform(Platform) )
3034
import Distribution.TestSuite
3135
import qualified Distribution.Types.LocalBuildInfo as LBI
3236
( LocalBuildInfo (..)
@@ -86,6 +90,16 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do
8690
notice verbosity $ summarizeSuiteStart $ testName'
8791

8892
-- Run the test executable
93+
newPath <- programSearchPathAsPATHVar (progSearchPath $ LBI.withPrograms lbi)
94+
95+
-- SetupHooks TODO: giant hack to propagate the data directories of
96+
-- any build-tool-depends executables: these overrides are not stored in
97+
-- the program database, but "ghc" has the right overrides, so use those.
98+
-- This is just temporary before we rework ProgramDb a bit.
99+
let otherStuff = case lookupProgramByName "ghc" (LBI.withPrograms lbi) of
100+
Just (ConfiguredProgram { programOverrideEnv = overrides }) -> overrides
101+
Nothing -> []
102+
blah <- fromMaybe [] <$> getEffectiveEnvironment otherStuff
89103
let opts =
90104
map
91105
(testOption pkg_descr lbi suite)
@@ -100,7 +114,7 @@ runTest pkg_descr lbi clbi hpcMarkupInfo flags suite = do
100114
pkgPathEnv =
101115
(pkgPathEnvVar pkg_descr "datadir", dataDirPath)
102116
: existingEnv
103-
shellEnv = [("HPCTIXFILE", tixFile) | isCoverageEnabled] ++ pkgPathEnv
117+
shellEnv = [("HPCTIXFILE", tixFile) | isCoverageEnabled] ++ blah ++ [("PATH", newPath)] ++ pkgPathEnv
104118

105119
-- Add (DY)LD_LIBRARY_PATH if needed
106120
shellEnv' <-

cabal-install/src/Distribution/Client/SetupWrapper.hs

Lines changed: 50 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ import Distribution.Simple.Compiler
8383
, compilerFlavor
8484
)
8585
import Distribution.Simple.Configure
86-
( configCompilerEx
86+
( configCompilerEx, localBuildInfoFile, getPersistBuildConfig, writePersistBuildConfig
8787
)
8888
import Distribution.Simple.PackageDescription
8989
( readGenericPackageDescription
@@ -99,10 +99,10 @@ import Distribution.Simple.Program
9999
, getProgramSearchPath
100100
, ghcProgram
101101
, ghcjsProgram
102-
, runDbProgramCwd
102+
, runDbProgramCwd, programOverrideEnv, updateProgram
103103
)
104104
import Distribution.Simple.Program.Db
105-
( prependProgramSearchPath
105+
( prependProgramSearchPath, lookupProgramByName, updatePathProgDb
106106
)
107107
import Distribution.Simple.Program.Find
108108
( programSearchPathAsPATHVar
@@ -193,6 +193,7 @@ import Distribution.Utils.NubList
193193
( toNubListR
194194
)
195195
import Distribution.Types.LocalBuildInfo ( LocalBuildInfo )
196+
import qualified Distribution.Types.LocalBuildInfo as LBI
196197
import Distribution.Verbosity
197198
import Distribution.Client.Errors
198199
import qualified Distribution.Client.InLibrary as InLibrary
@@ -204,7 +205,7 @@ import Distribution.Client.SetupHooks.CallHooksExe
204205

205206
import Data.List (foldl1')
206207
import Data.Kind ( Type, Constraint )
207-
import System.Directory (doesFileExist)
208+
import System.Directory (doesFileExist, removeFile)
208209
import System.FilePath ((<.>), (</>), takeFileName)
209210
import System.IO (Handle, hPutStr)
210211
import System.Process (StdStream (..))
@@ -634,6 +635,7 @@ setupWrapper verbosity options mpkg cmd getCommonFlags getFlags getExtraArgs wra
634635
NotInLibrary -> Don'tAllowInLibrary
635636
InLibraryArgs {} -> AllowInLibrary
636637
ASetup (setup :: Setup kind) <- getSetup verbosity options mpkg allowInLibrary
638+
ASetup (setup' :: Setup kind') <- getSetup verbosity options mpkg Don'tAllowInLibrary
637639
let version = setupVersion setup
638640
flags = getFlags version
639641
extraArgs = getExtraArgs version
@@ -666,7 +668,48 @@ setupWrapper verbosity options mpkg cmd getCommonFlags getFlags getExtraArgs wra
666668
InLibrary.configure
667669
(InLibrary.libraryConfigureInputsFromElabPackage progDb' elabSharedConfig elabReadyPkg)
668670
flags
669-
return $ InLibraryLBI lbi
671+
let mbWorkDir = useWorkingDir options
672+
distPref = useDistPref options
673+
{-
674+
lbiPath = interpretSymbolicPath mbWorkDir $ localBuildInfoFile distPref
675+
removeFile lbiPath
676+
let
677+
notInLibraryMethod' :: kind' ~ GeneralSetup => IO ()
678+
notInLibraryMethod' = runSetupCommand verbosity setup' cmd getCommonFlags flags extraArgs NotInLibrary
679+
runSetup' :: IO ()
680+
runSetup' =
681+
case setupMethod setup' of
682+
InternalMethod -> notInLibraryMethod'
683+
ExternalMethod {} -> notInLibraryMethod'
684+
SelfExecMethod -> notInLibraryMethod'
685+
LibraryMethod -> error "internal error: NotInLibrary argument but getSetup chose InLibrary"
686+
runSetup'
687+
--setupLBI <- getPersistBuildConfig mbWorkDir distPref
688+
--when True $ do
689+
-- putStrLn "SetupWrapper: InLibrary LBI comparison"
690+
-- putStrLn $ unlines
691+
-- [ "extraPathEnv: " ++ show (useExtraPathEnv options)
692+
-- , "extraEnvOverrides: " ++ show (useExtraEnvOverrides options) ]
693+
-- putStrLn $ replicate 80 '='
694+
-- putStrLn "In-library GHC"
695+
-- putStrLn $ show $ lookupProgramByName "ghc" $ LBI.withPrograms lbi
696+
-- putStrLn $ replicate 80 '-'
697+
-- putStrLn "Setup GHC"
698+
-- putStrLn $ show $ lookupProgramByName "ghc" $ LBI.withPrograms setupLBI
699+
-- putStrLn $ replicate 80 '='
700+
-}
701+
702+
let progs0 = LBI.withPrograms lbi
703+
progs1 <- updatePathProgDb verbosity (useExtraEnvOverrides options) progs0
704+
let
705+
lbi' =
706+
lbi
707+
{ LBI.withPrograms = progs1
708+
}
709+
-- (When we're comparing in-library and Setup, make sure that
710+
-- the final LBI is the one from in-library.)
711+
writePersistBuildConfig mbWorkDir distPref lbi'
712+
return $ InLibraryLBI lbi'
670713
InLibraryPostConfigureArgs sPhase mbLBI ->
671714
case mbLBI of
672715
NotInLibraryNoLBI ->
@@ -676,6 +719,8 @@ setupWrapper verbosity options mpkg cmd getCommonFlags getFlags getExtraArgs wra
676719
-- LocalBuildInfo (see "whenReconfigure"
677720
-- in Distribution.Client.ProjectBuilding.UnpackedPackage).
678721
InLibraryLBI lbi ->
722+
--withExtraPathEnv (useExtraPathEnv options) $
723+
-- withEnvOverrides (useExtraEnvOverrides options) $
679724
case sPhase of
680725
SBuildPhase -> InLibrary.build flags lbi
681726
SHaddockPhase -> InLibrary.haddock flags lbi

0 commit comments

Comments
 (0)