diff --git a/Modules/FortranCInterface.cmake b/Modules/FortranCInterface.cmake index 980c7cb46..8c8c3ac69 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 ca7d89a4d..5df5280ee 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 000000000..f03aec17a --- /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 000000000..dbbb3a4e9 --- /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 000000000..36b415530 --- /dev/null +++ b/Tests/Fortran/mysub.f @@ -0,0 +1,4 @@ + subroutine mysub + end subroutine + subroutine my_sub + end subroutine