瀏覽代碼

ENH: add new test to make sure c and cxx flags are going to the right files

Bill Hoffman 20 年之前
父節點
當前提交
8dc6db4777

+ 2 - 1
Tests/Complex/Executable/CMakeLists.txt

@@ -3,6 +3,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 1.3)
 # Create exe. 
 #
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
+SET(CMAKE_C_FLAGS "${CMAKE_C} -DTEST_C_FLAGS")
 
 # Link to CMake lib
 LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
@@ -14,7 +15,7 @@ SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared
 LINK_LIBRARIES(${COMPLEX_LIBS})
 
 ADD_EXECUTABLE(A A.cxx)
-ADD_EXECUTABLE(complex complex)
+ADD_EXECUTABLE(complex complex testcflags.c)
 ADD_EXECUTABLE(complex.file complex.file.cxx)
 TARGET_LINK_LIBRARIES(complex CMakeLib cmsys cmexpat cmzlib)
 IF (UNIX)

+ 17 - 0
Tests/Complex/Executable/complex.cxx

@@ -258,6 +258,8 @@ void TestCMGeneratedFileSTream()
   cmSystemTools::RemoveFile(file2tmp.c_str());
   cmSystemTools::RemoveFile(file3tmp.c_str());
 }
+// defined in testcflags.c
+extern "C" int TestCFlags(char* m);
 
 // ======================================================================
 
@@ -372,6 +374,21 @@ int main()
 #else
   cmPassed("CMake CMAKE_CXX_FLAGS is being passed to the compiler.");
 #endif
+#ifdef TEST_C_FLAGS
+  cmFailed("CMake CMAKE_C_FLAGS are being passed to c++ files the compiler!");
+#else
+  cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files.");
+#endif
+  char msg[1024];
+  if(TestCFlags(msg))
+    {
+    cmPassed(
+     "CMake CMAKE_C_FLAGS are being passed to c files and CXX flags are not.");
+    }
+  else
+    {
+    cmFailed(msg);
+    }
   // ----------------------------------------------------------------------
   // Test ADD_DEFINITIONS
 

+ 15 - 0
Tests/Complex/Executable/testcflags.c

@@ -0,0 +1,15 @@
+#include <string.h>
+int TestCFlags(char* m)
+{
+  // TEST_CXX_FLAGS should not be defined in a c file
+#ifdef TEST_CXX_FLAGS
+  strcpy(m, "CMake CMAKE_CXX_FLAGS (TEST_CXX_FLAGS) found in c file.");
+  return 0;
+#endif
+  // TEST_C_FLAGS should be defined in a c file
+#ifndef TEST_C_FLAGS  
+  strcpy(m, "CMake CMAKE_C_FLAGS (TEST_C_FLAGS) not found in c file.");
+  return 0;
+#endif
+  return 1;
+}

+ 2 - 1
Tests/ComplexOneConfig/Executable/CMakeLists.txt

@@ -3,6 +3,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 1.3)
 # Create exe. 
 #
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
+SET(CMAKE_C_FLAGS "${CMAKE_C} -DTEST_C_FLAGS")
 
 # Link to CMake lib
 LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
@@ -14,7 +15,7 @@ SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared
 LINK_LIBRARIES(${COMPLEX_LIBS})
 
 ADD_EXECUTABLE(A A.cxx)
-ADD_EXECUTABLE(complex complex)
+ADD_EXECUTABLE(complex complex testcflags.c)
 ADD_EXECUTABLE(complex.file complex.file.cxx)
 TARGET_LINK_LIBRARIES(complex CMakeLib cmsys cmexpat cmzlib)
 IF (UNIX)

+ 17 - 0
Tests/ComplexOneConfig/Executable/complex.cxx

@@ -258,6 +258,8 @@ void TestCMGeneratedFileSTream()
   cmSystemTools::RemoveFile(file2tmp.c_str());
   cmSystemTools::RemoveFile(file3tmp.c_str());
 }
+// defined in testcflags.c
+extern "C" int TestCFlags(char* m);
 
 // ======================================================================
 
@@ -372,6 +374,21 @@ int main()
 #else
   cmPassed("CMake CMAKE_CXX_FLAGS is being passed to the compiler.");
 #endif
