From 1fb7d122d1281b6e9b86df478549ad911756445f Mon Sep 17 00:00:00 2001 From: Julian Ospald Date: Fri, 10 Dec 2021 09:23:44 +0100 Subject: [PATCH] Expose ghcup binary to PATH on windows (#4264) * Expose ghcup binary to PATH on windows The bootstrap-haskell.ps1 script uses '[System.EnvironmentVariableTarget]::User' instead of '[System.EnvironmentVariableTarget]::Machine', so it appears ghcup env vars and PATH update never make it. Do these manually for now. * Set CABAL_DIR and make sure config is adjusted The config adjustment usually includes adding msys2 directories, so cabal can find `pkg-config` and libraries, e.g.: + C: \ghcup\msys64\mingw64\bin + extra-include-dirs: C:\ghcup\msys64\mingw64\include + extra-lib-dirs: C:\ghcup\msys64\mingw64\lib - extra-prog-path: C:\cabal\bin + extra-prog-path: C:\ghcup\bin, * Expose cabal dir to PATH as well * Use Set-SystemVariable * Fix tests * Use hardcoded cabal dir * Fix bootstrap-haskell * Move test after installation * Print ghcup installation message * Don't adjust cabal.config (to include mingw paths) This may break setups. --- .../scripts/Installers/Install-Haskell.ps1 | 15 +++++++++++--- images/win/scripts/Tests/Haskell.Tests.ps1 | 20 ++++++++++++++++++- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/images/win/scripts/Installers/Install-Haskell.ps1 b/images/win/scripts/Installers/Install-Haskell.ps1 index cd133d54..63c7a7c9 100644 --- a/images/win/scripts/Installers/Install-Haskell.ps1 +++ b/images/win/scripts/Installers/Install-Haskell.ps1 @@ -32,8 +32,17 @@ Add-MachinePathItem -PathItem $DefaultGhcPath Write-Host 'Installing cabal...' Choco-Install -PackageName cabal -Invoke-PesterTests -TestFile 'Haskell' - # install minimal ghcup, utilizing pre-installed msys2 at C:\msys64 +Write-Host 'Installing ghcup...' +$msysPath = "C:\msys64" +$ghcupPrefix = "C:\" +$cabalDir = "C:\cabal" $bootstrapHaskell = Invoke-WebRequest https://www.haskell.org/ghcup/sh/bootstrap-haskell.ps1 -UseBasicParsing -Invoke-Command -ScriptBlock ([ScriptBlock]::Create($bootstrapHaskell)) -ArgumentList $false, $true, $true, $false, $false, $false, $false, C:\, "", C:\msys64, C:\cabal +Invoke-Command -ScriptBlock ([ScriptBlock]::Create($bootstrapHaskell)) -ArgumentList $false, $true, $true, $false, $true, $false, $false, $ghcupPrefix, "", $msysPath, $cabalDir +Set-SystemVariable "GHCUP_INSTALL_BASE_PREFIX" $ghcupPrefix +Set-SystemVariable "GHCUP_MSYS2" $msysPath +Set-SystemVariable "CABAL_DIR" $cabalDir +Add-MachinePathItem "$ghcupPrefix\ghcup\bin" +Add-MachinePathItem "$cabalDir\bin" + +Invoke-PesterTests -TestFile 'Haskell' diff --git a/images/win/scripts/Tests/Haskell.Tests.ps1 b/images/win/scripts/Tests/Haskell.Tests.ps1 index 854ba031..db93e36d 100644 --- a/images/win/scripts/Tests/Haskell.Tests.ps1 +++ b/images/win/scripts/Tests/Haskell.Tests.ps1 @@ -24,6 +24,15 @@ Describe "Haskell" { } } + $ghcupEnvExists = @( + @{envVar = "GHCUP_INSTALL_BASE_PREFIX"} + @{envVar = "GHCUP_MSYS2"} + ) + + It " environment variable exists" -TestCases $ghcupEnvExists { + Test-Path env:\$envVar + } + It "Accurate 3 versions of GHC are installed" -TestCases @{ghcCount = $ghcCount} { $ghcCount | Should -BeExactly 3 } @@ -39,4 +48,13 @@ Describe "Haskell" { It "Cabal is installed" { "cabal --version" | Should -ReturnZeroExitCode } -} \ No newline at end of file + + It "cabal config was modified and exists" { + $env:CABAL_DIR | Should -Exist + "cabal user-config diff" | Should -ReturnZeroExitCode + } + + It "ghcup is installed" { + "ghcup --version" | Should -ReturnZeroExitCode + } +}