From 312a4124e3e197e3525f60d5b9684e208e1c8df4 Mon Sep 17 00:00:00 2001 From: Teo Camarasu Date: Wed, 24 Apr 2024 11:47:53 +0100 Subject: [PATCH] Downgrade NoLibraryFound from an error to a warning This makes Setup copy/install succeed if there's nothing to do because the package doesn't contain a library or executable. This allows downstream users of Cabal to avoid having to add workarounds for this edge case. Resolves #6750 --- Cabal/src/Distribution/Simple/Errors.hs | 3 ++- Cabal/src/Distribution/Simple/Install.hs | 2 +- .../OnlyTestSuite/OnlyTestSuite.cabal | 15 +++++++++++++++ .../PackageTests/OnlyTestSuite/cabal.cabal.out | 6 ++++++ .../PackageTests/OnlyTestSuite/cabal.out | 6 ++++++ .../PackageTests/OnlyTestSuite/cabal.test.hs | 6 ++++++ .../PackageTests/OnlyTestSuite/test/Main.hs | 4 ++++ changelog.d/issue-6750 | 13 +++++++++++++ 8 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 cabal-testsuite/PackageTests/OnlyTestSuite/OnlyTestSuite.cabal create mode 100644 cabal-testsuite/PackageTests/OnlyTestSuite/cabal.cabal.out create mode 100644 cabal-testsuite/PackageTests/OnlyTestSuite/cabal.out create mode 100644 cabal-testsuite/PackageTests/OnlyTestSuite/cabal.test.hs create mode 100644 cabal-testsuite/PackageTests/OnlyTestSuite/test/Main.hs create mode 100644 changelog.d/issue-6750 diff --git a/Cabal/src/Distribution/Simple/Errors.hs b/Cabal/src/Distribution/Simple/Errors.hs index 45029565e99..8513f92c7b9 100644 --- a/Cabal/src/Distribution/Simple/Errors.hs +++ b/Cabal/src/Distribution/Simple/Errors.hs @@ -47,7 +47,8 @@ data CabalException | EnableBenchMark | BenchMarkNameDisabled String | NoBenchMark String - | NoLibraryFound + | -- | @NoLibraryFound@ has been downgraded to a warning, and is therefore no longer emitted. + NoLibraryFound | CompilerNotInstalled CompilerFlavor | CantFindIncludeFile String | UnsupportedTestSuite String diff --git a/Cabal/src/Distribution/Simple/Install.hs b/Cabal/src/Distribution/Simple/Install.hs index c1134e2b355..c46f28b3529 100644 --- a/Cabal/src/Distribution/Simple/Install.hs +++ b/Cabal/src/Distribution/Simple/Install.hs @@ -147,7 +147,7 @@ install_setupHooks checkHasLibsOrExes = unless (hasLibs pkg_descr || hasForeignLibs pkg_descr || hasExes pkg_descr) $ - dieWithException verbosity NoLibraryFound + warn verbosity "No executables and no library found. Nothing to do." -- | Copy package global files. copyPackage diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/OnlyTestSuite.cabal b/cabal-testsuite/PackageTests/OnlyTestSuite/OnlyTestSuite.cabal new file mode 100644 index 00000000000..c449f91998c --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/OnlyTestSuite.cabal @@ -0,0 +1,15 @@ +cabal-version: 3.0 +name: OnlyTestSuite +version: 0.1.0.0 +build-type: Simple + +common warnings + ghc-options: -Wall + +test-suite OnlyTestSuite-test + import: warnings + default-language: Haskell2010 + type: exitcode-stdio-1.0 + hs-source-dirs: test + main-is: Main.hs + build-depends: base diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.cabal.out b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.cabal.out new file mode 100644 index 00000000000..829de87b0cc --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.cabal.out @@ -0,0 +1,6 @@ +# Setup configure +Configuring OnlyTestSuite-0.1.0.0... +# Setup build +Building OnlyTestSuite-0.1.0.0... +# Setup copy +Warning: No executables and no library found. Nothing to do. diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.out b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.out new file mode 100644 index 00000000000..829de87b0cc --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.out @@ -0,0 +1,6 @@ +# Setup configure +Configuring OnlyTestSuite-0.1.0.0... +# Setup build +Building OnlyTestSuite-0.1.0.0... +# Setup copy +Warning: No executables and no library found. Nothing to do. diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.test.hs b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.test.hs new file mode 100644 index 00000000000..6e715d370e8 --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/cabal.test.hs @@ -0,0 +1,6 @@ +import Test.Cabal.Prelude +main = setupAndCabalTest $ do + withPackageDb $ do + setup "configure" [] + setup "build" [] + setup "copy" [] diff --git a/cabal-testsuite/PackageTests/OnlyTestSuite/test/Main.hs b/cabal-testsuite/PackageTests/OnlyTestSuite/test/Main.hs new file mode 100644 index 00000000000..3e2059e31f5 --- /dev/null +++ b/cabal-testsuite/PackageTests/OnlyTestSuite/test/Main.hs @@ -0,0 +1,4 @@ +module Main (main) where + +main :: IO () +main = putStrLn "Test suite not yet implemented." diff --git a/changelog.d/issue-6750 b/changelog.d/issue-6750 new file mode 100644 index 00000000000..e392258267b --- /dev/null +++ b/changelog.d/issue-6750 @@ -0,0 +1,13 @@ +synopsis: Make Setup copy/install succeed when there's no executable or library +packages: Cabal +prs: #9926 +issues: #6750 + +description: { + Historically the Setup copy and install steps would fail if the package didn't + contain an executable or library component. In this case there's nothing to do. + + This required workarounds for downstream users of Cabal to handle this edge case. + Now that this error has been downgraded to a warning, Cabal will succeed if + there's nothing to do. +}