Skip to content

Commit

Permalink
Add test for C source depending on Haskell C stub
Browse files Browse the repository at this point in the history
  • Loading branch information
alt-romes committed Jan 29, 2024
1 parent 3f4c81f commit 8f6f12c
Show file tree
Hide file tree
Showing 7 changed files with 69 additions and 0 deletions.
13 changes: 13 additions & 0 deletions cabal-testsuite/PackageTests/FFI/CSourceDependsStub/Lib.hs
Original file line number Diff line number Diff line change
@@ -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

16 changes: 16 additions & 0 deletions cabal-testsuite/PackageTests/FFI/CSourceDependsStub/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 "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)
12 changes: 12 additions & 0 deletions cabal-testsuite/PackageTests/FFI/CSourceDependsStub/cabal.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# cabal v2-build
Resolving dependencies...
Build profile: -w ghc-<GHCVER> -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...
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
packages: .
Original file line number Diff line number Diff line change
@@ -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" []
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#include "Lib_stub.h"

int meaning_of_life_c() {
return hello();
}
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit 8f6f12c

Please sign in to comment.