ExternalProject: Allow dependencies on INTERFACE libraries
Respect INTERFACE library property whitelist. Check that a target has type "UTILITY" before querying other properties.
This commit is contained in:
parent
c0502faa4b
commit
e1c6df392b
|
@ -1539,6 +1539,11 @@ function(ExternalProject_Add_StepDependencies name step)
|
||||||
message(FATAL_ERROR "Cannot find target \"${name}\". Perhaps it has not yet been created using ExternalProject_Add.")
|
message(FATAL_ERROR "Cannot find target \"${name}\". Perhaps it has not yet been created using ExternalProject_Add.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
get_property(type TARGET ${name} PROPERTY TYPE)
|
||||||
|
if(NOT type STREQUAL "UTILITY")
|
||||||
|
message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
|
||||||
|
endif()
|
||||||
|
|
||||||
get_property(is_ep TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT)
|
get_property(is_ep TARGET ${name} PROPERTY _EP_IS_EXTERNAL_PROJECT)
|
||||||
if(NOT is_ep)
|
if(NOT is_ep)
|
||||||
message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
|
message(FATAL_ERROR "Target \"${name}\" was not generated by ExternalProject_Add.")
|
||||||
|
@ -1551,6 +1556,10 @@ function(ExternalProject_Add_StepDependencies name step)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TARGET ${name}-${step})
|
if(TARGET ${name}-${step})
|
||||||
|
get_property(type TARGET ${name}-${step} PROPERTY TYPE)
|
||||||
|
if(NOT type STREQUAL "UTILITY")
|
||||||
|
message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
|
||||||
|
endif()
|
||||||
get_property(is_ep_step TARGET ${name}-${step} PROPERTY _EP_IS_EXTERNAL_PROJECT_STEP)
|
get_property(is_ep_step TARGET ${name}-${step} PROPERTY _EP_IS_EXTERNAL_PROJECT_STEP)
|
||||||
if(NOT is_ep_step)
|
if(NOT is_ep_step)
|
||||||
message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
|
message(FATAL_ERROR "Target \"${name}-${step}\" was not generated by ExternalProject_Add_StepTargets.")
|
||||||
|
@ -2034,10 +2043,13 @@ function(_ep_add_configure_command name)
|
||||||
set(file_deps)
|
set(file_deps)
|
||||||
get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
|
get_property(deps TARGET ${name} PROPERTY _EP_DEPENDS)
|
||||||
foreach(dep IN LISTS deps)
|
foreach(dep IN LISTS deps)
|
||||||
get_property(is_ep TARGET ${dep} PROPERTY _EP_IS_EXTERNAL_PROJECT)
|
get_property(dep_type TARGET ${dep} PROPERTY TYPE)
|
||||||
if(is_ep)
|
if(dep_type STREQUAL "UTILITY")
|
||||||
_ep_get_step_stampfile(${dep} "done" done_stamp_file)
|
get_property(is_ep TARGET ${dep} PROPERTY _EP_IS_EXTERNAL_PROJECT)
|
||||||
list(APPEND file_deps ${done_stamp_file})
|
if(is_ep)
|
||||||
|
_ep_get_step_stampfile(${dep} "done" done_stamp_file)
|
||||||
|
list(APPEND file_deps ${done_stamp_file})
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,19 @@ cmake_minimum_required(VERSION 3.2)
|
||||||
project(ExternalProjectSubdir NONE)
|
project(ExternalProjectSubdir NONE)
|
||||||
include(ExternalProject)
|
include(ExternalProject)
|
||||||
|
|
||||||
|
# Remove the custom target output to be sure it runs in an
|
||||||
|
# incremental test. Skip this on VS 6 because it sometimes
|
||||||
|
# re-runs CMake after the custom command runs.
|
||||||
|
if(NOT CMAKE_GENERATOR STREQUAL "Visual Studio 6")
|
||||||
|
file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/PreSubdir1.txt)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_custom_target(PreSubdir1
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/PreSubdir1.txt
|
||||||
|
)
|
||||||
|
add_library(PreSubdir1Interface INTERFACE)
|
||||||
|
add_dependencies(PreSubdir1Interface PreSubdir1)
|
||||||
|
|
||||||
ExternalProject_Add(Subdir1
|
ExternalProject_Add(Subdir1
|
||||||
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Subdir1
|
SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/Subdir1
|
||||||
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/Subdir1
|
BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/Subdir1
|
||||||
|
@ -11,4 +24,6 @@ ExternalProject_Add(Subdir1
|
||||||
|
|
||||||
BUILD_COMMAND ""
|
BUILD_COMMAND ""
|
||||||
INSTALL_COMMAND ""
|
INSTALL_COMMAND ""
|
||||||
|
|
||||||
|
DEPENDS PreSubdir1Interface
|
||||||
)
|
)
|
||||||
|
|
|
@ -8,3 +8,7 @@ endif()
|
||||||
if(NOT "${GENEX_VAR}" STREQUAL "GENEX_VALUE")
|
if(NOT "${GENEX_VAR}" STREQUAL "GENEX_VALUE")
|
||||||
message(SEND_ERROR "GENEX_VAR != 'GENEX_VALUE'")
|
message(SEND_ERROR "GENEX_VAR != 'GENEX_VALUE'")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(NOT EXISTS "${CMAKE_CURRENT_BINARY_DIR}/../PreSubdir1.txt")
|
||||||
|
message(SEND_ERROR "../PreSubdir1.txt not provided!")
|
||||||
|
endif()
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
1
|
|
@ -0,0 +1,5 @@
|
||||||
|
^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\):
|
||||||
|
Target "SomeInterface" was not generated by ExternalProject_Add.
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
Add_StepDependencies_iface.cmake:[0-9]+ \(ExternalProject_Add_StepDependencies\)
|
||||||
|
CMakeLists.txt:[0-9]+ \(include\)$
|
|
@ -0,0 +1,4 @@
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
add_library(SomeInterface INTERFACE)
|
||||||
|
ExternalProject_Add_StepDependencies(SomeInterface step dep)
|
|
@ -0,0 +1 @@
|
||||||
|
1
|
|
@ -0,0 +1,5 @@
|
||||||
|
^CMake Error at .*/Modules/ExternalProject.cmake:[0-9]+ \(message\):
|
||||||
|
Target "MyProj-IFace" was not generated by ExternalProject_Add_StepTargets.
|
||||||
|
Call Stack \(most recent call first\):
|
||||||
|
Add_StepDependencies_iface_step.cmake:[0-9]+ \(ExternalProject_Add_StepDependencies\)
|
||||||
|
CMakeLists.txt:[0-9]+ \(include\)$
|
|
@ -0,0 +1,11 @@
|
||||||
|
include(ExternalProject)
|
||||||
|
|
||||||
|
ExternalProject_Add(MyProj
|
||||||
|
DOWNLOAD_COMMAND ""
|
||||||
|
CONFIGURE_COMMAND ""
|
||||||
|
BUILD_COMMAND ""
|
||||||
|
INSTALL_COMMAND ""
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(MyProj-IFace INTERFACE)
|
||||||
|
ExternalProject_Add_StepDependencies(MyProj IFace dep)
|
|
@ -5,4 +5,6 @@ run_cmake(CMAKE_CACHE_DEFAULT_ARGS)
|
||||||
run_cmake(CMAKE_CACHE_mix)
|
run_cmake(CMAKE_CACHE_mix)
|
||||||
run_cmake(NO_DEPENDS)
|
run_cmake(NO_DEPENDS)
|
||||||
run_cmake(Add_StepDependencies)
|
run_cmake(Add_StepDependencies)
|
||||||
|
run_cmake(Add_StepDependencies_iface)
|
||||||
|
run_cmake(Add_StepDependencies_iface_step)
|
||||||
run_cmake(Add_StepDependencies_no_target)
|
run_cmake(Add_StepDependencies_no_target)
|
||||||
|
|
Loading…
Reference in New Issue