|
@@ -98,6 +98,8 @@ Create custom targets to build projects in external trees
|
|
|
|
|
|
``SOURCE_DIR <dir>``
|
|
``SOURCE_DIR <dir>``
|
|
Source dir to be used for build
|
|
Source dir to be used for build
|
|
|
|
+ ``SOURCE_SUBDIR <dir>``
|
|
|
|
+ Path to source CMakeLists.txt relative to ``SOURCE_DIR``
|
|
``CONFIGURE_COMMAND <cmd>...``
|
|
``CONFIGURE_COMMAND <cmd>...``
|
|
Build tree configuration command
|
|
Build tree configuration command
|
|
``CMAKE_COMMAND /.../cmake``
|
|
``CMAKE_COMMAND /.../cmake``
|
|
@@ -236,6 +238,11 @@ Create custom targets to build projects in external trees
|
|
interpreted with respect to the build directory corresponding to the
|
|
interpreted with respect to the build directory corresponding to the
|
|
source directory in which ``ExternalProject_Add`` is invoked.
|
|
source directory in which ``ExternalProject_Add`` is invoked.
|
|
|
|
|
|
|
|
+ If ``SOURCE_SUBDIR`` is set and no ``CONFIGURE_COMMAND`` is specified, the
|
|
|
|
+ configure command will run CMake using the ``CMakeLists.txt`` located in the
|
|
|
|
+ relative path specified by ``SOURCE_SUBDIR``, relative to the ``SOURCE_DIR``.
|
|
|
|
+ If no ``SOURCE_SUBDIR`` is given, ``SOURCE_DIR`` is used.
|
|
|
|
+
|
|
If ``SOURCE_DIR`` is explicitly set to an existing directory the project
|
|
If ``SOURCE_DIR`` is explicitly set to an existing directory the project
|
|
will be built from it. Otherwise a download step must be specified
|
|
will be built from it. Otherwise a download step must be specified
|
|
using one of the ``DOWNLOAD_COMMAND``, ``CVS_*``, ``SVN_*``, or ``URL``
|
|
using one of the ``DOWNLOAD_COMMAND``, ``CVS_*``, ``SVN_*``, or ``URL``
|
|
@@ -287,8 +294,8 @@ Create custom targets to build projects in external trees
|
|
|
|
|
|
The command line, comment, working directory, and byproducts of every
|
|
The command line, comment, working directory, and byproducts of every
|
|
standard and custom step are processed to replace tokens ``<SOURCE_DIR>``,
|
|
standard and custom step are processed to replace tokens ``<SOURCE_DIR>``,
|
|
- ``<BINARY_DIR>``, ``<INSTALL_DIR>``, and ``<TMP_DIR>`` with
|
|
|
|
- corresponding property values.
|
|
|
|
|
|
+ ``<SOURCE_SUBDIR>``, ``<BINARY_DIR>``, ``<INSTALL_DIR>``, and ``<TMP_DIR>``
|
|
|
|
+ with corresponding property values.
|
|
|
|
|
|
Any builtin step that specifies a ``<step>_COMMAND cmd...`` or custom
|
|
Any builtin step that specifies a ``<step>_COMMAND cmd...`` or custom
|
|
step that specifies a ``COMMAND cmd...`` may specify additional command
|
|
step that specifies a ``COMMAND cmd...`` may specify additional command
|
|
@@ -1065,6 +1072,13 @@ function(_ep_set_directories name)
|
|
endif()
|
|
endif()
|
|
set_property(TARGET ${name} PROPERTY _EP_${VAR}_DIR "${${var}_dir}")
|
|
set_property(TARGET ${name} PROPERTY _EP_${VAR}_DIR "${${var}_dir}")
|
|
endforeach()
|
|
endforeach()
|
|
|
|
+ get_property(source_subdir TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR)
|
|
|
|
+ if(NOT source_subdir)
|
|
|
|
+ set_property(TARGET ${name} PROPERTY _EP_SOURCE_SUBDIR ".")
|
|
|
|
+ elseif(IS_ABSOLUTE "${source_subdir}")
|
|
|
|
+ message(FATAL_ERROR
|
|
|
|
+ "External project ${name} has non-relative SOURCE_SUBDIR!")
|
|
|
|
+ endif()
|
|
if(build_in_source)
|
|
if(build_in_source)
|
|
get_property(source_dir TARGET ${name} PROPERTY _EP_SOURCE_DIR)
|
|
get_property(source_dir TARGET ${name} PROPERTY _EP_SOURCE_DIR)
|
|
set_property(TARGET ${name} PROPERTY _EP_BINARY_DIR "${source_dir}")
|
|
set_property(TARGET ${name} PROPERTY _EP_BINARY_DIR "${source_dir}")
|
|
@@ -1096,7 +1110,7 @@ macro(_ep_replace_location_tags target_name)
|
|
set(vars ${ARGN})
|
|
set(vars ${ARGN})
|
|
foreach(var ${vars})
|
|
foreach(var ${vars})
|
|
if(${var})
|
|
if(${var})
|
|
- foreach(dir SOURCE_DIR BINARY_DIR INSTALL_DIR TMP_DIR DOWNLOADED_FILE)
|
|
|
|
|
|
+ foreach(dir SOURCE_DIR SOURCE_SUBDIR BINARY_DIR INSTALL_DIR TMP_DIR DOWNLOADED_FILE)
|
|
get_property(val TARGET ${target_name} PROPERTY _EP_${dir})
|
|
get_property(val TARGET ${target_name} PROPERTY _EP_${dir})
|
|
string(REPLACE "<${dir}>" "${val}" ${var} "${${var}}")
|
|
string(REPLACE "<${dir}>" "${val}" ${var} "${${var}}")
|
|
endforeach()
|
|
endforeach()
|
|
@@ -2148,7 +2162,7 @@ endfunction()
|
|
|
|
|
|
# TODO: Make sure external projects use the proper compiler
|
|
# TODO: Make sure external projects use the proper compiler
|
|
function(_ep_add_configure_command name)
|
|
function(_ep_add_configure_command name)
|
|
- ExternalProject_Get_Property(${name} source_dir binary_dir tmp_dir)
|
|
|
|
|
|
+ ExternalProject_Get_Property(${name} source_dir source_subdir binary_dir tmp_dir)
|
|
|
|
|
|
# Depend on other external projects (file-level).
|
|
# Depend on other external projects (file-level).
|
|
set(file_deps)
|
|
set(file_deps)
|
|
@@ -2226,7 +2240,11 @@ function(_ep_add_configure_command name)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endif()
|
|
|
|
|
|
- list(APPEND cmd "${source_dir}")
|
|
|
|
|
|
+ if(source_subdir STREQUAL ".")
|
|
|
|
+ list(APPEND cmd "${source_dir}")
|
|
|
|
+ else()
|
|
|
|
+ list(APPEND cmd "${source_dir}/${source_subdir}")
|
|
|
|
+ endif()
|
|
endif()
|
|
endif()
|
|
|
|
|
|
# If anything about the configure command changes, (command itself, cmake
|
|
# If anything about the configure command changes, (command itself, cmake
|