Compare commits
1 Commits
stack-fork
...
merge-requ
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1cfff674b7 |
48
README.md
48
README.md
@@ -19,8 +19,6 @@ Similar in scope to [rustup](https://github.com/rust-lang-nursery/rustup.rs), [p
|
|||||||
* [Env variables](#env-variables)
|
* [Env variables](#env-variables)
|
||||||
* [Installing custom bindists](#installing-custom-bindists)
|
* [Installing custom bindists](#installing-custom-bindists)
|
||||||
* [Tips and tricks](#tips-and-tricks)
|
* [Tips and tricks](#tips-and-tricks)
|
||||||
* [Stack hooks](#stack-hooks)
|
|
||||||
* [Sharing MSys2 between stack and ghcup](#sharing-msys2-between-stack-and-ghcup)
|
|
||||||
* [Design goals](#design-goals)
|
* [Design goals](#design-goals)
|
||||||
* [How](#how)
|
* [How](#how)
|
||||||
* [Known users](#known-users)
|
* [Known users](#known-users)
|
||||||
@@ -141,10 +139,6 @@ This is the complete list of env variables that change GHCup behavior:
|
|||||||
* `GHCUP_SKIP_UPDATE_CHECK`: Skip the (possibly annoying) update check when you run a command
|
* `GHCUP_SKIP_UPDATE_CHECK`: Skip the (possibly annoying) update check when you run a command
|
||||||
* `CC`/`LD` etc.: full environment is passed to the build system when compiling GHC via GHCup
|
* `CC`/`LD` etc.: full environment is passed to the build system when compiling GHC via GHCup
|
||||||
|
|
||||||
On windows, there are additional variables:
|
|
||||||
|
|
||||||
* `GHCUP_MSYS2`: where to find msys2, so we can invoke shells and other cool stuff
|
|
||||||
|
|
||||||
### Installing custom bindists
|
### Installing custom bindists
|
||||||
|
|
||||||
There are a couple of good use cases to install custom bindists:
|
There are a couple of good use cases to install custom bindists:
|
||||||
@@ -208,36 +202,6 @@ with_ghc 8.10.5 code path/to/haskell/source
|
|||||||
Cabal and HLS will now see `8.10.5` as the primary GHC, without the need to
|
Cabal and HLS will now see `8.10.5` as the primary GHC, without the need to
|
||||||
run `ghcup set` all the time when switching between projects.
|
run `ghcup set` all the time when switching between projects.
|
||||||
|
|
||||||
### Stack hooks
|
|
||||||
|
|
||||||
GHCup distributes a patched Stack, which has support for custom installation hooks, see:
|
|
||||||
|
|
||||||
* https://github.com/commercialhaskell/stack/pull/5585
|
|
||||||
|
|
||||||
Usually, the bootstrap script will already install a hook for you. If not,
|
|
||||||
download it [here](https://gitlab.haskell.org/haskell/ghcup-hs/-/tree/master/hooks/stack/ghc-install.sh),
|
|
||||||
place it in `~/.stack/hooks/ghc-install.sh` and make sure it's executable.
|
|
||||||
|
|
||||||
Hooks aren't run when `system-ghc: true` is set in `stack.yaml`. If you want stack
|
|
||||||
to never fall back to its own installation logic if ghcup fails, run the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
stack config set install-ghc false --global
|
|
||||||
```
|
|
||||||
|
|
||||||
### Sharing MSys2 between stack and ghcup
|
|
||||||
|
|
||||||
You can tell stack to use GHCup's MSys2 installation. Add the following lines to `~/.stack/config.yaml`:
|
|
||||||
|
|
||||||
```yml
|
|
||||||
skip-msys: true
|
|
||||||
extra-path:
|
|
||||||
- "C:\\ghcup\\msys64\\usr\\bin"
|
|
||||||
- "C:\\ghcup\\msys64\\mingw64\\bin"
|
|
||||||
extra-include-dirs: "C:\\ghcup\\msys64\\mingw64\\include"
|
|
||||||
extra-lib-dirs: "C:\\ghcup\\msys64\\mingw64\\lib"
|
|
||||||
```
|
|
||||||
|
|
||||||
## Design goals
|
## Design goals
|
||||||
|
|
||||||
1. simplicity
|
1. simplicity
|
||||||
@@ -314,6 +278,18 @@ to figure out whether you have the correct toolchain and
|
|||||||
the correct dependencies. Refer to [the official docs](https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Linux)
|
the correct dependencies. Refer to [the official docs](https://ghc.haskell.org/trac/ghc/wiki/Building/Preparation/Linux)
|
||||||
on how to prepare your environment for building GHC.
|
on how to prepare your environment for building GHC.
|
||||||
|
|
||||||
|
### Stack support
|
||||||
|
|
||||||
|
There may be a number of bugs when trying to make ghcup installed GHC versions work with stack,
|
||||||
|
such as:
|
||||||
|
|
||||||
|
- https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/188
|
||||||
|
|
||||||
|
Further, stack's upgrade procedure may break/confuse ghcup. There are a number of integration
|
||||||
|
issues discussed here:
|
||||||
|
|
||||||
|
- https://gitlab.haskell.org/haskell/ghcup-hs/-/issues/153
|
||||||
|
|
||||||
### Windows support
|
### Windows support
|
||||||
|
|
||||||
Windows support is in early stages. Since windows doesn't support symbolic links properly,
|
Windows support is in early stages. Since windows doesn't support symbolic links properly,
|
||||||
|
|||||||
@@ -78,6 +78,8 @@ import qualified Data.Map.Strict as M
|
|||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.Text.IO as T
|
import qualified Data.Text.IO as T
|
||||||
import qualified Data.Text.Encoding as E
|
import qualified Data.Text.Encoding as E
|
||||||
|
import qualified Data.Yaml as Y
|
||||||
|
import qualified Data.Yaml.Pretty as YP
|
||||||
import qualified Text.Megaparsec as MP
|
import qualified Text.Megaparsec as MP
|
||||||
import qualified Text.Megaparsec.Char as MPC
|
import qualified Text.Megaparsec.Char as MPC
|
||||||
|
|
||||||
@@ -105,6 +107,7 @@ data Command
|
|||||||
| Rm (Either RmCommand RmOptions)
|
| Rm (Either RmCommand RmOptions)
|
||||||
| DInfo
|
| DInfo
|
||||||
| Compile CompileCommand
|
| Compile CompileCommand
|
||||||
|
| Config ConfigCommand
|
||||||
| Whereis WhereisOptions WhereisCommand
|
| Whereis WhereisOptions WhereisCommand
|
||||||
| Upgrade UpgradeOpts Bool
|
| Upgrade UpgradeOpts Bool
|
||||||
| ToolRequirements
|
| ToolRequirements
|
||||||
@@ -173,6 +176,8 @@ data RmOptions = RmOptions
|
|||||||
|
|
||||||
data CompileCommand = CompileGHC GHCCompileOptions
|
data CompileCommand = CompileGHC GHCCompileOptions
|
||||||
|
|
||||||
|
data ConfigCommand = ShowConfig | SetConfig String String | InitConfig
|
||||||
|
|
||||||
data GHCCompileOptions = GHCCompileOptions
|
data GHCCompileOptions = GHCCompileOptions
|
||||||
{ targetGhc :: Either Version GitBranch
|
{ targetGhc :: Either Version GitBranch
|
||||||
, bootstrapGhc :: Either Version FilePath
|
, bootstrapGhc :: Either Version FilePath
|
||||||
@@ -408,6 +413,12 @@ com =
|
|||||||
<> footerDoc (Just $ text changeLogFooter)
|
<> footerDoc (Just $ text changeLogFooter)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
<> command
|
||||||
|
"config"
|
||||||
|
( Config
|
||||||
|
<$> info (configP <**> helper)
|
||||||
|
(progDesc "Show or set config" <> footerDoc (Just $ text configFooter))
|
||||||
|
)
|
||||||
<> commandGroup "Other commands:"
|
<> commandGroup "Other commands:"
|
||||||
<> hidden
|
<> hidden
|
||||||
)
|
)
|
||||||
@@ -482,6 +493,17 @@ Examples:
|
|||||||
ghcup prefetch ghc 8.10.5
|
ghcup prefetch ghc 8.10.5
|
||||||
ghcup --offline install ghc 8.10.5|]
|
ghcup --offline install ghc 8.10.5|]
|
||||||
|
|
||||||
|
configFooter :: String
|
||||||
|
configFooter = [s|Examples:
|
||||||
|
|
||||||
|
# show current config
|
||||||
|
ghcup config
|
||||||
|
|
||||||
|
# initialize config
|
||||||
|
ghcup config init
|
||||||
|
|
||||||
|
# set <key> <value> configuration pair
|
||||||
|
ghcup config <key> <value>|]
|
||||||
|
|
||||||
installCabalFooter :: String
|
installCabalFooter :: String
|
||||||
installCabalFooter = [s|Discussion:
|
installCabalFooter = [s|Discussion:
|
||||||
@@ -786,6 +808,19 @@ Examples:
|
|||||||
# build cross compiler
|
# build cross compiler
|
||||||
ghcup compile ghc -j 4 -v 8.4.2 -b 8.2.2 -x armv7-unknown-linux-gnueabihf --config $(pwd)/build.mk -- --enable-unregisterised|]
|
ghcup compile ghc -j 4 -v 8.4.2 -b 8.2.2 -x armv7-unknown-linux-gnueabihf --config $(pwd)/build.mk -- --enable-unregisterised|]
|
||||||
|
|
||||||
|
configP :: Parser ConfigCommand
|
||||||
|
configP = subparser
|
||||||
|
( command "init" initP
|
||||||
|
<> command "set" setP -- [set] KEY VALUE at help lhs
|
||||||
|
<> command "show" showP
|
||||||
|
)
|
||||||
|
<|> argsP -- add show for a single option
|
||||||
|
<|> pure ShowConfig
|
||||||
|
where
|
||||||
|
initP = info (pure InitConfig) (progDesc "Write default config to ~/.ghcup/config.yaml")
|
||||||
|
showP = info (pure ShowConfig) (progDesc "Show current config (default)")
|
||||||
|
setP = info argsP (progDesc "Set config KEY to VALUE")
|
||||||
|
argsP = SetConfig <$> argument str (metavar "KEY") <*> argument str (metavar "VALUE")
|
||||||
|
|
||||||
whereisP :: Parser WhereisCommand
|
whereisP :: Parser WhereisCommand
|
||||||
whereisP = subparser
|
whereisP = subparser
|
||||||
@@ -1258,6 +1293,27 @@ toSettings options = do
|
|||||||
, bShowAllTools = fromMaybe bShowAllTools kShowAllTools
|
, bShowAllTools = fromMaybe bShowAllTools kShowAllTools
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateSettings :: UTF8.ByteString -> Settings -> IO Settings
|
||||||
|
updateSettings config settings = do
|
||||||
|
settings' <- runE @'[JSONError] $ lE' JSONDecodeError . first show . Y.decodeEither' $ config
|
||||||
|
|
||||||
|
case settings' of
|
||||||
|
VRight r -> pure $ mergeConf r settings
|
||||||
|
VLeft (V (JSONDecodeError e)) -> do
|
||||||
|
B.hPut stderr ("Error decoding config: " <> (E.encodeUtf8 . T.pack . show $ e))
|
||||||
|
die ""
|
||||||
|
_ -> die "Unexpected error!"
|
||||||
|
where
|
||||||
|
mergeConf :: UserSettings -> Settings -> Settings
|
||||||
|
mergeConf UserSettings{..} Settings{..} =
|
||||||
|
let cache' = fromMaybe cache uCache
|
||||||
|
noVerify' = fromMaybe noVerify uNoVerify
|
||||||
|
keepDirs' = fromMaybe keepDirs uKeepDirs
|
||||||
|
downloader' = fromMaybe downloader uDownloader
|
||||||
|
verbose' = fromMaybe verbose uVerbose
|
||||||
|
urlSource' = fromMaybe urlSource uUrlSource
|
||||||
|
noNetwork' = fromMaybe noNetwork uNoNetwork
|
||||||
|
in Settings cache' noVerify' keepDirs' downloader' verbose' urlSource' noNetwork'
|
||||||
|
|
||||||
upgradeOptsP :: Parser UpgradeOpts
|
upgradeOptsP :: Parser UpgradeOpts
|
||||||
upgradeOptsP =
|
upgradeOptsP =
|
||||||
@@ -1292,6 +1348,12 @@ describe_result = $( LitE . StringL <$>
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
formatConfig :: Settings -> KeyBindings -> String
|
||||||
|
formatConfig settings keybindings = unlines [formatSettings, formatKeybindings]
|
||||||
|
where
|
||||||
|
formatKeybindings = unlines . ("key-bindings:":) . map (" "++) . lines . UTF8.toString . YP.encodePretty yamlConfig $ keybindings
|
||||||
|
formatSettings = UTF8.toString . YP.encodePretty yamlConfig $ settings
|
||||||
|
yamlConfig = YP.setConfCompare compare YP.defConfig
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
@@ -1990,6 +2052,28 @@ Make sure to clean up #{tmpdir} afterwards.|])
|
|||||||
runLogger $ $(logError) $ T.pack $ prettyShow e
|
runLogger $ $(logError) $ T.pack $ prettyShow e
|
||||||
pure $ ExitFailure 9
|
pure $ ExitFailure 9
|
||||||
|
|
||||||
|
Config InitConfig -> do
|
||||||
|
path <- getConfigFilePath
|
||||||
|
writeFile path $ formatConfig settings keybindings
|
||||||
|
runLogger $ $(logDebug) [i|"config.yaml initialized at #{path}|]
|
||||||
|
pure ExitSuccess
|
||||||
|
|
||||||
|
Config ShowConfig -> do
|
||||||
|
putStrLn $ formatConfig settings keybindings
|
||||||
|
pure ExitSuccess
|
||||||
|
|
||||||
|
Config (SetConfig k v) -> do
|
||||||
|
case v of
|
||||||
|
"" -> die "Empty values are not allowed."
|
||||||
|
_ -> do
|
||||||
|
settings' <- updateSettings [i|#{k}: #{v}\n|] settings
|
||||||
|
runLogger $ $(logDebug) $ T.pack $ show settings'
|
||||||
|
|
||||||
|
path <- getConfigFilePath
|
||||||
|
writeFile path $ formatConfig settings' keybindings
|
||||||
|
|
||||||
|
pure ExitSuccess
|
||||||
|
|
||||||
Whereis WhereisOptions{..} (WhereisTool tool (Just (ToolVersion v))) ->
|
Whereis WhereisOptions{..} (WhereisTool tool (Just (ToolVersion v))) ->
|
||||||
runLeanWhereIs (do
|
runLeanWhereIs (do
|
||||||
loc <- liftE $ whereIsTool tool v
|
loc <- liftE $ whereIsTool tool v
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
# * BOOTSTRAP_HASKELL_GHC_VERSION - the ghc version to install
|
# * BOOTSTRAP_HASKELL_GHC_VERSION - the ghc version to install
|
||||||
# * BOOTSTRAP_HASKELL_CABAL_VERSION - the cabal version to install
|
# * BOOTSTRAP_HASKELL_CABAL_VERSION - the cabal version to install
|
||||||
# * BOOTSTRAP_HASKELL_INSTALL_STACK - whether to install latest stack
|
# * BOOTSTRAP_HASKELL_INSTALL_STACK - whether to install latest stack
|
||||||
# * BOOTSTRAP_HASKELL_INSTALL_STACK_HOOK - whether to install stack hook as well
|
|
||||||
# * BOOTSTRAP_HASKELL_INSTALL_HLS - whether to install latest hls
|
# * BOOTSTRAP_HASKELL_INSTALL_HLS - whether to install latest hls
|
||||||
# * BOOTSTRAP_HASKELL_ADJUST_BASHRC - whether to adjust PATH in bashrc (prepend)
|
# * BOOTSTRAP_HASKELL_ADJUST_BASHRC - whether to adjust PATH in bashrc (prepend)
|
||||||
# * BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG - whether to adjust mingw paths in cabal.config on windows
|
# * BOOTSTRAP_HASKELL_ADJUST_CABAL_CONFIG - whether to adjust mingw paths in cabal.config on windows
|
||||||
@@ -509,25 +508,17 @@ ask_hls() {
|
|||||||
|
|
||||||
ask_stack() {
|
ask_stack() {
|
||||||
if [ -n "${BOOTSTRAP_HASKELL_INSTALL_STACK}" ] ; then
|
if [ -n "${BOOTSTRAP_HASKELL_INSTALL_STACK}" ] ; then
|
||||||
if [ -n "${BOOTSTRAP_HASKELL_INSTALL_STACK_HOOK}" ] ; then
|
return 1
|
||||||
return 2
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then
|
if [ -z "${BOOTSTRAP_HASKELL_NONINTERACTIVE}" ] ; then
|
||||||
echo "-------------------------------------------------------------------------------"
|
echo "-------------------------------------------------------------------------------"
|
||||||
|
|
||||||
warn "Do you want to install stack and stack hooks?"
|
warn "Do you want to install stack?"
|
||||||
warn ""
|
|
||||||
warn "Stack is a haskell build tool similar to cabal that is used by some projects."
|
warn "Stack is a haskell build tool similar to cabal that is used by some projects."
|
||||||
warn "Also see https://docs.haskellstack.org/"
|
warn "Also see https://docs.haskellstack.org/"
|
||||||
warn ""
|
warn ""
|
||||||
warn "Stack hooks allow stack to use ghcup for GHC installation (usually stack handles"
|
warn "[Y] Yes [N] No [?] Help (default is \"N\")."
|
||||||
warn "installation itself, leading to possibly duplicated GHC versions)."
|
|
||||||
warn ""
|
|
||||||
warn "[Y] Yes, with hooks [L] Yes, no hooks [N] No [?] Help (default is \"N\")."
|
|
||||||
warn ""
|
warn ""
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
@@ -535,16 +526,13 @@ ask_stack() {
|
|||||||
|
|
||||||
case $stack_answer in
|
case $stack_answer in
|
||||||
[Yy]*)
|
[Yy]*)
|
||||||
return 2 ;;
|
|
||||||
[Ll]*)
|
|
||||||
return 1 ;;
|
return 1 ;;
|
||||||
[Nn]* | "")
|
[Nn]* | "")
|
||||||
return 0 ;;
|
return 0 ;;
|
||||||
*)
|
*)
|
||||||
echo "Possible choices are:"
|
echo "Possible choices are:"
|
||||||
echo
|
echo
|
||||||
echo "Y - Yes, install stack with hooks"
|
echo "Y - Yes, install stack"
|
||||||
echo "L - Yes, install stack without hooks"
|
|
||||||
echo "N - No, don't install anything more (default)"
|
echo "N - No, don't install anything more (default)"
|
||||||
echo
|
echo
|
||||||
echo "Please make your choice and press ENTER."
|
echo "Please make your choice and press ENTER."
|
||||||
@@ -648,27 +636,7 @@ esac
|
|||||||
|
|
||||||
case $ask_stack_answer in
|
case $ask_stack_answer in
|
||||||
1)
|
1)
|
||||||
{
|
_eghcup --cache install stack || warn "Stack installation failed, continuing anyway"
|
||||||
_eghcup --cache install stack
|
|
||||||
edo stack update
|
|
||||||
} || warn "Stack installation failed, continuing anyway"
|
|
||||||
;;
|
|
||||||
2)
|
|
||||||
{
|
|
||||||
_eghcup --cache install stack
|
|
||||||
edo stack update
|
|
||||||
if [ -n "${STACK_ROOT}" ] ; then
|
|
||||||
stack_root=$STACK_ROOT
|
|
||||||
else
|
|
||||||
stack_root=${HOME}/.stack
|
|
||||||
fi
|
|
||||||
edo mkdir -p "${stack_root}/hooks/"
|
|
||||||
edo curl -Lf "https://www.haskell.org/ghcup/sh/hooks/stack/ghc-install.sh" > "${stack_root}/hooks/ghc-install.sh"
|
|
||||||
edo chmod +x "${stack_root}/hooks/ghc-install.sh"
|
|
||||||
edo stack config set system-ghc false --global
|
|
||||||
edo stack config set install-ghc false --global
|
|
||||||
|
|
||||||
} || warn "Stack installation failed, continuing anyway"
|
|
||||||
;;
|
;;
|
||||||
*) ;;
|
*) ;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ param (
|
|||||||
[switch]$InBash,
|
[switch]$InBash,
|
||||||
# Whether to install stack as well
|
# Whether to install stack as well
|
||||||
[switch]$InstallStack,
|
[switch]$InstallStack,
|
||||||
# Whether to install stack hooks as well
|
|
||||||
[switch]$InstallStackHook,
|
|
||||||
# Whether to install hls as well
|
# Whether to install hls as well
|
||||||
[switch]$InstallHLS,
|
[switch]$InstallHLS,
|
||||||
# Skip adjusting cabal.config with mingw paths
|
# Skip adjusting cabal.config with mingw paths
|
||||||
@@ -225,7 +223,6 @@ $null = [Environment]::SetEnvironmentVariable("GHCUP_INSTALL_BASE_PREFIX", $Ghcu
|
|||||||
|
|
||||||
|
|
||||||
$GhcupDir = ('{0}\ghcup' -f $GhcupBasePrefix)
|
$GhcupDir = ('{0}\ghcup' -f $GhcupBasePrefix)
|
||||||
$StackDir = ('{0}\sr' -f $GhcupBasePrefix)
|
|
||||||
$MsysDir = ('{0}\msys64' -f $GhcupDir)
|
$MsysDir = ('{0}\msys64' -f $GhcupDir)
|
||||||
$Bash = ('{0}\usr\bin\bash' -f $MsysDir)
|
$Bash = ('{0}\usr\bin\bash' -f $MsysDir)
|
||||||
if (!($BootstrapUrl)) {
|
if (!($BootstrapUrl)) {
|
||||||
@@ -313,28 +310,15 @@ if (!($InstallHLS)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# ask whether to install stack
|
# ask whether to install stack
|
||||||
$InstallStackDoc = @'
|
|
||||||
Do you want to install stack and stack hooks?
|
|
||||||
|
|
||||||
Stack is a haskell build tool similar to cabal that is used by some projects.
|
|
||||||
Also see https://docs.haskellstack.org/
|
|
||||||
|
|
||||||
Stack hooks allow stack to use ghcup for GHC installation (usually stack handles
|
|
||||||
installation itself, leading to possibly duplicated GHC versions).
|
|
||||||
'@
|
|
||||||
if (!($InstallStack)) {
|
if (!($InstallStack)) {
|
||||||
if (!($Silent)) {
|
if (!($Silent)) {
|
||||||
$StackDecision = $Host.UI.PromptForChoice('Install stack'
|
$StackDecision = $Host.UI.PromptForChoice('Install stack'
|
||||||
, $InstallStackDoc
|
, 'Do you want to install stack as well?'
|
||||||
, [System.Management.Automation.Host.ChoiceDescription[]] @('&Yes, with hooks'
|
, [System.Management.Automation.Host.ChoiceDescription[]] @('&Yes'
|
||||||
'&Light install, without hooks'
|
|
||||||
'&No'
|
'&No'
|
||||||
'&Abort'), 2)
|
'&Abort'), 1)
|
||||||
|
|
||||||
if ($StackDecision -eq 0) {
|
if ($StackDecision -eq 0) {
|
||||||
$InstallStack = $true
|
|
||||||
$InstallStackHook = $true
|
|
||||||
} elseif ($StackDecision -eq 1) {
|
|
||||||
$InstallStack = $true
|
$InstallStack = $true
|
||||||
} elseif ($StackDecision -eq 2) {
|
} elseif ($StackDecision -eq 2) {
|
||||||
Exit 0
|
Exit 0
|
||||||
@@ -515,11 +499,6 @@ $SilentExport = 'export BOOTSTRAP_HASKELL_NONINTERACTIVE=1 ;'
|
|||||||
|
|
||||||
if ($InstallStack) {
|
if ($InstallStack) {
|
||||||
$StackInstallExport = 'export BOOTSTRAP_HASKELL_INSTALL_STACK=1 ;'
|
$StackInstallExport = 'export BOOTSTRAP_HASKELL_INSTALL_STACK=1 ;'
|
||||||
$null = [Environment]::SetEnvironmentVariable("STACK_ROOT", $StackDir, [System.EnvironmentVariableTarget]::User)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($InstallStackHook) {
|
|
||||||
$StackInstallHookExport = 'export BOOTSTRAP_HASKELL_INSTALL_STACK_HOOK=1 ;'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($InstallHLS) {
|
if ($InstallHLS) {
|
||||||
@@ -531,9 +510,9 @@ if (!($NoAdjustCabalConfig)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ((Get-Process -ID $PID).ProcessName.StartsWith("bootstrap-haskell") -Or $InBash) {
|
if ((Get-Process -ID $PID).ProcessName.StartsWith("bootstrap-haskell") -Or $InBash) {
|
||||||
Exec "$Bash" '-lc' ('{4} {6} {7} {8} {9} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; export STACK_ROOT=$(cygpath -m ''{10}/'') ; [[ ''{0}'' = https* ]] && curl --proto ''=https'' --tlsv1.2 -sSf {0} | bash || cat $(cygpath -m ''{0}'') | bash' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport, $StackInstallHookExport, $StackDir)
|
Exec "$Bash" '-lc' ('{4} {6} {7} {8} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; [[ ''{0}'' = https* ]] && curl --proto ''=https'' --tlsv1.2 -sSf {0} | bash || cat $(cygpath -m ''{0}'') | bash' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport)
|
||||||
} else {
|
} else {
|
||||||
Exec "$Msys2Shell" '-mingw64' '-mintty' '-c' ('{4} {6} {7} {8} {9} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; export STACK_ROOT=$(cygpath -m ''{10}/'') ; trap ''echo Press any key to exit && read -n 1 && exit'' 2 ; [[ ''{0}'' = https* ]] && curl --proto ''=https'' --tlsv1.2 -sSf {0} | bash || cat $(cygpath -m ''{0}'') | bash ; echo ''Press any key to exit'' && read -n 1' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport, $StackInstallHookExport, $StackDir)
|
Exec "$Msys2Shell" '-mingw64' '-mintty' '-c' ('{4} {6} {7} {8} [ -n ''{1}'' ] && export GHCUP_MSYS2=$(cygpath -m ''{1}'') ; [ -n ''{2}'' ] && export GHCUP_INSTALL_BASE_PREFIX=$(cygpath -m ''{2}/'') ; export PATH=$(cygpath -u ''{3}/bin''):$PATH ; export CABAL_DIR=''{5}'' ; trap ''echo Press any key to exit && read -n 1 && exit'' 2 ; [[ ''{0}'' = https* ]] && curl --proto ''=https'' --tlsv1.2 -sSf {0} | bash || cat $(cygpath -m ''{0}'') | bash ; echo ''Press any key to exit'' && read -n 1' -f $BootstrapUrl, $MsysDir, $GhcupBasePrefix, $GhcupDir, $SilentExport, $CabalDirFull, $StackInstallExport, $HLSInstallExport, $AdjustCabalConfigExport)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2206,7 +2206,8 @@ ghcupDownloads:
|
|||||||
unknown_versioning: *stack-271-64
|
unknown_versioning: *stack-271-64
|
||||||
2.7.3:
|
2.7.3:
|
||||||
viTags:
|
viTags:
|
||||||
- old
|
- Latest
|
||||||
|
- Recommended
|
||||||
viChangeLog: https://github.com/commercialhaskell/stack/blob/master/ChangeLog.md#v273
|
viChangeLog: https://github.com/commercialhaskell/stack/blob/master/ChangeLog.md#v273
|
||||||
viPostInstall: *stack-post
|
viPostInstall: *stack-post
|
||||||
viArch:
|
viArch:
|
||||||
@@ -2231,65 +2232,4 @@ ghcupDownloads:
|
|||||||
RegexDir: "stack-.*"
|
RegexDir: "stack-.*"
|
||||||
Linux_Alpine:
|
Linux_Alpine:
|
||||||
unknown_versioning: *stack-273-64
|
unknown_versioning: *stack-273-64
|
||||||
2.7.3.1:
|
|
||||||
viTags:
|
|
||||||
- Latest
|
|
||||||
- Recommended
|
|
||||||
viChangeLog: https://github.com/commercialhaskell/stack/blob/master/ChangeLog.md#v273
|
|
||||||
viPostInstall: &stack-post-new |
|
|
||||||
Stack manages GHC versions internally by default. It can also use hooks to automatically
|
|
||||||
install and locate GHC versions utilizing GHCup:
|
|
||||||
https://gitlab.haskell.org/haskell/ghcup-hs#stack-hooks
|
|
||||||
|
|
||||||
Alternatively, you can also tell stack to use the system GHC version (whatever is in PATH):
|
|
||||||
stack config set system-ghc true --global
|
|
||||||
|
|
||||||
If you want stack to use GHCup's provided MSys2, follow the instructions here (not recommended):
|
|
||||||
https://gitlab.haskell.org/haskell/ghcup-hs/-/tree/stack-fork#sharing-msys2-between-stack-and-ghcup
|
|
||||||
|
|
||||||
Also check out: https://docs.haskellstack.org/en/stable/yaml_configuration
|
|
||||||
|
|
||||||
!!! GHCup ships a patched version of stack. Before reporting bugs to stack developers !!!
|
|
||||||
!!! make sure it is reproducible with the original stack version: !!!
|
|
||||||
!!! https://docs.haskellstack.org/en/stable/install_and_upgrade/ !!!
|
|
||||||
viArch:
|
|
||||||
A_64:
|
|
||||||
Linux_UnknownLinux:
|
|
||||||
unknown_versioning: &stack-2731-64
|
|
||||||
dlUri: https://downloads.haskell.org/ghcup/unofficial-bindists/stack/2.7.3.1/stack-2.7.3.1-linux-x86_64.tar.gz
|
|
||||||
dlSubdir:
|
|
||||||
RegexDir: "stack-.*"
|
|
||||||
dlHash: 7c10090d568651208b6d6c003c8d78ef79099f4b472aea5ca800f3e4a7a1c6ce
|
|
||||||
Darwin:
|
|
||||||
unknown_versioning:
|
|
||||||
dlUri: https://downloads.haskell.org/ghcup/unofficial-bindists/stack/2.7.3.1/stack-2.7.3.1-osx-x86_64.tar.gz
|
|
||||||
dlSubdir:
|
|
||||||
RegexDir: "stack-.*"
|
|
||||||
dlHash: 23030868be377d62ed324332d239ddd915b12f7a64c887f297e1b60a3f65894f
|
|
||||||
Windows:
|
|
||||||
unknown_versioning:
|
|
||||||
dlUri: https://downloads.haskell.org/ghcup/unofficial-bindists/stack/2.7.3.1/stack-2.7.3.1-windows-x86_64.tar.bz2
|
|
||||||
dlHash: 983ac24219370cdf220f47f9edb17d0aeb831a1253fd777d322fd1bff358c511
|
|
||||||
Linux_Alpine:
|
|
||||||
unknown_versioning: *stack-2731-64
|
|
||||||
FreeBSD:
|
|
||||||
unknown_versioning:
|
|
||||||
dlUri: https://downloads.haskell.org/ghcup/unofficial-bindists/stack/2.7.3.1/stack-2.7.3.1-freebsd-x86_64.tar.gz
|
|
||||||
dlHash: b6b1eb59981b8c1d3a04b061f03296b1540ecbadbc34cbd4fe712a575a155ee9
|
|
||||||
A_32:
|
|
||||||
Linux_UnknownLinux:
|
|
||||||
unknown_versioning: &stack-2731-32
|
|
||||||
dlUri: https://downloads.haskell.org/ghcup/unofficial-bindists/stack/2.7.3.1/stack-2.7.3.1-linux-i386.tar.gz
|
|
||||||
dlHash: da2081d84517d16a8216e929582dd39caa19643c819b77c6f68f138bd177a758
|
|
||||||
Linux_Alpine:
|
|
||||||
unknown_versioning: *stack-2731-32
|
|
||||||
A_ARM64:
|
|
||||||
Linux_UnknownLinux:
|
|
||||||
unknown_versioning:
|
|
||||||
dlUri: https://downloads.haskell.org/ghcup/unofficial-bindists/stack/2.7.3.1/stack-2.7.3.1-linux-aarch64.tar.gz
|
|
||||||
dlHash: 0e1789852a476dd87f495fa0b481309398b2bafc00cf7c8d980c91977b39d9a6
|
|
||||||
A_ARM:
|
|
||||||
Linux_UnknownLinux:
|
|
||||||
unknown_versioning:
|
|
||||||
dlUri: https://downloads.haskell.org/ghcup/unofficial-bindists/stack/2.7.3.1/stack-2.7.3.1-linux-armv7.tar.gz
|
|
||||||
dlHash: 13d61616c169615d80381ea0c84e13540410b736a553565cd48d10b4d2bd7f23
|
|
||||||
|
|||||||
@@ -226,6 +226,7 @@ executable ghcup
|
|||||||
, uri-bytestring ^>=0.3.2.2
|
, uri-bytestring ^>=0.3.2.2
|
||||||
, utf8-string ^>=1.0
|
, utf8-string ^>=1.0
|
||||||
, versions >=4.0.1 && <5.1
|
, versions >=4.0.1 && <5.1
|
||||||
|
, yaml ^>=0.11.4.0
|
||||||
|
|
||||||
if flag(internal-downloader)
|
if flag(internal-downloader)
|
||||||
cpp-options: -DINTERNAL_DOWNLOADER
|
cpp-options: -DINTERNAL_DOWNLOADER
|
||||||
|
|||||||
@@ -1,23 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -eu
|
|
||||||
|
|
||||||
case $HOOK_GHC_TYPE in
|
|
||||||
bindist)
|
|
||||||
ghcup --offline whereis ghc $HOOK_GHC_VERSION || {
|
|
||||||
ghcup --cache install ghc $HOOK_GHC_VERSION && ghcup whereis ghc $HOOK_GHC_VERSION
|
|
||||||
}
|
|
||||||
;;
|
|
||||||
git)
|
|
||||||
>&2 echo "Hook doesn't support installing from source."
|
|
||||||
>&2 echo "Consider enabling stack GHC installs for this project, via:"
|
|
||||||
>&2 echo " stack config set install-ghc true"
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
>&2 echo "Unsupported GHC installation type: ${HOOK_GHC_TYPE}."
|
|
||||||
>&2 echo "Consider enabling stack GHC installs for this project, via:"
|
|
||||||
>&2 echo " stack config set install-ghc true"
|
|
||||||
exit 2
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -316,3 +316,6 @@ deriveJSON defaultOptions { sumEncoding = ObjectWithSingleField } ''URLSource
|
|||||||
deriveJSON defaultOptions { sumEncoding = ObjectWithSingleField } ''Key
|
deriveJSON defaultOptions { sumEncoding = ObjectWithSingleField } ''Key
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = \str' -> maybe str' T.unpack . T.stripPrefix (T.pack "k-") . T.pack . kebab $ str' } ''UserKeyBindings
|
deriveJSON defaultOptions { fieldLabelModifier = \str' -> maybe str' T.unpack . T.stripPrefix (T.pack "k-") . T.pack . kebab $ str' } ''UserKeyBindings
|
||||||
deriveJSON defaultOptions { fieldLabelModifier = \str' -> maybe str' T.unpack . T.stripPrefix (T.pack "u-") . T.pack . kebab $ str' } ''UserSettings
|
deriveJSON defaultOptions { fieldLabelModifier = \str' -> maybe str' T.unpack . T.stripPrefix (T.pack "u-") . T.pack . kebab $ str' } ''UserSettings
|
||||||
|
|
||||||
|
deriveToJSON defaultOptions { fieldLabelModifier = kebab } ''Settings
|
||||||
|
deriveToJSON defaultOptions { fieldLabelModifier = drop 2 . kebab } ''KeyBindings -- move under key-bindings key
|
||||||
|
|||||||
Reference in New Issue
Block a user