From 4ca6570ecda0a39fc056c239ada6c2368b4dd698 Mon Sep 17 00:00:00 2001 From: Javier Neira Date: Mon, 10 Feb 2020 13:25:49 +0100 Subject: Fix patchBuildToolProgs when haddock cannot be found Cabal's GHC.configure doesn't demand haddock exist, so we have to handle the case where it's not installed. --- src/CabalHelper/Compiletime/CompPrograms.hs | 19 ++++++++++++------- src/CabalHelper/Compiletime/Program/Stack.hs | 2 +- 2 files changed, 13 insertions(+), 8 deletions(-) (limited to 'src/CabalHelper') diff --git a/src/CabalHelper/Compiletime/CompPrograms.hs b/src/CabalHelper/Compiletime/CompPrograms.hs index 020bab4..24bc50f 100644 --- a/src/CabalHelper/Compiletime/CompPrograms.hs +++ b/src/CabalHelper/Compiletime/CompPrograms.hs @@ -2,6 +2,7 @@ module CabalHelper.Compiletime.CompPrograms where +import Control.Monad (when) import Data.List import Data.Maybe import System.Directory @@ -10,6 +11,7 @@ import System.IO.Temp import CabalHelper.Compiletime.Types import CabalHelper.Compiletime.Cabal (getCabalVerbosity) +import CabalHelper.Shared.Common (panicIO) import Symlink (createSymbolicLink) import Distribution.Simple.GHC as GHC (configure) @@ -80,20 +82,23 @@ patchBuildToolProgs SStack progs = do -- being able to pass executable paths straight through to stack but -- currently there is no option to let us do that. withSystemTempDirectory "cabal-helper-symlinks" $ \bindir -> do - createProgSymlink bindir $ ghcProgram progs - createProgSymlink bindir $ ghcPkgProgram progs - createProgSymlink bindir $ haddockProgram progs + createProgSymlink True bindir $ ghcProgram progs + createProgSymlink True bindir $ ghcPkgProgram progs + createProgSymlink False bindir $ haddockProgram progs return $ progs { stackEnv = [("PATH", EnvPrepend $ bindir ++ [searchPathSeparator])] ++ stackEnv progs } -createProgSymlink :: FilePath -> FilePath -> IO () -createProgSymlink bindir target +createProgSymlink :: Bool -> FilePath -> FilePath -> IO () +createProgSymlink required bindir target | [exe] <- splitPath target = do - Just exe_path <- findExecutable exe - createSymbolicLink exe_path (bindir takeFileName target) + mb_exe_path <- findExecutable exe + case mb_exe_path of + Just exe_path -> createSymbolicLink exe_path (bindir takeFileName target) + Nothing -> when required $ panicIO $ "Error trying to create symlink to '" ++ target ++ "': " + ++ "'" ++ exe ++ "'" ++ " executable not found." | otherwise = do cwd <- getCurrentDirectory createSymbolicLink (cwd target) (bindir takeFileName target) diff --git a/src/CabalHelper/Compiletime/Program/Stack.hs b/src/CabalHelper/Compiletime/Program/Stack.hs index d057d65..dc0b0e5 100644 --- a/src/CabalHelper/Compiletime/Program/Stack.hs +++ b/src/CabalHelper/Compiletime/Program/Stack.hs @@ -85,7 +85,7 @@ paths qe@QueryEnv{qeProjLoc=ProjLocStackYaml stack_yaml} cwd workdirArg qe ++ [ "path", "--stack-yaml="++stack_yaml ] return $ \k -> let Just x = lookup k $ map split $ lines out in x where - split l = let (key, ' ' : val) = span (not . isSpace) l in (key, val) + split l = let (key, val) = break isSpace l in (key, dropWhile isSpace val) listPackageCabalFiles :: QueryEnvI c 'Stack -> IO [CabalFile] listPackageCabalFiles qe@QueryEnv{qeProjLoc} -- cgit v1.2.3