diff --git a/Cabal/src/Distribution/Simple/Errors.hs b/Cabal/src/Distribution/Simple/Errors.hs
index 45029565e9966f61d257ea6b5202d948a2bf3baf..8513f92c7b94913ec93aecd737ddef8a14cd0792 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 c1134e2b35508ff8640d069e7d4c50bd48dd60b7..c46f28b352932c3b029b02b412dc3ffa8e9b6d61 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 0000000000000000000000000000000000000000..c449f91998c51667983562c095e4f29f3ce5bd17
--- /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 0000000000000000000000000000000000000000..829de87b0cc1726f017324f19d80f4ed8a9331df
--- /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 0000000000000000000000000000000000000000..829de87b0cc1726f017324f19d80f4ed8a9331df
--- /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 0000000000000000000000000000000000000000..6e715d370e8945662793e4a49f5466bf2b9a2333
--- /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 0000000000000000000000000000000000000000..3e2059e31f5127521b263b051fc7247772685e1a
--- /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 0000000000000000000000000000000000000000..e392258267b56de644754762af30a87f5d228e69
--- /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.
+}