Skip to content

Commit 384c30e

Browse files
committed
Find build-tool installed programs before programs in path
We must consider the path to the installed build-tool before the path to existing versions of the build tool in paths such as `extra-prog-path` or in the system path. This was previously fixed by #8972 but undone by #9527. This also renames `appendProgramSearchPath` to `prependProgramSearchPath` to describe correctly what that function does. Fixes #9756
1 parent 9025af5 commit 384c30e

File tree

10 files changed

+21
-20
lines changed

10 files changed

+21
-20
lines changed

Cabal/src/Distribution/Simple/Configure.hs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ import Distribution.Simple.PackageIndex (InstalledPackageIndex, lookupUnitId)
8585
import qualified Distribution.Simple.PackageIndex as PackageIndex
8686
import Distribution.Simple.PreProcess
8787
import Distribution.Simple.Program
88-
import Distribution.Simple.Program.Db (appendProgramSearchPath, lookupProgramByName)
88+
import Distribution.Simple.Program.Db (prependProgramSearchPath, modifyProgramSearchPath, lookupProgramByName)
8989
import Distribution.Simple.Setup.Common as Setup
9090
import Distribution.Simple.Setup.Config as Setup
9191
import Distribution.Simple.Utils
@@ -1236,13 +1236,14 @@ mkPromisedDepsSet comps = Map.fromList [((pn, CLibName ln), cid) | GivenComponen
12361236
-- arguments.
12371237
mkProgramDb :: ConfigFlags -> ProgramDb -> IO ProgramDb
12381238
mkProgramDb cfg initialProgramDb = do
1239-
programDb <- appendProgramSearchPath (fromFlagOrDefault normal (configVerbosity cfg)) searchpath initialProgramDb
1239+
programDb <- modifyProgramSearchPath (getProgramSearchPath initialProgramDb ++) <$>
1240+
prependProgramSearchPath (fromFlagOrDefault normal (configVerbosity cfg)) searchpath initialProgramDb
12401241
pure
12411242
. userSpecifyArgss (configProgramArgs cfg)
12421243
. userSpecifyPaths (configProgramPaths cfg)
12431244
$ programDb
12441245
where
1245-
searchpath = fromNubList $ configProgramPathExtra cfg
1246+
searchpath = fromNubList (configProgramPathExtra cfg)
12461247

12471248
-- Note. We try as much as possible to _prepend_ rather than postpend the extra-prog-path
12481249
-- so that we can override the system path. However, in a v2-build, at this point, the "system" path

Cabal/src/Distribution/Simple/ConfigureScript.hs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ runConfigureScript verbosity flags lbi = do
169169
maybeHostFlag = if hp == buildPlatform then [] else ["--host=" ++ show (pretty hp)]
170170
args' = configureFile' : args ++ ["CC=" ++ ccProgShort] ++ maybeHostFlag
171171
shProg = simpleProgram "sh"
172-
progDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb
172+
progDb <- prependProgramSearchPath verbosity extraPath emptyProgramDb
173173
shConfiguredProg <-
174174
lookupProgram shProg
175175
`fmap` configureProgram verbosity shProg progDb

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ module Distribution.Simple.Program.Db
3434
-- ** Query and manipulate the program db
3535
, addKnownProgram
3636
, addKnownPrograms
37-
, appendProgramSearchPath
37+
, prependProgramSearchPath
3838
, lookupKnownProgram
3939
, knownPrograms
4040
, getProgramSearchPath
@@ -225,12 +225,12 @@ modifyProgramSearchPath f db =
225225
-- | Modify the current 'ProgramSearchPath' used by the 'ProgramDb'
226226
-- by appending the provided extra paths. Also logs the added paths
227227
-- in info verbosity.
228-
appendProgramSearchPath
228+
prependProgramSearchPath
229229
:: Verbosity
230230
-> [FilePath]
231231
-> ProgramDb
232232
-> IO ProgramDb
233-
appendProgramSearchPath verbosity extraPaths db =
233+
prependProgramSearchPath verbosity extraPaths db =
234234
if not $ null extraPaths
235235
then do
236236
logExtraProgramSearchPath verbosity extraPaths

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ type ProgArg = String
9797
-- We also use this path to set the environment when running child processes.
9898
--
9999
-- The @ProgramDb@ is created with a @ProgramSearchPath@ to which we
100-
-- @appendProgramSearchPath@ to add the ones that come from cli flags and from
100+
-- @prependProgramSearchPath@ to add the ones that come from cli flags and from
101101
-- configurations. Then each of the programs that are configured in the db
102102
-- inherits the same path as part of @configureProgram@.
103103
type ProgramSearchPath = [ProgramSearchPathEntry]

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ import Distribution.Simple.Program
7676
, simpleProgram
7777
)
7878
import Distribution.Simple.Program.Db
79-
( appendProgramSearchPath
79+
( prependProgramSearchPath
8080
, configuredPrograms
8181
, requireProgram
8282
)
@@ -168,7 +168,7 @@ execAction flags@NixStyleFlags{..} extraArgs globalFlags = do
168168
let extraPaths = pathAdditions baseCtx buildCtx
169169

170170
programDb <-
171-
appendProgramSearchPath
171+
prependProgramSearchPath
172172
verbosity
173173
extraPaths
174174
. pkgConfigCompilerProgs

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ import Distribution.Simple.GHC
154154
import qualified Distribution.Simple.InstallDirs as InstallDirs
155155
import qualified Distribution.Simple.PackageIndex as PI
156156
import Distribution.Simple.Program.Db
157-
( appendProgramSearchPath
157+
( prependProgramSearchPath
158158
, defaultProgramDb
159159
, userSpecifyArgss
160160
, userSpecifyPaths
@@ -426,7 +426,7 @@ installAction flags@NixStyleFlags{extraFlags, configFlags, installFlags, project
426426
hcPath = flagToMaybe projectConfigHcPath
427427
hcPkg = flagToMaybe projectConfigHcPkg
428428

429-
configProgDb <- appendProgramSearchPath verbosity ((fromNubList packageConfigProgramPathExtra) ++ (fromNubList projectConfigProgPathExtra)) defaultProgramDb
429+
configProgDb <- prependProgramSearchPath verbosity ((fromNubList packageConfigProgramPathExtra) ++ (fromNubList projectConfigProgPathExtra)) defaultProgramDb
430430
let
431431
-- ProgramDb with directly user specified paths
432432
preProgDb =

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ import Distribution.Simple.Program
4646
import Distribution.Simple.Program.Db
4747
( ProgramDb
4848
, addKnownPrograms
49-
, appendProgramSearchPath
49+
, prependProgramSearchPath
5050
, configureAllKnownPrograms
5151
, emptyProgramDb
5252
, lookupProgram
@@ -408,7 +408,7 @@ configureTransport verbosity extraPath (Just name) =
408408

409409
case find (\(name', _, _, _) -> name' == name) supportedTransports of
410410
Just (_, mprog, _tls, mkTrans) -> do
411-
baseProgDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb
411+
baseProgDb <- prependProgramSearchPath verbosity extraPath emptyProgramDb
412412
progdb <- case mprog of
413413
Nothing -> return emptyProgramDb
414414
Just prog -> snd <$> requireProgram verbosity prog baseProgDb
@@ -424,7 +424,7 @@ configureTransport verbosity extraPath Nothing = do
424424

425425
-- for all the transports except plain-http we need to try and find
426426
-- their external executable
427-
baseProgDb <- appendProgramSearchPath verbosity extraPath emptyProgramDb
427+
baseProgDb <- prependProgramSearchPath verbosity extraPath emptyProgramDb
428428
progdb <-
429429
configureAllKnownPrograms verbosity $
430430
addKnownPrograms

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ configureCompiler
471471
)
472472
$ do
473473
liftIO $ info verbosity "Compiler settings changed, reconfiguring..."
474-
progdb <- liftIO $ appendProgramSearchPath verbosity (fromNubList packageConfigProgramPathExtra) defaultProgramDb
474+
progdb <- liftIO $ prependProgramSearchPath verbosity (fromNubList packageConfigProgramPathExtra) defaultProgramDb
475475
let progdb' = userSpecifyPaths (Map.toList (getMapLast packageConfigProgramPaths)) progdb
476476
result@(_, _, progdb'') <-
477477
liftIO $

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ import Distribution.Simple.Program
8989
, runDbProgram
9090
)
9191
import Distribution.Simple.Program.Db
92-
( appendProgramSearchPath
92+
( prependProgramSearchPath
9393
)
9494
import Distribution.Simple.Program.Find
9595
( programSearchPathAsPATHVar
@@ -539,7 +539,7 @@ invoke verbosity path args options = do
539539
Nothing -> return ()
540540
Just logHandle -> info verbosity $ "Redirecting build log to " ++ show logHandle
541541

542-
progDb <- appendProgramSearchPath verbosity (useExtraPathEnv options) (useProgramDb options)
542+
progDb <- prependProgramSearchPath verbosity (useExtraPathEnv options) (useProgramDb options)
543543

544544
searchpath <-
545545
programSearchPathAsPATHVar $ getProgramSearchPath progDb

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ import Distribution.Simple.Program
6262
, simpleProgram
6363
)
6464
import Distribution.Simple.Program.Db
65-
( appendProgramSearchPath
65+
( prependProgramSearchPath
6666
)
6767
import Distribution.Types.SourceRepo
6868
( KnownRepoType (..)
@@ -206,7 +206,7 @@ configureVCS
206206
-> VCS Program
207207
-> IO (VCS ConfiguredProgram)
208208
configureVCS verbosity progPaths vcs@VCS{vcsProgram = prog} = do
209-
progPath <- appendProgramSearchPath verbosity progPaths emptyProgramDb
209+
progPath <- prependProgramSearchPath verbosity progPaths emptyProgramDb
210210
asVcsConfigured <$> requireProgram verbosity prog progPath
211211
where
212212
asVcsConfigured (prog', _) = vcs{vcsProgram = prog'}

0 commit comments

Comments
 (0)