+#ifdef TEST_C_FLAGS
+  cmFailed("CMake CMAKE_C_FLAGS are being passed to c++ files the compiler!");
+#else
+  cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files.");
+#endif
+  char msg[1024];
+  if(TestCFlags(msg))
+    {
+    cmPassed(
+     "CMake CMAKE_C_FLAGS are being passed to c files and CXX flags are not.");
+    }
+  else
+    {
+    cmFailed(msg);
+    }
   // ----------------------------------------------------------------------
   // Test ADD_DEFINITIONS
 

+ 15 - 0
Tests/ComplexOneConfig/Executable/testcflags.c

@@ -0,0 +1,15 @@
+#include <string.h>
+int TestCFlags(char* m)
+{
+  // TEST_CXX_FLAGS should not be defined in a c file
+#ifdef TEST_CXX_FLAGS
+  strcpy(m, "CMake CMAKE_CXX_FLAGS (TEST_CXX_FLAGS) found in c file.");
+  return 0;
+#endif
+  // TEST_C_FLAGS should be defined in a c file
+#ifndef TEST_C_FLAGS  
+  strcpy(m, "CMake CMAKE_C_FLAGS (TEST_C_FLAGS) not found in c file.");
+  return 0;
+#endif
+  return 1;
+}

+ 2 - 1
Tests/ComplexRelativePaths/Executable/CMakeLists.txt

@@ -3,6 +3,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 1.3)
 # Create exe. 
 #
 SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DTEST_CXX_FLAGS")
+SET(CMAKE_C_FLAGS "${CMAKE_C} -DTEST_C_FLAGS")
 
 # Link to CMake lib
 LINK_DIRECTORIES(${Complex_BINARY_DIR}/../../Source)
@@ -14,7 +15,7 @@ SET(COMPLEX_LIBS CMakeTestLibrary;CMakeTestLibraryShared;CMakeTestCLibraryShared
 LINK_LIBRARIES(${COMPLEX_LIBS})
 
 ADD_EXECUTABLE(A A.cxx)
-ADD_EXECUTABLE(complex complex)
+ADD_EXECUTABLE(complex complex testcflags.c)
 ADD_EXECUTABLE(complex.file complex.file.cxx)
 TARGET_LINK_LIBRARIES(complex CMakeLib cmsys cmexpat cmzlib)
 IF (UNIX)

+ 17 - 0
Tests/ComplexRelativePaths/Executable/complex.cxx

@@ -258,6 +258,8 @@ void TestCMGeneratedFileSTream()
   cmSystemTools::RemoveFile(file2tmp.c_str());
   cmSystemTools::RemoveFile(file3tmp.c_str());
 }
+// defined in testcflags.c
+extern "C" int TestCFlags(char* m);
 
 // ======================================================================
 
@@ -372,6 +374,21 @@ int main()
 #else
   cmPassed("CMake CMAKE_CXX_FLAGS is being passed to the compiler.");
 #endif
+#ifdef TEST_C_FLAGS
+  cmFailed("CMake CMAKE_C_FLAGS are being passed to c++ files the compiler!");
+#else
+  cmPassed("CMake CMAKE_C_FLAGS are not being passed to c++ files.");
+#endif
+  char msg[1024];
+  if(TestCFlags(msg))
+    {
+    cmPassed(
+     "CMake CMAKE_C_FLAGS are being passed to c files and CXX flags are not.");
+    }
+  else
+    {
+    cmFailed(msg);
+    }
   // ----------------------------------------------------------------------
   // Test ADD_DEFINITIONS
 

+ 15 - 0
Tests/ComplexRelativePaths/Executable/testcflags.c

@@ -0,0 +1,15 @@
+#include <string.h>
+int TestCFlags(char* m)
+{
+  // TEST_CXX_FLAGS should not be defined in a c file
+#ifdef TEST_CXX_FLAGS
+  strcpy(m, "CMake CMAKE_CXX_FLAGS (TEST_CXX_FLAGS) found in c file.");
+  return 0;
+#endif
+  // TEST_C_FLAGS should be defined in a c file
+#ifndef TEST_C_FLAGS  
+  strcpy(m, "CMake CMAKE_C_FLAGS (TEST_C_FLAGS) not found in c file.");
+  return 0;
+#endif
+  return 1;
+}