From 57d7f28ebf9e513030f2c1d0ebf164a1151dbe06 Mon Sep 17 00:00:00 2001
From: Moritz Angermann <moritz.angermann@gmail.com>
Date: Thu, 2 Nov 2017 10:23:20 +0800
Subject: [PATCH] Adds options; renames sSoruces to asmSources

---
 .../Distribution/PackageDescription/Check.hs  |  6 ++--
 .../PackageDescription/FieldGrammar.hs        |  5 +++
 .../Distribution/PackageDescription/Parse.hs  | 18 ++++++----
 Cabal/Distribution/ParseUtils.hs              |  2 +-
 Cabal/Distribution/Simple/BuildTarget.hs      |  4 +--
 Cabal/Distribution/Simple/Register.hs         |  3 +-
 Cabal/Distribution/Types/BuildInfo.hs         | 14 +++++---
 Cabal/Distribution/Types/BuildInfo/Lens.hs    | 35 +++++++++++++++++++
 Cabal/doc/developing-packages.rst             |  2 +-
 Cabal/doc/installing-packages.rst             |  2 +-
 10 files changed, 72 insertions(+), 19 deletions(-)

diff --git a/Cabal/Distribution/PackageDescription/Check.hs b/Cabal/Distribution/PackageDescription/Check.hs
index 89e3190829d..3106c7954d7 100644
--- a/Cabal/Distribution/PackageDescription/Check.hs
+++ b/Cabal/Distribution/PackageDescription/Check.hs
@@ -1029,10 +1029,10 @@ checkPaths pkg =
       ++ [ (path, "data-dir")        | path <- [dataDir      pkg]]
       ++ [ (path, "license-file")    | path <- licenseFiles  pkg ]
       ++ concat
