summaryrefslogtreecommitdiffstats
path: root/Modules/ExternalData.cmake
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2015-03-25 14:23:51 (GMT)
committerBrad King <brad.king@kitware.com>2015-03-27 18:44:54 (GMT)
commit230f2d6e7060e70b7205fc65f6bee7ce37e3f27b (patch)
treebb56d929adf957977dfc5db26805a6a29f80a6ec /Modules/ExternalData.cmake
parent564c07f7dd819d9ea070b22ad16849d3be6bb89a (diff)
downloadCMake-230f2d6e7060e70b7205fc65f6bee7ce37e3f27b.zip
CMake-230f2d6e7060e70b7205fc65f6bee7ce37e3f27b.tar.gz
CMake-230f2d6e7060e70b7205fc65f6bee7ce37e3f27b.tar.bz2
ExternalData: Add option to recursively match under directories
Extend the ``DATA{Dir/,...}`` syntax with a new ``RECURSE:`` option to enable recursive matching of associated files. This will allow an entire directory tree of data to be referenced at once.
Diffstat (limited to 'Modules/ExternalData.cmake')
-rw-r--r--Modules/ExternalData.cmake23
1 files changed, 20 insertions, 3 deletions
diff --git a/Modules/ExternalData.cmake b/Modules/ExternalData.cmake
index eab266f..883ab69 100644
--- a/Modules/ExternalData.cmake
+++ b/Modules/ExternalData.cmake
@@ -244,7 +244,8 @@ associated file options. For example, the argument
``DATA{MyDataDir/,REGEX:.*}`` will pass the full path to a ``MyDataDir``
directory on the command line and ensure that the directory contains
files corresponding to every file or content link in the ``MyDataDir``
-source directory.
+source directory. In order to match associated files in subdirectories,
+specify a ``RECURSE:`` option, e.g. ``DATA{MyDataDir/,RECURSE:,REGEX:.*}``.
Hash Algorithms
^^^^^^^^^^^^^^^
@@ -597,6 +598,7 @@ function(_ExternalData_arg target arg options var_file)
# Process options.
set(series_option "")
+ set(recurse_option "")
set(associated_files "")
set(associated_regex "")
foreach(opt ${options})
@@ -606,6 +608,9 @@ function(_ExternalData_arg target arg options var_file)
elseif(opt STREQUAL ":")
# Activate series matching.
set(series_option "${opt}")
+ elseif(opt STREQUAL "RECURSE:")
+ # Activate recursive matching in directories.
+ set(recurse_option "${opt}")
elseif("x${opt}" MATCHES "^[^][:/*?]+$")
# Specific associated file.
list(APPEND associated_files "${opt}")
@@ -622,6 +627,9 @@ function(_ExternalData_arg target arg options var_file)
if(associated_files OR associated_regex)
message(FATAL_ERROR "Series option \"${series_option}\" not allowed with associated files.")
endif()
+ if(recurse_option)
+ message(FATAL_ERROR "Recurse option \"${recurse_option}\" allowed only with directories.")
+ endif()
# Load a whole file series.
_ExternalData_arg_series()
elseif(data_is_directory)
@@ -634,6 +642,9 @@ function(_ExternalData_arg target arg options var_file)
"must list associated files.")
endif()
else()
+ if(recurse_option)
+ message(FATAL_ERROR "Recurse option \"${recurse_option}\" allowed only with directories.")
+ endif()
# Load the named data file.
_ExternalData_arg_single()
if(associated_files OR associated_regex)
@@ -681,11 +692,17 @@ macro(_ExternalData_arg_associated)
set(reldir "${reldir}/")
endif()
_ExternalData_exact_regex(reldir_regex "${reldir}")
+ if(recurse_option)
+ set(glob GLOB_RECURSE)
+ set(reldir_regex "${reldir_regex}(.+/)?")
+ else()
+ set(glob GLOB)
+ endif()
# Find files named explicitly.
foreach(file ${associated_files})
_ExternalData_exact_regex(file_regex "${file}")
- _ExternalData_arg_find_files(GLOB "${reldir}${file}"
+ _ExternalData_arg_find_files(${glob} "${reldir}${file}"
"${reldir_regex}${file_regex}")
endforeach()
@@ -696,7 +713,7 @@ macro(_ExternalData_arg_associated)
set(all "${all}${sep}${reldir_regex}${regex}")
set(sep "|")
endforeach()
- _ExternalData_arg_find_files(GLOB "${reldir}" "${all}")
+ _ExternalData_arg_find_files(${glob} "${reldir}" "${all}")
endmacro()
macro(_ExternalData_arg_single)