Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion Cabal/src/Distribution/Simple/GHC/Internal.hs
Original file line number Diff line number Diff line change
Expand Up @@ -81,10 +81,10 @@
import Distribution.Types.LocalBuildInfo
import Distribution.Types.TargetInfo
import Distribution.Types.UnitId
import Distribution.Types.Version
import Distribution.Utils.NubList (NubListR, toNubListR)
import Distribution.Utils.Path
import Distribution.Verbosity
import Distribution.Version (Version)
import Language.Haskell.Extension
import System.Directory (listDirectory)
import System.Environment (getEnv)
Expand Down Expand Up @@ -514,6 +514,16 @@
, ghcOptExtra = hcOptions GHC bi
}

-- Applies options only if the GHC version is greater than or
-- equal to the given one.
ghcOptionsSince :: Monoid a => Version -> Compiler -> a -> a
ghcOptionsSince ver comp options =

Check warning on line 520 in Cabal/src/Distribution/Simple/GHC/Internal.hs

View workflow job for this annotation

GitHub Actions / Doctest Cabal

This binding for ‘options’ shadows the existing binding
case compilerCompatVersion GHC comp of
Just v
| v >= ver -> options
| otherwise -> mempty
Nothing -> mempty

componentGhcOptions
:: VerbosityLevel
-> LocalBuildInfo
Expand Down Expand Up @@ -587,6 +597,15 @@
, -- Unsupported extensions have already been checked by configure
ghcOptExtensions = toNubListR $ usedExtensions bi
, ghcOptExtensionMap = Map.fromList . compilerExtensions $ (compiler lbi)
, -- https://gitlab.haskell.org/ghc/ghc/-/merge_requests/6949
-- Only pass -pie, -no-pie when linking the value of -pgmc
-- does not matter when checking for the workaround of
-- https://gitlab.haskell.org/ghc/ghc/-/issues/15319
ghcOptCcProgram =
ghcOptionsSince
(mkVersion [9, 4])
(compiler lbi)
(maybeToFlag $ programPath <$> lookupProgram gccProgram (withPrograms lbi))
}
where
exe_paths =
Expand Down
16 changes: 16 additions & 0 deletions cabal-testsuite/PackageTests/FFI/ForeignOptsPgmc/Main.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{-# LANGUAGE ForeignFunctionInterface #-}

module Main where

import Foreign.C (CInt (..))

foreign import ccall "pgmclib.h meaning_of_life_pgmc"
meaning_of_life_pgmc :: IO CInt

main :: IO ()
main = do
secret <- meaning_of_life_pgmc
-- The value 66 comes from __TESTOPT_PGMC__ - see cc-wrapper.sh.
if (secret == 66)
then putStrLn ("The secret is " ++ show secret)
else error ("Expected value 66, got " ++ show secret)
7 changes: 7 additions & 0 deletions cabal-testsuite/PackageTests/FFI/ForeignOptsPgmc/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# ForeignOptsPgmc

This test case asserts that cabal passes the `-pgmc` GHC option to override the C compiler program.

The cabal file sets `ghc-options: -pgmc scripts/cc-wrapper.sh`, pointing GHC at a shell script wrapper (`scripts/cc-wrapper.sh`) instead of the system C compiler. The wrapper adds `-D__TESTOPT_PGMC__=66` to every compilation and then delegates to the real `cc`. The C source requires `__TESTOPT_PGMC__` to be defined; if the wrapper is not used as the C compiler, the build fails with a `#error`.

This test is skipped on Windows (no POSIX shell).
10 changes: 10 additions & 0 deletions cabal-testsuite/PackageTests/FFI/ForeignOptsPgmc/cabal.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# cabal v2-build
Resolving dependencies...
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- foreign-opts-pgmc-0.1 (exe:foreign-opts-pgmc-exe) (first run)
Configuring executable 'foreign-opts-pgmc-exe' for foreign-opts-pgmc-0.1...
Preprocessing executable 'foreign-opts-pgmc-exe' for foreign-opts-pgmc-0.1...
Building executable 'foreign-opts-pgmc-exe' for foreign-opts-pgmc-0.1...
# foreign-opts-pgmc foreign-opts-pgmc-exe
The secret is 66
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
packages: .
10 changes: 10 additions & 0 deletions cabal-testsuite/PackageTests/FFI/ForeignOptsPgmc/cabal.test.hs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import Test.Cabal.Prelude

main = do
skipIfWindows "requires a POSIX shell script as the C compiler wrapper"
cabalTest $ do
skipUnlessGhcVersion ">= 9.4"
cwd <- fmap testCurrentDir getTestEnv
let wrapper = cwd </> "scripts/cc-wrapper.sh"
cabal "v2-build" ["foreign-opts-pgmc-exe"]
withPlan $ runPlanExe "foreign-opts-pgmc" "foreign-opts-pgmc-exe" []
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#include "pgmclib.h"

#ifndef __TESTOPT_PGMC__
#error "Did not get required __TESTOPT_PGMC__ from the -pgmc wrapper"
#endif

int meaning_of_life_pgmc() {
return __TESTOPT_PGMC__;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#ifndef PGMCLIB_H
#define PGMCLIB_H

int meaning_of_life_pgmc();

#endif
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
cabal-version: 2.2
name: foreign-opts-pgmc
version: 0.1
build-type: Simple

executable foreign-opts-pgmc-exe
main-is: Main.hs
build-depends: base
default-language: Haskell2010
include-dirs: cbits
c-sources: cbits/pgmclib.c
ghc-options: -pgmc scripts/cc-wrapper.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/bin/sh
# Wrapper around cc that adds -D__TESTOPT_PGMC__=66 to every compilation.
# Used by the ForeignOptsPgmc test to verify that -pgmc selects this wrapper.
exec cc -D__TESTOPT_PGMC__=66 "$@"
67 changes: 67 additions & 0 deletions cabal-testsuite/PackageTests/ShowBuildInfo/Complex/single-2.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# cabal v2-update
Downloading the latest package list from test-local-repo
# cabal build
Resolving dependencies...
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- Complex-0.1.0.0 (lib) (first run)
- Complex-0.1.0.0 (exe:Complex) (first run)
Configuring library for Complex-0.1.0.0...
Warning: [unknown-directory] 'hs-source-dirs: doesnt-exist' specifies a directory which does not exist.
Preprocessing library for Complex-0.1.0.0...
Building library for Complex-0.1.0.0...
Configuring executable 'Complex' for Complex-0.1.0.0...
Warning: [unknown-directory] 'hs-source-dirs: doesnt-exist' specifies a directory which does not exist.
Preprocessing executable 'Complex' for Complex-0.1.0.0...
Building executable 'Complex' for Complex-0.1.0.0...
# show-build-info Complex exe:Complex
{"cabal-lib-version":"<CABALVER>","compiler":{"flavour":"ghc","compiler-id":"ghc-<GHCVER>","path":"<GHCPATH>"},"components":[{"type":"exe","name":"exe:Complex","unit-id":"Complex-0.1.0.0-inplace-Complex","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build","-odir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build","-hidir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build","-hiedir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build/extra-compilation-artifacts/hie","-stubdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build","-i","-iapp","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build/Complex/autogen","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build/Complex/autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build","-optP-include","-optPsingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/x/Complex/build/Complex/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace-Complex","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","<ROOT>/single-2.dist/home/.cabal/store/ghc-<GHCVER>/package.db","-package-db","<ROOT>/single-2.dist/work/dist/packagedb/ghc-<GHCVER>","-package-id","<PACKAGEDEP>","-package-id","<PACKAGEDEP>","-XHaskell2010","-threaded","-rtsopts","-with-rtsopts=-N -T","-Wredundant-constraints"],"modules":["Other","Paths_Complex"],"src-files":["Main.lhs"],"hs-src-dirs":["app"],"src-dir":"<ROOT>/","cabal-file":"Complex.cabal"}]}
# cabal build
Up to date
# show-build-info Complex lib
{"cabal-lib-version":"<CABALVER>","compiler":{"flavour":"ghc","compiler-id":"ghc-<GHCVER>","path":"<GHCPATH>"},"components":[{"type":"lib","name":"lib","unit-id":"Complex-0.1.0.0-inplace","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build","-odir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build","-hidir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build","-hiedir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build/extra-compilation-artifacts/hie","-stubdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build","-i","-isrc","-idoesnt-exist","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build/autogen","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build/autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build","-optP-include","-optPsingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/build/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","<ROOT>/single-2.dist/home/.cabal/store/ghc-<GHCVER>/package.db","-package-db","<ROOT>/single-2.dist/work/dist/packagedb/ghc-<GHCVER>","-package-id","<PACKAGEDEP>","-XHaskell2010","-Wall"],"modules":["A","B","C","D","Paths_Complex"],"src-files":[],"hs-src-dirs":["src","doesnt-exist"],"src-dir":"<ROOT>/","cabal-file":"Complex.cabal"}]}
# cabal build
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- criterion-1.1.4.0 (lib) (requires build)
- Complex-0.1.0.0 (bench:complex-benchmarks) (first run)
Configuring library for criterion-1.1.4.0...
Preprocessing library for criterion-1.1.4.0...
Building library for criterion-1.1.4.0...
Installing library in <PATH>
Configuring benchmark 'complex-benchmarks' for Complex-0.1.0.0...
Warning: [unknown-directory] 'hs-source-dirs: doesnt-exist' specifies a directory which does not exist.
Preprocessing benchmark 'complex-benchmarks' for Complex-0.1.0.0...
Building benchmark 'complex-benchmarks' for Complex-0.1.0.0...
# show-build-info Complex bench:complex-benchmarks
{"cabal-lib-version":"<CABALVER>","compiler":{"flavour":"ghc","compiler-id":"ghc-<GHCVER>","path":"<GHCPATH>"},"components":[{"type":"bench","name":"bench:complex-benchmarks","unit-id":"Complex-0.1.0.0-inplace-complex-benchmarks","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build","-odir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build","-hidir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build","-hiedir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build/extra-compilation-artifacts/hie","-stubdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build","-i","-ibenchmark","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build/complex-benchmarks/autogen","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build/complex-benchmarks/autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build","-optP-include","-optPsingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/b/complex-benchmarks/build/complex-benchmarks/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace-complex-benchmarks","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","<ROOT>/single-2.dist/home/.cabal/store/ghc-<GHCVER>/package.db","-package-db","<ROOT>/single-2.dist/work/dist/packagedb/ghc-<GHCVER>","-package-id","<PACKAGEDEP>","-package-id","<PACKAGEDEP>","-package-id","<PACKAGEDEP>","-XHaskell2010","-Wall","-rtsopts","-threaded","-with-rtsopts=-N"],"modules":["Paths_Complex"],"src-files":["Main.hs"],"hs-src-dirs":["benchmark"],"src-dir":"<ROOT>/","cabal-file":"Complex.cabal"}]}
# cabal build
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- test-framework-0.8.1.1 (lib) (requires build)
- Complex-0.1.0.0 (test:func-test) (first run)
Configuring library for test-framework-0.8.1.1...
Preprocessing library for test-framework-0.8.1.1...
Building library for test-framework-0.8.1.1...
Installing library in <PATH>
Configuring test suite 'func-test' for Complex-0.1.0.0...
Warning: [unknown-directory] 'hs-source-dirs: doesnt-exist' specifies a directory which does not exist.
Preprocessing test suite 'func-test' for Complex-0.1.0.0...
Building test suite 'func-test' for Complex-0.1.0.0...
# show-build-info Complex test:func-test
{"cabal-lib-version":"<CABALVER>","compiler":{"flavour":"ghc","compiler-id":"ghc-<GHCVER>","path":"<GHCPATH>"},"components":[{"type":"test","name":"test:func-test","unit-id":"Complex-0.1.0.0-inplace-func-test","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build","-odir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build","-hidir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build","-hiedir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build/extra-compilation-artifacts/hie","-stubdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build","-i","-itest","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build/func-test/autogen","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build/func-test/autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build","-optP-include","-optPsingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/func-test/build/func-test/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace-func-test","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","<ROOT>/single-2.dist/home/.cabal/store/ghc-<GHCVER>/package.db","-package-db","<ROOT>/single-2.dist/work/dist/packagedb/ghc-<GHCVER>","-package-id","<PACKAGEDEP>","-package-id","<PACKAGEDEP>","-package-id","<PACKAGEDEP>","-XHaskell2010"],"modules":[],"src-files":["FuncMain.hs"],"hs-src-dirs":["test"],"src-dir":"<ROOT>/","cabal-file":"Complex.cabal"}]}
# cabal build
Build profile: -w ghc-<GHCVER> -O1
In order, the following will be built:
- another-framework-0.8.1.1 (lib) (requires build)
- Complex-0.1.0.0 (test:unit-test) (first run)
Configuring library for another-framework-0.8.1.1...
Preprocessing library for another-framework-0.8.1.1...
Building library for another-framework-0.8.1.1...
Installing library in <PATH>
Configuring test suite 'unit-test' for Complex-0.1.0.0...
Warning: [unknown-directory] 'hs-source-dirs: doesnt-exist' specifies a directory which does not exist.
Preprocessing test suite 'unit-test' for Complex-0.1.0.0...
Building test suite 'unit-test' for Complex-0.1.0.0...
# show-build-info Complex test:unit-test
{"cabal-lib-version":"<CABALVER>","compiler":{"flavour":"ghc","compiler-id":"ghc-<GHCVER>","path":"<GHCPATH>"},"components":[{"type":"test","name":"test:unit-test","unit-id":"Complex-0.1.0.0-inplace-unit-test","compiler-args":["-fbuilding-cabal-package","-O","-outputdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build","-odir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build","-hidir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build","-hiedir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build/extra-compilation-artifacts/hie","-stubdir","single-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build","-i","-itest","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build/unit-test/autogen","-isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build/unit-test/autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build/global-autogen","-Isingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build","-optP-include","-optPsingle-2.dist/work/./dist/build/<ARCH>/ghc-<GHCVER>/Complex-0.1.0.0/t/unit-test/build/unit-test/autogen/cabal_macros.h","-this-unit-id","Complex-0.1.0.0-inplace-unit-test","-hide-all-packages","-Wmissing-home-modules","-no-user-package-db","-package-db","<ROOT>/single-2.dist/home/.cabal/store/ghc-<GHCVER>/package.db","-package-db","<ROOT>/single-2.dist/work/dist/packagedb/ghc-<GHCVER>","-package-id","<PACKAGEDEP>","-package-id","<PACKAGEDEP>","-XHaskell2010"],"modules":[],"src-files":["UnitMain.hs"],"hs-src-dirs":["test"],"src-dir":"<ROOT>/","cabal-file":"Complex.cabal"}]}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
{-# LANGUAGE OverloadedStrings #-}

import Test.Cabal.DecodeShowBuildInfo
import Test.Cabal.Prelude

main = cabalTest $ do
-- the With GHC-9.2+ output contains -this-unit-id
skipUnlessGhcVersion "^>= 9.2"
withRepo "repo" $ do
runShowBuildInfo ["exe:Complex"]
>> withPlan
( do
recordBuildInfo "Complex" (exe "Complex")
assertComponent
"Complex"
(exe "Complex")
defCompAssertion
{ modules = ["Other", "Paths_Complex"]
, sourceFiles = ["Main.lhs"]
, sourceDirs = ["app"]
}
)

runShowBuildInfo ["lib:Complex"]
>> withPlan
( do
recordBuildInfo "Complex" mainLib
assertComponent
"Complex"
mainLib
defCompAssertion
{ modules = ["A", "B", "C", "D", "Paths_Complex"]
, sourceDirs = ["src", "doesnt-exist"]
}
)

runShowBuildInfo ["benchmark:complex-benchmarks"]
>> withPlan
( do
recordBuildInfo "Complex" (bench "complex-benchmarks")
assertComponent
"Complex"
(bench "complex-benchmarks")
defCompAssertion
{ modules = ["Paths_Complex"]
, sourceFiles = ["Main.hs"]
, sourceDirs = ["benchmark"]
}
)

runShowBuildInfo ["test:func-test"]
>> withPlan
( do
recordBuildInfo "Complex" (test "func-test")
assertComponent
"Complex"
(test "func-test")
defCompAssertion
{ sourceFiles = ["FuncMain.hs"]
, sourceDirs = ["test"]
}
)

runShowBuildInfo ["test:unit-test"]
>> withPlan
( do
recordBuildInfo "Complex" (test "unit-test")
assertComponent
"Complex"
(test "unit-test")
defCompAssertion
{ sourceFiles = ["UnitMain.hs"]
, sourceDirs = ["test"]
}
)
Loading
Loading