diff --git a/Cabal/src/Distribution/PackageDescription/Check/Target.hs b/Cabal/src/Distribution/PackageDescription/Check/Target.hs index 99ae5a8d379..e6cfba74928 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 a8d9ac78195..52cb5e289f5 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-testsuite/PackageTests/AutogenModules/Package/my.cabal b/cabal-testsuite/PackageTests/AutogenModules/Package/my.cabal index 2ddd13ed619..103b8d7b7a1 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 0976dbf493a..9a12877cd6b 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/Check/ConfiguredPackage/CabalVersion/AutoGenMods/pkg.cabal b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/CabalVersion/AutoGenMods/pkg.cabal index 8486891a3e3..027133f9223 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/NonConfCheck/PathsExtensions/cabal.out b/cabal-testsuite/PackageTests/Check/NonConfCheck/PathsExtensions/cabal.out index eb486dcb3af..34239636f6e 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 b69379dd383..505f5078aa4 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 8f0faefa08c..7c6b32cb8ee 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 f04d2696c6c..a2aa9da5270 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 7704aaa15b8..c0020ed46ac 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 b356e8929ea..bee4b863949 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 04337c3f3f7..e1bcba8ba4f 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 04337c3f3f7..e1bcba8ba4f 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 faacd4f1ff0..a5573b4c6e6 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 47ee1f942d1..8e1d789d101 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 44140ee9019..3851d160491 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 00000000000..5572ad56eab --- /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. + +}