Переглянути джерело

ENH: add test for FortranCInterface

Bill Hoffman 17 роки тому
батько
коміт
84a4222314

+ 3 - 3
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 )

+ 16 - 1
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

+ 11 - 0
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
+}

+ 9 - 0
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

+ 4 - 0
Tests/Fortran/mysub.f

@@ -0,0 +1,4 @@
+      subroutine mysub
+      end subroutine
+      subroutine my_sub
+      end subroutine