Skip to content

Commit e7b7a35

Browse files
committed
Fail more gracefully when tests can't be run
If cabal-install isn't built yet, we can't run it's tests yet. Prior to this commit, if you tried running "./Setup test" on cabal-install without having built cabal-install yet you got: package-tests: dist/build/cabal: canonicalizePath: does not exist (No such file or directory) Now you get: package-tests: user error (The program 'cabal' is required but it could not be found.) I moved the canonicalization logic into findProgramOnSearchPath. This is a change to the semantics of the library, but shouldn't break anything.
1 parent f2278fc commit e7b7a35

File tree

2 files changed

+8
-6
lines changed

2 files changed

+8
-6
lines changed

Cabal/Distribution/Simple/Program/Find.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import Distribution.Simple.Utils
3535
import Distribution.System
3636
( OS(..), buildOS )
3737
import System.Directory
38-
( findExecutable )
38+
( canonicalizePath, findExecutable )
3939
import Distribution.Compat.Environment
4040
( getEnvironment )
4141
import System.FilePath
@@ -109,7 +109,7 @@ findProgramOnSearchPath verbosity searchpath prog = do
109109
findFirstExe (f:fs) = do
110110
isExe <- doesExecutableExist f
111111
if isExe
112-
then return (Just f)
112+
then Just `fmap` canonicalizePath f
113113
else findFirstExe fs
114114

115115
-- | Interpret a 'ProgramSearchPath' to construct a new @$PATH@ env var.

cabal-install/tests/IntegrationTests.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import Distribution.Simple.Program.Builtin (ghcPkgProgram)
1515
import Distribution.Simple.Program.Db
1616
(defaultProgramDb, requireProgram, setProgramSearchPath)
1717
import Distribution.Simple.Program.Find
18-
(ProgramSearchPathEntry(ProgramSearchPathDir), defaultProgramSearchPath)
18+
(ProgramSearchPathEntry(ProgramSearchPathDir))
1919
import Distribution.Simple.Program.Types
2020
( Program(..), simpleProgram, programPath)
2121
import Distribution.Simple.Setup ( Flag(..) )
@@ -256,9 +256,11 @@ main :: IO ()
256256
main = do
257257
-- Find executables and build directories, etc.
258258
distPref <- findDistPrefOrDefault NoFlag
259-
buildDir <- canonicalizePath (distPref </> "build/cabal")
260-
let programSearchPath = ProgramSearchPathDir buildDir : defaultProgramSearchPath
261-
(cabal, _) <- requireProgram normal cabalProgram (setProgramSearchPath programSearchPath defaultProgramDb)
259+
let programSearchPath = [ProgramSearchPathDir $ distPref </> "build/cabal"]
260+
-- This throws an error if the cabal executable hasn't been built yet,
261+
-- because test suites can't depend on executables.
262+
(cabal, _) <- requireProgram normal cabalProgram
263+
(setProgramSearchPath programSearchPath defaultProgramDb)
262264
(ghcPkg, _) <- requireProgram normal ghcPkgProgram defaultProgramDb
263265
baseDirectory <- canonicalizePath $ "tests" </> "IntegrationTests"
264266
-- Set up environment variables for test scripts

0 commit comments

Comments
 (0)