From f3eafa7558982a77bb5cb712be9fadacc93bc339 Mon Sep 17 00:00:00 2001
From: ffaf1 <fa-ml@ariis.it>
Date: Mon, 18 Dec 2023 13:13:02 +0100
Subject: [PATCH] =?UTF-8?q?Guard=20PackageInfo=20behind=20`cabal-version`?=
 =?UTF-8?q?=20=E2=89=A5=203.12=20(#9481)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* Add `cabal-version` 3.12

* Add test for #9331

- `cabal check`: Guard Paths_* behind `cabal-version: 3.12` or higher,
  “fail” and “succeed” tests.
- `cabal build`: Guard Paths_* behind `cabal-version: 3.12` or higher,
  “fail” test.

* Guard PackageInfo behind cabal-version ≥ 3.12

---------

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
---
 .../src/Distribution/CabalSpecVersion.hs        |  8 ++++++--
 .../UnitTests/Distribution/Utils/Structured.hs  |  8 ++++----
 .../PackageDescription/Check/Target.hs          | 12 +++++++++++-
 .../PackageDescription/Check/Warning.hs         |  4 ++++
 .../Client/Init/Interactive/Command.hs          |  1 +
 .../AutogenModules/Package/my.cabal             |  4 ++--
 .../AutogenModules/SrcDist/AutogenModules.cabal |  4 ++--
 .../BuildAutogenPackageGuard/cabal.out          | 10 ++++++++++
 .../BuildAutogenPackageGuard/cabal.project      |  2 ++
 .../BuildAutogenPackageGuard/cabal.test.hs      |  8 ++++++++
 .../BuildAutogenPackageGuard/pkg.cabal          | 17 +++++++++++++++++
 .../CabalVersion/AutoGenMods/pkg.cabal          |  4 ++--
 .../Sanity/AutogenVersion/cabal.out             |  4 ++++
 .../Sanity/AutogenVersion/cabal.test.hs         |  6 ++++++
 .../Sanity/AutogenVersion/pkg.cabal             | 16 ++++++++++++++++
 .../Sanity/AutogenVersionOk/cabal.out           |  2 ++
 .../Sanity/AutogenVersionOk/cabal.test.hs       |  7 +++++++
 .../Sanity/AutogenVersionOk/pkg.cabal           | 16 ++++++++++++++++
 .../NonConfCheck/PathsExtensions/cabal.out      |  1 +
 .../NewBuild/CmdRun/Datafiles/foo/foo.cabal     |  2 +-
 .../NewBuild/T5164/setup-lib/setup-lib.cabal    |  2 +-
 .../PackageInfoModule/Executable/my.cabal       |  4 ++--
 .../ImportQualifiedPost/my.cabal                |  4 ++--
 .../PackageInfoModule/Library/my.cabal          |  2 +-
 .../PathsModule/Executable-Relocatable/my.cabal |  4 ++--
 .../PathsModule/Executable/my.cabal             |  4 ++--
 .../PathsModule/ImportQualifiedPost/my.cabal    |  4 ++--
 .../PackageTests/PathsModule/Library/my.cabal   |  2 +-
 .../PathsModule/MissingSafeHaskellMode/my.cabal |  2 +-
 changelog.d/pr-9481                             | 13 +++++++++++++
 30 files changed, 149 insertions(+), 28 deletions(-)
 create mode 100644 cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out
 create mode 100644 cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.project
 create mode 100644 cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.test.hs
 create mode 100644 cabal-testsuite/PackageTests/BuildAutogenPackageGuard/pkg.cabal
 create mode 100644 cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.out
 create mode 100644 cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.test.hs
 create mode 100644 cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/pkg.cabal
 create mode 100644 cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.out
 create mode 100644 cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.test.hs
 create mode 100644 cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/pkg.cabal
 create mode 100644 changelog.d/pr-9481

diff --git a/Cabal-syntax/src/Distribution/CabalSpecVersion.hs b/Cabal-syntax/src/Distribution/CabalSpecVersion.hs
index 6290fa9166..eb029b5ffc 100644
--- a/Cabal-syntax/src/Distribution/CabalSpecVersion.hs
+++ b/Cabal-syntax/src/Distribution/CabalSpecVersion.hs
@@ -32,7 +32,8 @@ data CabalSpecVersion
     CabalSpecV3_4
   | CabalSpecV3_6
   | CabalSpecV3_8
-  -- 3.10: no changes
+  | -- 3.10: no changes
+    CabalSpecV3_12
   deriving (Eq, Ord, Show, Read, Enum, Bounded, Typeable, Data, Generic)
 
 instance Binary CabalSpecVersion
@@ -43,6 +44,7 @@ instance NFData CabalSpecVersion where rnf = genericRnf
 --
 -- @since 3.0.0.0
 showCabalSpecVersion :: CabalSpecVersion -> String
+showCabalSpecVersion CabalSpecV3_12 = "3.12"
 showCabalSpecVersion CabalSpecV3_8 = "3.8"
 showCabalSpecVersion CabalSpecV3_6 = "3.6"
 showCabalSpecVersion CabalSpecV3_4 = "3.4"
@@ -63,13 +65,14 @@ showCabalSpecVersion CabalSpecV1_2 = "1.2"
 showCabalSpecVersion CabalSpecV1_0 = "1.0"
 
 cabalSpecLatest :: CabalSpecVersion
-cabalSpecLatest = CabalSpecV3_8
+cabalSpecLatest = CabalSpecV3_12
 
 -- | Parse 'CabalSpecVersion' from version digits.
 --
 -- It may fail if for recent versions the version is not exact.
 cabalSpecFromVersionDigits :: [Int] -> Maybe CabalSpecVersion
 cabalSpecFromVersionDigits v
+  | v == [3, 12] = Just CabalSpecV3_12
   | v == [3, 8] = Just CabalSpecV3_8
   | v == [3, 6] = Just CabalSpecV3_6
   | v == [3, 4] = Just CabalSpecV3_4
@@ -92,6 +95,7 @@ cabalSpecFromVersionDigits v
 
 -- | @since 3.4.0.0
 cabalSpecToVersionDigits :: CabalSpecVersion -> [Int]
+cabalSpecToVersionDigits CabalSpecV3_12 = [3, 12]
 cabalSpecToVersionDigits CabalSpecV3_8 = [3, 8]
 cabalSpecToVersionDigits CabalSpecV3_6 = [3, 6]
 cabalSpecToVersionDigits CabalSpecV3_4 = [3, 4]
diff --git a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
index 799c7f58d9..7e5f54f64f 100644
--- a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
+++ b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
@@ -33,15 +33,15 @@ md5Check proxy md5Int = structureHash proxy @?= md5FromInteger md5Int
 md5CheckGenericPackageDescription :: Proxy GenericPackageDescription -> Assertion
 md5CheckGenericPackageDescription proxy = md5Check proxy
 #if MIN_VERSION_base(4,19,0)
-    0x87037bc65fba873f53c03ce572a42229
+    0xc638caeb7531f107f64d12773f9430d0
 #else
-    0x5817c798e23df281d794ad27754ad43f
+    0x7a231bff7bb37049ec7f2ebfd98d3243
 #endif
 
 md5CheckLocalBuildInfo :: Proxy LocalBuildInfo -> Assertion
 md5CheckLocalBuildInfo proxy = md5Check proxy
 #if MIN_VERSION_base(4,19,0)
-    0x83cb87bceb4c1634e7dda192c3ad6579
+    0x23942cff98237dc167ef90d64d7ef893
 #else
-    0x4beeb42e94807be904bc5d15355c98cd
+    0xa4e9f8a7e1583906880d6ec2d1bbb14b
 #endif
diff --git a/Cabal/src/Distribution/PackageDescription/Check/Target.hs b/Cabal/src/Distribution/PackageDescription/Check/Target.hs
index 99ae5a8d37..e6cfba7492 100644
--- a/Cabal/src/Distribution/PackageDescription/Check/Target.hs
+++ b/Cabal/src/Distribution/PackageDescription/Check/Target.hs
@@ -652,7 +652,18 @@ checkAutogenModules ams bi = do
   -- Paths_* module + some default extension build failure.
   autogenCheck autoInfoModuleName CVAutogenPackageInfo
   rebindableClashCheck autoInfoModuleName RebindableClashPackageInfo
+
+  -- PackageInfo_* module + cabal-version < 3.12
+  -- See Mikolaj’s comments on #9481 on why this has to be
+  -- PackageBuildImpossible and not merely PackageDistInexcusable.
+  checkSpecVer
+    CabalSpecV3_12
+    (elem autoInfoModuleName allModsForAuto)
+    (PackageBuildImpossible CVAutogenPackageInfoGuard)
   where
+    allModsForAuto :: [ModuleName]
+    allModsForAuto = ams ++ otherModules bi
+
     autogenCheck
       :: Monad m
       => ModuleName
@@ -660,7 +671,6 @@ checkAutogenModules ams bi = do
       -> CheckM m ()
     autogenCheck name warning = do
       sv <- asksCM ccSpecVersion
-      let allModsForAuto = ams ++ otherModules bi
       checkP
         ( sv >= CabalSpecV2_0
             && elem name allModsForAuto
diff --git a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs
index a8d9ac7819..52cb5e289f 100644
--- a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs
+++ b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs
@@ -211,6 +211,7 @@ data CheckExplanation
   | CVExpliticDepsCustomSetup
   | CVAutogenPaths
   | CVAutogenPackageInfo
+  | CVAutogenPackageInfoGuard
   | GlobNoMatch String String
   | GlobExactMatch String String FilePath
   | GlobNoDir String String FilePath
@@ -778,6 +779,9 @@ ppExplanation CVAutogenPackageInfo =
     ++ "the module does not come with the package and is generated on "
     ++ "setup. Modules built with a custom Setup.hs script also go here "
     ++ "to ensure that commands like sdist don't fail."
+ppExplanation CVAutogenPackageInfoGuard =
+  "To use the autogenerated module PackageInfo_* you need to specify "
+    ++ "`cabal-version: 3.12` or higher."
 ppExplanation (GlobNoMatch field glob) =
   "In '"
     ++ field
diff --git a/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs b/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs
index a98794334d..676bf61a16 100644
--- a/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs
+++ b/cabal-install/src/Distribution/Client/Init/Interactive/Command.hs
@@ -312,6 +312,7 @@ cabalVersionPrompt flags = getCabalVersion flags $ do
     parseCabalVersion "2.4" = CabalSpecV2_4
     parseCabalVersion "3.0" = CabalSpecV3_0
     parseCabalVersion "3.4" = CabalSpecV3_4
+    parseCabalVersion "3.12" = CabalSpecV3_12
     parseCabalVersion _ = defaultCabalVersion -- 2.4
     displayCabalVersion :: CabalSpecVersion -> String
     displayCabalVersion v = case v of
diff --git a/cabal-testsuite/PackageTests/AutogenModules/Package/my.cabal b/cabal-testsuite/PackageTests/AutogenModules/Package/my.cabal
index 2ddd13ed61..103b8d7b7a 100644
--- a/cabal-testsuite/PackageTests/AutogenModules/Package/my.cabal
+++ b/cabal-testsuite/PackageTests/AutogenModules/Package/my.cabal
@@ -1,13 +1,13 @@
+cabal-version: 3.12
 name: AutogenModules
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 license-file: LICENSE
 author: Federico Mastellone
 maintainer: Federico Mastellone
 synopsis: AutogenModules
 category: PackageTests
 build-type: Simple
-cabal-version: 2.0
 
 description:
     Check that Cabal recognizes the autogen-modules fields below.
diff --git a/cabal-testsuite/PackageTests/AutogenModules/SrcDist/AutogenModules.cabal b/cabal-testsuite/PackageTests/AutogenModules/SrcDist/AutogenModules.cabal
index 0976dbf493..9a12877cd6 100644
--- a/cabal-testsuite/PackageTests/AutogenModules/SrcDist/AutogenModules.cabal
+++ b/cabal-testsuite/PackageTests/AutogenModules/SrcDist/AutogenModules.cabal
@@ -1,13 +1,13 @@
+cabal-version: 3.12
 name: AutogenModules
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 license-file: LICENSE
 author: Federico Mastellone
 maintainer: Federico Mastellone
 synopsis: AutogenModules
 category: PackageTests
 build-type: Simple
-cabal-version: 2.0
 
 description:
     Check that Cabal recognizes the autogen-modules fields below.
diff --git a/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out
new file mode 100644
index 0000000000..50d79011da
--- /dev/null
+++ b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.out
@@ -0,0 +1,10 @@
+# cabal v2-build
+Resolving dependencies...
+Build profile: -w ghc-<GHCVER> -O1
+In order, the following will be built:
+ - pkg-0 (lib) (first run)
+Configuring library for pkg-0...
+Error: [Cabal-5559]
+To use the autogenerated module PackageInfo_* you need to specify `cabal-version: 3.12` or higher.
+Error: [Cabal-7125]
+Failed to build pkg-0-inplace. The failure occurred during the configure step.
diff --git a/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.project b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.project
new file mode 100644
index 0000000000..b764c340a6
--- /dev/null
+++ b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.project
@@ -0,0 +1,2 @@
+packages: .
+
diff --git a/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.test.hs b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.test.hs
new file mode 100644
index 0000000000..0711dcccfe
--- /dev/null
+++ b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/cabal.test.hs
@@ -0,0 +1,8 @@
+import Test.Cabal.Prelude
+
+-- #9331, guard PackageInfo functionality behind 3.12: make it a
+-- build failure.
+main = cabalTest $ do
+  withProjectFile "cabal.project" $ do
+    fails $ cabal "v2-build" ["pkg"]
+
diff --git a/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/pkg.cabal b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/pkg.cabal
new file mode 100644
index 0000000000..5babc9759c
--- /dev/null
+++ b/cabal-testsuite/PackageTests/BuildAutogenPackageGuard/pkg.cabal
@@ -0,0 +1,17 @@
+cabal-version: 2.4
+name: pkg
+version: 0
+license: GPL-3.0-or-later
+maintainer: Someone
+category: Example
+synopsis: Foo
+description: FooBar
+build-type: Simple
+
+library
+    default-language: Haskell2010
+    build-depends: base == 4.*
+    -- ☞ N.B.: PackageInfo packages must contain the same name of
+    -- of the package! (In this example: `pkg`).
+    autogen-modules: PackageInfo_pkg
+    exposed-modules: PackageInfo_pkg
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/AutoGenMods/pkg.cabal b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/AutoGenMods/pkg.cabal
index 8486891a3e..027133f922 100644
--- a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/AutoGenMods/pkg.cabal
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/AutoGenMods/pkg.cabal
@@ -1,4 +1,4 @@
-cabal-version: 2.0
+cabal-version: 3.12
 build-type: Simple
 name: pkg
 synopsis: synopsis
@@ -6,7 +6,7 @@ description: description
 version: 0
 category: example
 maintainer: none@example.com
-license: GPL-3
+license: GPL-3.0-or-later
 license-file: LICENSE
 
 library
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.out b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.out
new file mode 100644
index 0000000000..d0443c1b55
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.out
@@ -0,0 +1,4 @@
+# cabal check
+The package will not build sanely due to these errors:
+Error: To use the autogenerated module PackageInfo_* you need to specify `cabal-version: 3.12` or higher.
+Error: Hackage would reject this package.
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.test.hs b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.test.hs
new file mode 100644
index 0000000000..c9c2e56de2
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/cabal.test.hs
@@ -0,0 +1,6 @@
+import Test.Cabal.Prelude
+
+-- #9331: PackageInfo functionality should be guarded by cabal-version.
+main = cabalTest $
+  fails $ cabal "check" []
+
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/pkg.cabal b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/pkg.cabal
new file mode 100644
index 0000000000..aeef460f7f
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersion/pkg.cabal
@@ -0,0 +1,16 @@
+cabal-version: 2.4
+name: pkg
+version: 0
+license: GPL-3.0-or-later
+maintainer: Someone
+category: Example
+synopsis: Foo
+description: FooBar
+build-type: Simple
+
+library
+    default-language: Haskell2010
+    build-depends: base <5
+    autogen-modules: PackageInfo_pkg
+    exposed-modules: PackageInfo_pkg
+
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.out b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.out
new file mode 100644
index 0000000000..37aa169b41
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.out
@@ -0,0 +1,2 @@
+# cabal check
+No errors or warnings could be found in the package.
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.test.hs b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.test.hs
new file mode 100644
index 0000000000..baa6f988ea
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/cabal.test.hs
@@ -0,0 +1,7 @@
+import Test.Cabal.Prelude
+
+-- #9331: PackageInfo functionality should be guarded by cabal-version,
+-- does not error when cabal-version is 3.12 or higher.
+main = cabalTest $
+  cabal "check" []
+
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/pkg.cabal b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/pkg.cabal
new file mode 100644
index 0000000000..f218364952
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/Sanity/AutogenVersionOk/pkg.cabal
@@ -0,0 +1,16 @@
+cabal-version: 3.12
+name: pkg
+version: 0
+license: GPL-3.0-or-later
+maintainer: Someone
+category: Example
+synopsis: Foo
+description: FooBar
+build-type: Simple
+
+library
+    default-language: Haskell2010
+    build-depends: base <5
+    autogen-modules: PackageInfo_pkg
+    exposed-modules: PackageInfo_pkg
+
diff --git a/cabal-testsuite/PackageTests/Check/NonConfCheck/PathsExtensions/cabal.out b/cabal-testsuite/PackageTests/Check/NonConfCheck/PathsExtensions/cabal.out
index eb486dcb3a..34239636f6 100644
--- a/cabal-testsuite/PackageTests/Check/NonConfCheck/PathsExtensions/cabal.out
+++ b/cabal-testsuite/PackageTests/Check/NonConfCheck/PathsExtensions/cabal.out
@@ -1,5 +1,6 @@
 # cabal check
 The package will not build sanely due to these errors:
+Error: To use the autogenerated module PackageInfo_* you need to specify `cabal-version: 3.12` or higher.
 Error: Packages using RebindableSyntax with OverloadedStrings or OverloadedLists in default-extensions, in conjunction with the autogenerated module Paths_*, are known to cause compile failures with Cabal < 2.2. To use these default-extensions with a Paths_* autogen module, specify at least 'cabal-version: 2.2'.
 Error: Packages using RebindableSyntax with OverloadedStrings or OverloadedLists in default-extensions, in conjunction with the autogenerated module PackageInfo_*, are known to cause compile failures with Cabal < 2.2. To use these default-extensions with a PackageInfo_* autogen module, specify at least 'cabal-version: 2.2'.
 Error: Hackage would reject this package.
diff --git a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/foo/foo.cabal b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/foo/foo.cabal
index b69379dd38..505f5078aa 100644
--- a/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/foo/foo.cabal
+++ b/cabal-testsuite/PackageTests/NewBuild/CmdRun/Datafiles/foo/foo.cabal
@@ -1,7 +1,7 @@
+cabal-version: 3.12
 name: foo
 version: 1.0
 build-type: Simple
-cabal-version: >= 1.10
 data-dir: data
 data-files: hello.txt
 
diff --git a/cabal-testsuite/PackageTests/NewBuild/T5164/setup-lib/setup-lib.cabal b/cabal-testsuite/PackageTests/NewBuild/T5164/setup-lib/setup-lib.cabal
index 8f0faefa08..7c6b32cb8e 100644
--- a/cabal-testsuite/PackageTests/NewBuild/T5164/setup-lib/setup-lib.cabal
+++ b/cabal-testsuite/PackageTests/NewBuild/T5164/setup-lib/setup-lib.cabal
@@ -1,7 +1,7 @@
+cabal-version: 3.12
 name: setup-lib
 version: 1.0
 build-type: Simple
-cabal-version: >= 1.10
 data-files: example.txt
 
 library
diff --git a/cabal-testsuite/PackageTests/PackageInfoModule/Executable/my.cabal b/cabal-testsuite/PackageTests/PackageInfoModule/Executable/my.cabal
index f04d2696c6..a2aa9da527 100644
--- a/cabal-testsuite/PackageTests/PackageInfoModule/Executable/my.cabal
+++ b/cabal-testsuite/PackageTests/PackageInfoModule/Executable/my.cabal
@@ -1,11 +1,11 @@
+Cabal-version: 3.12
 name: PackageInfoModule
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 author: Gautier DI FOLCO
 stability: stable
 category: PackageTests
 build-type: Simple
-Cabal-version: >= 1.2
 
 description:
     Check that the generated package info module compiles.
diff --git a/cabal-testsuite/PackageTests/PackageInfoModule/ImportQualifiedPost/my.cabal b/cabal-testsuite/PackageTests/PackageInfoModule/ImportQualifiedPost/my.cabal
index 7704aaa15b..c0020ed46a 100644
--- a/cabal-testsuite/PackageTests/PackageInfoModule/ImportQualifiedPost/my.cabal
+++ b/cabal-testsuite/PackageTests/PackageInfoModule/ImportQualifiedPost/my.cabal
@@ -1,10 +1,10 @@
+Cabal-version: 3.12
 name: PackageInfoModule
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 author: Gautier DI FOLCO
 category: PackageTests
 build-type: Simple
-Cabal-version: >= 1.2
 
 description:
     Check that the generated package info module compiles.
diff --git a/cabal-testsuite/PackageTests/PackageInfoModule/Library/my.cabal b/cabal-testsuite/PackageTests/PackageInfoModule/Library/my.cabal
index b356e8929e..bee4b86394 100644
--- a/cabal-testsuite/PackageTests/PackageInfoModule/Library/my.cabal
+++ b/cabal-testsuite/PackageTests/PackageInfoModule/Library/my.cabal
@@ -1,4 +1,4 @@
-Cabal-version: 2.2
+Cabal-version: 3.12
 name: PackageInfoModule
 version: 0.1
 license: BSD-3-Clause
diff --git a/cabal-testsuite/PackageTests/PathsModule/Executable-Relocatable/my.cabal b/cabal-testsuite/PackageTests/PathsModule/Executable-Relocatable/my.cabal
index 04337c3f3f..e1bcba8ba4 100644
--- a/cabal-testsuite/PackageTests/PathsModule/Executable-Relocatable/my.cabal
+++ b/cabal-testsuite/PackageTests/PathsModule/Executable-Relocatable/my.cabal
@@ -1,11 +1,11 @@
+Cabal-version: 3.12
 name: PathsModule
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 author: Johan Tibell
 stability: stable
 category: PackageTests
 build-type: Simple
-Cabal-version: >= 1.2
 
 description:
     Check that the generated paths module compiles.
diff --git a/cabal-testsuite/PackageTests/PathsModule/Executable/my.cabal b/cabal-testsuite/PackageTests/PathsModule/Executable/my.cabal
index 04337c3f3f..e1bcba8ba4 100644
--- a/cabal-testsuite/PackageTests/PathsModule/Executable/my.cabal
+++ b/cabal-testsuite/PackageTests/PathsModule/Executable/my.cabal
@@ -1,11 +1,11 @@
+Cabal-version: 3.12
 name: PathsModule
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 author: Johan Tibell
 stability: stable
 category: PackageTests
 build-type: Simple
-Cabal-version: >= 1.2
 
 description:
     Check that the generated paths module compiles.
diff --git a/cabal-testsuite/PackageTests/PathsModule/ImportQualifiedPost/my.cabal b/cabal-testsuite/PackageTests/PathsModule/ImportQualifiedPost/my.cabal
index faacd4f1ff..a5573b4c6e 100644
--- a/cabal-testsuite/PackageTests/PathsModule/ImportQualifiedPost/my.cabal
+++ b/cabal-testsuite/PackageTests/PathsModule/ImportQualifiedPost/my.cabal
@@ -1,10 +1,10 @@
+Cabal-version: 3.12
 name: PathsModule
 version: 0.1
-license: BSD3
+license: BSD-3-Clause
 author: Martijn Bastiaan
 category: PackageTests
 build-type: Simple
-Cabal-version: >= 1.2
 
 description:
     Check that the generated paths module compiles.
diff --git a/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal b/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal
index 47ee1f942d..8e1d789d10 100644
--- a/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal
+++ b/cabal-testsuite/PackageTests/PathsModule/Library/my.cabal
@@ -1,4 +1,4 @@
-Cabal-version: 2.2
+Cabal-version: 3.12
 name: PathsModule
 version: 0.1
 license: BSD-3-Clause
diff --git a/cabal-testsuite/PackageTests/PathsModule/MissingSafeHaskellMode/my.cabal b/cabal-testsuite/PackageTests/PathsModule/MissingSafeHaskellMode/my.cabal
index 44140ee901..3851d16049 100644
--- a/cabal-testsuite/PackageTests/PathsModule/MissingSafeHaskellMode/my.cabal
+++ b/cabal-testsuite/PackageTests/PathsModule/MissingSafeHaskellMode/my.cabal
@@ -1,4 +1,4 @@
-cabal-version: 2.2
+cabal-version: 3.12
 name: PathsModule
 version: 0.1
 license: BSD-3-Clause
diff --git a/changelog.d/pr-9481 b/changelog.d/pr-9481
new file mode 100644
index 0000000000..5572ad56ea
--- /dev/null
+++ b/changelog.d/pr-9481
@@ -0,0 +1,13 @@
+synopsis: Guard PackageInfo_* modules behind `cabal-version` ≥ 3.12
+packages: Cabal cabal-install
+prs: #9481
+issues: #9331
+
+description: {
+
+`cabal check` now warns whenever PackageInfo_* autogen modules are
+used with `cabal-version` ≥ 3.12.
+Additionally, `cabal configure` will fail if you try to use PackageInfo_*
+with `cabal-version` < 3.12.
+
+}
-- 
GitLab