diff --git a/lib/GHCup/Utils.hs b/lib/GHCup/Utils.hs index 43d9f32..73d900c 100644 --- a/lib/GHCup/Utils.hs +++ b/lib/GHCup/Utils.hs @@ -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) ) - (Just symver) <- - (B.stripPrefix (toFilePath ghcbin <> "-") . takeFileName) - <$> (liftIO $ readSymbolicLink $ toFilePath (bindir ghcbin)) - when (B.null symver) - (throwIO $ userError $ "Fatal: ghc symlink target is broken") + let ghcbinPath = toFilePath (bindir ghcbin) + ghcIsLink <- isSymbolicLink <$> (liftIO $ getFileStatus ghcbinPath) + onlyUnversioned <- if ghcIsLink + then do + (Just symver) <- + (B.stripPrefix (toFilePath ghcbin <> "-") . takeFileName) + <$> (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// signals that