From e62a2ea26a18d4265a1f406fbd790ad9d9a64e1c Mon Sep 17 00:00:00 2001
From: Artem Pelenitsyn <a.pelenitsyn@gmail.com>
Date: Tue, 28 May 2024 21:05:56 -0400
Subject: [PATCH] CI: add GHC 9.10 (#9914)
* CI: add GHC 9.10
* GHC 9.10 compat in testsuite: CPP symbols don't get passed to CC as
eagearly
Discussion: https://github.com/haskell/cabal/pull/9914#issuecomment-2077439625
Related GHC issue: https://gitlab.haskell.org/ghc/ghc/-/issues/21291
* GHC 9.10 compat in tests: disable tests regressing due to #9940
(cherry picked from commit 3a8c69cb142e27caae5d754ac400636b3417b198)
---
.github/workflows/validate.yml | 3 ++-
.../src/Distribution/Client/TargetSelector.hs | 7 ++++++-
cabal-install/tests/IntegrationTests2.hs | 6 ++++--
.../Distribution/Client/Init/NonInteractive.hs | 3 +++
.../PackageTests/CCompilerOverride/foo.c | 8 --------
.../PackageTests/CCompilerOverride/my.cabal | 2 +-
.../CCompilerOverride/setup.cabal.out | 1 -
.../PackageTests/CCompilerOverride/setup.out | 1 -
.../PackageTests/CCompilerOverride/setup.test.hs | 8 +++++---
project-cabal/ghc-latest.config | 16 ++++++++++++++--
10 files changed, 35 insertions(+), 20 deletions(-)
diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml
index 509c969429..5d597314ea 100644
--- a/.github/workflows/validate.yml
+++ b/.github/workflows/validate.yml
@@ -70,7 +70,7 @@ jobs:
# If you remove something from here, then add it to the old-ghcs job.
# Also a removed GHC from here means that we are actually dropping
# support, so the PR *must* have a changelog entry.
- ghc: ['9.8.2', '9.6.4', '9.4.8', '9.2.8', '9.0.2', '8.10.7', '8.8.4', '8.6.5']
+ ghc: ['9.10.1', '9.8.2', '9.6.4', '9.4.8', '9.2.8', '9.0.2', '8.10.7', '8.8.4', '8.6.5']
exclude:
# corrupts GHA cache or the fabric of reality itself, see https://github.com/haskell/cabal/issues/8356
- os: windows-latest
@@ -104,6 +104,7 @@ jobs:
with:
ghc-version: ${{ matrix.ghc }}
cabal-version: latest # latest is mandatory for cabal-testsuite, see https://github.com/haskell/cabal/issues/8133
+ ghcup-release-channel: https://raw.githubusercontent.com/haskell/ghcup-metadata/master/ghcup-prereleases-0.0.8.yaml
# See the following link for a breakdown of the following step
# https://github.com/haskell/actions/issues/7#issuecomment-745697160
diff --git a/cabal-install/src/Distribution/Client/TargetSelector.hs b/cabal-install/src/Distribution/Client/TargetSelector.hs
index d29413642d..1c01b3e5d8 100644
--- a/cabal-install/src/Distribution/Client/TargetSelector.hs
+++ b/cabal-install/src/Distribution/Client/TargetSelector.hs
@@ -101,6 +101,11 @@ import Control.Arrow ((&&&))
import Control.Monad hiding
( mfilter
)
+#if MIN_VERSION_base(4,20,0)
+import Data.Functor as UZ (unzip)
+#else
+import qualified Data.List.NonEmpty as UZ (unzip)
+#endif
import Data.List
( stripPrefix
)
@@ -581,7 +586,7 @@ resolveTargetSelector knowntargets@KnownTargets{..} mfilter targetStrStatus =
classifyMatchErrors errs
| Just expectedNE <- NE.nonEmpty expected =
- let (things, got :| _) = NE.unzip expectedNE
+ let (things, got :| _) = UZ.unzip expectedNE
in TargetSelectorExpected targetStr (NE.toList things) got
| not (null nosuch) =
TargetSelectorNoSuch targetStr nosuch
diff --git a/cabal-install/tests/IntegrationTests2.hs b/cabal-install/tests/IntegrationTests2.hs
index 55ea3747b9..94cd89f638 100644
--- a/cabal-install/tests/IntegrationTests2.hs
+++ b/cabal-install/tests/IntegrationTests2.hs
@@ -1436,9 +1436,11 @@ testSetupScriptStyles config reportSubCase = do
let isOSX (Platform _ OSX) = True
isOSX _ = False
+ compilerVer = compilerVersion (pkgConfigCompiler sharedConfig)
-- Skip the Custom tests when the shipped Cabal library is buggy
- unless (isOSX (pkgConfigPlatform sharedConfig)
- && compilerVersion (pkgConfigCompiler sharedConfig) < mkVersion [7,10]) $ do
+ unless ((isOSX (pkgConfigPlatform sharedConfig) && (compilerVer < mkVersion [7,10]))
+ -- 9.10 ships Cabal 3.12.0.0 affected by #9940
+ || (mkVersion [9,10] <= compilerVer && compilerVer < mkVersion [9,11])) $ do
(plan1, res1) <- executePlan plan0
pkg1 <- expectPackageInstalled plan1 res1 pkgidA
diff --git a/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs b/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs
index d35ab35a65..cd61862220 100644
--- a/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs
+++ b/cabal-install/tests/UnitTests/Distribution/Client/Init/NonInteractive.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
{-# LANGUAGE LambdaCase #-}
module UnitTests.Distribution.Client.Init.NonInteractive
@@ -12,7 +13,9 @@ import UnitTests.Distribution.Client.Init.Utils
import qualified Data.List.NonEmpty as NEL
import qualified Distribution.SPDX as SPDX
+#if !MIN_VERSION_base(4,20,0)
import Data.List (foldl')
+#endif
import qualified Data.Set as Set
import Distribution.CabalSpecVersion
import Distribution.Client.Init.Defaults
diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/foo.c b/cabal-testsuite/PackageTests/CCompilerOverride/foo.c
index 30892bef07..03ddd01e14 100644
--- a/cabal-testsuite/PackageTests/CCompilerOverride/foo.c
+++ b/cabal-testsuite/PackageTests/CCompilerOverride/foo.c
@@ -1,16 +1,8 @@
-#ifndef NOERROR1
-#error "NOERROR1 was not passed"
-#endif
-
#ifndef NOERROR2
#error "NOERROR2 was not passed"
#endif
-#ifndef NOERROR3
-#error "NOERROR3 was not passed"
-#endif
-
#ifndef NOERROR4
#error "NOERROR4 was not passed"
#endif
diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal b/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal
index 31a79f93a6..14772f3894 100644
--- a/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal
+++ b/cabal-testsuite/PackageTests/CCompilerOverride/my.cabal
@@ -9,5 +9,5 @@ executable foo
main-is: Main.hs
c-sources: foo.c
build-depends: base
- ghc-options: -DNOERROR4
+ ghc-options: -optc=-DNOERROR4
cc-options: -DNOERROR5 -march=native
diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out b/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out
index 21981fd9b7..6d0c3265de 100644
--- a/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out
+++ b/cabal-testsuite/PackageTests/CCompilerOverride/setup.cabal.out
@@ -1,4 +1,3 @@
# Setup configure
Configuring my-0.1...
-Warning: [misplaced-c-opt] Instead of 'ghc-options: -DNOERROR4' use 'cpp-options: -DNOERROR4'
# Setup build
diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/setup.out b/cabal-testsuite/PackageTests/CCompilerOverride/setup.out
index 21981fd9b7..6d0c3265de 100644
--- a/cabal-testsuite/PackageTests/CCompilerOverride/setup.out
+++ b/cabal-testsuite/PackageTests/CCompilerOverride/setup.out
@@ -1,4 +1,3 @@
# Setup configure
Configuring my-0.1...
-Warning: [misplaced-c-opt] Instead of 'ghc-options: -DNOERROR4' use 'cpp-options: -DNOERROR4'
# Setup build
diff --git a/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs b/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs
index 5843cb2b7d..b4f7f04ddb 100644
--- a/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs
+++ b/cabal-testsuite/PackageTests/CCompilerOverride/setup.test.hs
@@ -3,6 +3,10 @@ import Test.Cabal.Prelude
-- Test that all the respective defines -DNOERROR... specified in various ways
-- all end up routed to the C compiler. Otherwise the C file we depend on will
-- not compile.
+--
+-- This has been largely gutted, as ghc 9.10 no longer passes through most
+-- of the defines we were testing; see
+-- https://gitlab.haskell.org/ghc/ghc/-/commit/8ff3134ed4aa323b0199ad683f72165e51a59ab6
main = setupAndCabalTest $ do
skipUnlessGhcVersion ">= 8.8"
isWin <- isWindows
@@ -14,9 +18,7 @@ main = setupAndCabalTest $ do
pwd ++ "/custom-cc" ++ if isWin then win_suffix else ""
setup "configure"
- [ "--ghc-option=-DNOERROR1"
- , "--ghc-option=-optc=-DNOERROR2"
- , "--ghc-option=-optP=-DNOERROR3"
+ [ "--ghc-option=-optc=-DNOERROR2"
, "--with-gcc=" ++ customCC
]
setup "build" ["-v2"]
diff --git a/project-cabal/ghc-latest.config b/project-cabal/ghc-latest.config
index bff5d80c24..5f8d40290d 100644
--- a/project-cabal/ghc-latest.config
+++ b/project-cabal/ghc-latest.config
@@ -8,5 +8,17 @@
-- NOTE: don't forget to update the compiler version in the conditional
-- when upgrading to a newer GHC
-if impl(ghc >= 9.8.1)
- -- allow-newer: windns:*
+if impl(ghc >= 9.10.0)
+ allow-newer:
+ --windns:*, rere:*, tree-diff:*, uuid-types:*, these:*, hashable:*, assoc:*, semialign:*, indexed-traversable-instances:*, indexed-traversable:*, OneTuple:*, scientific:*, time-compat:*, text-short:*, integer-conversion:*, generically:*, data-fix:*, binary:*
+ -- Artem, 2024-04-21: I started and then gave up...
+ *:base, *:template-haskell, text-short, *:deepseq, *:bytestring, *:ghc-prim
+
+ repository head.hackage.ghc.haskell.org
+ url: https://ghc.gitlab.haskell.org/head.hackage/
+ secure: True
+ key-threshold: 3
+ root-keys:
+ 26021a13b401500c8eb2761ca95c61f2d625bfef951b939a8124ed12ecf07329
+ 7541f32a4ccca4f97aea3b22f5e593ba2c0267546016b992dfadcd2fe944e55d
+ f76d08be13e9a61a377a85e2fb63f4c5435d40f8feb3e12eb05905edb8cdea89
--
GitLab