Преглед изворни кода

Test C, C++, Fortran interface combinations

Previously the Fortran test created a single executable containing C,
C++, and Fortran sources.  This commit divides the executable into three
libraries corresponding to each language, and two executables testing
Fortran/C only and Fortran/C/C++ together.  The result tests more
combinations of using the languages together, and that language
requirements propagate through linking.
Brad King пре 16 година
родитељ
комит
f3cd1e06f5

+ 14 - 2
Tests/Fortran/CMakeLists.txt

@@ -30,7 +30,6 @@ function(test_fortran_c_interface_module)
     endif(FORTRAN_C_MODULE_MANGLING_FOUND)
   endif()
   set(FORTRAN_FUNCTIONS ${FORTRAN_FUNCTIONS} my_sub mysub )
-  set(srcs ${srcs} mysub.f foo.c foo.cxx)
   create_fortran_c_interface("F_" FORTRAN_FUNCTIONS 
     "${testf_BINARY_DIR}/foo.h")
   include_directories("${testf_BINARY_DIR}")
@@ -61,7 +60,20 @@ function(test_fortran_c_interface_module)
   endif()
   message("Fortran = ${CMAKE_Fortran_COMPILER_ID}")
   message("C = ${CMAKE_C_COMPILER_ID}")
-  add_executable(foo ${srcs})
+
+  add_library(myfort mysub.f ${srcs})
+
+  add_library(myc myc.c)
+  target_link_libraries(myc myfort)
+
+  add_library(mycxx mycxx.cxx)
+  target_link_libraries(mycxx myc)
+
+  add_executable(mainc mainc.c)
+  target_link_libraries(mainc myc)
+  add_executable(maincxx maincxx.c)
+  target_link_libraries(maincxx mycxx)
+
   # print out some stuff to help debug on machines via cdash
   file(READ "${testf_BINARY_DIR}/foo.h" fooh)
   message("foo.h contents:\n${fooh}")

+ 0 - 6
Tests/Fortran/foo.cxx

@@ -1,6 +0,0 @@
-extern "C" int foo(void);
-int main()
-{
-  delete new int;
-  return foo();
-}

+ 5 - 0
Tests/Fortran/mainc.c

@@ -0,0 +1,5 @@
+extern int myc(void);
+int main()
+{
+  return myc();
+}

+ 6 - 0
Tests/Fortran/maincxx.c

@@ -0,0 +1,6 @@
+extern int myc(void);
+extern int mycxx(void);
+int main()
+{
+  return myc() + mycxx();
+}

+ 4 - 3
Tests/Fortran/foo.c → Tests/Fortran/myc.c

@@ -1,11 +1,12 @@
 #include "foo.h"
-extern F_test_mod_sub();
-extern F_mysub();
-int foo()
+extern F_test_mod_sub(void);
+extern F_mysub(void);
+int myc(void)
 {
   F_mysub();
   F_my_sub();
 #ifdef F_test_mod_sub
   F_test_mod_sub();
 #endif
+  return 0;
 }

+ 6 - 0
Tests/Fortran/mycxx.cxx

@@ -0,0 +1,6 @@
+extern "C" int myc(void);
+extern "C" int mycxx(void)
+{
+  delete new int;
+  return myc();
+}