From bf32602db5770a312fe632b997ff9b7c7e4d0329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Hamb=C3=BCchen?= Date: Fri, 8 Nov 2019 21:30:49 +0100 Subject: [PATCH] Add field to to remember libs needed for fully static linking * WIP: Still need to update ghc to use the new `libraryDirsStatic` and `extraLibrariesStatic` fields in `InstalledPackageInfo` for linking. * WIP: Adding -L paths to .a libs in .conf files will likely increase nix closure size for dynamically linked Haskell packages because if pkg-config finds an `-a` file, the path to it will be remembered. (That only has an impact if the .a file is in a split-output from the .so file.) Perhaps we make the feature that `pkg-config --static` is called opt-outable. On the other hand Haskell libs always carry their .a files, so pulling a few system `.a` files more shouldn't make much of a difference. So this opt-out should probably be an extra feature for later, if at all. --- .../ParserTests/regressions/Octree-0.5.expr | 6 +++ .../regressions/common-conditional.expr | 16 +++++++ .../tests/ParserTests/regressions/common.expr | 4 ++ .../ParserTests/regressions/common2.expr | 16 +++++++ .../ParserTests/regressions/common3.expr | 4 ++ .../tests/ParserTests/regressions/elif.expr | 4 ++ .../tests/ParserTests/regressions/elif2.expr | 10 +++++ .../ParserTests/regressions/encoding-0.8.expr | 2 + .../ParserTests/regressions/generics-sop.expr | 14 ++++++ .../regressions/hidden-main-lib.expr | 2 + .../ParserTests/regressions/indentation.expr | 2 + .../ParserTests/regressions/indentation2.expr | 2 + .../ParserTests/regressions/indentation3.expr | 2 + .../ParserTests/regressions/issue-5055.expr | 6 +++ .../ParserTests/regressions/issue-774.expr | 2 + .../regressions/jaeger-flamegraph.expr | 6 +++ .../regressions/leading-comma-2.expr | 2 + .../regressions/leading-comma.expr | 2 + .../tests/ParserTests/regressions/libpq1.expr | 13 ++++++ .../tests/ParserTests/regressions/libpq2.expr | 13 ++++++ .../ParserTests/regressions/mixin-1.expr | 2 + .../ParserTests/regressions/mixin-2.expr | 2 + .../ParserTests/regressions/mixin-3.expr | 2 + .../regressions/multiple-libs-2.expr | 4 ++ .../ParserTests/regressions/noVersion.expr | 2 + .../regressions/nothing-unicode.expr | 4 ++ .../tests/ParserTests/regressions/shake.expr | 42 +++++++++++++++++ .../tests/ParserTests/regressions/spdx-1.expr | 2 + .../tests/ParserTests/regressions/spdx-2.expr | 2 + .../tests/ParserTests/regressions/spdx-3.expr | 2 + .../regressions/th-lift-instances.expr | 8 ++++ .../ParserTests/regressions/version-sets.expr | 2 + .../regressions/wl-pprint-indef.expr | 4 ++ .../Distribution/Utils/Structured.hs | 4 +- Cabal/src/Distribution/CabalSpecVersion.hs | 8 +++- .../Distribution/PackageDescription/Check.hs | 10 ++++- .../PackageDescription/FieldGrammar.hs | 4 ++ Cabal/src/Distribution/Simple/Configure.hs | 45 +++++++++++-------- Cabal/src/Distribution/Simple/GHC.hs | 18 ++++++-- Cabal/src/Distribution/Simple/GHC/Internal.hs | 1 + Cabal/src/Distribution/Simple/PreProcess.hs | 23 ++++++++-- .../src/Distribution/Simple/Program/HcPkg.hs | 1 + Cabal/src/Distribution/Simple/Register.hs | 12 +++++ Cabal/src/Distribution/Simple/Setup.hs | 9 ++++ Cabal/src/Distribution/Types/BuildInfo.hs | 6 +++ .../src/Distribution/Types/BuildInfo/Lens.hs | 14 ++++++ .../Types/InstalledPackageInfo.hs | 4 ++ .../InstalledPackageInfo/FieldGrammar.hs | 2 + .../Types/InstalledPackageInfo/Lens.hs | 8 ++++ .../src/Distribution/Client/Config.hs | 3 ++ .../Client/ProjectConfig/Legacy.hs | 7 +++ .../Client/ProjectConfig/Types.hs | 1 + .../Distribution/Client/ProjectPlanning.hs | 2 + .../Client/ProjectPlanning/Types.hs | 1 + .../src/Distribution/Client/Setup.hs | 8 +++- .../Distribution/Client/ProjectConfig.hs | 7 ++- doc/cabal-package.rst | 16 ++++++- doc/file-format-changelog.rst | 15 +++++++ 58 files changed, 399 insertions(+), 36 deletions(-) diff --git a/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr b/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr index 5e85f4dd1ee..30e676cff11 100644 --- a/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr +++ b/Cabal-tests/tests/ParserTests/regressions/Octree-0.5.expr @@ -44,8 +44,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -140,8 +142,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -245,8 +249,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr b/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr index 76ad95064a5..b2cca2ada9b 100644 --- a/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr +++ b/Cabal-tests/tests/ParserTests/regressions/common-conditional.expr @@ -45,8 +45,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -131,8 +133,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -214,8 +218,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -281,8 +287,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -358,8 +366,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -437,8 +447,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -524,8 +536,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -608,8 +622,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/common.expr b/Cabal-tests/tests/ParserTests/regressions/common.expr index 2d84ad0bb86..0273441bfdc 100644 --- a/Cabal-tests/tests/ParserTests/regressions/common.expr +++ b/Cabal-tests/tests/ParserTests/regressions/common.expr @@ -34,8 +34,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -100,8 +102,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/common2.expr b/Cabal-tests/tests/ParserTests/regressions/common2.expr index 5da11ec118e..611ad39242c 100644 --- a/Cabal-tests/tests/ParserTests/regressions/common2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/common2.expr @@ -41,8 +41,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -121,8 +123,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -213,8 +217,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -295,8 +301,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -391,8 +399,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -470,8 +480,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -543,8 +555,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -618,8 +632,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/common3.expr b/Cabal-tests/tests/ParserTests/regressions/common3.expr index 1bb9c67a6ec..d4ce4267c9b 100644 --- a/Cabal-tests/tests/ParserTests/regressions/common3.expr +++ b/Cabal-tests/tests/ParserTests/regressions/common3.expr @@ -34,8 +34,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -110,8 +112,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/elif.expr b/Cabal-tests/tests/ParserTests/regressions/elif.expr index 311032fd1c6..b9ea1f18bc9 100644 --- a/Cabal-tests/tests/ParserTests/regressions/elif.expr +++ b/Cabal-tests/tests/ParserTests/regressions/elif.expr @@ -41,8 +41,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -108,8 +110,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/elif2.expr b/Cabal-tests/tests/ParserTests/regressions/elif2.expr index 5f0ab651fdc..b4e7be7dc75 100644 --- a/Cabal-tests/tests/ParserTests/regressions/elif2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/elif2.expr @@ -39,8 +39,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -108,8 +110,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -175,8 +179,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -244,8 +250,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -311,8 +319,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr b/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr index 5d89604a565..f5447429927 100644 --- a/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr +++ b/Cabal-tests/tests/ParserTests/regressions/encoding-0.8.expr @@ -36,8 +36,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr b/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr index 6f1a7dab725..dfddaf29a02 100644 --- a/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr +++ b/Cabal-tests/tests/ParserTests/regressions/generics-sop.expr @@ -47,8 +47,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -150,8 +152,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -242,8 +246,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -308,8 +314,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -440,8 +448,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "src"], hsc2hsOptions = [], @@ -563,8 +573,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "test"], hsc2hsOptions = [], @@ -650,8 +662,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "test"], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr b/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr index 6a7484dc428..bcb1f1f5bbb 100644 --- a/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr +++ b/Cabal-tests/tests/ParserTests/regressions/hidden-main-lib.expr @@ -34,8 +34,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/indentation.expr b/Cabal-tests/tests/ParserTests/regressions/indentation.expr index 10464b3cf75..2b747fd1b8e 100644 --- a/Cabal-tests/tests/ParserTests/regressions/indentation.expr +++ b/Cabal-tests/tests/ParserTests/regressions/indentation.expr @@ -31,8 +31,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/indentation2.expr b/Cabal-tests/tests/ParserTests/regressions/indentation2.expr index cc3109b05b1..56f23f26d0e 100644 --- a/Cabal-tests/tests/ParserTests/regressions/indentation2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/indentation2.expr @@ -31,8 +31,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/indentation3.expr b/Cabal-tests/tests/ParserTests/regressions/indentation3.expr index 1d7fbe36a65..f7ed51e79fa 100644 --- a/Cabal-tests/tests/ParserTests/regressions/indentation3.expr +++ b/Cabal-tests/tests/ParserTests/regressions/indentation3.expr @@ -31,8 +31,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr b/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr index 6467cef7027..96577831b36 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr +++ b/Cabal-tests/tests/ParserTests/regressions/issue-5055.expr @@ -34,8 +34,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -106,8 +108,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -173,8 +177,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/issue-774.expr b/Cabal-tests/tests/ParserTests/regressions/issue-774.expr index 849934afd46..af63d8cd9f0 100644 --- a/Cabal-tests/tests/ParserTests/regressions/issue-774.expr +++ b/Cabal-tests/tests/ParserTests/regressions/issue-774.expr @@ -31,8 +31,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr b/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr index 0fa6290b549..51b6add00d7 100644 --- a/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr +++ b/Cabal-tests/tests/ParserTests/regressions/jaeger-flamegraph.expr @@ -63,8 +63,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "exe"], hsc2hsOptions = [], @@ -213,8 +215,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "library"], hsc2hsOptions = [], @@ -329,8 +333,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "test"], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr b/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr index ff7cc10a92f..6fc8dafb3e8 100644 --- a/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/leading-comma-2.expr @@ -61,8 +61,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr b/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr index 31ec5da467e..c813d8b5668 100644 --- a/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr +++ b/Cabal-tests/tests/ParserTests/regressions/leading-comma.expr @@ -54,8 +54,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/libpq1.expr b/Cabal-tests/tests/ParserTests/regressions/libpq1.expr index 58d89e9003e..cad1cfc69bf 100644 --- a/Cabal-tests/tests/ParserTests/regressions/libpq1.expr +++ b/Cabal-tests/tests/ParserTests/regressions/libpq1.expr @@ -49,8 +49,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -143,8 +145,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -231,6 +235,7 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = ["crypto", "ssl"], @@ -293,6 +298,7 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = ["pq"], frameworks = [], @@ -356,6 +362,7 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = ["libpq"], frameworks = [], @@ -417,8 +424,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -480,8 +489,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -566,8 +577,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "src"], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/libpq2.expr b/Cabal-tests/tests/ParserTests/regressions/libpq2.expr index 0df92cdbaba..a5917a6a6c5 100644 --- a/Cabal-tests/tests/ParserTests/regressions/libpq2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/libpq2.expr @@ -49,8 +49,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -143,8 +145,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -231,6 +235,7 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = ["crypto", "ssl"], @@ -293,6 +298,7 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = ["pq"], frameworks = [], @@ -356,6 +362,7 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = ["libpq"], frameworks = [], @@ -417,8 +424,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -480,8 +489,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -566,8 +577,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "src"], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr b/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr index a0c7511608f..2878577225b 100644 --- a/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr +++ b/Cabal-tests/tests/ParserTests/regressions/mixin-1.expr @@ -40,8 +40,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "str-example"], diff --git a/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr b/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr index e000a7f239f..b2866d4a5e0 100644 --- a/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/mixin-2.expr @@ -40,8 +40,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "str-example"], diff --git a/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr b/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr index 2e6dac9296f..1a02247a87a 100644 --- a/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr +++ b/Cabal-tests/tests/ParserTests/regressions/mixin-3.expr @@ -40,8 +40,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "str-example"], diff --git a/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr b/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr index 42ac4c64375..2af5d422e3b 100644 --- a/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/multiple-libs-2.expr @@ -34,8 +34,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -100,8 +102,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/noVersion.expr b/Cabal-tests/tests/ParserTests/regressions/noVersion.expr index da99086255d..e96ca1efb35 100644 --- a/Cabal-tests/tests/ParserTests/regressions/noVersion.expr +++ b/Cabal-tests/tests/ParserTests/regressions/noVersion.expr @@ -34,8 +34,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr b/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr index fdffa0b9fb4..650054bcf00 100644 --- a/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr +++ b/Cabal-tests/tests/ParserTests/regressions/nothing-unicode.expr @@ -35,8 +35,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -96,8 +98,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/shake.expr b/Cabal-tests/tests/ParserTests/regressions/shake.expr index dc219b0292a..36f522c82df 100644 --- a/Cabal-tests/tests/ParserTests/regressions/shake.expr +++ b/Cabal-tests/tests/ParserTests/regressions/shake.expr @@ -33,8 +33,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -110,8 +112,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -177,8 +181,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -248,8 +254,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -313,8 +321,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -383,8 +393,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -517,8 +529,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "src"], hsc2hsOptions = [], @@ -829,8 +843,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -898,8 +914,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -971,8 +989,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1038,8 +1058,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1110,8 +1132,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1247,8 +1271,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath ".", SymbolicPath "src"], @@ -1505,8 +1531,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1572,8 +1600,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1651,8 +1681,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1721,8 +1753,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1795,8 +1829,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1863,8 +1899,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -1936,8 +1974,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -2073,8 +2113,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "src"], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr b/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr index 43f81a8004d..29b85215c1a 100644 --- a/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr +++ b/Cabal-tests/tests/ParserTests/regressions/spdx-1.expr @@ -31,8 +31,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr b/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr index 196b6cef66f..427f0eb21ca 100644 --- a/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr +++ b/Cabal-tests/tests/ParserTests/regressions/spdx-2.expr @@ -31,8 +31,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr b/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr index 0a21b1ee8c2..b7b57e34bf1 100644 --- a/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr +++ b/Cabal-tests/tests/ParserTests/regressions/spdx-3.expr @@ -31,8 +31,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr b/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr index 16d2c357afe..5d8fb72de88 100644 --- a/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr +++ b/Cabal-tests/tests/ParserTests/regressions/th-lift-instances.expr @@ -68,8 +68,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "src"], hsc2hsOptions = [], @@ -238,8 +240,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "tests"], @@ -387,8 +391,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], @@ -464,8 +470,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "tests"], diff --git a/Cabal-tests/tests/ParserTests/regressions/version-sets.expr b/Cabal-tests/tests/ParserTests/regressions/version-sets.expr index decaa04d168..f3c993b7b7b 100644 --- a/Cabal-tests/tests/ParserTests/regressions/version-sets.expr +++ b/Cabal-tests/tests/ParserTests/regressions/version-sets.expr @@ -84,8 +84,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr b/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr index 6eca1adc1b8..edbbeed7483 100644 --- a/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr +++ b/Cabal-tests/tests/ParserTests/regressions/wl-pprint-indef.expr @@ -40,8 +40,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [SymbolicPath "example-string"], @@ -128,8 +130,10 @@ GenericPackageDescription extraFrameworkDirs = [], extraGHCiLibs = [], extraLibDirs = [], + extraLibDirsStatic = [], extraLibFlavours = [], extraLibs = [], + extraLibsStatic = [], frameworks = [], hsSourceDirs = [], hsc2hsOptions = [], diff --git a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs index 80b9c341676..1d715af86e9 100644 --- a/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs +++ b/Cabal-tests/tests/UnitTests/Distribution/Utils/Structured.hs @@ -27,9 +27,9 @@ tests = testGroup "Distribution.Utils.Structured" -- The difference is in encoding of newtypes #if MIN_VERSION_base(4,7,0) , testCase "GenericPackageDescription" $ - md5Check (Proxy :: Proxy GenericPackageDescription) 0x9b7d0415b1d2522d72ac9e9739c97574 + md5Check (Proxy :: Proxy GenericPackageDescription) 0xa164cbe5092a1cd31da1f15358d1537a , testCase "LocalBuildInfo" $ - md5Check (Proxy :: Proxy LocalBuildInfo) 0x9da2b93b62f2108858322770734daf31 + md5Check (Proxy :: Proxy LocalBuildInfo) 0xac70971ea59d30aab7e4b6dafc9113d4 #endif ] diff --git a/Cabal/src/Distribution/CabalSpecVersion.hs b/Cabal/src/Distribution/CabalSpecVersion.hs index 5e4345bdc59..142ade373c4 100644 --- a/Cabal/src/Distribution/CabalSpecVersion.hs +++ b/Cabal/src/Distribution/CabalSpecVersion.hs @@ -29,6 +29,7 @@ data CabalSpecVersion -- 3.2: no changes | CabalSpecV3_4 | CabalSpecV3_6 + | CabalSpecV3_8 deriving (Eq, Ord, Show, Read, Enum, Bounded, Typeable, Data, Generic) instance Binary CabalSpecVersion @@ -39,6 +40,7 @@ instance NFData CabalSpecVersion where rnf = genericRnf -- -- @since 3.0.0.0 showCabalSpecVersion :: CabalSpecVersion -> String +showCabalSpecVersion CabalSpecV3_8 = "3.8" showCabalSpecVersion CabalSpecV3_6 = "3.6" showCabalSpecVersion CabalSpecV3_4 = "3.4" showCabalSpecVersion CabalSpecV3_0 = "3.0" @@ -58,7 +60,7 @@ showCabalSpecVersion CabalSpecV1_2 = "1.2" showCabalSpecVersion CabalSpecV1_0 = "1.0" cabalSpecLatest :: CabalSpecVersion -cabalSpecLatest = CabalSpecV3_6 +cabalSpecLatest = CabalSpecV3_8 -- | Parse 'CabalSpecVersion' from version digits. -- @@ -66,6 +68,7 @@ cabalSpecLatest = CabalSpecV3_6 -- cabalSpecFromVersionDigits :: [Int] -> Maybe CabalSpecVersion cabalSpecFromVersionDigits v + | v == [3,8] = Just CabalSpecV3_8 | v == [3,6] = Just CabalSpecV3_6 | v == [3,4] = Just CabalSpecV3_4 | v == [3,0] = Just CabalSpecV3_0 @@ -87,6 +90,7 @@ cabalSpecFromVersionDigits v -- | @since 3.4.0.0 cabalSpecToVersionDigits :: CabalSpecVersion -> [Int] +cabalSpecToVersionDigits CabalSpecV3_8 = [3,8] cabalSpecToVersionDigits CabalSpecV3_6 = [3,6] cabalSpecToVersionDigits CabalSpecV3_4 = [3,4] cabalSpecToVersionDigits CabalSpecV3_0 = [3,0] @@ -131,7 +135,7 @@ specHasCommonStanzas v = else NoCommonStanzas specHasElif :: CabalSpecVersion -> HasElif -specHasElif v = +specHasElif v = if v >= CabalSpecV2_2 then HasElif else NoElif diff --git a/Cabal/src/Distribution/PackageDescription/Check.hs b/Cabal/src/Distribution/PackageDescription/Check.hs index 55d301867e1..d0f5fa1462d 100644 --- a/Cabal/src/Distribution/PackageDescription/Check.hs +++ b/Cabal/src/Distribution/PackageDescription/Check.hs @@ -915,9 +915,15 @@ checkGhcOptions fieldName getOptions pkg = , checkAlternatives fieldName "extra-libraries" [ (flag, lib) | flag@('-':'l':lib) <- all_ghc_options ] + , checkAlternatives fieldName "extra-libraries-static" + [ (flag, lib) | flag@('-':'l':lib) <- all_ghc_options ] + , checkAlternatives fieldName "extra-lib-dirs" [ (flag, dir) | flag@('-':'L':dir) <- all_ghc_options ] + , checkAlternatives fieldName "extra-lib-dirs-static" + [ (flag, dir) | flag@('-':'L':dir) <- all_ghc_options ] + , checkAlternatives fieldName "frameworks" [ (flag, fmwk) | (flag@"-framework", fmwk) <- zip all_ghc_options (safeTail all_ghc_options) ] @@ -1154,7 +1160,8 @@ checkPaths pkg = absPaths = concat [ [ (path, "includes", PathKindFile) | path <- includes bi ] ++ [ (path, "include-dirs", PathKindDirectory) | path <- includeDirs bi ] ++ - [ (path, "extra-lib-dirs", PathKindDirectory) | path <- extraLibDirs bi ] + [ (path, "extra-lib-dirs", PathKindDirectory) | path <- extraLibDirs bi ] ++ + [ (path, "extra-lib-dirs-static", PathKindDirectory) | path <- extraLibDirsStatic bi ] | bi <- allBuildInfo pkg ] @@ -1918,6 +1925,7 @@ checkLocalPathsExist ops pkg = do | bi <- allBuildInfo pkg , (dir, kind) <- [ (dir, "extra-lib-dirs") | dir <- extraLibDirs bi ] + ++ [ (dir, "extra-lib-dirs-static") | dir <- extraLibDirsStatic bi ] ++ [ (dir, "extra-framework-dirs") | dir <- extraFrameworkDirs bi ] ++ [ (dir, "include-dirs") | dir <- includeDirs bi ] diff --git a/Cabal/src/Distribution/PackageDescription/FieldGrammar.hs b/Cabal/src/Distribution/PackageDescription/FieldGrammar.hs index ee0ce41a459..cf6f0536b04 100644 --- a/Cabal/src/Distribution/PackageDescription/FieldGrammar.hs +++ b/Cabal/src/Distribution/PackageDescription/FieldGrammar.hs @@ -561,12 +561,16 @@ buildInfoFieldGrammar = BuildInfo ^^^ removedIn CabalSpecV3_0 "Please use 'default-extensions' or 'other-extensions' fields." <*> monoidalFieldAla "extra-libraries" (alaList' VCat Token) L.extraLibs + <*> monoidalFieldAla "extra-libraries-static" (alaList' VCat Token) L.extraLibsStatic + ^^^ availableSince CabalSpecV3_8 [] <*> monoidalFieldAla "extra-ghci-libraries" (alaList' VCat Token) L.extraGHCiLibs <*> monoidalFieldAla "extra-bundled-libraries" (alaList' VCat Token) L.extraBundledLibs <*> monoidalFieldAla "extra-library-flavours" (alaList' VCat Token) L.extraLibFlavours <*> monoidalFieldAla "extra-dynamic-library-flavours" (alaList' VCat Token) L.extraDynLibFlavours ^^^ availableSince CabalSpecV3_0 [] <*> monoidalFieldAla "extra-lib-dirs" (alaList' FSep FilePathNT) L.extraLibDirs + <*> monoidalFieldAla "extra-lib-dirs-static" (alaList' FSep FilePathNT) L.extraLibDirsStatic + ^^^ availableSince CabalSpecV3_8 [] <*> monoidalFieldAla "include-dirs" (alaList' FSep FilePathNT) L.includeDirs <*> monoidalFieldAla "includes" (alaList' FSep FilePathNT) L.includes <*> monoidalFieldAla "autogen-includes" (alaList' FSep FilePathNT) L.autogenIncludes diff --git a/Cabal/src/Distribution/Simple/Configure.hs b/Cabal/src/Distribution/Simple/Configure.hs index ea157a4d819..cf02b58d942 100644 --- a/Cabal/src/Distribution/Simple/Configure.hs +++ b/Cabal/src/Distribution/Simple/Configure.hs @@ -574,15 +574,8 @@ configure (pkg_descr0, pbi) cfg = do configureAllKnownPrograms (lessVerbose verbosity) programDb >>= configureRequiredPrograms verbosity requiredBuildTools - let withFullyStaticExe_ = fromFlag $ configFullyStaticExe cfg - (pkg_descr', programDb'') <- - configurePkgconfigPackages - verbosity - pkg_descr - programDb' - enabled - withFullyStaticExe_ + configurePkgconfigPackages verbosity pkg_descr programDb' enabled -- Compute internal component graph -- @@ -685,6 +678,8 @@ configure (pkg_descr0, pbi) cfg = do withDynExe_ = fromFlag $ configDynExe cfg + withFullyStaticExe_ = fromFlag $ configFullyStaticExe cfg + when (withDynExe_ && not withSharedLib_) $ warn verbosity $ "Executables will use dynamic linking, but a shared library " ++ "is not being built. Linking will fail if any executables " @@ -1017,6 +1012,7 @@ configureFinalizedPackage verbosity cfg enabled where addExtraIncludeLibDirs pkg_descr = let extraBi = mempty { extraLibDirs = configExtraLibDirs cfg + , extraLibDirsStatic = configExtraLibDirsStatic cfg , extraFrameworkDirs = configExtraFrameworkDirs cfg , includeDirs = configExtraIncludeDirs cfg} modifyLib l = l{ libBuildInfo = libBuildInfo l @@ -1568,9 +1564,8 @@ configureRequiredProgram verbosity progdb configurePkgconfigPackages :: Verbosity -> PackageDescription -> ProgramDb -> ComponentRequestedSpec - -> Bool -> IO (PackageDescription, ProgramDb) -configurePkgconfigPackages verbosity pkg_descr progdb enabled fullyStatic +configurePkgconfigPackages verbosity pkg_descr progdb enabled | null allpkgs = return (pkg_descr, progdb) | otherwise = do (_, _, progdb') <- requireProgramVersion @@ -1644,8 +1639,9 @@ configurePkgconfigPackages verbosity pkg_descr progdb enabled fullyStatic pkgconfigBuildInfo pkgdeps = do let pkgs = nub [ prettyShow pkg | PkgconfigDependency pkg _ <- pkgdeps ] ccflags <- pkgconfig ("--cflags" : pkgs) - ldflags <- pkgconfig ("--libs" : (["--static" | fullyStatic] ++ pkgs)) - return (ccLdOptionsBuildInfo (words ccflags) (words ldflags)) + ldflags <- pkgconfig ("--libs" : pkgs) + ldflags_static <- pkgconfig ("--libs" : "--static" : pkgs) + return (ccLdOptionsBuildInfo (words ccflags) (words ldflags) (words ldflags_static)) -- | Makes a 'BuildInfo' from C compiler and linker flags. -- @@ -1655,17 +1651,22 @@ configurePkgconfigPackages verbosity pkg_descr progdb enabled fullyStatic -- -- > ccflags <- getDbProgramOutput verbosity prog progdb ["--cflags"] -- > ldflags <- getDbProgramOutput verbosity prog progdb ["--libs"] --- > return (ccldOptionsBuildInfo (words ccflags) (words ldflags)) +-- > ldflags_static <- getDbProgramOutput verbosity prog progdb ["--libs", "--static"] +-- > return (ccldOptionsBuildInfo (words ccflags) (words ldflags) (words ldflags_static)) -- -ccLdOptionsBuildInfo :: [String] -> [String] -> BuildInfo -ccLdOptionsBuildInfo cflags ldflags = +ccLdOptionsBuildInfo :: [String] -> [String] -> [String] -> BuildInfo +ccLdOptionsBuildInfo cflags ldflags ldflags_static = let (includeDirs', cflags') = partition ("-I" `isPrefixOf`) cflags (extraLibs', ldflags') = partition ("-l" `isPrefixOf`) ldflags (extraLibDirs', ldflags'') = partition ("-L" `isPrefixOf`) ldflags' + (extraLibsStatic') = filter ("-l" `isPrefixOf`) ldflags_static + (extraLibDirsStatic') = filter ("-L" `isPrefixOf`) ldflags_static in mempty { includeDirs = map (drop 2) includeDirs', extraLibs = map (drop 2) extraLibs', extraLibDirs = map (drop 2) extraLibDirs', + extraLibsStatic = map (drop 2) extraLibsStatic', + extraLibDirsStatic = map (drop 2) extraLibDirsStatic', ccOptions = cflags', ldOptions = ldflags'' } @@ -1714,7 +1715,10 @@ checkForeignDeps pkg lbi verbosity = explainErrors missingHdr missingLibs) where allHeaders = collectField includes - allLibs = collectField extraLibs + allLibs = collectField $ + if withFullyStaticExe lbi + then extraLibsStatic + else extraLibs ifBuildsWith headers args success failure = do checkDuplicateHeaders @@ -1817,12 +1821,17 @@ checkForeignDeps pkg lbi verbosity = , opt <- IPI.ccOptions dep ] commonLdArgs = [ "-L" ++ dir - | dir <- ordNub (collectField extraLibDirs) ] + | dir <- ordNub $ collectField (if withFullyStaticExe lbi + then extraLibDirsStatic + else extraLibDirs + ) ] ++ collectField ldOptions ++ [ "-L" ++ dir | dir <- ordNub [ dir | dep <- deps - , dir <- IPI.libraryDirs dep ] + , dir <- if withFullyStaticExe lbi + then IPI.libraryDirsStatic dep + else IPI.libraryDirs dep ] ] --TODO: do we also need dependent packages' ld options? makeLdArgs libs = [ "-l"++lib | lib <- libs ] ++ commonLdArgs diff --git a/Cabal/src/Distribution/Simple/GHC.hs b/Cabal/src/Distribution/Simple/GHC.hs index 070115f2792..01a4d56e734 100644 --- a/Cabal/src/Distribution/Simple/GHC.hs +++ b/Cabal/src/Distribution/Simple/GHC.hs @@ -593,8 +593,13 @@ buildOrReplLib mReplFlags verbosity numJobs pkg_descr lbi lib clbi = do -- through to GHC's linker. ++ maybe [] programOverrideArgs (lookupProgram ldProgram (withPrograms lbi)), - ghcOptLinkLibs = extraLibs libBi, - ghcOptLinkLibPath = toNubListR $ extraLibDirs libBi, + ghcOptLinkLibs = if withFullyStaticExe lbi + then extraLibsStatic libBi + else extraLibs libBi, + ghcOptLinkLibPath = toNubListR $ + if withFullyStaticExe lbi + then extraLibDirsStatic libBi + else extraLibDirs libBi, ghcOptLinkFrameworks = toNubListR $ PD.frameworks libBi, ghcOptLinkFrameworkDirs = toNubListR $ PD.extraFrameworkDirs libBi, @@ -1356,8 +1361,13 @@ gbuild verbosity numJobs pkg_descr lbi bm clbi = do -- through to GHC's linker. ++ maybe [] programOverrideArgs (lookupProgram ldProgram (withPrograms lbi)), - ghcOptLinkLibs = extraLibs bnfo, - ghcOptLinkLibPath = toNubListR $ extraLibDirs bnfo, + ghcOptLinkLibs = if withFullyStaticExe lbi + then extraLibsStatic bnfo + else extraLibs bnfo, + ghcOptLinkLibPath = toNubListR $ + if withFullyStaticExe lbi + then extraLibDirsStatic bnfo + else extraLibDirs bnfo, ghcOptLinkFrameworks = toNubListR $ PD.frameworks bnfo, ghcOptLinkFrameworkDirs = toNubListR $ diff --git a/Cabal/src/Distribution/Simple/GHC/Internal.hs b/Cabal/src/Distribution/Simple/GHC/Internal.hs index 8ff5f24091b..d81a5a5295b 100644 --- a/Cabal/src/Distribution/Simple/GHC/Internal.hs +++ b/Cabal/src/Distribution/Simple/GHC/Internal.hs @@ -536,6 +536,7 @@ substTopDir topDir ipo = ipo { IPI.importDirs = map f (IPI.importDirs ipo), IPI.libraryDirs = map f (IPI.libraryDirs ipo), + IPI.libraryDirsStatic = map f (IPI.libraryDirsStatic ipo), IPI.includeDirs = map f (IPI.includeDirs ipo), IPI.frameworkDirs = map f (IPI.frameworkDirs ipo), IPI.haddockInterfaces = map f (IPI.haddockInterfaces ipo), diff --git a/Cabal/src/Distribution/Simple/PreProcess.hs b/Cabal/src/Distribution/Simple/PreProcess.hs index be360263b1a..e780aa835f7 100644 --- a/Cabal/src/Distribution/Simple/PreProcess.hs +++ b/Cabal/src/Distribution/Simple/PreProcess.hs @@ -468,9 +468,19 @@ ppHsc2hs bi lbi clbi = [ "-I" ++ autogenComponentModulesDir lbi clbi, "-I" ++ autogenPackageModulesDir lbi, "-include", autogenComponentModulesDir lbi clbi cppHeaderName ] ] - ++ [ "--lflag=-L" ++ opt | opt <- PD.extraLibDirs bi ] - ++ [ "--lflag=-Wl,-R," ++ opt | isELF - , opt <- PD.extraLibDirs bi ] + ++ [ "--lflag=-L" ++ opt + | opt <- + if withFullyStaticExe lbi + then PD.extraLibDirsStatic bi + else PD.extraLibDirs bi + ] + ++ [ "--lflag=-Wl,-R," ++ opt + | isELF + , opt <- + if withFullyStaticExe lbi + then PD.extraLibDirsStatic bi + else PD.extraLibDirs bi + ] ++ [ "--lflag=-l" ++ opt | opt <- PD.extraLibs bi ] ++ [ "--lflag=" ++ opt | opt <- PD.ldOptions bi ] @@ -484,7 +494,12 @@ ppHsc2hs bi lbi clbi = , opt <- [ "-L" ++ opt | opt <- Installed.libraryDirs pkg ] ++ [ "-Wl,-R," ++ opt | isELF , opt <- Installed.libraryDirs pkg ] - ++ [ "-l" ++ opt | opt <- Installed.extraLibraries pkg ] + ++ [ "-l" ++ opt + | opt <- + if withFullyStaticExe lbi + then Installed.extraLibrariesStatic pkg + else Installed.extraLibraries pkg + ] ++ [ opt | opt <- Installed.ldOptions pkg ] ] ++ preccldFlags ++ hsc2hsOptions bi diff --git a/Cabal/src/Distribution/Simple/Program/HcPkg.hs b/Cabal/src/Distribution/Simple/Program/HcPkg.hs index 3f254c6c335..1a3e3258e8f 100644 --- a/Cabal/src/Distribution/Simple/Program/HcPkg.hs +++ b/Cabal/src/Distribution/Simple/Program/HcPkg.hs @@ -314,6 +314,7 @@ mungePackagePaths pkgroot pkginfo = importDirs = mungePaths (importDirs pkginfo), includeDirs = mungePaths (includeDirs pkginfo), libraryDirs = mungePaths (libraryDirs pkginfo), + libraryDirsStatic = mungePaths (libraryDirsStatic pkginfo), libraryDynDirs = mungePaths (libraryDynDirs pkginfo), frameworkDirs = mungePaths (frameworkDirs pkginfo), haddockInterfaces = mungePaths (haddockInterfaces pkginfo), diff --git a/Cabal/src/Distribution/Simple/Register.hs b/Cabal/src/Distribution/Simple/Register.hs index 980884ad2e4..4a8faaeeeb3 100644 --- a/Cabal/src/Distribution/Simple/Register.hs +++ b/Cabal/src/Distribution/Simple/Register.hs @@ -425,12 +425,14 @@ generalInstalledPackageInfo adjustRelIncDirs pkg abi_hash lib lbi clbi installDi IPI.trusted = IPI.trusted IPI.emptyInstalledPackageInfo, IPI.importDirs = [ libdir installDirs | hasModules ], IPI.libraryDirs = libdirs, + IPI.libraryDirsStatic = libdirsStatic, IPI.libraryDynDirs = dynlibdirs, IPI.dataDir = datadir installDirs, IPI.hsLibraries = (if hasLibrary then [getHSLibraryName (componentUnitId clbi)] else []) ++ extraBundledLibs bi, IPI.extraLibraries = extraLibs bi, + IPI.extraLibrariesStatic = extraLibsStatic bi, IPI.extraGHCiLibraries = extraGHCiLibs bi, IPI.includeDirs = absinc ++ adjustRelIncDirs relinc, IPI.includes = includes bi, @@ -467,6 +469,16 @@ generalInstalledPackageInfo adjustRelIncDirs pkg abi_hash lib lbi clbi installDi || (not (null (jsSources bi)) && compilerFlavor comp == GHCJS)) && not (componentIsIndefinite clbi) + libdirsStatic + | hasLibrary = libdir installDirs : extraLibDirsStaticOrFallback + | otherwise = extraLibDirsStaticOrFallback + where + -- If no static library dirs were given, the package likely makes no + -- distinction between fully static linking and otherwise. + -- Fall back to the normal library dirs in that case. + extraLibDirsStaticOrFallback = case extraLibDirsStatic bi of + [] -> extraLibDirs bi + dirs -> dirs (libdirs, dynlibdirs) | not hasLibrary = (extraLibDirs bi, []) diff --git a/Cabal/src/Distribution/Simple/Setup.hs b/Cabal/src/Distribution/Simple/Setup.hs index 92c4a842697..7a9080c18e3 100644 --- a/Cabal/src/Distribution/Simple/Setup.hs +++ b/Cabal/src/Distribution/Simple/Setup.hs @@ -231,6 +231,9 @@ data ConfigFlags = ConfigFlags { -- paths configScratchDir :: Flag FilePath, configExtraLibDirs :: [FilePath], -- ^ path to search for extra libraries + configExtraLibDirsStatic :: [FilePath], -- ^ path to search for extra + -- libraries when linking + -- fully static executables configExtraFrameworkDirs :: [FilePath], -- ^ path to search for extra -- frameworks (OS X only) configExtraIncludeDirs :: [FilePath], -- ^ path to search for header files @@ -315,6 +318,7 @@ instance Eq ConfigFlags where && equal configInstallDirs && equal configScratchDir && equal configExtraLibDirs + && equal configExtraLibDirsStatic && equal configExtraIncludeDirs && equal configIPID && equal configDeterministic @@ -633,6 +637,11 @@ configureOptions showOrParseArgs = configExtraLibDirs (\v flags -> flags {configExtraLibDirs = v}) (reqArg' "PATH" (\x -> [x]) id) + ,option "" ["extra-lib-dirs-static"] + "A list of directories to search for external libraries when linking fully static executables" + configExtraLibDirsStatic (\v flags -> flags {configExtraLibDirsStatic = v}) + (reqArg' "PATH" (\x -> [x]) id) + ,option "" ["extra-framework-dirs"] "A list of directories to search for external frameworks (OS X only)" configExtraFrameworkDirs diff --git a/Cabal/src/Distribution/Types/BuildInfo.hs b/Cabal/src/Distribution/Types/BuildInfo.hs index 4975b178cbb..979dce35db6 100644 --- a/Cabal/src/Distribution/Types/BuildInfo.hs +++ b/Cabal/src/Distribution/Types/BuildInfo.hs @@ -78,6 +78,7 @@ data BuildInfo = BuildInfo { oldExtensions :: [Extension], -- ^ the old extensions field, treated same as 'defaultExtensions' extraLibs :: [String], -- ^ what libraries to link with when compiling a program that uses your package + extraLibsStatic :: [String], -- ^ what libraries to link with when compiling a program fully statically that uses your package extraGHCiLibs :: [String], -- ^ if present, overrides extraLibs when package is loaded with GHCi. extraBundledLibs :: [String], -- ^ if present, adds libs to hs-libraries, which become part of the package. -- Example: the Cffi library shipping with the rts, alognside the HSrts-1.0.a,.o,... @@ -94,6 +95,7 @@ data BuildInfo = BuildInfo { -- libraries when copying. This is particularly useful with the `rts` package, -- where we want different dynamic flavours of the RTS library to be installed. extraLibDirs :: [String], + extraLibDirsStatic :: [String], includeDirs :: [FilePath], -- ^directories to find .h files includes :: [FilePath], -- ^ The .h files to be found in includeDirs autogenIncludes :: [FilePath], -- ^ The .h files to be generated (e.g. by @autoconf@) @@ -144,11 +146,13 @@ instance Monoid BuildInfo where otherExtensions = [], oldExtensions = [], extraLibs = [], + extraLibsStatic = [], extraGHCiLibs = [], extraBundledLibs = [], extraLibFlavours = [], extraDynLibFlavours = [], extraLibDirs = [], + extraLibDirsStatic = [], includeDirs = [], includes = [], autogenIncludes = [], @@ -193,11 +197,13 @@ instance Semigroup BuildInfo where otherExtensions = combineNub otherExtensions, oldExtensions = combineNub oldExtensions, extraLibs = combine extraLibs, + extraLibsStatic = combine extraLibsStatic, extraGHCiLibs = combine extraGHCiLibs, extraBundledLibs = combine extraBundledLibs, extraLibFlavours = combine extraLibFlavours, extraDynLibFlavours = combine extraDynLibFlavours, extraLibDirs = combineNub extraLibDirs, + extraLibDirsStatic = combineNub extraLibDirsStatic, includeDirs = combineNub includeDirs, includes = combineNub includes, autogenIncludes = combineNub autogenIncludes, diff --git a/Cabal/src/Distribution/Types/BuildInfo/Lens.hs b/Cabal/src/Distribution/Types/BuildInfo/Lens.hs index 074e9ba54d3..b3d558a9412 100644 --- a/Cabal/src/Distribution/Types/BuildInfo/Lens.hs +++ b/Cabal/src/Distribution/Types/BuildInfo/Lens.hs @@ -137,6 +137,10 @@ class HasBuildInfo a where extraLibs = buildInfo . extraLibs {-# INLINE extraLibs #-} + extraLibsStatic :: Lens' a [String] + extraLibsStatic = buildInfo . extraLibsStatic + {-# INLINE extraLibsStatic #-} + extraGHCiLibs :: Lens' a [String] extraGHCiLibs = buildInfo . extraGHCiLibs {-# INLINE extraGHCiLibs #-} @@ -157,6 +161,10 @@ class HasBuildInfo a where extraLibDirs = buildInfo . extraLibDirs {-# INLINE extraLibDirs #-} + extraLibDirsStatic :: Lens' a [String] + extraLibDirsStatic = buildInfo . extraLibDirsStatic + {-# INLINE extraLibDirsStatic #-} + includeDirs :: Lens' a [FilePath] includeDirs = buildInfo . includeDirs {-# INLINE includeDirs #-} @@ -290,6 +298,9 @@ instance HasBuildInfo BuildInfo where extraLibs f s = fmap (\x -> s { T.extraLibs = x }) (f (T.extraLibs s)) {-# INLINE extraLibs #-} + extraLibsStatic f s = fmap (\x -> s { T.extraLibsStatic = x}) (f (T.extraLibsStatic s)) + {-# INLINE extraLibsStatic #-} + extraGHCiLibs f s = fmap (\x -> s { T.extraGHCiLibs = x }) (f (T.extraGHCiLibs s)) {-# INLINE extraGHCiLibs #-} @@ -305,6 +316,9 @@ instance HasBuildInfo BuildInfo where extraLibDirs f s = fmap (\x -> s { T.extraLibDirs = x }) (f (T.extraLibDirs s)) {-# INLINE extraLibDirs #-} + extraLibDirsStatic f s = fmap (\x -> s { T.extraLibDirsStatic = x}) (f (T.extraLibDirsStatic s)) + {-# INLINE extraLibDirsStatic #-} + includeDirs f s = fmap (\x -> s { T.includeDirs = x }) (f (T.includeDirs s)) {-# INLINE includeDirs #-} diff --git a/Cabal/src/Distribution/Types/InstalledPackageInfo.hs b/Cabal/src/Distribution/Types/InstalledPackageInfo.hs index f34da35c345..0d047db5590 100644 --- a/Cabal/src/Distribution/Types/InstalledPackageInfo.hs +++ b/Cabal/src/Distribution/Types/InstalledPackageInfo.hs @@ -72,10 +72,12 @@ data InstalledPackageInfo trusted :: Bool, importDirs :: [FilePath], libraryDirs :: [FilePath], + libraryDirsStatic :: [FilePath], libraryDynDirs :: [FilePath], -- ^ overrides 'libraryDirs' dataDir :: FilePath, hsLibraries :: [String], extraLibraries :: [String], + extraLibrariesStatic :: [String], extraGHCiLibraries:: [String], -- overrides extraLibraries for GHCi includeDirs :: [FilePath], includes :: [String], @@ -152,10 +154,12 @@ emptyInstalledPackageInfo trusted = False, importDirs = [], libraryDirs = [], + libraryDirsStatic = [], libraryDynDirs = [], dataDir = "", hsLibraries = [], extraLibraries = [], + extraLibrariesStatic = [], extraGHCiLibraries= [], includeDirs = [], includes = [], diff --git a/Cabal/src/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs b/Cabal/src/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs index cf79e45f40a..f176ea01187 100644 --- a/Cabal/src/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs +++ b/Cabal/src/Distribution/Types/InstalledPackageInfo/FieldGrammar.hs @@ -102,10 +102,12 @@ ipiFieldGrammar = mkInstalledPackageInfo <@> booleanFieldDef "trusted" L.trusted False <@> monoidalFieldAla "import-dirs" (alaList' FSep FilePathNT) L.importDirs <@> monoidalFieldAla "library-dirs" (alaList' FSep FilePathNT) L.libraryDirs + <@> monoidalFieldAla "library-dirs-static" (alaList' FSep FilePathNT) L.libraryDirsStatic <@> monoidalFieldAla "dynamic-library-dirs" (alaList' FSep FilePathNT) L.libraryDynDirs <@> optionalFieldDefAla "data-dir" FilePathNT L.dataDir "" <@> monoidalFieldAla "hs-libraries" (alaList' FSep Token) L.hsLibraries <@> monoidalFieldAla "extra-libraries" (alaList' FSep Token) L.extraLibraries + <@> monoidalFieldAla "extra-libraries-static" (alaList' FSep Token) L.extraLibrariesStatic <@> monoidalFieldAla "extra-ghci-libraries" (alaList' FSep Token) L.extraGHCiLibraries <@> monoidalFieldAla "include-dirs" (alaList' FSep FilePathNT) L.includeDirs <@> monoidalFieldAla "includes" (alaList' FSep FilePathNT) L.includes diff --git a/Cabal/src/Distribution/Types/InstalledPackageInfo/Lens.hs b/Cabal/src/Distribution/Types/InstalledPackageInfo/Lens.hs index 75985c8ee1e..9d1df886370 100644 --- a/Cabal/src/Distribution/Types/InstalledPackageInfo/Lens.hs +++ b/Cabal/src/Distribution/Types/InstalledPackageInfo/Lens.hs @@ -116,6 +116,10 @@ libraryDirs :: Lens' InstalledPackageInfo [FilePath] libraryDirs f s = fmap (\x -> s { T.libraryDirs = x }) (f (T.libraryDirs s)) {-# INLINE libraryDirs #-} +libraryDirsStatic :: Lens' InstalledPackageInfo [FilePath] +libraryDirsStatic f s = fmap (\x -> s { T.libraryDirsStatic = x }) (f (T.libraryDirsStatic s)) +{-# INLINE libraryDirsStatic #-} + libraryDynDirs :: Lens' InstalledPackageInfo [FilePath] libraryDynDirs f s = fmap (\x -> s { T.libraryDynDirs = x }) (f (T.libraryDynDirs s)) {-# INLINE libraryDynDirs #-} @@ -132,6 +136,10 @@ extraLibraries :: Lens' InstalledPackageInfo [String] extraLibraries f s = fmap (\x -> s { T.extraLibraries = x }) (f (T.extraLibraries s)) {-# INLINE extraLibraries #-} +extraLibrariesStatic :: Lens' InstalledPackageInfo [String] +extraLibrariesStatic f s = fmap (\x -> s { T.extraLibrariesStatic = x }) (f (T.extraLibrariesStatic s)) +{-# INLINE extraLibrariesStatic #-} + extraGHCiLibraries :: Lens' InstalledPackageInfo [String] extraGHCiLibraries f s = fmap (\x -> s { T.extraGHCiLibraries = x }) (f (T.extraGHCiLibraries s)) {-# INLINE extraGHCiLibraries #-} diff --git a/cabal-install/src/Distribution/Client/Config.hs b/cabal-install/src/Distribution/Client/Config.hs index 90815035e8d..1c2df3dc713 100644 --- a/cabal-install/src/Distribution/Client/Config.hs +++ b/cabal-install/src/Distribution/Client/Config.hs @@ -376,6 +376,7 @@ instance Semigroup SavedConfig where configScratchDir = combine configScratchDir, -- TODO: NubListify configExtraLibDirs = lastNonEmpty configExtraLibDirs, + configExtraLibDirsStatic = lastNonEmpty configExtraLibDirsStatic, -- TODO: NubListify configExtraFrameworkDirs = lastNonEmpty configExtraFrameworkDirs, -- TODO: NubListify @@ -1177,6 +1178,8 @@ parseConfig src initial = \str -> do (fromNubList $ configProgramPathExtra scf) , configExtraLibDirs = splitMultiPath (configExtraLibDirs scf) + , configExtraLibDirsStatic = splitMultiPath + (configExtraLibDirsStatic scf) , configExtraFrameworkDirs = splitMultiPath (configExtraFrameworkDirs scf) , configExtraIncludeDirs = splitMultiPath diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs index d6f3924df85..0aca7ac2a4a 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs @@ -428,6 +428,7 @@ convertLegacyPerPackageFlags configFlags installFlags configStripExes = packageConfigStripExes, configStripLibs = packageConfigStripLibs, configExtraLibDirs = packageConfigExtraLibDirs, + configExtraLibDirsStatic = packageConfigExtraLibDirsStatic, configExtraFrameworkDirs = packageConfigExtraFrameworkDirs, configExtraIncludeDirs = packageConfigExtraIncludeDirs, configConfigurationsFlags = packageConfigFlagAssignment, @@ -705,6 +706,7 @@ convertToLegacyAllPackageConfig configStripExes = mempty, configStripLibs = mempty, configExtraLibDirs = mempty, + configExtraLibDirsStatic = mempty, configExtraFrameworkDirs = mempty, configConstraints = mempty, configDependencies = mempty, @@ -777,6 +779,7 @@ convertToLegacyPerPackageConfig PackageConfig {..} = configStripExes = packageConfigStripExes, configStripLibs = packageConfigStripLibs, configExtraLibDirs = packageConfigExtraLibDirs, + configExtraLibDirsStatic = packageConfigExtraLibDirsStatic, configExtraFrameworkDirs = packageConfigExtraFrameworkDirs, configConstraints = mempty, configDependencies = mempty, @@ -1060,6 +1063,10 @@ legacyPackageConfigFieldDescrs = showTokenQ parseTokenQ configExtraLibDirs (\v conf -> conf { configExtraLibDirs = v }) + , newLineListField "extra-lib-dirs-static" + showTokenQ parseTokenQ + configExtraLibDirsStatic + (\v conf -> conf { configExtraLibDirsStatic = v }) , newLineListField "extra-framework-dirs" showTokenQ parseTokenQ configExtraFrameworkDirs diff --git a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs index aaa25df9eaa..e5d18273dca 100644 --- a/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectConfig/Types.hs @@ -258,6 +258,7 @@ data PackageConfig packageConfigProgPrefix :: Flag PathTemplate, packageConfigProgSuffix :: Flag PathTemplate, packageConfigExtraLibDirs :: [FilePath], + packageConfigExtraLibDirsStatic :: [FilePath], packageConfigExtraFrameworkDirs :: [FilePath], packageConfigExtraIncludeDirs :: [FilePath], packageConfigGHCiLib :: Flag Bool, diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning.hs b/cabal-install/src/Distribution/Client/ProjectPlanning.hs index fc6d9a17383..43e7568c82f 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning.hs @@ -1851,6 +1851,7 @@ elaborateInstallPlan verbosity platform compiler compilerprogdb pkgConfigDB elabProgramPathExtra = perPkgOptionNubList pkgid packageConfigProgramPathExtra elabConfigureScriptArgs = perPkgOptionList pkgid packageConfigConfigureArgs elabExtraLibDirs = perPkgOptionList pkgid packageConfigExtraLibDirs + elabExtraLibDirsStatic = perPkgOptionList pkgid packageConfigExtraLibDirsStatic elabExtraFrameworkDirs = perPkgOptionList pkgid packageConfigExtraFrameworkDirs elabExtraIncludeDirs = perPkgOptionList pkgid packageConfigExtraIncludeDirs elabProgPrefix = perPkgOptionMaybe pkgid packageConfigProgPrefix @@ -3464,6 +3465,7 @@ setupHsConfigureFlags (ReadyPackage elab@ElaboratedConfiguredPackage{..}) configConfigurationsFlags = elabFlagAssignment configConfigureArgs = elabConfigureScriptArgs configExtraLibDirs = elabExtraLibDirs + configExtraLibDirsStatic = elabExtraLibDirsStatic configExtraFrameworkDirs = elabExtraFrameworkDirs configExtraIncludeDirs = elabExtraIncludeDirs configProgPrefix = maybe mempty toFlag elabProgPrefix diff --git a/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs b/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs index 0388886ecde..d1264112f2d 100644 --- a/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs +++ b/cabal-install/src/Distribution/Client/ProjectPlanning/Types.hs @@ -267,6 +267,7 @@ data ElaboratedConfiguredPackage elabProgramPathExtra :: [FilePath], elabConfigureScriptArgs :: [String], elabExtraLibDirs :: [FilePath], + elabExtraLibDirsStatic :: [FilePath], elabExtraFrameworkDirs :: [FilePath], elabExtraIncludeDirs :: [FilePath], elabProgPrefix :: Maybe PathTemplate, diff --git a/cabal-install/src/Distribution/Client/Setup.hs b/cabal-install/src/Distribution/Client/Setup.hs index c710b4a384e..13cd1001fbc 100644 --- a/cabal-install/src/Distribution/Client/Setup.hs +++ b/cabal-install/src/Distribution/Client/Setup.hs @@ -470,6 +470,7 @@ filterConfigureFlags flags cabalLibVersion | cabalLibVersion < mkVersion [1,25,0] = flags_1_25_0 | cabalLibVersion < mkVersion [2,1,0] = flags_2_1_0 | cabalLibVersion < mkVersion [2,5,0] = flags_2_5_0 + | cabalLibVersion < mkVersion [3,7,0] = flags_3_7_0 | otherwise = error "the impossible just happened" -- see first guard where flags_latest = flags { @@ -480,7 +481,12 @@ filterConfigureFlags flags cabalLibVersion configConstraints = [] } - flags_2_5_0 = flags_latest { + flags_3_7_0 = flags_latest { + -- Cabal < 3.7 does not know about --extra-lib-dirs-static + configExtraLibDirsStatic = [] + } + + flags_2_5_0 = flags_3_7_0 { -- Cabal < 2.5 does not understand --dependency=pkg:component=cid -- (public sublibraries), so we convert it to the legacy -- --dependency=pkg_or_internal_compoent=cid diff --git a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs index 3681ac1d900..95b7e1ccb79 100644 --- a/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs +++ b/cabal-install/tests/UnitTests/Distribution/Client/ProjectConfig.hs @@ -553,6 +553,7 @@ instance Arbitrary PackageConfig where <*> shortListOf 5 arbitraryShortToken <*> shortListOf 5 arbitraryShortToken <*> shortListOf 5 arbitraryShortToken + <*> shortListOf 5 arbitraryShortToken <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary @@ -604,6 +605,7 @@ instance Arbitrary PackageConfig where , packageConfigProgPrefix = x14 , packageConfigProgSuffix = x15 , packageConfigExtraLibDirs = x16 + , packageConfigExtraLibDirsStatic = x53 , packageConfigExtraFrameworkDirs = x17 , packageConfigExtraIncludeDirs = x18 , packageConfigGHCiLib = x19 @@ -659,6 +661,7 @@ instance Arbitrary PackageConfig where , packageConfigProgPrefix = x14' , packageConfigProgSuffix = x15' , packageConfigExtraLibDirs = map getNonEmpty x16' + , packageConfigExtraLibDirsStatic = map getNonEmpty x53' , packageConfigExtraFrameworkDirs = map getNonEmpty x17' , packageConfigExtraIncludeDirs = map getNonEmpty x18' , packageConfigGHCiLib = x19' @@ -698,7 +701,7 @@ instance Arbitrary PackageConfig where | (((x00', x01', x02', x03', x04'), (x05', x42', x06', x50', x07', x08', x09'), (x10', x11', x12', x13', x14'), - (x15', x16', x17', x18', x19')), + (x15', x16', x53', x17', x18', x19')), ((x20', x20_1', x21', x22', x23', x24'), (x25', x26', x27', x28', x29'), (x30', x31', x32', (x33', x33_1'), x34'), @@ -709,7 +712,7 @@ instance Arbitrary PackageConfig where (((preShrink_Paths x00, preShrink_Args x01, x02, x03, x04), (x05, x42, x06, x50, x07, x08, x09), (x10, x11, map NonEmpty x12, x13, x14), - (x15, map NonEmpty x16, + (x15, map NonEmpty x16, map NonEmpty x53, map NonEmpty x17, map NonEmpty x18, x19)), diff --git a/doc/cabal-package.rst b/doc/cabal-package.rst index 8237ea5b5ce..41466e61c3b 100644 --- a/doc/cabal-package.rst +++ b/doc/cabal-package.rst @@ -2056,7 +2056,13 @@ system-dependent values for these fields. .. pkg-field:: extra-libraries: token list - A list of extra libraries to link with. + A list of extra libraries to link with (when not linking fully static + executables). + +.. pkg-field:: extra-libraries-static: token list + + A list of extra libraries to link with (when linking fully static + executables). .. pkg-field:: extra-ghci-libraries: token list @@ -2084,7 +2090,13 @@ system-dependent values for these fields. .. pkg-field:: extra-lib-dirs: directory list - A list of directories to search for libraries. + A list of directories to search for libraries (when not linking fully static + executables). + +.. pkg-field:: extra-lib-dirs-static: directory list + + A list of directories to search for libraries (when linking fully static + executables). .. pkg-field:: extra-library-flavours: notsure diff --git a/doc/file-format-changelog.rst b/doc/file-format-changelog.rst index 52116db5879..cffa4edd578 100644 --- a/doc/file-format-changelog.rst +++ b/doc/file-format-changelog.rst @@ -19,6 +19,21 @@ relative to the respective preceding *published* version. versions of the ``Cabal`` library denote unreleased development branches which have no stability guarantee. +``cabal-version: 3.x`` +---------------------- + +* Added fields :pkg-field:`extra-libraries-static` and + :pkg-field:`extra-lib-dirs-static` to allow Haskell libraries to remember + linker flags needed for fully static linking of system libraries into + executables. + The existing field :pkg-field:`pkgconfig-depends` can used to append + the relevant output of ``pkg-config --libs --static`` to these new fields + automatically. + When :pkg-field:`extra-libraries-static` is not given, it defaults to + :pkg-field:`extra-libraries`. + When :pkg-field:`extra-lib-dirs-static` is not given, it defaults to + :pkg-field:`extra-lib-dirs`. + ``cabal-version: 3.6`` ----------------------