From d90f49b8948c3047cb0839ce505f796952dbd880 Mon Sep 17 00:00:00 2001 From: Brad King Date: Tue, 12 Mar 2013 18:20:01 -0400 Subject: [PATCH] CTest: Fail early without PROJECT_BINARY_DIR (#14005) Do not use PROJECT_BINARY_DIR before it is defined. If it is not defined when needed, fail with an error message suggesting that the project() command be invoked first. --- Modules/CTestTargets.cmake | 4 ++++ Tests/RunCMake/CMakeLists.txt | 1 + Tests/RunCMake/CTest/BeforeProject-result.txt | 1 + Tests/RunCMake/CTest/BeforeProject-stderr.txt | 6 ++++++ Tests/RunCMake/CTest/BeforeProject.cmake | 2 ++ Tests/RunCMake/CTest/CMakeLists.txt | 5 +++++ Tests/RunCMake/CTest/RunCMakeTest.cmake | 5 +++++ 7 files changed, 24 insertions(+) create mode 100644 Tests/RunCMake/CTest/BeforeProject-result.txt create mode 100644 Tests/RunCMake/CTest/BeforeProject-stderr.txt create mode 100644 Tests/RunCMake/CTest/BeforeProject.cmake create mode 100644 Tests/RunCMake/CTest/CMakeLists.txt create mode 100644 Tests/RunCMake/CTest/RunCMakeTest.cmake diff --git a/Modules/CTestTargets.cmake b/Modules/CTestTargets.cmake index fd4bd8024..5b6e062d0 100644 --- a/Modules/CTestTargets.cmake +++ b/Modules/CTestTargets.cmake @@ -16,6 +16,10 @@ if(NOT RUN_FROM_CTEST_OR_DART) message(FATAL_ERROR "Do not incldue CTestTargets.cmake directly") endif() +if(NOT PROJECT_BINARY_DIR) + message(FATAL_ERROR "Do not include(CTest) before calling project().") +endif() + # make directories in the binary tree file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/Testing/Temporary) get_filename_component(CMAKE_HOST_PATH ${CMAKE_COMMAND} PATH) diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index dba772d88..4b4bd31bc 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -52,6 +52,7 @@ if(XCODE_VERSION AND "${XCODE_VERSION}" VERSION_LESS 3) endif() add_RunCMake_test(CMP0019) +add_RunCMake_test(CTest) if(UNIX AND "${CMAKE_TEST_GENERATOR}" MATCHES "Unix Makefiles") add_RunCMake_test(CompilerChange) endif() diff --git a/Tests/RunCMake/CTest/BeforeProject-result.txt b/Tests/RunCMake/CTest/BeforeProject-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/CTest/BeforeProject-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/CTest/BeforeProject-stderr.txt b/Tests/RunCMake/CTest/BeforeProject-stderr.txt new file mode 100644 index 000000000..354896bc6 --- /dev/null +++ b/Tests/RunCMake/CTest/BeforeProject-stderr.txt @@ -0,0 +1,6 @@ +CMake Error at .*/Modules/CTest.cmake:[0-9]+ \(build_command\): + build_command\(\) requires CMAKE_MAKE_PROGRAM to be defined. Call project\(\) + or enable_language\(\) first. +Call Stack \(most recent call first\): + BeforeProject.cmake:[0-9]+ \(include\) + CMakeLists.txt:[0-9]+ \(include\) diff --git a/Tests/RunCMake/CTest/BeforeProject.cmake b/Tests/RunCMake/CTest/BeforeProject.cmake new file mode 100644 index 000000000..903ca6933 --- /dev/null +++ b/Tests/RunCMake/CTest/BeforeProject.cmake @@ -0,0 +1,2 @@ +include(CTest) +project(${RunCMake_TEST} NONE) diff --git a/Tests/RunCMake/CTest/CMakeLists.txt b/Tests/RunCMake/CTest/CMakeLists.txt new file mode 100644 index 000000000..f6e84c04d --- /dev/null +++ b/Tests/RunCMake/CTest/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 2.8) +if(NOT NoProject) + project(${RunCMake_TEST} NONE) +endif() +include(${RunCMake_TEST}.cmake) diff --git a/Tests/RunCMake/CTest/RunCMakeTest.cmake b/Tests/RunCMake/CTest/RunCMakeTest.cmake new file mode 100644 index 000000000..a6f684224 --- /dev/null +++ b/Tests/RunCMake/CTest/RunCMakeTest.cmake @@ -0,0 +1,5 @@ +include(RunCMake) + +set(RunCMake_TEST_OPTIONS -DNoProject=1) +run_cmake(BeforeProject) +unset(RunCMake_TEST_OPTIONS)