ExternalProject: Report error if local variables are not defined

Since in some situations, ExternalProject module may be included in
a sub-directory, functions will be available in the global scope but
local variables like "_ep_keywords_<keyword>" will not be defined, this
commit checks and reports an error indicating that the ExternalProject
module must be explicitly included before using any of the ExternalProject_*
functions  that require the module's inclusion within the current scope
or above.

Co-authored-by: Pablo Hernandez <pablo.hernandez@kitware.com>
Co-authored-by: Craig Scott <craig.scott@crascit.com>
This commit is contained in:
Jean-Christophe Fillion-Robin
2018-08-10 12:30:48 -04:00
committed by Craig Scott
parent eba2b13a83
commit df1ddeec12
8 changed files with 48 additions and 0 deletions
+5
View File
@@ -934,6 +934,11 @@ function(_ep_parse_arguments f name ns args)
# We loop through ARGN and consider the namespace starting with an
# upper-case letter followed by at least two more upper-case letters,
# numbers or underscores to be keywords.
if(NOT DEFINED _ExternalProject_SELF)
message(FATAL_ERROR "error: ExternalProject module must be explicitly included before using ${f} function")
endif()
set(key)
foreach(arg IN LISTS args)
@@ -0,0 +1 @@
1
@@ -0,0 +1,7 @@
^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\):
error: ExternalProject module must be explicitly included before using
ExternalProject_Add function
Call Stack \(most recent call first\):
.*/Modules/ExternalProject.cmake:[0-9]+ \(_ep_parse_arguments\)
IncludeScope-Add.cmake:[0-9]+ \(ExternalProject_Add\)
CMakeLists.txt:[0-9]+ \(include\)$
@@ -0,0 +1,12 @@
function(IncludeScope_IncludeOnly)
include(ExternalProject)
endfunction()
IncludeScope_IncludeOnly()
ExternalProject_Add(MyProj
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
@@ -0,0 +1 @@
1
@@ -0,0 +1,7 @@
^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\):
error: ExternalProject module must be explicitly included before using
ExternalProject_Add_Step function
Call Stack \(most recent call first\):
.*/Modules/ExternalProject.cmake:[0-9]+ \(_ep_parse_arguments\)
IncludeScope-Add_Step.cmake:[0-9]+ \(ExternalProject_Add_Step\)
CMakeLists.txt:[0-9]+ \(include\)$
@@ -0,0 +1,13 @@
function(IncludeScope_DefineProj)
include(ExternalProject)
ExternalProject_Add(MyProj
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
endfunction()
IncludeScope_DefineProj()
ExternalProject_Add_Step(MyProj extraStep COMMENT "Foo")
@@ -1,5 +1,7 @@
include(RunCMake)
run_cmake(IncludeScope-Add)
run_cmake(IncludeScope-Add_Step)
run_cmake(NoOptions)
run_cmake(SourceEmpty)
run_cmake(SourceMissing)