diff --git a/Cabal/Distribution/Simple/GHC.hs b/Cabal/Distribution/Simple/GHC.hs index 965bd8b5b76..1fad59e6e0e 100644 --- a/Cabal/Distribution/Simple/GHC.hs +++ b/Cabal/Distribution/Simple/GHC.hs @@ -1268,7 +1268,11 @@ gbuild verbosity numJobs pkg_descr lbi bm clbi = do runGhcProg compileTHOpts { ghcOptNoLink = toFlag True , ghcOptNumJobs = numJobs } - unless (gbuildIsRepl bm) $ + -- Do not try to build anything if there are no input files. + -- This can happen if the cabal file ends up with only cSrcs + -- but no Haskell modules. + unless ((null inputFiles && null inputModules) + || gbuildIsRepl bm) $ runGhcProg compileOpts { ghcOptNoLink = toFlag True , ghcOptNumJobs = numJobs } diff --git a/Cabal/changelog b/Cabal/changelog index d8cc3b74482..ce3ddbdfef8 100644 --- a/Cabal/changelog +++ b/Cabal/changelog @@ -1,6 +1,7 @@ -*-change-log-*- 2.2.0.0 (current development version) + * Cabal does not try to build an empty set of `inputModules` (#4890). * Add `HexFloatLiterals` to `KnownExtension` * Added `virtual-module` field, to allow modules that are not built but registered (#4875). diff --git a/cabal-testsuite/PackageTests/COnlyMain/foo.c b/cabal-testsuite/PackageTests/COnlyMain/foo.c new file mode 100644 index 00000000000..3e9fb57d6aa --- /dev/null +++ b/cabal-testsuite/PackageTests/COnlyMain/foo.c @@ -0,0 +1,6 @@ +#include + +int main(int argc, char **argv) { + printf("Hello world!"); + return 0; +} diff --git a/cabal-testsuite/PackageTests/COnlyMain/my.cabal b/cabal-testsuite/PackageTests/COnlyMain/my.cabal new file mode 100644 index 00000000000..534778572c6 --- /dev/null +++ b/cabal-testsuite/PackageTests/COnlyMain/my.cabal @@ -0,0 +1,10 @@ +name: my +version: 0.1 +license: BSD3 +cabal-version: >= 2.1 +build-type: Simple + +executable foo + -- default-language is required by cabal-version >= 1.10 + default-language: Haskell2010 + main-is: foo.c diff --git a/cabal-testsuite/PackageTests/COnlyMain/setup.cabal.out b/cabal-testsuite/PackageTests/COnlyMain/setup.cabal.out new file mode 100644 index 00000000000..0e444367380 --- /dev/null +++ b/cabal-testsuite/PackageTests/COnlyMain/setup.cabal.out @@ -0,0 +1,6 @@ +# Setup configure +Resolving dependencies... +Configuring my-0.1... +# Setup build +Preprocessing executable 'foo' for my-0.1.. +Building executable 'foo' for my-0.1.. diff --git a/cabal-testsuite/PackageTests/COnlyMain/setup.out b/cabal-testsuite/PackageTests/COnlyMain/setup.out new file mode 100644 index 00000000000..d3dabcf6cd7 --- /dev/null +++ b/cabal-testsuite/PackageTests/COnlyMain/setup.out @@ -0,0 +1,5 @@ +# Setup configure +Configuring my-0.1... +# Setup build +Preprocessing executable 'foo' for my-0.1.. +Building executable 'foo' for my-0.1.. diff --git a/cabal-testsuite/PackageTests/COnlyMain/setup.test.hs b/cabal-testsuite/PackageTests/COnlyMain/setup.test.hs new file mode 100644 index 00000000000..af4aa089c58 --- /dev/null +++ b/cabal-testsuite/PackageTests/COnlyMain/setup.test.hs @@ -0,0 +1,4 @@ +import Test.Cabal.Prelude +-- Test building an executable whose main() function is defined in a C +-- file +main = setupAndCabalTest $ setup_build []