-         [    [ (path, "c-sources")        | path <- cSources        bi ]
-           ++ [ (path, "cxx-sources")      | path <- cxxSources      bi ]
-           ++ [ (path, "s-sources")        | path <- sSources        bi ]
+         [    [ (path, "asm-sources")      | path <- asmSources      bi ]
            ++ [ (path, "cmm-sources")      | path <- cmmSources      bi ]
+           ++ [ (path, "c-sources")        | path <- cSources        bi ]
+           ++ [ (path, "cxx-sources")      | path <- cxxSources      bi ]
            ++ [ (path, "js-sources")       | path <- jsSources       bi ]
            ++ [ (path, "install-includes") | path <- installIncludes bi ]
            ++ [ (path, "hs-source-dirs")   | path <- hsSourceDirs    bi ]
diff --git a/Cabal/Distribution/PackageDescription/FieldGrammar.hs b/Cabal/Distribution/PackageDescription/FieldGrammar.hs
index 845b9efde3c..e76eb6e737f 100644
--- a/Cabal/Distribution/PackageDescription/FieldGrammar.hs
+++ b/Cabal/Distribution/PackageDescription/FieldGrammar.hs
@@ -360,12 +360,16 @@ buildInfoFieldGrammar = BuildInfo
     <*> monoidalFieldAla "build-tool-depends"   (alaList  CommaFSep)          L.buildToolDepends
         ^^^ availableSince [2,0]
     <*> monoidalFieldAla "cpp-options"          (alaList' NoCommaFSep Token') L.cppOptions
+    <*> monoidalFieldAla "asm-options"          (alaList' NoCommaFSep Token') L.asmOptions
+    <*> monoidalFieldAla "cmm-options"          (alaList' NoCommaFSep Token') L.cmmOptions
     <*> monoidalFieldAla "cc-options"           (alaList' NoCommaFSep Token') L.ccOptions
     <*> monoidalFieldAla "cxx-options"          (alaList' NoCommaFSep Token') L.cxxOptions
     <*> monoidalFieldAla "ld-options"           (alaList' NoCommaFSep Token') L.ldOptions
     <*> monoidalFieldAla "pkgconfig-depends"    (alaList  CommaFSep)          L.pkgconfigDepends
     <*> monoidalFieldAla "frameworks"           (alaList' FSep Token)         L.frameworks
     <*> monoidalFieldAla "extra-framework-dirs" (alaList' FSep FilePathNT)    L.extraFrameworkDirs
+    <*> monoidalFieldAla "asm-sources"          (alaList' VCat FilePathNT)    L.asmSources
+    <*> monoidalFieldAla "cmm-sources"          (alaList' VCat FilePathNT)    L.cmmSources
     <*> monoidalFieldAla "c-sources"            (alaList' VCat FilePathNT)    L.cSources
     <*> monoidalFieldAla "cxx-sources"          (alaList' VCat FilePathNT)    L.cxxSources
     <*> monoidalFieldAla "js-sources"           (alaList' VCat FilePathNT)    L.jsSources
@@ -380,6 +384,7 @@ buildInfoFieldGrammar = BuildInfo
         ^^^ deprecatedSince [1,12] "Please use 'default-extensions' or 'other-extensions' fields."
     <*> monoidalFieldAla "extra-libraries"      (alaList' VCat Token)         L.extraLibs
     <*> monoidalFieldAla "extra-ghci-libraries" (alaList' VCat Token)         L.extraGHCiLibs
+    <*> monoidalFieldAla "extra-bundled-libraries" (alaList' VCat Token)      L.extraBundledLibs
     <*> monoidalFieldAla "extra-lib-dirs"       (alaList' FSep FilePathNT)    L.extraLibDirs
     <*> monoidalFieldAla "include-dirs"         (alaList' FSep FilePathNT)    L.includeDirs
     <*> monoidalFieldAla "includes"             (alaList' FSep FilePathNT)    L.includes
diff --git a/Cabal/Distribution/PackageDescription/Parse.hs b/Cabal/Distribution/PackageDescription/Parse.hs
index 00a08f1dc0a..8e363a1b571 100644
--- a/Cabal/Distribution/PackageDescription/Parse.hs
+++ b/Cabal/Distribution/PackageDescription/Parse.hs
@@ -430,14 +430,20 @@ binfoFieldDescrs =
            disp               parse
            buildToolDepends   (\xs  binfo -> binfo{buildToolDepends=xs})
  , commaListFieldWithSep vcat "build-depends"
-           disp                   parse
+           disp               parse
            targetBuildDepends (\xs binfo -> binfo{targetBuildDepends=xs})
  , commaListFieldWithSep vcat "mixins"
-           disp                   parse
-           mixins   (\xs binfo -> binfo{mixins=xs})
+           disp               parse
+           mixins             (\xs binfo -> binfo{mixins=xs})
  , spaceListField "cpp-options"
            showToken          parseTokenQ'
-           cppOptions          (\val binfo -> binfo{cppOptions=val})
+           cppOptions         (\val binfo -> binfo{cppOptions=val})
+ , spaceListField "asm-options"
+           showToken          parseTokenQ'
+           asmOptions         (\val binfo -> binfo{asmOptions=val})
+ , spaceListField "cmm-options"
+           showToken          parseTokenQ'
+           cmmOptions         (\val binfo -> binfo{cmmOptions=val})
  , spaceListField "cc-options"
            showToken          parseTokenQ'
            ccOptions          (\val binfo -> binfo{ccOptions=val})
@@ -456,9 +462,9 @@ binfoFieldDescrs =
  , listField "extra-framework-dirs"
            showToken          parseFilePathQ
            extraFrameworkDirs (\val binfo -> binfo{extraFrameworkDirs=val})
- , listFieldWithSep vcat "s-sources"
+ , listFieldWithSep vcat "asm-sources"
            showFilePath       parseFilePathQ
-           sSources           (\paths binfo -> binfo{sSources=paths})
+           asmSources         (\paths binfo -> binfo{asmSources=paths})
  , listFieldWithSep vcat "cmm-sources"
            showFilePath       parseFilePathQ
            cmmSources         (\paths binfo -> binfo{cmmSources=paths})
diff --git a/Cabal/Distribution/ParseUtils.hs b/Cabal/Distribution/ParseUtils.hs
index 668835eab46..0e79049d854 100644
--- a/Cabal/Distribution/ParseUtils.hs
+++ b/Cabal/Distribution/ParseUtils.hs
@@ -285,7 +285,7 @@ ppField name fielddoc
          , "extra-source-files"
          , "extra-tmp-files"
          , "exposed-modules"
-         , "s-sources"
+         , "asm-sources"
          , "cmm-sources"
          , "c-sources"
          , "js-sources"
diff --git a/Cabal/Distribution/Simple/BuildTarget.hs b/Cabal/Distribution/Simple/BuildTarget.hs
index d6c92819934..cfa91c01c7b 100644
--- a/Cabal/Distribution/Simple/BuildTarget.hs
+++ b/Cabal/Distribution/Simple/BuildTarget.hs
@@ -450,7 +450,7 @@ data ComponentInfo = ComponentInfo {
        cinfoSrcDirs :: [FilePath],
        cinfoModules :: [ModuleName],
        cinfoHsFiles :: [FilePath],   -- other hs files (like main.hs)
-       cinfoSFiles  :: [FilePath],
+       cinfoAsmFiles:: [FilePath],
        cinfoCmmFiles:: [FilePath],
        cinfoCFiles  :: [FilePath],
        cinfoJsFiles :: [FilePath]
@@ -466,7 +466,7 @@ pkgComponentInfo pkg =
         cinfoSrcDirs = hsSourceDirs bi,
         cinfoModules = componentModules c,
         cinfoHsFiles = componentHsFiles c,
-        cinfoSFiles  = sSources bi,
+        cinfoAsmFiles= asmSources bi,
         cinfoCmmFiles= cmmSources bi,
         cinfoCFiles  = cSources bi,
         cinfoJsFiles = jsSources bi
diff --git a/Cabal/Distribution/Simple/Register.hs b/Cabal/Distribution/Simple/Register.hs
index 343c9299c1f..e66c12179d1 100644
--- a/Cabal/Distribution/Simple/Register.hs
+++ b/Cabal/Distribution/Simple/Register.hs
@@ -463,8 +463,9 @@ generalInstalledPackageInfo adjustRelIncDirs pkg abi_hash lib lbi clbi installDi
     hasModules = not $ null (allLibModules lib clbi)
     comp = compiler lbi
     hasLibrary = (hasModules || not (null (cSources bi))
-                             || not (null (sSources bi))
+                             || not (null (asmSources bi))
                              || not (null (cmmSources bi))
+                             || not (null (cxxSources bi))
                              || (not (null (jsSources bi)) &&
                                 compilerFlavor comp == GHCJS))
                && not (componentIsIndefinite clbi)
diff --git a/Cabal/Distribution/Types/BuildInfo.hs b/Cabal/Distribution/Types/BuildInfo.hs
index efda457c5b0..6730a555e1e 100644
--- a/Cabal/Distribution/Types/BuildInfo.hs
+++ b/Cabal/Distribution/Types/BuildInfo.hs
@@ -51,14 +51,16 @@ data BuildInfo = BuildInfo {
         -- field directly.
         buildToolDepends  :: [ExeDependency],
         cppOptions        :: [String],  -- ^ options for pre-processing Haskell code
+        asmOptions        :: [String],  -- ^ options for assmebler
+        cmmOptions        :: [String],  -- ^ options for C-- compiler
         ccOptions         :: [String],  -- ^ options for C compiler
         cxxOptions        :: [String],  -- ^ options for C++ compiler
         ldOptions         :: [String],  -- ^ options for linker
         pkgconfigDepends  :: [PkgconfigDependency], -- ^ pkg-config packages that are used
         frameworks        :: [String], -- ^support frameworks for Mac OS X
         extraFrameworkDirs:: [String], -- ^ extra locations to find frameworks.
-        sSources          :: [FilePath], -- ^ Assembly files.
-        cmmSources        :: [FilePath], -- ^ CMM files.
+        asmSources        :: [FilePath], -- ^ Assembly files.
+        cmmSources        :: [FilePath], -- ^ C-- files.
         cSources          :: [FilePath],
         cxxSources        :: [FilePath],
         jsSources         :: [FilePath],
@@ -105,13 +107,15 @@ instance Monoid BuildInfo where
     buildTools          = [],
     buildToolDepends    = [],
     cppOptions          = [],
+    asmOptions          = [],
+    cmmOptions          = [],
     ccOptions           = [],
     cxxOptions          = [],
     ldOptions           = [],
     pkgconfigDepends    = [],
     frameworks          = [],
     extraFrameworkDirs  = [],
-    sSources            = [],
+    asmSources          = [],
     cmmSources          = [],
     cSources            = [],
     cxxSources          = [],
@@ -147,13 +151,15 @@ instance Semigroup BuildInfo where
     buildTools          = combine    buildTools,
     buildToolDepends    = combine    buildToolDepends,
     cppOptions          = combine    cppOptions,
+    asmOptions          = combine    asmOptions,
+    cmmOptions          = combine    cmmOptions,
     ccOptions           = combine    ccOptions,
     cxxOptions          = combine    cxxOptions,
     ldOptions           = combine    ldOptions,
     pkgconfigDepends    = combine    pkgconfigDepends,
     frameworks          = combineNub frameworks,
     extraFrameworkDirs  = combineNub extraFrameworkDirs,
-    sSources            = combineNub sSources,
+    asmSources          = combineNub asmSources,
     cmmSources          = combineNub cmmSources,
     cSources            = combineNub cSources,
     cxxSources          = combineNub cxxSources,
diff --git a/Cabal/Distribution/Types/BuildInfo/Lens.hs b/Cabal/Distribution/Types/BuildInfo/Lens.hs
index b859e087a80..680e77fef75 100644
--- a/Cabal/Distribution/Types/BuildInfo/Lens.hs
+++ b/Cabal/Distribution/Types/BuildInfo/Lens.hs
@@ -39,6 +39,14 @@ class HasBuildInfo a where
    cppOptions = buildInfo . cppOptions
    {-# INLINE cppOptions #-}
 
+   asmOptions :: Lens' a [String]
+   asmOptions = buildInfo . asmOptions
+   {-# INLINE asmOptions #-}
+
+   cmmOptions :: Lens' a [String]
+   cmmOptions = buildInfo . cmmOptions
+   {-# INLINE cmmOptions #-}
+
    ccOptions :: Lens' a [String]
    ccOptions = buildInfo . ccOptions
    {-# INLINE ccOptions #-}
@@ -63,6 +71,14 @@ class HasBuildInfo a where
    extraFrameworkDirs = buildInfo . extraFrameworkDirs
    {-# INLINE extraFrameworkDirs #-}
 
+   asmSources :: Lens' a [FilePath]
+   asmSources = buildInfo . asmSources
+   {-# INLINE asmSources #-}
+
+   cmmSources :: Lens' a [FilePath]
+   cmmSources = buildInfo . cmmSources
+   {-# INLINE cmmSources #-}
+
    cSources :: Lens' a [FilePath]
    cSources = buildInfo . cSources
    {-# INLINE cSources #-}
@@ -115,6 +131,10 @@ class HasBuildInfo a where
    extraGHCiLibs = buildInfo . extraGHCiLibs
    {-# INLINE extraGHCiLibs #-}
 
+   extraBundledLibs :: Lens' a [String]
+   extraBundledLibs = buildInfo . extraBundledLibs
+   {-# INLINE extraBundledLibs #-}
+
    extraLibDirs :: Lens' a [String]
    extraLibDirs = buildInfo . extraLibDirs
    {-# INLINE extraLibDirs #-}
@@ -176,6 +196,12 @@ instance HasBuildInfo BuildInfo where
     cppOptions f s = fmap (\x -> s { T.cppOptions = x }) (f (T.cppOptions s))
     {-# INLINE cppOptions #-}
 
+    asmOptions f s = fmap (\x -> s { T.asmOptions = x }) (f (T.asmOptions s))
+    {-# INLINE asmOptions #-}
+
+    cmmOptions f s = fmap (\x -> s { T.cmmOptions = x }) (f (T.cmmOptions s))
+    {-# INLINE cmmOptions #-}
+
     ccOptions f s = fmap (\x -> s { T.ccOptions = x }) (f (T.ccOptions s))
     {-# INLINE ccOptions #-}
 
@@ -194,6 +220,12 @@ instance HasBuildInfo BuildInfo where
     extraFrameworkDirs f s = fmap (\x -> s { T.extraFrameworkDirs = x }) (f (T.extraFrameworkDirs s))
     {-# INLINE extraFrameworkDirs #-}
 
+    asmSources f s = fmap (\x -> s { T.asmSources = x }) (f (T.asmSources s))
+    {-# INLINE asmSources #-}
+
+    cmmSources f s = fmap (\x -> s { T.cmmSources = x }) (f (T.cmmSources s))
+    {-# INLINE cmmSources #-}
+
     cSources f s = fmap (\x -> s { T.cSources = x }) (f (T.cSources s))
     {-# INLINE cSources #-}
 
@@ -233,6 +265,9 @@ instance HasBuildInfo BuildInfo where
     extraGHCiLibs f s = fmap (\x -> s { T.extraGHCiLibs = x }) (f (T.extraGHCiLibs s))
     {-# INLINE extraGHCiLibs #-}
 
+    extraBundledLibs f s = fmap (\x -> s { T.extraBundledLibs = x }) (f (T.extraBundledLibs s))
+    {-# INLINE extraBundledLibs #-}
+
     extraLibDirs f s = fmap (\x -> s { T.extraLibDirs = x }) (f (T.extraLibDirs s))
     {-# INLINE extraLibDirs #-}
 
diff --git a/Cabal/doc/developing-packages.rst b/Cabal/doc/developing-packages.rst
index 0f5e325a24a..5f485811865 100644
--- a/Cabal/doc/developing-packages.rst
+++ b/Cabal/doc/developing-packages.rst
@@ -2040,7 +2040,7 @@ system-dependent values for these fields.
     :pkg-field:`c-sources` field and vice-versa. The object files will be linked
     appropriately.
     
-.. pkg-field:: s-sources: filename list
+.. pkg-field:: asm-sources: filename list
 
     A list of assembly source files to be compiled and linked with the
     Haskell files.
diff --git a/Cabal/doc/installing-packages.rst b/Cabal/doc/installing-packages.rst
index 09ae44a1821..967fe27733d 100644
--- a/Cabal/doc/installing-packages.rst
+++ b/Cabal/doc/installing-packages.rst
@@ -1707,7 +1707,7 @@ this section will be available.
 The files placed in this distribution are the package description file,
 the setup script, the sources of the modules named in the package
 description file, and files named in the ``license-file``, ``main-is``,
-``c-sources``, ``s-sources``, ``cmm-sources``, ``js-sources``,
+``c-sources``, ``asm-sources``, ``cmm-sources``, ``js-sources``,
 ``data-files``, ``extra-source-files`` and ``extra-doc-files`` fields.
 
 This command takes the following option: