diff --git a/Cabal-syntax/src/Distribution/CabalSpecVersion.hs b/Cabal-syntax/src/Distribution/CabalSpecVersion.hs
index a81e8921a949e1af6226f7d8b1a27033865c6e26..2e6cbc2b19deb240a006cfb3b0051b1325cabaa2 100644
--- a/Cabal-syntax/src/Distribution/CabalSpecVersion.hs
+++ b/Cabal-syntax/src/Distribution/CabalSpecVersion.hs
@@ -35,6 +35,7 @@ data CabalSpecVersion
   | -- 3.10: no changes
     CabalSpecV3_12
   | CabalSpecV3_14
+  | CabalSpecV3_16
   deriving (Eq, Ord, Show, Read, Enum, Bounded, Data, Generic)
 
 instance Binary CabalSpecVersion
@@ -45,6 +46,7 @@ instance NFData CabalSpecVersion where rnf = genericRnf
 --
 -- @since 3.0.0.0
 showCabalSpecVersion :: CabalSpecVersion -> String
+showCabalSpecVersion CabalSpecV3_16 = "3.16"
 showCabalSpecVersion CabalSpecV3_14 = "3.14"
 showCabalSpecVersion CabalSpecV3_12 = "3.12"
 showCabalSpecVersion CabalSpecV3_8 = "3.8"
@@ -67,13 +69,14 @@ showCabalSpecVersion CabalSpecV1_2 = "1.2"
 showCabalSpecVersion CabalSpecV1_0 = "1.0"
 
 cabalSpecLatest :: CabalSpecVersion
-cabalSpecLatest = CabalSpecV3_14
+cabalSpecLatest = CabalSpecV3_16
 
 -- | 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, 16] = Just CabalSpecV3_16
   | v == [3, 14] = Just CabalSpecV3_14
   | v == [3, 12] = Just CabalSpecV3_12
   | v == [3, 8] = Just CabalSpecV3_8
@@ -98,6 +101,7 @@ cabalSpecFromVersionDigits v
 
 -- | @since 3.4.0.0
 cabalSpecToVersionDigits :: CabalSpecVersion -> [Int]
+cabalSpecToVersionDigits CabalSpecV3_16 = [3, 16]
 cabalSpecToVersionDigits CabalSpecV3_14 = [3, 14]
 cabalSpecToVersionDigits CabalSpecV3_12 = [3, 12]
 cabalSpecToVersionDigits CabalSpecV3_8 = [3, 8]
diff --git a/Cabal-syntax/src/Distribution/PackageDescription/FieldGrammar.hs b/Cabal-syntax/src/Distribution/PackageDescription/FieldGrammar.hs
index 49db03ee3c16be67b7e8adbc0a5ce7e1b9be292c..0b04b446c046347dd100f22def39d3e52d6939b4 100644
--- a/Cabal-syntax/src/Distribution/PackageDescription/FieldGrammar.hs
+++ b/Cabal-syntax/src/Distribution/PackageDescription/FieldGrammar.hs
@@ -621,6 +621,8 @@ buildInfoFieldGrammar =
     <*> monoidalFieldAla "cc-options" (alaList' NoCommaFSep Token') L.ccOptions
     <*> monoidalFieldAla "cxx-options" (alaList' NoCommaFSep Token') L.cxxOptions
       ^^^ availableSince CabalSpecV2_2 []
+    <*> monoidalFieldAla "jspp-options" (alaList' NoCommaFSep Token') L.jsppOptions
+      ^^^ availableSince CabalSpecV3_16 []
     <*> monoidalFieldAla "ld-options" (alaList' NoCommaFSep Token') L.ldOptions
     <*> monoidalFieldAla "hsc2hs-options" (alaList' NoCommaFSep Token') L.hsc2hsOptions
       ^^^ availableSince CabalSpecV3_6 []
diff --git a/Cabal-syntax/src/Distribution/Types/BuildInfo.hs b/Cabal-syntax/src/Distribution/Types/BuildInfo.hs
index 2d7a5edeae11e9ac47980ede1b9a412149d22a33..e68fcbc5c22ece82b721132b05438ad64c6c1a79 100644
--- a/Cabal-syntax/src/Distribution/Types/BuildInfo.hs
+++ b/Cabal-syntax/src/Distribution/Types/BuildInfo.hs
@@ -61,6 +61,8 @@ data BuildInfo = BuildInfo
   -- ^ options for C compiler
   , cxxOptions :: [String]
   -- ^ options for C++ compiler
+  , jsppOptions :: [String]
+  -- ^ options for pre-processing JavaScript code @since 3.16.0.0
   , ldOptions :: [String]
   -- ^ options for linker
   , hsc2hsOptions :: [String]
@@ -161,6 +163,7 @@ instance Monoid BuildInfo where
       , cmmOptions = []
       , ccOptions = []
       , cxxOptions = []
+      , jsppOptions = []
       , ldOptions = []
       , hsc2hsOptions = []
       , pkgconfigDepends = []
@@ -214,6 +217,7 @@ instance Semigroup BuildInfo where
       , cmmOptions = combine cmmOptions
       , ccOptions = combine ccOptions
       , cxxOptions = combine cxxOptions
+      , jsppOptions = combine jsppOptions
       , ldOptions = combine ldOptions
       , hsc2hsOptions = combine hsc2hsOptions
       , pkgconfigDepends = combine pkgconfigDepends
