From 083dc59a8f2ee7fd96d3872594653dbd514bfb1e Mon Sep 17 00:00:00 2001 From: Arjun Kathuria Date: Sun, 25 Jul 2021 13:35:41 +0530 Subject: [PATCH] update `installGhcBindist` to take a "Maybe FilePath" to work with isolated installs --- lib/GHCup.hs | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/lib/GHCup.hs b/lib/GHCup.hs index d9a55b2..021e9a7 100644 --- a/lib/GHCup.hs +++ b/lib/GHCup.hs @@ -186,6 +186,7 @@ installGHCBindist :: ( MonadFail m ) => DownloadInfo -- ^ where/how to download -> Version -- ^ the version to install + -> Maybe FilePath -- ^ isolated filepath if user passed any -> Excepts '[ AlreadyInstalled , BuildFailed @@ -201,10 +202,16 @@ installGHCBindist :: ( MonadFail m ] m () -installGHCBindist dlinfo ver = do +installGHCBindist dlinfo ver isoFilepath = do let tver = mkTVer ver + let isIsolatedInstall = isJust isoFilepath + + lift $ $(logDebug) [i|Requested to install GHC with #{ver}|] - whenM (lift $ ghcInstalled tver) (throwE $ AlreadyInstalled GHC ver) + + -- we only care for already installed errors in regular (non-isolated) installs + when (not isIsolatedInstall) $ + whenM (lift $ ghcInstalled tver) (throwE $ AlreadyInstalled GHC ver) -- download (or use cached version) dl <- liftE $ downloadCached dlinfo Nothing @@ -212,11 +219,21 @@ installGHCBindist dlinfo ver = do -- prepare paths ghcdir <- lift $ ghcupGHCDir tver - toolchainSanityChecks - - liftE $ installPackedGHC dl (view dlSubdir dlinfo) ghcdir ver + let isoDir = if isIsolatedInstall + then fromJust isoFilepath + else mempty :: FilePath - liftE $ postGHCInstall tver + if isIsolatedInstall + then do + lift $ $(logInfo) [i|isolated installing GHC to #{isoDir}|] + liftE $ installPackedGHC dl (view dlSubdir dlinfo) isoDir ver + else do + toolchainSanityChecks + liftE $ installPackedGHC dl (view dlSubdir dlinfo) ghcdir ver + + -- make symlinks & stuff when regular install, + -- don't make any for isolated installs. + whenM (pure $ not isIsolatedInstall) (liftE $ postGHCInstall tver) where toolchainSanityChecks = do