Support Hadrian provided bindists

Fixes #31
This commit is contained in:
Brian McKenna 2020-06-18 14:03:25 +00:00
parent a1bcc4b51f
commit a186b07763

View File

@ -54,7 +54,7 @@ import System.IO.Error
import System.Posix.FilePath ( getSearchPath
, takeFileName
)
import System.Posix.Files.ByteString ( readSymbolicLink )
import System.Posix.Files.ByteString ( getFileStatus, isSymbolicLink, readSymbolicLink )
import Text.Regex.Posix
import URI.ByteString
@ -417,13 +417,20 @@ ghcToolFiles ver = do
([s|^([a-zA-Z0-9_-]*[a-zA-Z0-9_]-)?ghc$|] :: ByteString)
)
let ghcbinPath = toFilePath (bindir </> ghcbin)
ghcIsLink <- isSymbolicLink <$> (liftIO $ getFileStatus ghcbinPath)
onlyUnversioned <- if ghcIsLink
then do
(Just symver) <-
(B.stripPrefix (toFilePath ghcbin <> "-") . takeFileName)
<$> (liftIO $ readSymbolicLink $ toFilePath (bindir </> ghcbin))
<$> (liftIO $ readSymbolicLink ghcbinPath)
when (B.null symver)
(throwIO $ userError $ "Fatal: ghc symlink target is broken")
pure $ filter (\x -> not $ symver `B.isSuffixOf` toFilePath x)
else
pure id
pure . filter (\x -> not $ symver `B.isSuffixOf` toFilePath x) $ files
pure $ onlyUnversioned files
-- | This file, when residing in ~/.ghcup/ghc/<ver>/ signals that