diff --git a/Cabal/Cabal.cabal b/Cabal/Cabal.cabal
index 11eae30268e6bd0a213af8982c974d0551faa240..8bbaf7f348224044e9cc0703941efd50291e0929 100644
--- a/Cabal/Cabal.cabal
+++ b/Cabal/Cabal.cabal
@@ -811,7 +811,7 @@ test-suite hackage-tests
     base-compat          >=0.11.0   && <0.12,
     base-orphans         >=0.6      && <0.9,
     clock                >=0.8      && <0.9,
-    optparse-applicative >=0.13.2.0 && <0.16,
+    optparse-applicative >=0.13.2.0 && <0.17,
     stm                  >=2.4.5.0  && <2.6,
     tar                  >=0.5.0.3  && <0.6
 
diff --git a/Cabal/Distribution/Compat/Process.hs b/Cabal/Distribution/Compat/Process.hs
index 0862a9f3f152f1db1e5eaf0f74ddb1a5987c6252..7d02ba9fe59bada9b17592feb8bbe592e50e832e 100644
--- a/Cabal/Distribution/Compat/Process.hs
+++ b/Cabal/Distribution/Compat/Process.hs
@@ -26,11 +26,11 @@ import           System.Process (waitForProcess)
 -- in the presence of @exec(3)@ on Windows.
 --
 -- Unfortunately the process job support is badly broken in @process@ releases
--- prior to 1.6.8, so we disable it in these versions, despite the fact that
+-- prior to 1.6.9, so we disable it in these versions, despite the fact that
 -- this means we may see sporatic build failures without jobs.
 enableProcessJobs :: CreateProcess -> CreateProcess
 #ifdef MIN_VERSION_process
-#if MIN_VERSION_process(1,6,8)
+#if MIN_VERSION_process(1,6,9)
 enableProcessJobs cp = cp {Process.use_process_jobs = True}
 #else
 enableProcessJobs cp = cp
diff --git a/Cabal/Distribution/Simple/GHC.hs b/Cabal/Distribution/Simple/GHC.hs
index 4db29453f9302bbd79969d5ecfd0ee8b3aeb6567..1d4d5f8a2663b8e7d1c7a9ae54f9cdc3bf6783c6 100644
--- a/Cabal/Distribution/Simple/GHC.hs
+++ b/Cabal/Distribution/Simple/GHC.hs
@@ -136,11 +136,12 @@ configure verbosity hcPath hcPkgPath conf0 = do
       (userMaybeSpecifyPath "ghc" hcPath conf0)
   let implInfo = ghcVersionImplInfo ghcVersion
 
-  -- Cabal currently supports ghc >= 7.0.1 && < 8.12
-  unless (ghcVersion < mkVersion [8,14]) $
+  -- Cabal currently supports ghc >= 7.0.1 && < 9.1
+  -- ... and the following odd development version
+  unless (ghcVersion < mkVersion [9,2]) $
     warn verbosity $
          "Unknown/unsupported 'ghc' version detected "
-      ++ "(Cabal " ++ prettyShow cabalVersion ++ " supports 'ghc' version < 8.12): "
+      ++ "(Cabal " ++ prettyShow cabalVersion ++ " supports 'ghc' version < 9.1): "
       ++ programPath ghcProg ++ " is version " ++ prettyShow ghcVersion
 
   -- This is slightly tricky, we have to configure ghc first, then we use the
diff --git a/Cabal/Distribution/Simple/Program/GHC.hs b/Cabal/Distribution/Simple/Program/GHC.hs
index 5c860b1149241c7d453cfc6373c821cddd0b45f0..85967bd7f4a1dc05e3e9bb0e4b08c4140fd7fa1c 100644
--- a/Cabal/Distribution/Simple/Program/GHC.hs
+++ b/Cabal/Distribution/Simple/Program/GHC.hs
@@ -55,7 +55,7 @@ normaliseGhcArgs (Just ghcVersion) PackageDescription{..} ghcArgs
     supportedGHCVersions :: VersionRange
     supportedGHCVersions = intersectVersionRanges
         (orLaterVersion (mkVersion [8,0]))
-        (earlierVersion (mkVersion [8,13]))
+        (earlierVersion (mkVersion [9,1]))
 
     from :: Monoid m => [Int] -> m -> m
     from version flags
