diff --git a/Cabal/src/Distribution/Simple/Configure.hs b/Cabal/src/Distribution/Simple/Configure.hs index 1cd864a290b..e05c6547456 100644 --- a/Cabal/src/Distribution/Simple/Configure.hs +++ b/Cabal/src/Distribution/Simple/Configure.hs @@ -1008,6 +1008,9 @@ configure (pkg_descr0, pbi) cfg = do mkPromisedDepsSet :: [GivenComponent] -> Map (PackageName, ComponentName) ComponentId mkPromisedDepsSet comps = Map.fromList [((pn, CLibName ln), cid) | GivenComponent pn ln cid <- comps] +-- | Adds the extra program paths from the flags provided to @configure@ as +-- well as specified locations for certain known programs and their default +-- arguments. mkProgramDb :: ConfigFlags -> ProgramDb -> ProgramDb mkProgramDb cfg initialProgramDb = programDb where diff --git a/Cabal/src/Distribution/Simple/ConfigureScript.hs b/Cabal/src/Distribution/Simple/ConfigureScript.hs index c4ec2fc0f95..2572f4949c1 100644 --- a/Cabal/src/Distribution/Simple/ConfigureScript.hs +++ b/Cabal/src/Distribution/Simple/ConfigureScript.hs @@ -169,10 +169,7 @@ runConfigureScript verbosity flags lbi = do maybeHostFlag = if hp == buildPlatform then [] else ["--host=" ++ show (pretty hp)] args' = configureFile' : args ++ ["CC=" ++ ccProgShort] ++ maybeHostFlag shProg = simpleProgram "sh" - progDb = - modifyProgramSearchPath - (\p -> map ProgramSearchPathDir extraPath ++ p) - emptyProgramDb + progDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb shConfiguredProg <- lookupProgram shProg `fmap` configureProgram verbosity shProg progDb diff --git a/Cabal/src/Distribution/Simple/Program/Db.hs b/Cabal/src/Distribution/Simple/Program/Db.hs index 1407230b93b..e725c08d803 100644 --- a/Cabal/src/Distribution/Simple/Program/Db.hs +++ b/Cabal/src/Distribution/Simple/Program/Db.hs @@ -34,6 +34,7 @@ module Distribution.Simple.Program.Db -- ** Query and manipulate the program db , addKnownProgram , addKnownPrograms + , appendProgramSearchPath , lookupKnownProgram , knownPrograms , getProgramSearchPath @@ -221,6 +222,20 @@ modifyProgramSearchPath modifyProgramSearchPath f db = setProgramSearchPath (f $ getProgramSearchPath db) db +-- | Modify the current 'ProgramSearchPath' used by the 'ProgramDb' +-- by appending the provided extra paths. Also logs the added paths +-- in info verbosity. +appendProgramSearchPath + :: Verbosity + -> [FilePath] + -> ProgramDb + -> IO ProgramDb +appendProgramSearchPath verbosity extraPaths db = do + info verbosity . unlines $ + "Including the following directories in PATH:" + : map ("- " ++) extraPaths + pure $ modifyProgramSearchPath (map ProgramSearchPathDir extraPaths ++) db + -- | User-specify this path. Basically override any path information -- for this program in the configuration. If it's not a known -- program ignore it. diff --git a/Cabal/src/Distribution/Simple/Program/GHC.hs b/Cabal/src/Distribution/Simple/Program/GHC.hs index 537e008c17f..2114fb96a6d 100644 --- a/Cabal/src/Distribution/Simple/Program/GHC.hs +++ b/Cabal/src/Distribution/Simple/Program/GHC.hs @@ -554,8 +554,6 @@ data GhcOptions = GhcOptions , ghcOptExtraPath :: NubListR FilePath -- ^ Put the extra folders in the PATH environment variable we invoke -- GHC with - -- | Put the extra folders in the PATH environment variable we invoke - -- GHC with , ghcOptCabal :: Flag Bool -- ^ Let GHC know that it is Cabal that's calling it. -- Modifies some of the GHC error messages. diff --git a/Cabal/src/Distribution/Simple/Program/Run.hs b/Cabal/src/Distribution/Simple/Program/Run.hs index 27ff33dce01..4f778f6d057 100644 --- a/Cabal/src/Distribution/Simple/Program/Run.hs +++ b/Cabal/src/Distribution/Simple/Program/Run.hs @@ -51,8 +51,13 @@ data ProgramInvocation = ProgramInvocation { progInvokePath :: FilePath , progInvokeArgs :: [String] , progInvokeEnv :: [(String, Maybe String)] - , -- Extra paths to add to PATH - progInvokePathEnv :: [FilePath] + , progInvokePathEnv :: [FilePath] + -- ^ Extra paths to add to PATH. + -- + -- NOTE: The only program that sets paths here is GHC. See + -- 'componentGhcOptions' and the value of 'ghcOptExtraPath' there used then in + -- 'ghcInvocation'. Every other program we run doesn't set this but instead + -- provides a @"PATH"@ var in @progInvokeEnv@. , progInvokeCwd :: Maybe FilePath , progInvokeInput :: Maybe IOData , progInvokeInputEncoding :: IOEncoding diff --git a/cabal-install/src/Distribution/Client/CmdExec.hs b/cabal-install/src/Distribution/Client/CmdExec.hs index 3a3dd306d8a..0b2cf80c0a5 100644 --- a/cabal-install/src/Distribution/Client/CmdExec.hs +++ b/cabal-install/src/Distribution/Client/CmdExec.hs @@ -26,6 +26,10 @@ import Distribution.Client.NixStyleOptions , defaultNixStyleFlags , nixStyleOptions ) +import Distribution.Client.ProjectConfig.Types + ( ProjectConfig (projectConfigShared) + , ProjectConfigShared (projectConfigProgPathExtra) + ) import Distribution.Client.ProjectFlags ( removeIgnoreProjectOption ) @@ -66,12 +70,9 @@ import Distribution.Simple.GHC ) import Distribution.Simple.Program.Db ( configuredPrograms - , modifyProgramSearchPath + , appendProgramSearchPath , requireProgram ) -import Distribution.Simple.Program.Find - ( ProgramSearchPathEntry (..) - ) import Distribution.Simple.Program.Run ( programInvocation , runProgramInvocation @@ -86,11 +87,13 @@ import Distribution.Simple.Program.Types import Distribution.Simple.Utils ( createDirectoryIfMissingVerbose , dieWithException - , info , notice , withTempDirectory , wrapText ) +import Distribution.Utils.NubList + ( fromNubList + ) import Distribution.Verbosity ( normal ) @@ -162,10 +165,11 @@ execAction flags@NixStyleFlags{..} extraArgs globalFlags = do mempty -- Some dependencies may have executables. Let's put those on the PATH. - extraPaths <- pathAdditions verbosity baseCtx buildCtx - let programDb = - modifyProgramSearchPath - (map ProgramSearchPathDir extraPaths ++) + let extraPaths = pathAdditions baseCtx buildCtx + + programDb <- + appendProgramSearchPath verbosity + extraPaths . pkgConfigCompilerProgs . elaboratedShared $ buildCtx @@ -263,13 +267,14 @@ withTempEnvFile verbosity baseCtx buildCtx buildStatus action = do action envOverrides ) -pathAdditions :: Verbosity -> ProjectBaseContext -> ProjectBuildContext -> IO [FilePath] -pathAdditions verbosity ProjectBaseContext{..} ProjectBuildContext{..} = do - info verbosity . unlines $ - "Including the following directories in PATH:" - : paths - return paths +pathAdditions :: ProjectBaseContext -> ProjectBuildContext -> [FilePath] +pathAdditions ProjectBaseContext{..} ProjectBuildContext{..} = + paths ++ cabalConfigPaths where + cabalConfigPaths = fromNubList + . projectConfigProgPathExtra + . projectConfigShared + $ projectConfig paths = S.toList $ binDirectories distDirLayout elaboratedShared elaboratedPlanToExecute diff --git a/cabal-install/src/Distribution/Client/CmdInstall.hs b/cabal-install/src/Distribution/Client/CmdInstall.hs index 5de704430f5..3b6cbf07ba0 100644 --- a/cabal-install/src/Distribution/Client/CmdInstall.hs +++ b/cabal-install/src/Distribution/Client/CmdInstall.hs @@ -151,13 +151,10 @@ import qualified Distribution.Simple.InstallDirs as InstallDirs import qualified Distribution.Simple.PackageIndex as PI import Distribution.Simple.Program.Db ( defaultProgramDb - , modifyProgramSearchPath + , appendProgramSearchPath , userSpecifyArgss , userSpecifyPaths ) -import Distribution.Simple.Program.Find - ( ProgramSearchPathEntry (..) - ) import Distribution.Simple.Setup ( Flag (..) , installDirsOptions @@ -496,6 +493,7 @@ installAction flags@NixStyleFlags{extraFlags = clientInstallFlags', ..} targetSt , projectConfigHcPath , projectConfigHcPkg , projectConfigStoreDir + , projectConfigProgPathExtra } , projectConfigLocalPackages = PackageConfig @@ -509,17 +507,13 @@ installAction flags@NixStyleFlags{extraFlags = clientInstallFlags', ..} targetSt hcPath = flagToMaybe projectConfigHcPath hcPkg = flagToMaybe projectConfigHcPkg + configProgDb <- appendProgramSearchPath verbosity ((fromNubList packageConfigProgramPathExtra) ++ (fromNubList projectConfigProgPathExtra)) defaultProgramDb + let -- ProgramDb with directly user specified paths preProgDb = userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) . userSpecifyArgss (Map.toList (getMapMappend packageConfigProgramArgs)) - . modifyProgramSearchPath - ( ++ - [ ProgramSearchPathDir dir - | dir <- fromNubList packageConfigProgramPathExtra - ] - ) - $ defaultProgramDb + $ configProgDb -- progDb is a program database with compiler tools configured properly ( compiler@Compiler diff --git a/cabal-install/src/Distribution/Client/CmdRun.hs b/cabal-install/src/Distribution/Client/CmdRun.hs index 2ad1b992369..e5e058b96ab 100644 --- a/cabal-install/src/Distribution/Client/CmdRun.hs +++ b/cabal-install/src/Distribution/Client/CmdRun.hs @@ -48,6 +48,10 @@ import Distribution.Client.NixStyleOptions , defaultNixStyleFlags , nixStyleOptions ) +import Distribution.Client.ProjectConfig.Types + ( ProjectConfig (projectConfigShared) + , ProjectConfigShared (projectConfigProgPathExtra) + ) import Distribution.Client.ProjectOrchestration import Distribution.Client.ProjectPlanning ( ElaboratedConfiguredPackage (..) @@ -105,6 +109,9 @@ import Distribution.Types.UnqualComponentName ( UnqualComponentName , unUnqualComponentName ) +import Distribution.Utils.NubList + ( fromNubList + ) import Distribution.Verbosity ( normal , silent @@ -288,6 +295,13 @@ runAction flags@NixStyleFlags{..} targetAndArgs globalFlags = buildSettingDryRun (buildSettings baseCtx) || buildSettingOnlyDownload (buildSettings baseCtx) + let extraPath = + fromNubList + . projectConfigProgPathExtra + . projectConfigShared + . projectConfig + $ baseCtx + if dryRun then notice verbosity "Running of executable suppressed by flag(s)" else @@ -300,6 +314,7 @@ runAction flags@NixStyleFlags{..} targetAndArgs globalFlags = dataDirsEnvironmentForPlan (distDirLayout baseCtx) elaboratedPlan + , progInvokePathEnv = extraPath } where (targetStr, args) = splitAt 1 targetAndArgs diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index 0fe93081bd7..1c2b4dabb27 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -1540,6 +1540,14 @@ parseConfig src initial = \str -> do splitMultiPath (configConfigureArgs scf) } + , savedGlobalFlags = + let sgf = savedGlobalFlags conf + in sgf + { globalProgPathExtra = + toNubList $ + splitMultiPath + (fromNubList $ globalProgPathExtra sgf) + } } parse = diff --git a/cabal-install/src/Distribution/Client/Get.hs b/cabal-install/src/Distribution/Client/Get.hs index 99ebe749161..39ace2f2652 100644 --- a/cabal-install/src/Distribution/Client/Get.hs +++ b/cabal-install/src/Distribution/Client/Get.hs @@ -78,6 +78,9 @@ import Distribution.Solver.Types.SourcePackage import Control.Monad (mapM_) import qualified Data.Map as Map import Distribution.Client.Errors +import Distribution.Utils.NubList + ( fromNubList + ) import System.Directory ( createDirectoryIfMissing , doesDirectoryExist @@ -99,7 +102,7 @@ get -> IO () get verbosity _ _ _ [] = notice verbosity "No packages requested. Nothing to do." -get verbosity repoCtxt _ getFlags userTargets = do +get verbosity repoCtxt globalFlags getFlags userTargets = do let useSourceRepo = case getSourceRepository getFlags of NoFlag -> False _ -> True @@ -154,7 +157,7 @@ get verbosity repoCtxt _ getFlags userTargets = do clone :: [UnresolvedSourcePackage] -> IO () clone = - clonePackagesFromSourceRepo verbosity prefix kind + clonePackagesFromSourceRepo verbosity prefix kind (fromNubList $ globalProgPathExtra globalFlags) . map (\pkg -> (packageId pkg, packageSourceRepos pkg)) where kind :: Maybe RepoKind @@ -337,6 +340,8 @@ clonePackagesFromSourceRepo -- ^ destination dir prefix -> Maybe RepoKind -- ^ preferred 'RepoKind' + -> [FilePath] + -- ^ Extra prog paths -> [(PackageId, [PD.SourceRepo])] -- ^ the packages and their -- available 'SourceRepo's @@ -345,13 +350,14 @@ clonePackagesFromSourceRepo verbosity destDirPrefix preferredRepoKind + progPaths pkgrepos = do -- Do a bunch of checks and collect the required info pkgrepos' <- traverse preCloneChecks pkgrepos -- Configure the VCS drivers for all the repository types we may need vcss <- - configureVCSs verbosity $ + configureVCSs verbosity progPaths $ Map.fromList [ (vcsRepoType vcs, vcs) | (_, _, vcs, _) <- pkgrepos' diff --git a/cabal-install/src/Distribution/Client/HttpUtils.hs b/cabal-install/src/Distribution/Client/HttpUtils.hs index 39251039a36..13f04380070 100644 --- a/cabal-install/src/Distribution/Client/HttpUtils.hs +++ b/cabal-install/src/Distribution/Client/HttpUtils.hs @@ -38,7 +38,6 @@ import Distribution.Simple.Program ( ConfiguredProgram , Program , ProgramInvocation (..) - , ProgramSearchPathEntry (..) , getProgramInvocationOutput , programInvocation , programPath @@ -50,7 +49,7 @@ import Distribution.Simple.Program.Db , configureAllKnownPrograms , emptyProgramDb , lookupProgram - , modifyProgramSearchPath + , appendProgramSearchPath , requireProgram ) import Distribution.Simple.Program.Run @@ -409,7 +408,7 @@ configureTransport verbosity extraPath (Just name) = case find (\(name', _, _, _) -> name' == name) supportedTransports of Just (_, mprog, _tls, mkTrans) -> do - let baseProgDb = modifyProgramSearchPath (\p -> map ProgramSearchPathDir extraPath ++ p) emptyProgramDb + baseProgDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb progdb <- case mprog of Nothing -> return emptyProgramDb Just prog -> snd <$> requireProgram verbosity prog baseProgDb @@ -425,7 +424,7 @@ configureTransport verbosity extraPath Nothing = do -- for all the transports except plain-http we need to try and find -- their external executable - let baseProgDb = modifyProgramSearchPath (\p -> map ProgramSearchPathDir extraPath ++ p) emptyProgramDb + baseProgDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb progdb <- configureAllKnownPrograms verbosity $ addKnownPrograms diff --git a/cabal-install/src/Distribution/Client/ProjectConfig.hs b/cabal-install/src/Distribution/Client/ProjectConfig.hs index 3083f9777bf..b4d20e317cc 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig.hs @@ -1351,11 +1351,10 @@ syncAndReadSourcePackagesRemoteRepos | (repo, rloc, rtype, vcs) <- repos' ] - -- TODO: pass progPathExtra on to 'configureVCS' - let _progPathExtra = fromNubList projectConfigProgPathExtra + let progPathExtra = fromNubList projectConfigProgPathExtra getConfiguredVCS <- delayInitSharedResources $ \repoType -> let vcs = Map.findWithDefault (error $ "Unknown VCS: " ++ prettyShow repoType) repoType knownVCSs - in configureVCS verbosity {-progPathExtra-} vcs + in configureVCS verbosity progPathExtra vcs concat <$> sequenceA diff --git a/cabal-install/src/Distribution/Client/ProjectOrchestration.hs b/cabal-install/src/Distribution/Client/ProjectOrchestration.hs index a13d35011b1..db99b2576b9 100644 --- a/cabal-install/src/Distribution/Client/ProjectOrchestration.hs +++ b/cabal-install/src/Distribution/Client/ProjectOrchestration.hs @@ -231,7 +231,7 @@ data CurrentCommand = InstallCommand | HaddockCommand | BuildCommand | ReplComma deriving (Show, Eq) -- | This holds the context of a project prior to solving: the content of the --- @cabal.project@ and all the local package @.cabal@ files. +-- @cabal.project@, @cabal/config@ and all the local package @.cabal@ files. data ProjectBaseContext = ProjectBaseContext { distDirLayout :: DistDirLayout , cabalDirLayout :: CabalDirLayout diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index 6d63ffcbaab..06c28105aa3 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -468,13 +468,15 @@ configureCompiler ) $ do liftIO $ info verbosity "Compiler settings changed, reconfiguring..." - result@(_, _, progdb') <- + progdb <- liftIO $ appendProgramSearchPath verbosity (fromNubList packageConfigProgramPathExtra) defaultProgramDb + let progdb' = userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) progdb + result@(_, _, progdb'') <- liftIO $ Cabal.configCompilerEx hcFlavor hcPath hcPkg - progdb + progdb' verbosity -- Note that we added the user-supplied program locations and args @@ -483,22 +485,13 @@ configureCompiler -- the compiler will configure (and it does vary between compilers). -- We do know however that the compiler will only configure the -- programs it cares about, and those are the ones we monitor here. - monitorFiles (programsMonitorFiles progdb') + monitorFiles (programsMonitorFiles progdb'') return result where hcFlavor = flagToMaybe projectConfigHcFlavor hcPath = flagToMaybe projectConfigHcPath hcPkg = flagToMaybe projectConfigHcPkg - progdb = - userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) - . modifyProgramSearchPath - ( [ ProgramSearchPathDir dir - | dir <- fromNubList packageConfigProgramPathExtra - ] - ++ - ) - $ defaultProgramDb ------------------------------------------------------------------------------ diff --git a/cabal-install/src/Distribution/Client/VCS.hs b/cabal-install/src/Distribution/Client/VCS.hs index 7322253e692..f3403029827 100644 --- a/cabal-install/src/Distribution/Client/VCS.hs +++ b/cabal-install/src/Distribution/Client/VCS.hs @@ -61,6 +61,9 @@ import Distribution.Simple.Program , runProgramInvocation , simpleProgram ) +import Distribution.Simple.Program.Db + ( appendProgramSearchPath + ) import Distribution.Types.SourceRepo ( KnownRepoType (..) , RepoType (..) @@ -198,18 +201,23 @@ validateSourceRepos rs = configureVCS :: Verbosity + -> [FilePath] + -- ^ Extra prog paths -> VCS Program -> IO (VCS ConfiguredProgram) -configureVCS verbosity vcs@VCS{vcsProgram = prog} = - asVcsConfigured <$> requireProgram verbosity prog emptyProgramDb +configureVCS verbosity progPaths vcs@VCS{vcsProgram = prog} = do + progPath <- appendProgramSearchPath verbosity progPaths emptyProgramDb + asVcsConfigured <$> requireProgram verbosity prog progPath where asVcsConfigured (prog', _) = vcs{vcsProgram = prog'} configureVCSs :: Verbosity + -> [FilePath] + -- ^ Extra prog paths -> Map RepoType (VCS Program) -> IO (Map RepoType (VCS ConfiguredProgram)) -configureVCSs verbosity = traverse (configureVCS verbosity) +configureVCSs verbosity progPaths = traverse (configureVCS verbosity progPaths) -- ------------------------------------------------------------ diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Get.hs b/cabal-install/tests/UnitTests/Distribution/Client/Get.hs index 55ce4180f8f..c033c05f93a 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/Get.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/Get.hs @@ -64,7 +64,7 @@ testNoRepos :: Assertion testNoRepos = do e <- assertException $ - clonePackagesFromSourceRepo verbosity "." Nothing pkgrepos + clonePackagesFromSourceRepo verbosity "." Nothing [] pkgrepos e @?= ClonePackageNoSourceRepos pkgidfoo where pkgrepos = [(pkgidfoo, [])] @@ -73,7 +73,7 @@ testNoReposOfKind :: Assertion testNoReposOfKind = do e <- assertException $ - clonePackagesFromSourceRepo verbosity "." repokind pkgrepos + clonePackagesFromSourceRepo verbosity "." repokind [] pkgrepos e @?= ClonePackageNoSourceReposOfKind pkgidfoo repokind where pkgrepos = [(pkgidfoo, [repo])] @@ -84,7 +84,7 @@ testNoRepoType :: Assertion testNoRepoType = do e <- assertException $ - clonePackagesFromSourceRepo verbosity "." Nothing pkgrepos + clonePackagesFromSourceRepo verbosity "." Nothing [] pkgrepos e @?= ClonePackageNoRepoType pkgidfoo repo where pkgrepos = [(pkgidfoo, [repo])] @@ -94,7 +94,7 @@ testUnsupportedRepoType :: Assertion testUnsupportedRepoType = do e <- assertException $ - clonePackagesFromSourceRepo verbosity "." Nothing pkgrepos + clonePackagesFromSourceRepo verbosity "." Nothing [] pkgrepos e @?= ClonePackageUnsupportedRepoType pkgidfoo repo' repotype where pkgrepos = [(pkgidfoo, [repo])] @@ -118,7 +118,7 @@ testNoRepoLocation :: Assertion testNoRepoLocation = do e <- assertException $ - clonePackagesFromSourceRepo verbosity "." Nothing pkgrepos + clonePackagesFromSourceRepo verbosity "." Nothing [] pkgrepos e @?= ClonePackageNoRepoLocation pkgidfoo repo where pkgrepos = [(pkgidfoo, [repo])] @@ -139,7 +139,7 @@ testSelectRepoKind = e' @?= ClonePackageNoRepoType pkgidfoo expectedRepo | let test rt rs = assertException $ - clonePackagesFromSourceRepo verbosity "." rt rs + clonePackagesFromSourceRepo verbosity "." rt [] rs , (requestedRepoType, expectedRepo) <- cases ] where @@ -161,14 +161,14 @@ testRepoDestinationExists = createDirectory pkgdir e1 <- assertException $ - clonePackagesFromSourceRepo verbosity tmpdir Nothing pkgrepos + clonePackagesFromSourceRepo verbosity tmpdir Nothing [] pkgrepos e1 @?= ClonePackageDestinationExists pkgidfoo pkgdir True {- isdir -} removeDirectory pkgdir writeFile pkgdir "" e2 <- assertException $ - clonePackagesFromSourceRepo verbosity tmpdir Nothing pkgrepos + clonePackagesFromSourceRepo verbosity tmpdir Nothing [] pkgrepos e2 @?= ClonePackageDestinationExists pkgidfoo pkgdir False {- isfile -} where pkgrepos = [(pkgidfoo, [repo])] @@ -199,7 +199,7 @@ testGitFetchFailed = pkgrepos = [(pkgidfoo, [repo])] e1 <- assertException $ - clonePackagesFromSourceRepo verbosity tmpdir Nothing pkgrepos + clonePackagesFromSourceRepo verbosity tmpdir Nothing [] pkgrepos e1 @?= ClonePackageFailedWithExitCode pkgidfoo repo' "git" (ExitFailure 128) testNetworkGitClone :: Assertion @@ -214,6 +214,7 @@ testNetworkGitClone = verbosity tmpdir Nothing + [] [(mkpkgid "zlib1", [repo1])] assertFileContains (tmpdir "zlib1/zlib.cabal") ["name:", "zlib"] @@ -226,6 +227,7 @@ testNetworkGitClone = verbosity tmpdir Nothing + [] [(mkpkgid "zlib2", [repo2])] assertFileContains (tmpdir "zlib2/zlib.cabal") ["name:", "zlib"] @@ -239,6 +241,7 @@ testNetworkGitClone = verbosity tmpdir Nothing + [] [(mkpkgid "zlib3", [repo3])] assertFileContains (tmpdir "zlib3/zlib.cabal") ["version:", "0.5.0.0"] where diff --git a/cabal-install/tests/UnitTests/Distribution/Client/VCS.hs b/cabal-install/tests/UnitTests/Distribution/Client/VCS.hs index 64c517c10e9..0bd49355913 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/VCS.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/VCS.hs @@ -57,7 +57,7 @@ tests :: MTimeChange -> [TestTree] tests mtimeChange = map (localOption $ QuickCheckTests 10) - [ ignoreInWindows "See issue #8048" $ + [ ignoreInWindows "See issue #8048 and #9519" $ testGroup "git" [ testProperty "check VCS test framework" prop_framework_git @@ -227,7 +227,7 @@ testSetup -> IO a testSetup vcs mkVCSTestDriver repoRecipe theTest = do -- test setup - vcs' <- configureVCS verbosity vcs + vcs' <- configureVCS verbosity [] vcs withTestDir verbosity "vcstest" $ \tmpdir -> do let srcRepoPath = tmpdir "src" submodulesPath = tmpdir "submodules" diff --git a/changelog.d/propagate-extra-prog-path b/changelog.d/propagate-extra-prog-path new file mode 100644 index 00000000000..7733ed7633f --- /dev/null +++ b/changelog.d/propagate-extra-prog-path @@ -0,0 +1,13 @@ +synopsis: Fix extra-prog-path propagation +packages: cabal-install +prs: #9527 +issues: #7649 #9519 + +description: { + +- extra-prog-paths are now propagated to all commands. This in particular helps + when running a MinGW cabal in the PowerShell, where the MSYS2 paths are + usually not available in the PowerShell PATH. GHCup already sets them up for + us but they were not being propagated properly. + +}