Browse Source

ExternalData: Allow ()-groups in series match regex

Refactor use of the ExternalData_SERIES_MATCH value to avoid assuming
that it has no ()-groups that interfere with group indexing.

Extend the Module.ExternalData test to cover this case.
Brad King 13 years ago
parent
commit
175ed02207
2 changed files with 9 additions and 6 deletions
  1. 8 5
      Modules/ExternalData.cmake
  2. 1 1
      Tests/Module/ExternalData/Data2/CMakeLists.txt

+ 8 - 5
Modules/ExternalData.cmake

@@ -502,11 +502,14 @@ endmacro()
 function(_ExternalData_arg_find_files pattern regex)
 function(_ExternalData_arg_find_files pattern regex)
   file(GLOB globbed RELATIVE "${top_src}" "${top_src}/${pattern}*")
   file(GLOB globbed RELATIVE "${top_src}" "${top_src}/${pattern}*")
   foreach(entry IN LISTS globbed)
   foreach(entry IN LISTS globbed)
-    string(REGEX REPLACE "^(${regex})(\\.md5|)$" "\\1;\\2" tuple "${entry}")
-    list(LENGTH tuple len)
-    if("${len}" EQUAL 2 AND NOT IS_DIRECTORY "${top_src}/${entry}")
-      list(GET tuple 0 relname)
-      list(GET tuple 1 alg)
+    if("x${entry}" MATCHES "^x(.*)(\\.md5)$")
+      set(relname "${CMAKE_MATCH_1}")
+      set(alg "${CMAKE_MATCH_2}")
+    else()
+      set(relname "${entry}")
+      set(alg "")
+    endif()
+    if("x${relname}" MATCHES "^x${regex}$" AND NOT IS_DIRECTORY "${top_src}/${entry}")
       set(name "${top_src}/${relname}")
       set(name "${top_src}/${relname}")
       set(file "${top_bin}/${relname}")
       set(file "${top_bin}/${relname}")
       if(alg)
       if(alg)

+ 1 - 1
Tests/Module/ExternalData/Data2/CMakeLists.txt

@@ -1,5 +1,5 @@
 set(ExternalData_SERIES_PARSE "([0-9]+)(_\\.my\\.dat)$")
 set(ExternalData_SERIES_PARSE "([0-9]+)(_\\.my\\.dat)$")
-set(ExternalData_SERIES_MATCH "[0-9]+")
+set(ExternalData_SERIES_MATCH "([0-9]+)")
 ExternalData_Add_Test(Data2
 ExternalData_Add_Test(Data2
   NAME Data2Check
   NAME Data2Check
   COMMAND ${CMAKE_COMMAND}
   COMMAND ${CMAKE_COMMAND}