@@ -237,7 +237,7 @@ normaliseGhcArgs (Just ghcVersion) PackageDescription{..} ghcArgs
       , from [8,4] $ to [8,6] [ "-fno-max-valid-substitutions" ]
       , from [8,6] [ "-dhex-word-literals" ]
       , from [8,8] [ "-fshow-docs-of-hole-fits", "-fno-show-docs-of-hole-fits" ]
-      , from [8,12] [ "-dlinear-core-lint" ]
+      , from [9,0] [ "-dlinear-core-lint" ]
       ]
 
     isOptIntFlag :: String -> Any
diff --git a/Cabal/tests/UnitTests/Distribution/Simple/Program/GHC.hs b/Cabal/tests/UnitTests/Distribution/Simple/Program/GHC.hs
index 7c7f2a60b20cad1e0a533eae10a3acd8e86bf633..97a6b6528bf55406f6be87107ab882fe037fe76a 100644
--- a/Cabal/tests/UnitTests/Distribution/Simple/Program/GHC.hs
+++ b/Cabal/tests/UnitTests/Distribution/Simple/Program/GHC.hs
@@ -1,12 +1,12 @@
 module UnitTests.Distribution.Simple.Program.GHC (tests) where
 
-import Test.Tasty       (TestTree, testGroup)
-import Test.Tasty.HUnit
 import Data.Algorithm.Diff (PolyDiff (..), getDiff)
+import Test.Tasty          (TestTree, testGroup)
+import Test.Tasty.HUnit
 
-import Distribution.Simple.Program.GHC (normaliseGhcArgs)
 import Distribution.PackageDescription (emptyPackageDescription)
-import Distribution.Version (mkVersion)
+import Distribution.Simple.Program.GHC (normaliseGhcArgs)
+import Distribution.Version            (mkVersion)
 
 tests :: TestTree
 tests = testGroup "Distribution.Simple.Program.GHC"
@@ -29,14 +29,14 @@ tests = testGroup "Distribution.Simple.Program.GHC"
 
             assertListEquals flags options_8_10_affects
 
-        , testCase "options added in GHC-8.12" $ do
+        , testCase "options added in GHC-9.0" $ do
             let flags :: [String]
                 flags = normaliseGhcArgs
-                    (Just $ mkVersion [8,12,1])
+                    (Just $ mkVersion [9,0,1])
                     emptyPackageDescription
-                    options_8_12_all
+                    options_9_0_all
 
-            assertListEquals flags options_8_12_affects
+            assertListEquals flags options_9_0_affects
         ]
     ]
 
@@ -152,11 +152,11 @@ options_8_10_affects =
     ]
 
 -------------------------------------------------------------------------------
--- GHC-8.12
+-- GHC-9.0
 -------------------------------------------------------------------------------
 
-options_8_12_all :: [String]
-options_8_12_all =
+options_9_0_all :: [String]
+options_9_0_all =
     [ "-ddump-cmm-opt"
     , "-ddump-cpranal"
     , "-ddump-cpr-signatures"
@@ -164,9 +164,9 @@ options_8_12_all =
     -- NOTE: we filter out -dlinear-core-lint
     -- we filter, -dcore-lint, -dstg-lint etc.
     , "-dlinear-core-lint"
-    ] ++ options_8_12_affects
+    ] ++ options_9_0_affects
 
-options_8_12_affects :: [String]
-options_8_12_affects =
+options_9_0_affects :: [String]
+options_9_0_affects =
     [ "-fcmm-static-pred"
     ]
diff --git a/cabal-dev-scripts/cabal-dev-scripts.cabal b/cabal-dev-scripts/cabal-dev-scripts.cabal
index 3787e8cc80c84a9a92ac0345ac7a5f44860cf281..eae2d2271f724161cbe78c73064da18d4a04aec0 100644
--- a/cabal-dev-scripts/cabal-dev-scripts.cabal
+++ b/cabal-dev-scripts/cabal-dev-scripts.cabal
@@ -35,7 +35,7 @@ executable gen-spdx
     , containers
     , Diff                  ^>=0.4
     , lens                  ^>=4.18.1 || ^>=4.19.1
-    , optparse-applicative  ^>=0.15.1.0
+    , optparse-applicative  ^>=0.15.1.0 || ^>=0.16.0.0
     , text
     , zinza                 ^>=0.2
 
