diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/Lib.hs b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/Lib.hs new file mode 100644 index 00000000000..9535fcd23fb --- /dev/null +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/Lib.hs @@ -0,0 +1,13 @@ +{-# LANGUAGE ForeignFunctionInterface #-} + +module Lib where + +import Foreign.C (CInt (..)) + +hello :: IO CInt +hello = do + putStrLn "hello!" + return 11 + +foreign export ccall "hello" hello :: IO CInt + diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/Main.hs b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/Main.hs new file mode 100644 index 00000000000..2234f9e4ab2 --- /dev/null +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/Main.hs @@ -0,0 +1,16 @@ +{-# LANGUAGE ForeignFunctionInterface #-} + +module Main where + +import Foreign.C (CInt (..)) + +foreign import ccall "meaning_of_life_c" + meaning_of_life_c :: IO CInt + +main :: IO () +main = do + secret <- meaning_of_life_c + -- The value 11 comes from the exported Lib.hello + if (secret == 11) + then putStrLn ("The secret is " ++ show secret) + else error ("Expected value 11, got " ++ show secret) diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out new file mode 100644 index 00000000000..cdfe4ab10de --- /dev/null +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out @@ -0,0 +1,12 @@ +# cabal v2-build +Resolving dependencies... +Build profile: -w ghc- -O1 +In order, the following will be built: + - csourcedepsstub-0.1 (lib) (first run) + - csourcedepsstub-0.1 (exe:csourcedeps-exe) (first run) +Configuring library for csourcedepsstub-0.1... +Preprocessing library for csourcedepsstub-0.1... +Building library for csourcedepsstub-0.1... +Configuring executable 'csourcedeps-exe' for csourcedepsstub-0.1... +Preprocessing executable 'csourcedeps-exe' for csourcedepsstub-0.1... +Building executable 'csourcedeps-exe' for csourcedepsstub-0.1... diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.project b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.project new file mode 100644 index 00000000000..e6fdbadb439 --- /dev/null +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.project @@ -0,0 +1 @@ +packages: . diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.test.hs b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.test.hs new file mode 100644 index 00000000000..fcfdc963f44 --- /dev/null +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.test.hs @@ -0,0 +1,6 @@ +-- Tests whether an extra C source can depend on a _stub header generated by +-- GHC compiling a Haskell module with a foreign export declaration + +import Test.Cabal.Prelude +main = cabalTest $ do + cabal "v2-build" [] diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cbits/clib.c b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cbits/clib.c new file mode 100644 index 00000000000..3589ade00f3 --- /dev/null +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cbits/clib.c @@ -0,0 +1,5 @@ +#include "Lib_stub.h" + +int meaning_of_life_c() { + return hello(); +} diff --git a/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/csourcedepsstub.cabal b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/csourcedepsstub.cabal new file mode 100644 index 00000000000..61f0266993d --- /dev/null +++ b/cabal-testsuite/PackageTests/FFI/CSourceDependsStub/csourcedepsstub.cabal @@ -0,0 +1,16 @@ +cabal-version: 2.2 +name: csourcedepsstub +version: 0.1 +build-type: Simple + +library + build-depends: base + default-language: Haskell2010 + include-dirs: cbits + c-sources: cbits/clib.c + exposed-modules: Lib + +executable csourcedeps-exe + main-is: Main.hs + build-depends: base, csourcedepsstub + default-language: Haskell2010