From 84a4222314e8cb52781cb2b98dca4c69bb6cf739 Mon Sep 17 00:00:00 2001 From: Bill Hoffman Date: Wed, 29 Oct 2008 10:58:40 -0400 Subject: ENH: add test for FortranCInterface --- Modules/FortranCInterface.cmake | 6 +++--- Tests/Fortran/CMakeLists.txt | 17 ++++++++++++++++- Tests/Fortran/foo.c | 11 +++++++++++ Tests/Fortran/foo.f | 9 +++++++++ Tests/Fortran/mysub.f | 4 ++++ 5 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 Tests/Fortran/foo.c create mode 100644 Tests/Fortran/foo.f create mode 100644 Tests/Fortran/mysub.f diff --git a/Modules/FortranCInterface.cmake b/Modules/FortranCInterface.cmake index 980c7cb..8c8c3ac 100644 --- a/Modules/FortranCInterface.cmake +++ b/Modules/FortranCInterface.cmake @@ -110,9 +110,9 @@ function(discover_fortran_mangling prefix isupper suffix extra_under_score subroutine sub end subroutine sub ") - foreach(pre "_" "" "__") - foreach(isup TRUE FALSE) - foreach(post "" "_") + foreach(post "_" "") + foreach(isup FALSE TRUE) + foreach(pre "" "_" "__") set(worked FALSE) test_fortran_mangling("${CODE}" "${pre}" ${isup} "${post}" "function" sub worked ) diff --git a/Tests/Fortran/CMakeLists.txt b/Tests/Fortran/CMakeLists.txt index ca7d89a..5df5280 100644 --- a/Tests/Fortran/CMakeLists.txt +++ b/Tests/Fortran/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required (VERSION 2.6) -PROJECT(testf Fortran) +PROJECT(testf C Fortran) SET(CMAKE_VERBOSE_MAKEFILE 1) MESSAGE("ENV_FLAGS = $ENV{FFLAGS}") MESSAGE("CMAKE_Fortran_COMPILER_INIT = ${CMAKE_Fortran_COMPILER_INIT}") @@ -8,6 +8,21 @@ MESSAGE("CMAKE_Fortran_COMPILER = ${CMAKE_Fortran_COMPILER}") MESSAGE("CMAKE_Fortran_FLAGS = ${CMAKE_Fortran_FLAGS}") ADD_EXECUTABLE(testf hello.f) +# test the C to Fortran interface module +include(FortranCInterface) +if(CMAKE_Fortran_COMPILER_SUPPORTS_F90) + set(srcs foo.f) + set(FORTRAN_FUNCTIONS test_mod:sub) +endif() +set(FORTRAN_FUNCTIONS ${FORTRAN_FUNCTIONS} my_sub mysub ) +set(srcs ${srcs} mysub.f foo.c) +create_fortran_c_interface("F_" FORTRAN_FUNCTIONS "${testf_BINARY_DIR}/foo.h") +include_directories("${testf_BINARY_DIR}") +add_executable(foo ${srcs}) + + + + SET(TEST_MODULE_DEPENDS 0) IF(CMAKE_Fortran_COMPILER_SUPPORTS_F90) ADD_EXECUTABLE(test_module diff --git a/Tests/Fortran/foo.c b/Tests/Fortran/foo.c new file mode 100644 index 0000000..f03aec1 --- /dev/null +++ b/Tests/Fortran/foo.c @@ -0,0 +1,11 @@ +#include "foo.h" +extern F_test_mod_sub(); +extern F_mysub(); +int main() +{ + F_mysub(); + F_my_sub(); +#ifdef F_test_mod_sub + F_test_mod_sub(); +#endif +} diff --git a/Tests/Fortran/foo.f b/Tests/Fortran/foo.f new file mode 100644 index 0000000..dbbb3a4 --- /dev/null +++ b/Tests/Fortran/foo.f @@ -0,0 +1,9 @@ + module test_mod + interface dummy + module procedure sub + end interface + contains + subroutine sub + end subroutine + + end module test_mod diff --git a/Tests/Fortran/mysub.f b/Tests/Fortran/mysub.f new file mode 100644 index 0000000..36b4155 --- /dev/null +++ b/Tests/Fortran/mysub.f @@ -0,0 +1,4 @@ + subroutine mysub + end subroutine + subroutine my_sub + end subroutine -- cgit v0.12