@@ -52,7 +52,7 @@ executable gen-spdx-exc
     , containers
     , Diff                  ^>=0.4
     , lens                  ^>=4.18.1 || ^>=4.19.1
-    , optparse-applicative  ^>=0.15.1.0
+    , optparse-applicative  ^>=0.15.1.0 || ^>=0.16.0.0
     , text
     , zinza                 ^>=0.2
 
diff --git a/cabal-install/Distribution/Client/CmdSdist.hs b/cabal-install/Distribution/Client/CmdSdist.hs
index adbe04afd07873e6aeba4f4cef91b7d188d70e35..1f4e0159800118609a18f2a6faac5e6cce3c82cd 100644
--- a/cabal-install/Distribution/Client/CmdSdist.hs
+++ b/cabal-install/Distribution/Client/CmdSdist.hs
@@ -221,7 +221,7 @@ packageToSdist verbosity projectRootDir format outputFile pkg = do
     let death = die' verbosity ("The impossible happened: a local package isn't local" <> (show pkg))
     dir0 <- case srcpkgSource pkg of
              LocalUnpackedPackage path             -> pure (Right path)
-             RemoteSourceRepoPackage _ (Just path) -> pure (Right path)
+             RemoteSourceRepoPackage _ (Just tgz)  -> pure (Left tgz)
              RemoteSourceRepoPackage {}            -> death
              LocalTarballPackage tgz               -> pure (Left tgz)
              RemoteTarballPackage _ (Just tgz)     -> pure (Left tgz)
diff --git a/cabal-install/Distribution/Client/ProjectPlanning.hs b/cabal-install/Distribution/Client/ProjectPlanning.hs
index 117587bcae5e9c9cd77d356a67f88b555826ba9d..9f63d15ecf9833ec0effa1fab9ab844489a56e01 100644
--- a/cabal-install/Distribution/Client/ProjectPlanning.hs
+++ b/cabal-install/Distribution/Client/ProjectPlanning.hs
@@ -1100,6 +1100,8 @@ planPackages verbosity comp platform solver SolverSettings{..}
     -- respective major Cabal version bundled with the respective GHC
     -- release).
     --
+    -- GHC 9.0   needs  Cabal >= 3.4
+    -- GHC 8.10  needs  Cabal >= 3.2
     -- GHC 8.8   needs  Cabal >= 3.0
     -- GHC 8.6   needs  Cabal >= 2.4
     -- GHC 8.4   needs  Cabal >= 2.2
@@ -1113,7 +1115,7 @@ planPackages verbosity comp platform solver SolverSettings{..}
     -- TODO: long-term, this compatibility matrix should be
     --       stored as a field inside 'Distribution.Compiler.Compiler'
     setupMinCabalVersionConstraint
-      | isGHC, compVer >= mkVersion [8,12] = mkVersion [3,4]
+      | isGHC, compVer >= mkVersion [9,0]  = mkVersion [3,4]
       | isGHC, compVer >= mkVersion [8,10] = mkVersion [3,2]
       | isGHC, compVer >= mkVersion [8,8]  = mkVersion [3,0]
       | isGHC, compVer >= mkVersion [8,6]  = mkVersion [2,4]
diff --git a/cabal-testsuite/cabal-testsuite.cabal b/cabal-testsuite/cabal-testsuite.cabal
index cb03e4048e15966b47e8426e7ba14fc56da92629..f9873afefa8367815165d64b712e3f3ccd6bd6c3 100644
--- a/cabal-testsuite/cabal-testsuite.cabal
+++ b/cabal-testsuite/cabal-testsuite.cabal
@@ -64,7 +64,7 @@ library
     , directory             ^>= 1.2.0.1 || ^>= 1.3.0.0
     , exceptions            ^>= 0.10.0
     , filepath              ^>= 1.3.0.1 || ^>= 1.4.0.0
-    , optparse-applicative  ^>= 0.14.3.0 || ^>=0.15.1.0
+    , optparse-applicative  ^>= 0.14.3.0 || ^>=0.15.1.0 || ^>=0.16.0.0
     , process               ^>= 1.1.0.2 || ^>= 1.2.0.0 || ^>= 1.4.2.0 || ^>= 1.6.1.0
     , regex-compat-tdfa     ^>= 0.95.1.4
     , regex-tdfa            ^>= 1.2.3.1 || ^>=1.3.1.0