Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
4ed72fb517
|
|||
|
5217aa0a1d
|
|||
|
eb26a5133f
|
|||
|
9e9402a3a2
|
30
lib/GHCup.hs
30
lib/GHCup.hs
@@ -77,6 +77,9 @@ import System.Directory hiding ( findFiles )
|
|||||||
import System.Environment
|
import System.Environment
|
||||||
import System.FilePath
|
import System.FilePath
|
||||||
import System.IO.Error
|
import System.IO.Error
|
||||||
|
#if defined(IS_WINDOWS)
|
||||||
|
import System.IO.Temp
|
||||||
|
#endif
|
||||||
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
import Text.PrettyPrint.HughesPJClass ( prettyShow )
|
||||||
import Text.Regex.Posix
|
import Text.Regex.Posix
|
||||||
|
|
||||||
@@ -249,6 +252,22 @@ installPackedGHC :: ( MonadMask m
|
|||||||
#endif
|
#endif
|
||||||
] m ()
|
] m ()
|
||||||
installPackedGHC dl msubdir inst ver = do
|
installPackedGHC dl msubdir inst ver = do
|
||||||
|
#if defined(IS_WINDOWS)
|
||||||
|
lift $ $(logInfo) "Installing GHC (this may take a while)"
|
||||||
|
|
||||||
|
Dirs { tmpDir } <- lift getDirs
|
||||||
|
unpackDir <- liftIO $ emptyTempFile tmpDir "ghc"
|
||||||
|
liftIO $ rmFile unpackDir
|
||||||
|
|
||||||
|
liftE $ unpackToDir unpackDir dl
|
||||||
|
|
||||||
|
d <- case msubdir of
|
||||||
|
Just td -> liftE $ intoSubdir unpackDir td
|
||||||
|
Nothing -> pure unpackDir
|
||||||
|
|
||||||
|
liftIO $ Win32.moveFileEx d (Just inst) 0
|
||||||
|
liftIO $ rmPath unpackDir
|
||||||
|
#else
|
||||||
PlatformRequest {..} <- lift getPlatformReq
|
PlatformRequest {..} <- lift getPlatformReq
|
||||||
|
|
||||||
-- unpack
|
-- unpack
|
||||||
@@ -264,6 +283,7 @@ installPackedGHC dl msubdir inst ver = do
|
|||||||
liftE $ runBuildAction tmpUnpack
|
liftE $ runBuildAction tmpUnpack
|
||||||
(Just inst)
|
(Just inst)
|
||||||
(installUnpackedGHC workdir inst ver)
|
(installUnpackedGHC workdir inst ver)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
-- | Install an unpacked GHC distribution. This only deals with the GHC
|
-- | Install an unpacked GHC distribution. This only deals with the GHC
|
||||||
@@ -280,13 +300,6 @@ installUnpackedGHC :: ( MonadReader env m
|
|||||||
-> FilePath -- ^ Path to install to
|
-> FilePath -- ^ Path to install to
|
||||||
-> Version -- ^ The GHC version
|
-> Version -- ^ The GHC version
|
||||||
-> Excepts '[ProcessError] m ()
|
-> Excepts '[ProcessError] m ()
|
||||||
#if defined(IS_WINDOWS)
|
|
||||||
installUnpackedGHC path inst _ = do
|
|
||||||
lift $ $(logInfo) "Installing GHC (this may take a while)"
|
|
||||||
-- windows bindists are relocatable and don't need
|
|
||||||
-- to run configure
|
|
||||||
liftIO $ copyDirectoryRecursive path inst
|
|
||||||
#else
|
|
||||||
installUnpackedGHC path inst ver = do
|
installUnpackedGHC path inst ver = do
|
||||||
PlatformRequest {..} <- lift getPlatformReq
|
PlatformRequest {..} <- lift getPlatformReq
|
||||||
|
|
||||||
@@ -309,7 +322,6 @@ installUnpackedGHC path inst ver = do
|
|||||||
Nothing
|
Nothing
|
||||||
lEM $ make ["install"] (Just path)
|
lEM $ make ["install"] (Just path)
|
||||||
pure ()
|
pure ()
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
-- | Installs GHC into @~\/.ghcup\/ghc/\<ver\>@ and places the
|
-- | Installs GHC into @~\/.ghcup\/ghc/\<ver\>@ and places the
|
||||||
@@ -1495,6 +1507,7 @@ rmGhcupDirs = do
|
|||||||
, binDir
|
, binDir
|
||||||
, logsDir
|
, logsDir
|
||||||
, cacheDir
|
, cacheDir
|
||||||
|
, tmpDir
|
||||||
} <- getDirs
|
} <- getDirs
|
||||||
|
|
||||||
let envFilePath = baseDir </> "env"
|
let envFilePath = baseDir </> "env"
|
||||||
@@ -1506,6 +1519,7 @@ rmGhcupDirs = do
|
|||||||
rmDir cacheDir
|
rmDir cacheDir
|
||||||
rmDir logsDir
|
rmDir logsDir
|
||||||
rmBinDir binDir
|
rmBinDir binDir
|
||||||
|
rmDir tmpDir
|
||||||
#if defined(IS_WINDOWS)
|
#if defined(IS_WINDOWS)
|
||||||
rmDir (baseDir </> "msys64")
|
rmDir (baseDir </> "msys64")
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -384,6 +384,7 @@ data Dirs = Dirs
|
|||||||
, cacheDir :: FilePath
|
, cacheDir :: FilePath
|
||||||
, logsDir :: FilePath
|
, logsDir :: FilePath
|
||||||
, confDir :: FilePath
|
, confDir :: FilePath
|
||||||
|
, tmpDir :: FilePath
|
||||||
}
|
}
|
||||||
deriving (Show, GHC.Generic)
|
deriving (Show, GHC.Generic)
|
||||||
|
|
||||||
|
|||||||
@@ -1086,19 +1086,14 @@ ensureGlobalTools = do
|
|||||||
|
|
||||||
-- | Ensure ghcup directory structure exists.
|
-- | Ensure ghcup directory structure exists.
|
||||||
ensureDirectories :: Dirs -> IO ()
|
ensureDirectories :: Dirs -> IO ()
|
||||||
ensureDirectories dirs = do
|
ensureDirectories (Dirs baseDir binDir cacheDir logsDir confDir tmpDir) = do
|
||||||
let Dirs
|
|
||||||
{ baseDir
|
|
||||||
, binDir
|
|
||||||
, cacheDir
|
|
||||||
, logsDir
|
|
||||||
, confDir
|
|
||||||
} = dirs
|
|
||||||
createDirRecursive' baseDir
|
createDirRecursive' baseDir
|
||||||
|
createDirRecursive' (baseDir </> "ghc")
|
||||||
createDirRecursive' binDir
|
createDirRecursive' binDir
|
||||||
createDirRecursive' cacheDir
|
createDirRecursive' cacheDir
|
||||||
createDirRecursive' logsDir
|
createDirRecursive' logsDir
|
||||||
createDirRecursive' confDir
|
createDirRecursive' confDir
|
||||||
|
createDirRecursive' tmpDir
|
||||||
pure ()
|
pure ()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -191,6 +191,15 @@ ghcupLogsDir = do
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
-- | Defaults to '~/.ghcup/tmp.
|
||||||
|
--
|
||||||
|
-- If 'GHCUP_USE_XDG_DIRS' is set (to anything),
|
||||||
|
-- then uses 'XDG_DATA_HOME/ghcup/tmp' as per xdg spec.
|
||||||
|
ghcupTmpDir :: IO FilePath
|
||||||
|
ghcupTmpDir = ghcupBaseDir <&> (</> "tmp")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
getAllDirs :: IO Dirs
|
getAllDirs :: IO Dirs
|
||||||
getAllDirs = do
|
getAllDirs = do
|
||||||
baseDir <- ghcupBaseDir
|
baseDir <- ghcupBaseDir
|
||||||
@@ -198,6 +207,7 @@ getAllDirs = do
|
|||||||
cacheDir <- ghcupCacheDir
|
cacheDir <- ghcupCacheDir
|
||||||
logsDir <- ghcupLogsDir
|
logsDir <- ghcupLogsDir
|
||||||
confDir <- ghcupConfigDir
|
confDir <- ghcupConfigDir
|
||||||
|
tmpDir <- ghcupTmpDir
|
||||||
pure Dirs { .. }
|
pure Dirs { .. }
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
<div>
|
<div>
|
||||||
<div class="command-button"><pre><span class='ghcup-command'>Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;Invoke-Command -ScriptBlock ([ScriptBlock]::Create((Invoke-WebRequest https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing))) -ArgumentList $true</span></span></pre><button class="tooltip" onclick="copyToClipboardPowershell()"><img src="copy.svg" alt="" /><span class="tooltiptext">Copy to clipboard</span></button>
|
<div class="command-button"><pre><span class='ghcup-command'>Set-ExecutionPolicy Bypass -Scope Process -Force;[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072;Invoke-Command -ScriptBlock ([ScriptBlock]::Create((Invoke-WebRequest https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing))) -ArgumentList $true</span></span></pre><button class="tooltip" onclick="copyToClipboardPowershell()"><img src="copy.svg" alt="" /><span class="tooltiptext">Copy to clipboard</span></button>
|
||||||
</div>
|
</div>
|
||||||
<p class="other-help">If you want to run an interactive installation, change <span class='code'>$true</span> to <span class='code'>$false</span> at the end of the script.</p>
|
<p class="other-help">If you want to run an non-interactive installation, change <span class='code'>$true</span> to <span class='code'>$false</span> at the end of the script.</p>
|
||||||
</div>
|
</div>
|
||||||
</p>
|
</p>
|
||||||
<p>If you're a Windows Subsystem 2 for Linux user run the following in your terminal, then follow the onscreen instructions to install Haskell.
|
<p>If you're a Windows Subsystem 2 for Linux user run the following in your terminal, then follow the onscreen instructions to install Haskell.
|
||||||
|
|||||||
Reference in New Issue
Block a user