diff --git a/Cabal-syntax/src/Distribution/Types/BuildInfo/Lens.hs b/Cabal-syntax/src/Distribution/Types/BuildInfo/Lens.hs
index ac99f3c65a57837bf0e9fe25af19e4814db556c3..72a24caa73494f3aff0bf913a23dcf752e9ce239 100644
--- a/Cabal-syntax/src/Distribution/Types/BuildInfo/Lens.hs
+++ b/Cabal-syntax/src/Distribution/Types/BuildInfo/Lens.hs
@@ -59,6 +59,10 @@ class HasBuildInfo a where
   cxxOptions = buildInfo . cxxOptions
   {-# INLINE cxxOptions #-}
 
+  jsppOptions :: Lens' a [String]
+  jsppOptions = buildInfo . jsppOptions
+  {-# INLINE jsppOptions #-}
+
   ldOptions :: Lens' a [String]
   ldOptions = buildInfo . ldOptions
   {-# INLINE ldOptions #-}
@@ -243,6 +247,9 @@ instance HasBuildInfo BuildInfo where
   cxxOptions f s = fmap (\x -> s{T.cxxOptions = x}) (f (T.cxxOptions s))
   {-# INLINE cxxOptions #-}
 
+  jsppOptions f s = fmap (\x -> s{T.jsppOptions = x}) (f (T.jsppOptions s))
+  {-# INLINE jsppOptions #-}
+
   ldOptions f s = fmap (\x -> s{T.ldOptions = x}) (f (T.ldOptions s))
   {-# INLINE ldOptions #-}
 
diff --git a/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr b/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr
index 04f54ea5d931cacb40459845bfc7081a53b6dd1a..634b27b882860c0b5357dd515dba9217ad0e34c7 100644
--- a/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr
@@ -86,6 +86,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -198,6 +199,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -301,6 +303,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/anynone.expr b/Cabal-tests/tests/ParserTests/regressions/anynone.expr
index 919f554180ae3a0814996d4f7c85b33a6d3afe06..927605d605841f37151fd58ab8f710785be5467c 100644
--- a/Cabal-tests/tests/ParserTests/regressions/anynone.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/anynone.expr
@@ -52,6 +52,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/big-version.expr b/Cabal-tests/tests/ParserTests/regressions/big-version.expr
index c219ac952411aa7d792e1dff1ca207f0bd1d72a0..4d3659e45920285f6d18d8822b42a47da428060b 100644
--- a/Cabal-tests/tests/ParserTests/regressions/big-version.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/big-version.expr
@@ -53,6 +53,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr b/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr
index 8969ff6f5fa79eff703f414735ceb3b8f770c79c..41e0fd5377ab1da09b105f94958d8eaf4c22d3c4 100644
--- a/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr
@@ -69,6 +69,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -147,6 +148,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -240,6 +242,7 @@ GenericPackageDescription {
                       buildTools = [],
                       buildToolDepends = [],
                       cppOptions = [],
+                      jsppOptions = [],
                       asmOptions = [],
                       cmmOptions = [],
                       ccOptions = [],
@@ -320,6 +323,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -398,6 +402,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -469,6 +474,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -563,6 +569,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
@@ -642,6 +649,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/common.expr b/Cabal-tests/tests/ParserTests/regressions/common.expr
index e39820ec833b5d7be35c7471f3f90ab20fd61a23..e8c766460f2a04c4a84873ccc81ed2ce832e77f0 100644
--- a/Cabal-tests/tests/ParserTests/regressions/common.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/common.expr
@@ -67,6 +67,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -146,6 +147,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/common2.expr b/Cabal-tests/tests/ParserTests/regressions/common2.expr
index ae85c83ea2b39ffdaf1ac8bf5a9a435b404df885..af882207fc45b87d7f4758030c4fe99f60b7a0e3 100644
--- a/Cabal-tests/tests/ParserTests/regressions/common2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/common2.expr
@@ -63,6 +63,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -165,6 +166,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -246,6 +248,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -350,6 +353,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -428,6 +432,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -530,6 +535,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -609,6 +615,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -688,6 +695,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/common3.expr b/Cabal-tests/tests/ParserTests/regressions/common3.expr
index 5436936b3a214f49c809deaff0c8fb3d9db477f9..be783c4cab68ad8f730ef096e4de4991764bf62e 100644
--- a/Cabal-tests/tests/ParserTests/regressions/common3.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/common3.expr
@@ -67,6 +67,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -146,6 +147,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/elif.expr b/Cabal-tests/tests/ParserTests/regressions/elif.expr
index 5bf616b7c15d5d84081e5489bc80d7b9aae81a18..e04821eaaefd52cbf33056ada0bf7694769c1f9c 100644
--- a/Cabal-tests/tests/ParserTests/regressions/elif.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/elif.expr
@@ -62,6 +62,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -132,6 +133,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/elif2.expr b/Cabal-tests/tests/ParserTests/regressions/elif2.expr
index f0ecd6bb1111428ba06c849e3f1f8c7f6761437e..88eb02d59d7507c2bbd001d7126eee530c81d9ea 100644
--- a/Cabal-tests/tests/ParserTests/regressions/elif2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/elif2.expr
@@ -62,6 +62,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -132,6 +133,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -207,6 +209,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -276,6 +279,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
@@ -351,6 +355,7 @@ GenericPackageDescription {
                           buildTools = [],
                           buildToolDepends = [],
                           cppOptions = [],
+                          jsppOptions = [],
                           asmOptions = [],
                           cmmOptions = [],
                           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr b/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr
index 4e45a86b8c4edbe493082f7b5210e3736568d54e..02c4a4222c7127b821a263f43b5e435987a4098e 100644
--- a/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr
@@ -67,6 +67,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr b/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr
index 60be619bd16985cb87575c794d9c55695c521c67..a7cdf1a430079d1b5407c7689772a596b98f119f 100644
--- a/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr
@@ -163,6 +163,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -333,6 +334,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -419,6 +421,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -523,6 +526,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -595,6 +599,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -668,6 +673,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -765,6 +771,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/hasktorch.expr b/Cabal-tests/tests/ParserTests/regressions/hasktorch.expr
index 7eea76ce8c15a5cfe422a87f0445555d2cfb755c..9dfa089a3d5f653c7d7a425b476dccc56c1ee76e 100644
--- a/Cabal-tests/tests/ParserTests/regressions/hasktorch.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/hasktorch.expr
@@ -268,6 +268,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -602,6 +603,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -846,6 +848,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -1048,6 +1051,7 @@ GenericPackageDescription {
                       buildTools = [],
                       buildToolDepends = [],
                       cppOptions = [],
+                      jsppOptions = [],
                       asmOptions = [],
                       cmmOptions = [],
                       ccOptions = [],
@@ -1387,6 +1391,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -2708,6 +2713,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -2799,6 +2805,7 @@ GenericPackageDescription {
                     buildTools = [],
                     buildToolDepends = [],
                     cppOptions = [],
+                    jsppOptions = [],
                     asmOptions = [],
                     cmmOptions = [],
                     ccOptions = [],
@@ -5027,6 +5034,7 @@ GenericPackageDescription {
             cppOptions = [
               "-DCUDA",
               "-DHASKTORCH_INTERNAL_CUDA"],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -6398,6 +6406,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -6490,6 +6499,7 @@ GenericPackageDescription {
                     buildTools = [],
                     buildToolDepends = [],
                     cppOptions = [],
+                    jsppOptions = [],
                     asmOptions = [],
                     cmmOptions = [],
                     ccOptions = [],
@@ -8159,6 +8169,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -8649,6 +8660,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -9414,6 +9426,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -9536,6 +9549,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -9643,6 +9657,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -9750,6 +9765,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -9846,6 +9862,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -9943,6 +9960,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr b/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr
index 3e67f519199f96fbd7350be28e47d391548d6567..553b88dc5953f647d34c191794e76158212c4ef1 100644
--- a/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr
@@ -54,6 +54,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/indentation.expr b/Cabal-tests/tests/ParserTests/regressions/indentation.expr
index ea8c219ca0ad283c1cd4fb061776677619dcbb15..f36a8997717b0be9853abfc1c2b03d4eaf69025f 100644
--- a/Cabal-tests/tests/ParserTests/regressions/indentation.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/indentation.expr
@@ -63,6 +63,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/indentation2.expr b/Cabal-tests/tests/ParserTests/regressions/indentation2.expr
index f26c9a4e0051e8f5b659fccfac10063c9d084765..11afbcfd5d31af58657effecd4d8a177eef5c74a 100644
--- a/Cabal-tests/tests/ParserTests/regressions/indentation2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/indentation2.expr
@@ -56,6 +56,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/indentation3.expr b/Cabal-tests/tests/ParserTests/regressions/indentation3.expr
index 08db6b1fec6bd73261f11e698d6b54ec1c99c5d3..964bad3f9243cb40c3c098415bc048cc2b167926 100644
--- a/Cabal-tests/tests/ParserTests/regressions/indentation3.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/indentation3.expr
@@ -58,6 +58,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr b/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr
index 03fab0246e4a8fd4389c0204c012a23ab01f9acb..996fa26eece84f16e9d1f456384dffea9889cfa1 100644
--- a/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr
@@ -57,6 +57,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -142,6 +143,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -229,6 +231,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-5846.expr b/Cabal-tests/tests/ParserTests/regressions/issue-5846.expr
index 0d031503a53eb23fc2ad94775d19228fa6a52286..c3e08359046392018ecfb3e2d3fbdebbcf20634d 100644
--- a/Cabal-tests/tests/ParserTests/regressions/issue-5846.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/issue-5846.expr
@@ -51,6 +51,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-6083-a.expr b/Cabal-tests/tests/ParserTests/regressions/issue-6083-a.expr
index bbe56f81a5c1997193b0e4da4ad8cd002ec21432..001d3c86515eeecccc00da1ca588cadba46f93b2 100644
--- a/Cabal-tests/tests/ParserTests/regressions/issue-6083-a.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/issue-6083-a.expr
@@ -51,6 +51,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -148,6 +149,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -217,6 +219,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -299,6 +302,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-6083-b.expr b/Cabal-tests/tests/ParserTests/regressions/issue-6083-b.expr
index 17b9f8319bb97536ddc3250091030344329310f0..ca99e3d554fb01464be477cb54114cb3cf1aefa3 100644
--- a/Cabal-tests/tests/ParserTests/regressions/issue-6083-b.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/issue-6083-b.expr
@@ -51,6 +51,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -148,6 +149,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -217,6 +219,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -309,6 +312,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-6083-c.expr b/Cabal-tests/tests/ParserTests/regressions/issue-6083-c.expr
index 8db694b738997b856013d2bebe725691748dc8f8..b2f47a1a9387e65b36984cbf63fd7901574e9fa6 100644
--- a/Cabal-tests/tests/ParserTests/regressions/issue-6083-c.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/issue-6083-c.expr
@@ -51,6 +51,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -148,6 +149,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-6083-pkg-pkg.expr b/Cabal-tests/tests/ParserTests/regressions/issue-6083-pkg-pkg.expr
index 26a3c26095999b1f775dc91902f5c09f45951c41..ce7c453e6979a16ffec167425326ade1b48afba0 100644
--- a/Cabal-tests/tests/ParserTests/regressions/issue-6083-pkg-pkg.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/issue-6083-pkg-pkg.expr
@@ -51,6 +51,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-774.expr b/Cabal-tests/tests/ParserTests/regressions/issue-774.expr
index a9b2fc7bcc37b25a3e11482411222cfcb8ed1b32..4aeb65cb960fa73b7327236c245961bcfcdf0405 100644
--- a/Cabal-tests/tests/ParserTests/regressions/issue-774.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/issue-774.expr
@@ -61,6 +61,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr b/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr
index fd9b1fa3a28e78653e17749ec7246a88747324c5..b6dc81fee1bd5b69381650aa249b862becb44a7c 100644
--- a/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr
@@ -93,6 +93,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -193,6 +194,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -359,6 +361,7 @@ GenericPackageDescription {
                 (MajorBoundVersion
                   (mkVersion [4, 2, 1]))],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr b/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr
index 37bb5adfea557a8318734068ef4e1188408f6307..3a1d7d5f0754d5374240e50ff7917221aab2635c 100644
--- a/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr
@@ -61,6 +61,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr b/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr
index 6b31a91ecc47382846d4f68fc800828b5e1d5c95..230ebf53136e99b8a5b8cddd15e02aebafae72d9 100644
--- a/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr
@@ -54,6 +54,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/libpq1.expr b/Cabal-tests/tests/ParserTests/regressions/libpq1.expr
index db39305d20f722d2cd23db4a8703eb4008b8d8f8..b331abffcca52c39cd24b587b5ee31cb6c7dd84c 100644
--- a/Cabal-tests/tests/ParserTests/regressions/libpq1.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/libpq1.expr
@@ -144,6 +144,7 @@ GenericPackageDescription {
                 (mkVersion [0]))],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -249,6 +250,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -335,6 +337,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -421,6 +424,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -495,6 +499,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -564,6 +569,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
@@ -631,6 +637,7 @@ GenericPackageDescription {
                           buildTools = [],
                           buildToolDepends = [],
                           cppOptions = [],
+                          jsppOptions = [],
                           asmOptions = [],
                           cmmOptions = [],
                           ccOptions = [],
@@ -700,6 +707,7 @@ GenericPackageDescription {
                                 buildTools = [],
                                 buildToolDepends = [],
                                 cppOptions = [],
+                                jsppOptions = [],
                                 asmOptions = [],
                                 cmmOptions = [],
                                 ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/libpq2.expr b/Cabal-tests/tests/ParserTests/regressions/libpq2.expr
index 80b558d0b919ad2074d46593424dd244b6f470ac..9f6a16ada6e9c27ab38fe2efdf8c559983ff83cf 100644
--- a/Cabal-tests/tests/ParserTests/regressions/libpq2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/libpq2.expr
@@ -149,6 +149,7 @@ GenericPackageDescription {
               (OrLaterVersion
                 (mkVersion [0]))],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -254,6 +255,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -340,6 +342,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -426,6 +429,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -497,6 +501,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -566,6 +571,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
@@ -633,6 +639,7 @@ GenericPackageDescription {
                           buildTools = [],
                           buildToolDepends = [],
                           cppOptions = [],
+                          jsppOptions = [],
                           asmOptions = [],
                           cmmOptions = [],
                           ccOptions = [],
@@ -702,6 +709,7 @@ GenericPackageDescription {
                                 buildTools = [],
                                 buildToolDepends = [],
                                 cppOptions = [],
+                                jsppOptions = [],
                                 asmOptions = [],
                                 cmmOptions = [],
                                 ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr b/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr
index b8372437dd625906d41df033f4587a3c01ab01f0..0a13766046899eec58ff55f81438a668b2efa5f9 100644
--- a/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr
@@ -55,6 +55,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr b/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr
index a4d3459be3d394d8b945885bf6b8d28c571819c9..6c2239df825240694b05c3f7e403dfe3ff5e7693 100644
--- a/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr
@@ -55,6 +55,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr b/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr
index 2b1d37c79e94b6df45ffd754335a282c4de56fdd..a4a94aac32ce064642eef1aec39833527d77b716 100644
--- a/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr
@@ -55,6 +55,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/monad-param.expr b/Cabal-tests/tests/ParserTests/regressions/monad-param.expr
index aaeb1af1044352bae99650793cf20ba3cd2d0fdd..db28c928ddb1a2f585959c53ae0cc36c89270fb0 100644
--- a/Cabal-tests/tests/ParserTests/regressions/monad-param.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/monad-param.expr
@@ -63,6 +63,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr b/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr
index dc6371bc75c041b09af787d27257e7f2d5c54218..d2f1efdd913692a783087b769d52be975766a601 100644
--- a/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr
@@ -54,6 +54,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -134,6 +135,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/noVersion.expr b/Cabal-tests/tests/ParserTests/regressions/noVersion.expr
index 0d5bf636569a09c6c36aa1aee269dd03731045a9..838f87733eb30abb001a277170f5742faf8731a6 100644
--- a/Cabal-tests/tests/ParserTests/regressions/noVersion.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/noVersion.expr
@@ -54,6 +54,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr b/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr
index f6a8c64a5667634237c4697210a287f2cdd6c3aa..ccfe4421c7b00747bb13c45ca496219281b55c38 100644
--- a/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr
@@ -69,6 +69,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -139,6 +140,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/shake.expr b/Cabal-tests/tests/ParserTests/regressions/shake.expr
index 560c38e1dc48f242b5d2948fd8fbd947459983d3..5be08b040648c73d05f46c16ac9237c471ecd140 100644
--- a/Cabal-tests/tests/ParserTests/regressions/shake.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/shake.expr
@@ -189,6 +189,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -479,6 +480,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = ["-DPORTABLE"],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -548,6 +550,7 @@ GenericPackageDescription {
                       buildTools = [],
                       buildToolDepends = [],
                       cppOptions = [],
+                      jsppOptions = [],
                       asmOptions = [],
                       cmmOptions = [],
                       ccOptions = [],
@@ -624,6 +627,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -693,6 +697,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
@@ -773,6 +778,7 @@ GenericPackageDescription {
                 buildTools = [],
                 buildToolDepends = [],
                 cppOptions = [],
+                jsppOptions = [],
                 asmOptions = [],
                 cmmOptions = [],
                 ccOptions = [],
@@ -851,6 +857,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -1176,6 +1183,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -1245,6 +1253,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = ["-DPORTABLE"],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -1311,6 +1320,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
@@ -1384,6 +1394,7 @@ GenericPackageDescription {
                     buildTools = [],
                     buildToolDepends = [],
                     cppOptions = [],
+                    jsppOptions = [],
                     asmOptions = [],
                     cmmOptions = [],
                     ccOptions = [],
@@ -1450,6 +1461,7 @@ GenericPackageDescription {
                           buildTools = [],
                           buildToolDepends = [],
                           cppOptions = [],
+                          jsppOptions = [],
                           asmOptions = [],
                           cmmOptions = [],
                           ccOptions = [],
@@ -1527,6 +1539,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -1604,6 +1617,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -1978,6 +1992,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -2049,6 +2064,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -2120,6 +2136,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = ["-DPORTABLE"],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
@@ -2190,6 +2207,7 @@ GenericPackageDescription {
                         buildTools = [],
                         buildToolDepends = [],
                         cppOptions = [],
+                        jsppOptions = [],
                         asmOptions = [],
                         cmmOptions = [],
                         ccOptions = [],
@@ -2267,6 +2285,7 @@ GenericPackageDescription {
                     buildTools = [],
                     buildToolDepends = [],
                     cppOptions = [],
+                    jsppOptions = [],
                     asmOptions = [],
                     cmmOptions = [],
                     ccOptions = [],
@@ -2337,6 +2356,7 @@ GenericPackageDescription {
                           buildTools = [],
                           buildToolDepends = [],
                           cppOptions = [],
+                          jsppOptions = [],
                           asmOptions = [],
                           cmmOptions = [],
                           ccOptions = [],
@@ -2418,6 +2438,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr b/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr
index 24f0aff227a83b5c09aafdbb8b7aa297af38d7f0..88500d2d36563b3e96e590fcbf0a9f87b0f87e6a 100644
--- a/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr
@@ -52,6 +52,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr b/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr
index 992486c3be5fad22cb882764865b86924839fea2..9cd00ea1103f5caf2ee09bb12896739e5ce8a562 100644
--- a/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr
@@ -56,6 +56,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr b/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr
index f38e0b24b306c78b0f66596004c64b903e4340ce..e8b2eca8989688add0174d4a53a6639cf7d01f41 100644
--- a/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr
@@ -56,6 +56,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr b/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr
index fa6fd5ee3086f01731b4c3cc638cf3f1be8dc33b..2db686aa40fed9f8f4ce048857a9cd72e5d88e00 100644
--- a/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr
@@ -81,6 +81,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -253,6 +254,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -433,6 +435,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
@@ -541,6 +544,7 @@ GenericPackageDescription {
                   buildTools = [],
                   buildToolDepends = [],
                   cppOptions = [],
+                  jsppOptions = [],
                   asmOptions = [],
                   cmmOptions = [],
                   ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/version-sets.expr b/Cabal-tests/tests/ParserTests/regressions/version-sets.expr
index 8983fa4ea73623d8ae0085fbdcbdae2d330a8541..c086ae618aa1edb69658eef438f7fae1a48f30ed 100644
--- a/Cabal-tests/tests/ParserTests/regressions/version-sets.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/version-sets.expr
@@ -78,6 +78,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
diff --git a/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr b/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr
index a8b4fa3c604a3bb978ca2702d476f29f3eeec635..e4e6a457a3d587b11f80b8cbc8a60f5ce55a9cac 100644
--- a/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr
+++ b/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr
@@ -72,6 +72,7 @@ GenericPackageDescription {
           buildTools = [],
           buildToolDepends = [],
           cppOptions = [],
+          jsppOptions = [],
           asmOptions = [],
           cmmOptions = [],
           ccOptions = [],
@@ -160,6 +161,7 @@ GenericPackageDescription {
             buildTools = [],
             buildToolDepends = [],
             cppOptions = [],
+            jsppOptions = [],
             asmOptions = [],
             cmmOptions = [],
             ccOptions = [],
diff --git a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
index e572eb1d4fc04e30f64bf0fe38c4e7692714addd..bfde4536823c20325da506cf6fbef5048c06ca3d 100644
--- a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
+++ b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs
@@ -29,8 +29,8 @@ md5Check proxy md5Int = structureHash proxy @?= md5FromInteger md5Int
 
 md5CheckGenericPackageDescription :: Proxy GenericPackageDescription -> Assertion
 md5CheckGenericPackageDescription proxy = md5Check proxy
-    0xe95038393adbd46b119188757a3a2b63
+    0x42685b0be2909b20bfcd2f32c503ec7b
 
 md5CheckLocalBuildInfo :: Proxy LocalBuildInfo -> Assertion
 md5CheckLocalBuildInfo proxy = md5Check proxy
-    0x364f8e404df9ada84ea3b4e3b3084a10
+    0x3d5f7afb3f2f9d8a8ea0e9487a74a006
diff --git a/Cabal/src/Distribution/PackageDescription/Check/Target.hs b/Cabal/src/Distribution/PackageDescription/Check/Target.hs
index 9e23b0af91742b7147c4202c4ec63ad662532c30..ee0fff7ca846a1a7a6fd1ba05be2275d9f9e4a3d 100644
--- a/Cabal/src/Distribution/PackageDescription/Check/Target.hs
+++ b/Cabal/src/Distribution/PackageDescription/Check/Target.hs
@@ -814,6 +814,7 @@ checkBuildInfoOptions t bi = do
   checkCLikeOptions LangC "cc-options" (ccOptions bi) ldOpts
   checkCLikeOptions LangCPlusPlus "cxx-options" (cxxOptions bi) ldOpts
   checkCPPOptions (cppOptions bi)
+  checkJSPOptions (jsppOptions bi)
 
 -- | Checks GHC options for commonly misused or non-portable flags.
 checkGHCOptions
@@ -904,6 +905,12 @@ checkGHCOptions title t opts = do
         ( [(flag, flag) | flag@('-' : 'D' : _) <- ghcNoRts]
             ++ [(flag, flag) | flag@('-' : 'U' : _) <- ghcNoRts]
         )
+      checkAlternatives
+        title
+        "jspp-options"
+        ( [(flag, flag) | flag@('-' : 'D' : _) <- ghcNoRts]
+            ++ [(flag, flag) | flag@('-' : 'U' : _) <- ghcNoRts]
+        )
       checkAlternatives
         title
         "include-dirs"
@@ -1093,3 +1100,20 @@ checkCPPOptions opts = do
           (PackageBuildWarning (COptCPP opt))
     )
     opts
+
+checkJSPOptions
+  :: Monad m
+  => [String] -- Options in String form.
+  -> CheckM m ()
+checkJSPOptions opts = do
+  checkAlternatives
+    "jspp-options"
+    "include-dirs"
+    [(flag, dir) | flag@('-' : 'I' : dir) <- opts]
+  mapM_
+    ( \opt ->
+        checkP
+          (not $ any (`isPrefixOf` opt) ["-D", "-U", "-I"])
+          (PackageBuildWarning (OptJSPP opt))
+    )
+    opts
diff --git a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs
index 897137bda2bd874773c32a3b365921d172536350..3ff5430eac7bb2de29e048699c21a12b979460a5 100644
--- a/Cabal/src/Distribution/PackageDescription/Check/Warning.hs
+++ b/Cabal/src/Distribution/PackageDescription/Check/Warning.hs
@@ -214,6 +214,7 @@ data CheckExplanation
   | OptWithRts String
   | COptONumber String WarnLang
   | COptCPP String
+  | OptJSPP String
   | OptAlternatives String String [(String, String)]
   | RelativeOutside String FilePath
   | AbsolutePath String FilePath
@@ -380,6 +381,7 @@ data CheckExplanationID
   | CIOptWithRts
   | CICOptONumber
   | CICOptCPP
+  | CIOptJSPP
   | CIOptAlternatives
   | CIRelativeOutside
   | CIAbsolutePath
@@ -525,6 +527,7 @@ checkExplanationId (OptRts{}) = CIOptRts
 checkExplanationId (OptWithRts{}) = CIOptWithRts
 checkExplanationId (COptONumber{}) = CICOptONumber
 checkExplanationId (COptCPP{}) = CICOptCPP
+checkExplanationId (OptJSPP{}) = CIOptJSPP
 checkExplanationId (OptAlternatives{}) = CIOptAlternatives
 checkExplanationId (RelativeOutside{}) = CIRelativeOutside
 checkExplanationId (AbsolutePath{}) = CIAbsolutePath
@@ -677,6 +680,7 @@ ppCheckExplanationId CIOptRts = "option-rtsopts"
 ppCheckExplanationId CIOptWithRts = "option-with-rtsopts"
 ppCheckExplanationId CICOptONumber = "option-opt-c"
 ppCheckExplanationId CICOptCPP = "cpp-options"
+ppCheckExplanationId CIOptJSPP = "jspp-options"
 ppCheckExplanationId CIOptAlternatives = "misplaced-c-opt"
 ppCheckExplanationId CIRelativeOutside = "relative-path-outside"
 ppCheckExplanationId CIAbsolutePath = "absolute-path"
@@ -1086,6 +1090,8 @@ ppExplanation (COptONumber prefix label) =
     ++ " --disable-optimization flag."
 ppExplanation (COptCPP opt) =
   "'cpp-options: " ++ opt ++ "' is not a portable C-preprocessor flag."
+ppExplanation (OptJSPP opt) =
+  "'jspp-options: " ++ opt ++ "' is not a portable JavaScript-preprocessor flag."
 ppExplanation (OptAlternatives badField goodField flags) =
   "Instead of "
     ++ quote (badField ++ ": " ++ unwords badFlags)
diff --git a/Cabal/src/Distribution/Simple/GHC/Internal.hs b/Cabal/src/Distribution/Simple/GHC/Internal.hs
index 121e34549cbc1c3d612e289c7d36f4b0cd1ab8f9..9e252d7c889caf23ce3b167b4515f3921cb7c02c 100644
--- a/Cabal/src/Distribution/Simple/GHC/Internal.hs
+++ b/Cabal/src/Distribution/Simple/GHC/Internal.hs
@@ -505,6 +505,7 @@ componentJsGhcOptions verbosity lbi bi clbi odir filename =
       ghcOptVerbosity = toFlag (min verbosity normal)
     , ghcOptMode = toFlag GhcModeCompile
     , ghcOptInputFiles = toNubListR [filename]
+    , ghcOptJSppOptions = jsppOptions bi
     , ghcOptCppIncludePath = includePaths lbi bi clbi odir
     , ghcOptHideAllPackages = toFlag True
     , ghcOptPackageDBs = withPackageDB lbi
@@ -568,6 +569,7 @@ componentGhcOptions verbosity lbi bi clbi odir =
                 ++ [autogenPackageModulesDir lbi]
         , ghcOptCppIncludePath = includePaths lbi bi clbi odir
         , ghcOptCppOptions = cppOptions bi
+        , ghcOptJSppOptions = jsppOptions bi
         , ghcOptCppIncludes =
             toNubListR $
               [coerceSymbolicPath (autogenComponentModulesDir lbi clbi </> makeRelativePathEx cppHeaderName)]
diff --git a/Cabal/src/Distribution/Simple/Program/GHC.hs b/Cabal/src/Distribution/Simple/Program/GHC.hs
index 8613653cba6970874d83cf4a0e4d4103c525746f..41ac96119ac149b415860a82b0968ae82ad0da26 100644
--- a/Cabal/src/Distribution/Simple/Program/GHC.hs
+++ b/Cabal/src/Distribution/Simple/Program/GHC.hs
@@ -505,6 +505,8 @@ data GhcOptions = GhcOptions
   -- ^ Options to pass through to the Assembler.
   , ghcOptCppOptions :: [String]
   -- ^ Options to pass through to CPP; the @ghc -optP@ flag.
+  , ghcOptJSppOptions :: [String]
+  -- ^ Options to pass through to CPP; the @ghc -optJSP@ flag. @since 3.16.0.0
   , ghcOptCppIncludePath :: NubListR (SymbolicPath Pkg (Dir Include))
   -- ^ Search path for CPP includes like header files; the @ghc -I@ flag.
   , ghcOptCppIncludes :: NubListR (SymbolicPath Pkg File)
@@ -856,6 +858,7 @@ renderGhcOptions comp _platform@(Platform _arch os) opts
 
           ["-I" ++ u dir | dir <- flags ghcOptCppIncludePath]
         , ["-optP" ++ opt | opt <- ghcOptCppOptions opts]
+        , ["-optJSP" ++ opt | opt <- ghcOptJSppOptions opts]
         , concat
             [ ["-optP-include", "-optP" ++ u inc]
             | inc <- flags ghcOptCppIncludes
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/cabal.out b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/cabal.out
new file mode 100644
index 0000000000000000000000000000000000000000..a40cb90cb459361c219cdedbb1993ca1618dcb1d
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/cabal.out
@@ -0,0 +1,4 @@
+# cabal check
+The following errors are likely to affect your build negatively:
+Error: [jspp-options] 'jspp-options: -Q' is not a portable JavaScript-preprocessor flag.
+Error: Hackage would reject this package.
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/cabal.test.hs b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/cabal.test.hs
new file mode 100644
index 0000000000000000000000000000000000000000..44c64c6f35aa33bf6d2baac60d66799ae452dcf5
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/cabal.test.hs
@@ -0,0 +1,5 @@
+import Test.Cabal.Prelude
+
+-- `jspp-options`, do not use use non portable flags.
+main = cabalTest $
+  fails $ cabal "check" []
diff --git a/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/pkg.cabal b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/pkg.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..9dd54ff16bcab1169f5fde91a958df304331a42c
--- /dev/null
+++ b/cabal-testsuite/PackageTests/Check/ConfiguredPackage/JSPPOptions/JSPPNotPortable/pkg.cabal
@@ -0,0 +1,14 @@
+cabal-version: 3.16
+name: pkg
+synopsis: synopsis
+description: description
+version: 0
+category: example
+maintainer: none@example.com
+license: GPL-3.0-or-later
+
+library
+  exposed-modules: Module
+  default-language: Haskell2010
+  if arch(JavaScript)
+    jspp-options: -Q
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/cabal.project b/cabal-testsuite/PackageTests/JS/JSPPOptions/cabal.project
new file mode 100644
index 0000000000000000000000000000000000000000..e6fdbadb4398bc0e333947b5fb8021778310d943
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/cabal.project
@@ -0,0 +1 @@
+packages: .
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/demo/Main.hs b/cabal-testsuite/PackageTests/JS/JSPPOptions/demo/Main.hs
new file mode 100644
index 0000000000000000000000000000000000000000..19e67f001f818de846a203847e47e0621725345a
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/demo/Main.hs
@@ -0,0 +1,6 @@
+module Main where
+
+import Lib
+
+main :: IO ()
+main = foo
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/js-arch.test.hs b/cabal-testsuite/PackageTests/JS/JSPPOptions/js-arch.test.hs
new file mode 100644
index 0000000000000000000000000000000000000000..c7df6e8e98623e12a6cd425c387964a9484cba4e
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/js-arch.test.hs
@@ -0,0 +1,9 @@
+import Test.Cabal.Prelude
+
+main = do
+    skipUnlessJavaScript
+    skipIfWindows ""
+    setupAndCabalTest $ do
+        skipUnlessGhcVersion ">= 9.12"
+        res <- cabal' "v2-run" ["demo"]
+        assertOutputContains "Hello definition!" res
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/jsbits/lib.js b/cabal-testsuite/PackageTests/JS/JSPPOptions/jsbits/lib.js
new file mode 100644
index 0000000000000000000000000000000000000000..b3b8beb78fb4abe2e337ecb6d1b8ceaaacd1811d
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/jsbits/lib.js
@@ -0,0 +1,9 @@
+//#OPTIONS: CPP
+
+function foo() {
+#ifdef PRINT_DEF
+  console.log("Hello definition!");
+#else
+  console.log("Hello!");
+#endif
+}
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/jsppoptions.cabal b/cabal-testsuite/PackageTests/JS/JSPPOptions/jsppoptions.cabal
new file mode 100644
index 0000000000000000000000000000000000000000..15883ab6b6223d922ae7fb1bc5782583e06bd673
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/jsppoptions.cabal
@@ -0,0 +1,19 @@
+cabal-version: 3.16
+name: jsppoptions
+version: 0
+build-type: Simple
+
+library
+  default-language: Haskell2010
+  js-sources: jsbits/lib.js
+  if arch(JavaScript)
+    jspp-options: -DPRINT_DEF
+  hs-source-dirs: src
+  exposed-modules: Lib
+  build-depends: base
+
+executable demo
+  default-language: Haskell2010
+  main-is: Main.hs
+  hs-source-dirs: demo
+  build-depends: base, jsppoptions
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/other-arch.out b/cabal-testsuite/PackageTests/JS/JSPPOptions/other-arch.out
new file mode 100644
index 0000000000000000000000000000000000000000..fcf3a48349b401139765b5b4fc0b4a0b980732e9
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/other-arch.out
@@ -0,0 +1,14 @@
+# cabal v2-run
+Configuration is affected by the following files:
+- cabal.project
+Resolving dependencies...
+Build profile: -w ghc-<GHCVER> -O1
+In order, the following will be built:
+ - jsppoptions-0 (lib) (first run)
+ - jsppoptions-0 (exe:demo) (first run)
+Configuring library for jsppoptions-0...
+Preprocessing library for jsppoptions-0...
+Building library for jsppoptions-0...
+Configuring executable 'demo' for jsppoptions-0...
+Preprocessing executable 'demo' for jsppoptions-0...
+Building executable 'demo' for jsppoptions-0...
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/other-arch.test.hs b/cabal-testsuite/PackageTests/JS/JSPPOptions/other-arch.test.hs
new file mode 100644
index 0000000000000000000000000000000000000000..5f1f0caa20b2b1166d254dbb85c692ccbb26d048
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/other-arch.test.hs
@@ -0,0 +1,8 @@
+import Test.Cabal.Prelude
+
+main = do
+    skipIfJavaScript
+    cabalTest $ do
+        -- Ensure the field `js-sources` does not raise issues
+        res <- cabal' "v2-run" ["demo"]
+        assertOutputContains "Not JS foo" res
diff --git a/cabal-testsuite/PackageTests/JS/JSPPOptions/src/Lib.hs b/cabal-testsuite/PackageTests/JS/JSPPOptions/src/Lib.hs
new file mode 100644
index 0000000000000000000000000000000000000000..5cd25eb2f87391e79f5fabb8813e1d6ff907008b
--- /dev/null
+++ b/cabal-testsuite/PackageTests/JS/JSPPOptions/src/Lib.hs
@@ -0,0 +1,9 @@
+{-# LANGUAGE CPP #-}
+module Lib where
+
+#if defined(javascript_HOST_ARCH)
+foreign import javascript foo :: IO ()
+#else
+foo :: IO ()
+foo = putStrLn "Not JS foo"
+#endif
diff --git a/changelog.d/pr-10967.md b/changelog.d/pr-10967.md
new file mode 100644
index 0000000000000000000000000000000000000000..96d59d6de363e3758506a87d92c4aa323a727288
--- /dev/null
+++ b/changelog.d/pr-10967.md
@@ -0,0 +1,13 @@
+---
+synopsis: Adding JavaScript Preprocessor Support
+packages: [Cabal, Cabal-syntax]
+prs: 10967
+---
+
+Adding new syntax jspp-options that would support the -optJSP preprocessor flag for js sources.
+
+```
+  js-sources: jsbits/lib.js
+  jspp-options: -DYOUR_FLAG
+```
+
diff --git a/doc/buildinfo-fields-reference.rst b/doc/buildinfo-fields-reference.rst
index b1bb35d6d6ccef75ac0d16e388dfc3b9f9fb8b8d..21ad93188fcb827b2112e51409b2989abc285ec3 100644
--- a/doc/buildinfo-fields-reference.rst
+++ b/doc/buildinfo-fields-reference.rst
@@ -485,6 +485,14 @@ js-sources
     .. math::
         \mathrm{commalist}\left\{ \mathop{\mathit{hs\text{-}string}}\mid{{[\mathop{\mathord{``}\mathtt{\ }\mathord{"}}\mathop{\mathord{``}\mathtt{\text{,}}\mathord{"}}]^c}}^+_{} \right\}
 
+jspp-options
+    * Monoidal field
+    * Available since ``cabal-version: 3.16``.
+    * Documentation of :pkg-field:`library:jspp-options`
+
+    .. math::
+        {\left\{ \mathop{\mathit{hs\text{-}string}}\mid{{[\mathop{\mathord{``}\mathtt{\ }\mathord{"}}]^c}}^+_{} \right\}}^\ast_{\bullet}
+
 ld-options
     * Monoidal field
     * Documentation of :pkg-field:`library:ld-options`
diff --git a/doc/cabal-commands.rst b/doc/cabal-commands.rst
index 22f1a9089a6a2a9ab865f9f28e5bd942cdb99232..9ad5e71687571bb0dd3987e691054760a09f3b75 100644
--- a/doc/cabal-commands.rst
+++ b/doc/cabal-commands.rst
@@ -1405,6 +1405,7 @@ A list of all warnings with their constructor:
 - ``option-with-rtsopts``: unnecessary ``-with-rtsopts``.
 - ``option-opt-c``: unnecessary ``-O[n]`` in C code.
 - ``cpp-options``: unportable ``-cpp-options`` flag.
+- ``jspp-options``: unportable ``-jspp-options`` flag.
 - ``misplaced-c-opt``: C-like options in wrong cabal field.
 - ``relative-path-outside``: relative path outside of source tree.
 - ``absolute-path``: absolute path where not allowed.
diff --git a/doc/cabal-package-description-file.rst b/doc/cabal-package-description-file.rst
index d1b5d3971adc95c7dda72bc89d365752ac2e55ef..5b52ed212f097280b841e925c0f98e40dfe50673 100644
--- a/doc/cabal-package-description-file.rst
+++ b/doc/cabal-package-description-file.rst
@@ -1992,6 +1992,11 @@ system-dependent values for these fields.
     arguments are compiler-dependent, this field is more useful with the
     setup described in the section on `system-dependent parameters`_.
 
+.. pkg-field:: jspp-options: token list
+
+    Command-line arguments for pre-processing JS code. Applies to pre-processed
+    Haskell source like .js. Flags here will be passed as ``-optJSP`` flags to GHC.
+
 .. pkg-field:: cpp-options: token list
 
     Command-line arguments for pre-processing Haskell code. Applies to
diff --git a/editors/vim/syntax/cabal.vim b/editors/vim/syntax/cabal.vim
index 2e578307a7ecf50842c139f448f25277096574bd..3d2600253e5b39e0e4293101a487182840388ca9 100644
--- a/editors/vim/syntax/cabal.vim
+++ b/editors/vim/syntax/cabal.vim
@@ -65,6 +65,7 @@ syn keyword cabalFieldName contained
   \ cmm-options
   \ cmm-sources
   \ copyright
+  \ jspp-options
   \ cpp-options
   \ cxx-options
   \ cxx-sources