From dcb188363d5faba80664c17e9a4713bbd5c0b372 Mon Sep 17 00:00:00 2001 From: Brad King Date: Fri, 8 May 2015 09:18:50 -0400 Subject: [PATCH] ExternalProject: Improve error when SOURCE_DIR is missing (#15560) Mention the SOURCE_DIR that we checked and found empty or missing so that the user can see the full path to what we expected to find. --- Modules/ExternalProject.cmake | 13 ++++++++++++- .../ExternalProject/NoOptions-result.txt | 1 + .../ExternalProject/NoOptions-stderr.txt | 18 ++++++++++++++++++ Tests/RunCMake/ExternalProject/NoOptions.cmake | 2 ++ .../ExternalProject/RunCMakeTest.cmake | 3 +++ .../ExternalProject/SourceEmpty-result.txt | 1 + .../ExternalProject/SourceEmpty-stderr.txt | 18 ++++++++++++++++++ .../RunCMake/ExternalProject/SourceEmpty.cmake | 5 +++++ .../ExternalProject/SourceMissing-result.txt | 1 + .../ExternalProject/SourceMissing-stderr.txt | 18 ++++++++++++++++++ .../ExternalProject/SourceMissing.cmake | 2 ++ 11 files changed, 81 insertions(+), 1 deletion(-) create mode 100644 Tests/RunCMake/ExternalProject/NoOptions-result.txt create mode 100644 Tests/RunCMake/ExternalProject/NoOptions-stderr.txt create mode 100644 Tests/RunCMake/ExternalProject/NoOptions.cmake create mode 100644 Tests/RunCMake/ExternalProject/SourceEmpty-result.txt create mode 100644 Tests/RunCMake/ExternalProject/SourceEmpty-stderr.txt create mode 100644 Tests/RunCMake/ExternalProject/SourceEmpty.cmake create mode 100644 Tests/RunCMake/ExternalProject/SourceMissing-result.txt create mode 100644 Tests/RunCMake/ExternalProject/SourceMissing-stderr.txt create mode 100644 Tests/RunCMake/ExternalProject/SourceMissing.cmake diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 97bebc029..7cf9d79b4 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -1866,7 +1866,18 @@ function(_ep_add_download_command name) else() _ep_is_dir_empty("${source_dir}" empty) if(${empty}) - message(SEND_ERROR "error: no download info for '${name}' -- please specify existing/non-empty SOURCE_DIR or one of URL, CVS_REPOSITORY and CVS_MODULE, SVN_REPOSITORY, GIT_REPOSITORY, HG_REPOSITORY or DOWNLOAD_COMMAND") + message(SEND_ERROR + "No download info given for '${name}' and its source directory:\n" + " ${source_dir}\n" + "is not an existing non-empty directory. Please specify one of:\n" + " * SOURCE_DIR with an existing non-empty directory\n" + " * URL\n" + " * GIT_REPOSITORY\n" + " * HG_REPOSITORY\n" + " * CVS_REPOSITORY and CVS_MODULE\n" + " * SVN_REVISION\n" + " * DOWNLOAD_COMMAND" + ) endif() endif() diff --git a/Tests/RunCMake/ExternalProject/NoOptions-result.txt b/Tests/RunCMake/ExternalProject/NoOptions-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/ExternalProject/NoOptions-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/ExternalProject/NoOptions-stderr.txt b/Tests/RunCMake/ExternalProject/NoOptions-stderr.txt new file mode 100644 index 000000000..12a76c5d4 --- /dev/null +++ b/Tests/RunCMake/ExternalProject/NoOptions-stderr.txt @@ -0,0 +1,18 @@ +^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\): + No download info given for 'MyProj' and its source directory: + + .*/Tests/RunCMake/ExternalProject/NoOptions-build/MyProj-prefix/src/MyProj + + is not an existing non-empty directory. Please specify one of: + + \* SOURCE_DIR with an existing non-empty directory + \* URL + \* GIT_REPOSITORY + \* HG_REPOSITORY + \* CVS_REPOSITORY and CVS_MODULE + \* SVN_REVISION + \* DOWNLOAD_COMMAND +Call Stack \(most recent call first\): + .*/Modules/ExternalProject.cmake:[0-9]+ \(_ep_add_download_command\) + NoOptions.cmake:[0-9]+ \(ExternalProject_Add\) + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/ExternalProject/NoOptions.cmake b/Tests/RunCMake/ExternalProject/NoOptions.cmake new file mode 100644 index 000000000..7613c156a --- /dev/null +++ b/Tests/RunCMake/ExternalProject/NoOptions.cmake @@ -0,0 +1,2 @@ +include(ExternalProject) +ExternalProject_Add(MyProj) diff --git a/Tests/RunCMake/ExternalProject/RunCMakeTest.cmake b/Tests/RunCMake/ExternalProject/RunCMakeTest.cmake index a82ffc96c..e038409bf 100644 --- a/Tests/RunCMake/ExternalProject/RunCMakeTest.cmake +++ b/Tests/RunCMake/ExternalProject/RunCMakeTest.cmake @@ -1,5 +1,8 @@ include(RunCMake) +run_cmake(NoOptions) +run_cmake(SourceEmpty) +run_cmake(SourceMissing) run_cmake(CMAKE_CACHE_ARGS) run_cmake(CMAKE_CACHE_DEFAULT_ARGS) run_cmake(CMAKE_CACHE_mix) diff --git a/Tests/RunCMake/ExternalProject/SourceEmpty-result.txt b/Tests/RunCMake/ExternalProject/SourceEmpty-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/ExternalProject/SourceEmpty-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/ExternalProject/SourceEmpty-stderr.txt b/Tests/RunCMake/ExternalProject/SourceEmpty-stderr.txt new file mode 100644 index 000000000..58a343ccf --- /dev/null +++ b/Tests/RunCMake/ExternalProject/SourceEmpty-stderr.txt @@ -0,0 +1,18 @@ +^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\): + No download info given for 'MyProj' and its source directory: + + .*/Tests/RunCMake/ExternalProject/SourceEmpty-build/SourceEmpty + + is not an existing non-empty directory. Please specify one of: + + \* SOURCE_DIR with an existing non-empty directory + \* URL + \* GIT_REPOSITORY + \* HG_REPOSITORY + \* CVS_REPOSITORY and CVS_MODULE + \* SVN_REVISION + \* DOWNLOAD_COMMAND +Call Stack \(most recent call first\): + .*/Modules/ExternalProject.cmake:[0-9]+ \(_ep_add_download_command\) + SourceEmpty.cmake:[0-9]+ \(ExternalProject_Add\) + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/ExternalProject/SourceEmpty.cmake b/Tests/RunCMake/ExternalProject/SourceEmpty.cmake new file mode 100644 index 000000000..db746e9e4 --- /dev/null +++ b/Tests/RunCMake/ExternalProject/SourceEmpty.cmake @@ -0,0 +1,5 @@ +include(ExternalProject) +set(source_dir "${CMAKE_CURRENT_BINARY_DIR}/SourceEmpty") +file(REMOVE_RECURSE "${source_dir}") +file(MAKE_DIRECTORY "${source_dir}") +ExternalProject_Add(MyProj SOURCE_DIR "${source_dir}") diff --git a/Tests/RunCMake/ExternalProject/SourceMissing-result.txt b/Tests/RunCMake/ExternalProject/SourceMissing-result.txt new file mode 100644 index 000000000..d00491fd7 --- /dev/null +++ b/Tests/RunCMake/ExternalProject/SourceMissing-result.txt @@ -0,0 +1 @@ +1 diff --git a/Tests/RunCMake/ExternalProject/SourceMissing-stderr.txt b/Tests/RunCMake/ExternalProject/SourceMissing-stderr.txt new file mode 100644 index 000000000..e62f7cf5a --- /dev/null +++ b/Tests/RunCMake/ExternalProject/SourceMissing-stderr.txt @@ -0,0 +1,18 @@ +^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\): + No download info given for 'MyProj' and its source directory: + + .*/Tests/RunCMake/ExternalProject/SourceMissing-build/SourceMissing + + is not an existing non-empty directory. Please specify one of: + + \* SOURCE_DIR with an existing non-empty directory + \* URL + \* GIT_REPOSITORY + \* HG_REPOSITORY + \* CVS_REPOSITORY and CVS_MODULE + \* SVN_REVISION + \* DOWNLOAD_COMMAND +Call Stack \(most recent call first\): + .*/Modules/ExternalProject.cmake:[0-9]+ \(_ep_add_download_command\) + SourceMissing.cmake:[0-9]+ \(ExternalProject_Add\) + CMakeLists.txt:[0-9]+ \(include\)$ diff --git a/Tests/RunCMake/ExternalProject/SourceMissing.cmake b/Tests/RunCMake/ExternalProject/SourceMissing.cmake new file mode 100644 index 000000000..8f369d48d --- /dev/null +++ b/Tests/RunCMake/ExternalProject/SourceMissing.cmake @@ -0,0 +1,2 @@ +include(ExternalProject) +ExternalProject_Add(MyProj SOURCE_DIR SourceMissing)