summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Source/cmGlobalXCodeGenerator.cxx6
-rw-r--r--Tests/CMakeLists.txt33
-rw-r--r--Tests/CMakeTests/CMakeLists.txt12
-rw-r--r--Tests/CMakeTests/CheckSourceTreeTest.cmake.in49
4 files changed, 94 insertions, 6 deletions
diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx
index 8bbc8fe..0d3ddce 100644
--- a/Source/cmGlobalXCodeGenerator.cxx
+++ b/Source/cmGlobalXCodeGenerator.cxx
@@ -2714,11 +2714,17 @@ void cmGlobalXCodeGenerator
buildSettings->AddAttribute("MACOSX_DEPLOYMENT_TARGET",
this->CreateString(deploymentTarget));
}
+
+ std::string symroot = root->GetMakefile()->GetCurrentOutputDirectory();
+ symroot += "/build";
+ buildSettings->AddAttribute("SYMROOT", this->CreateString(symroot.c_str()));
+
for( std::vector<cmXCodeObject*>::iterator i = configs.begin();
i != configs.end(); ++i)
{
(*i)->AddAttribute("buildSettings", buildSettings);
}
+
this->RootObject->AddAttribute("buildConfigurationList",
this->CreateObjectReference(configlist));
diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt
index 5bf4c82..3b6449c 100644
--- a/Tests/CMakeLists.txt
+++ b/Tests/CMakeLists.txt
@@ -37,6 +37,21 @@ IF(BUILD_TESTING)
MARK_AS_ADVANCED(CTEST_TEST_CTEST)
ENDIF (CMAKE_RUN_LONG_TESTS)
+ # Should tests that use CVS be run?
+ #
+ find_package(CVS)
+ set(do_cvs_tests 0)
+
+ if(CVS_EXECUTABLE)
+ set(do_cvs_tests 1)
+ endif()
+
+ if(do_cvs_tests AND NOT UNIX)
+ if("${CVS_EXECUTABLE}" MATCHES "cygwin")
+ set(do_cvs_tests 0)
+ endif()
+ endif()
+
# Should CPack tests be run? By default, yes, but...
#
# Disable packaging test on Apple 10.3 and below. PackageMaker starts
@@ -947,9 +962,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel
MARK_AS_ADVANCED(BZR_EXECUTABLE)
SET(CTEST_TEST_UPDATE_BZR 0)
IF(BZR_EXECUTABLE)
- IF(NOT "${CVS_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
+ IF(NOT "${BZR_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
SET(CTEST_TEST_UPDATE_BZR 1)
- ENDIF(NOT "${CVS_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
+ ENDIF(NOT "${BZR_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
ENDIF(BZR_EXECUTABLE)
IF(CTEST_TEST_UPDATE_BZR)
# Check if xmloutput plugin is there
@@ -979,9 +994,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel
MARK_AS_ADVANCED(GIT_EXECUTABLE)
SET(CTEST_TEST_UPDATE_GIT 0)
IF(GIT_EXECUTABLE)
- IF(NOT "${CVS_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
+ IF(NOT "${GIT_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
SET(CTEST_TEST_UPDATE_GIT 1)
- ENDIF(NOT "${CVS_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
+ ENDIF(NOT "${GIT_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
ENDIF(GIT_EXECUTABLE)
IF(CTEST_TEST_UPDATE_GIT)
SET(CTestUpdateGIT_DIR "CTest UpdateGIT")
@@ -998,9 +1013,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel
MARK_AS_ADVANCED(HG_EXECUTABLE)
SET(CTEST_TEST_UPDATE_HG 0)
IF(HG_EXECUTABLE)
- IF(NOT "${CVS_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
+ IF(NOT "${HG_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
SET(CTEST_TEST_UPDATE_HG 1)
- ENDIF(NOT "${CVS_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
+ ENDIF(NOT "${HG_EXECUTABLE}" MATCHES "cygwin" OR UNIX)
ENDIF(HG_EXECUTABLE)
IF(CTEST_TEST_UPDATE_HG)
SET(CTestUpdateHG_DIR "CTest UpdateHG")
@@ -1236,3 +1251,9 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=CVS -P ${CMake_SOURCE_DIR}/Utilities/Rel
ENDIF(BUILD_TESTING)
SUBDIRS(CMakeTests)
+
+if(BUILD_TESTING)
+ if(do_cvs_tests)
+ add_test(IsSourceTreeUnmodified ${CMAKE_CMAKE_COMMAND} -P "IsSourceTreeUnmodified.cmake")
+ endif(do_cvs_tests)
+endif(BUILD_TESTING)
diff --git a/Tests/CMakeTests/CMakeLists.txt b/Tests/CMakeTests/CMakeLists.txt
index 32c5412..a1962bf 100644
--- a/Tests/CMakeTests/CMakeLists.txt
+++ b/Tests/CMakeTests/CMakeLists.txt
@@ -25,3 +25,15 @@ SET(GetPrerequisites_PreArgs
"-DCTEST_CONFIGURATION_TYPE:STRING=\\\${CTEST_CONFIGURATION_TYPE}"
)
AddCMakeTest(GetPrerequisites "${GetPrerequisites_PreArgs}")
+
+# Run CheckSourceTree as the very last test in the CMake/CTest/CPack test
+# suite. It detects if any changes have been made to the CMake source tree
+# by any previous configure, build or test steps.
+#
+if(do_cvs_tests)
+ set(CheckSourceTree_PreArgs
+ "-DCMake_SOURCE_DIR:PATH=${CMake_SOURCE_DIR}"
+ "-DCVS_EXECUTABLE:STRING=${CVS_EXECUTABLE}"
+ )
+ AddCMakeTest(CheckSourceTree "${CheckSourceTree_PreArgs}")
+endif()
diff --git a/Tests/CMakeTests/CheckSourceTreeTest.cmake.in b/Tests/CMakeTests/CheckSourceTreeTest.cmake.in
new file mode 100644
index 0000000..71718b6
--- /dev/null
+++ b/Tests/CMakeTests/CheckSourceTreeTest.cmake.in
@@ -0,0 +1,49 @@
+# Check the CMake source tree and report anything suspicious...
+#
+message(STATUS
+ "=============================================================================")
+message(STATUS "CTEST_FULL_OUTPUT (Avoid ctest truncation of output)")
+message(STATUS "")
+message(STATUS "CMake_SOURCE_DIR='${CMake_SOURCE_DIR}'")
+message(STATUS "CVS_EXECUTABLE='${CVS_EXECUTABLE}'")
+message(STATUS "ENV{DASHBOARD_TEST_FROM_CTEST}='$ENV{DASHBOARD_TEST_FROM_CTEST}'")
+message(STATUS "")
+
+
+# Check with "cvs -q -n up -dP" if there are any local modifications to the
+# CMake source tree:
+#
+message(STATUS
+ "=============================================================================")
+execute_process(COMMAND ${CVS_EXECUTABLE} -q -n up -dP
+ WORKING_DIRECTORY ${CMake_SOURCE_DIR}
+ OUTPUT_VARIABLE ov
+ ERROR_VARIABLE ev
+ RESULT_VARIABLE rv)
+
+set(modifications 0)
+if(NOT ov STREQUAL "")
+ set(modifications 1)
+endif()
+
+message(STATUS "Results of running '${CVS_EXECUTABLE} -q -n up -dP'")
+message(STATUS "rv='${rv}'")
+message(STATUS "ov='${ov}'")
+message(STATUS "ev='${ev}'")
+message(STATUS "modifications='${modifications}'")
+
+
+# Decide if the test passes or fails:
+#
+if("$ENV{DASHBOARD_TEST_FROM_CTEST}" STREQUAL "")
+ message(STATUS "non-dashboard interactive test run")
+ # developers are allowed to have local modifications... :-)
+else()
+ message(STATUS "dashboard test run")
+
+ if(modifications)
+ message(FATAL_ERROR "test fails: source tree modifications")
+ endif()
+endif()
+
+message(STATUS "test passes")