فهرست منبع

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
6فایلهای تغییر یافته به همراه35 افزوده شده و 11 حذف شده
  1. 14 2
      Tests/Fortran/CMakeLists.txt
  2. 0 6
      Tests/Fortran/foo.cxx
  3. 5 0
      Tests/Fortran/mainc.c
  4. 6 0
      Tests/Fortran/maincxx.c
  5. 4 3
      Tests/Fortran/myc.c
  6. 6 0
      Tests/Fortran/mycxx.cxx

+ 14 - 2
Tests/Fortran/CMakeLists.txt

@@ -30,7 +30,6 @@ function(test_fortran_c_interface_module)
     endif(FORTRAN_C_MODULE_MANGLING_FOUND)
     endif(FORTRAN_C_MODULE_MANGLING_FOUND)
   endif()
   endif()
   set(FORTRAN_FUNCTIONS ${FORTRAN_FUNCTIONS} my_sub mysub )
   set(FORTRAN_FUNCTIONS ${FORTRAN_FUNCTIONS} my_sub mysub )
-  set(srcs ${srcs} mysub.f foo.c foo.cxx)
   create_fortran_c_interface("F_" FORTRAN_FUNCTIONS 
   create_fortran_c_interface("F_" FORTRAN_FUNCTIONS 
     "${testf_BINARY_DIR}/foo.h")
     "${testf_BINARY_DIR}/foo.h")
   include_directories("${testf_BINARY_DIR}")
   include_directories("${testf_BINARY_DIR}")
@@ -61,7 +60,20 @@ function(test_fortran_c_interface_module)
   endif()
   endif()
   message("Fortran = ${CMAKE_Fortran_COMPILER_ID}")
   message("Fortran = ${CMAKE_Fortran_COMPILER_ID}")
   message("C = ${CMAKE_C_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
   # print out some stuff to help debug on machines via cdash
   file(READ "${testf_BINARY_DIR}/foo.h" fooh)
   file(READ "${testf_BINARY_DIR}/foo.h" fooh)
   message("foo.h contents:\n${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"
 #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_mysub();
   F_my_sub();
   F_my_sub();
 #ifdef F_test_mod_sub
 #ifdef F_test_mod_sub
   F_test_mod_sub();
   F_test_mod_sub();
 #endif
 #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();
+}