aboutsummaryrefslogtreecommitdiff
path: root/src/CabalHelper/Compiletime
diff options
context:
space:
mode:
Diffstat (limited to 'src/CabalHelper/Compiletime')
-rw-r--r--src/CabalHelper/Compiletime/CompPrograms.hs19
-rw-r--r--src/CabalHelper/Compiletime/Program/Stack.hs2
2 files changed, 13 insertions, 8 deletions
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}