Parcourir la source

BUG: Add missing macro ctkMacroListFilter.cmake

Jean-Christophe Fillion-Robin il y a 15 ans
Parent
commit
8848e5efeb
1 fichiers modifiés avec 45 ajouts et 0 suppressions
  1. 45 0
      CMake/ctkMacroListFilter.cmake

+ 45 - 0
CMake/ctkMacroListFilter.cmake

@@ -0,0 +1,45 @@
+
+# See http://www.cmake.org/Wiki/CMakeMacroListOperations#LIST_FILTER
+
+# LIST_FILTER(<list> <regexp_var> [<regexp_var> ...]
+#              [OUTPUT_VARIABLE <variable>])
+# Removes items from <list> which do not match any of the specified
+# regular expressions. An optional argument OUTPUT_VARIABLE
+# specifies a variable in which to store the matched items instead of
+# updating <list>
+# As regular expressions can not be given to macros (see bug #5389), we pass
+# variable names whose content is the regular expressions.
+# Note that this macro requires PARSE_ARGUMENTS macro, available here:
+# http://www.cmake.org/Wiki/CMakeMacroParseArguments
+MACRO(CtkMacroListFilter)
+  ctkMacroParseArguments(LIST_FILTER "OUTPUT_VARIABLE" "" ${ARGV})
+  # Check arguments.
+  LIST(LENGTH LIST_FILTER_DEFAULT_ARGS LIST_FILTER_default_length)
+  IF(${LIST_FILTER_default_length} EQUAL 0)
+    MESSAGE(FATAL_ERROR "LIST_FILTER: missing list variable.")
+  ENDIF(${LIST_FILTER_default_length} EQUAL 0)
+  IF(${LIST_FILTER_default_length} EQUAL 1)
+    MESSAGE(FATAL_ERROR "LIST_FILTER: missing regular expression variable.")
+  ENDIF(${LIST_FILTER_default_length} EQUAL 1)
+  # Reset output variable
+  IF(NOT LIST_FILTER_OUTPUT_VARIABLE)
+    SET(LIST_FILTER_OUTPUT_VARIABLE "LIST_FILTER_internal_output")
+  ENDIF(NOT LIST_FILTER_OUTPUT_VARIABLE)
+  SET(${LIST_FILTER_OUTPUT_VARIABLE})
+  # Extract input list from arguments
+  LIST(GET LIST_FILTER_DEFAULT_ARGS 0 LIST_FILTER_input_list)
+  LIST(REMOVE_AT LIST_FILTER_DEFAULT_ARGS 0)
+  FOREACH(LIST_FILTER_item ${${LIST_FILTER_input_list}})
+    FOREACH(LIST_FILTER_regexp_var ${LIST_FILTER_DEFAULT_ARGS})
+      FOREACH(LIST_FILTER_regexp ${${LIST_FILTER_regexp_var}})
+        IF(${LIST_FILTER_item} MATCHES ${LIST_FILTER_regexp})
+          LIST(APPEND ${LIST_FILTER_OUTPUT_VARIABLE} ${LIST_FILTER_item})
+        ENDIF(${LIST_FILTER_item} MATCHES ${LIST_FILTER_regexp})
+      ENDFOREACH(LIST_FILTER_regexp ${${LIST_FILTER_regexp_var}})
+    ENDFOREACH(LIST_FILTER_regexp_var)
+  ENDFOREACH(LIST_FILTER_item)
+  # If OUTPUT_VARIABLE is not specified, overwrite the input list.
+  IF(${LIST_FILTER_OUTPUT_VARIABLE} STREQUAL "LIST_FILTER_internal_output")
+    SET(${LIST_FILTER_input_list} ${${LIST_FILTER_OUTPUT_VARIABLE}})
+  ENDIF(${LIST_FILTER_OUTPUT_VARIABLE} STREQUAL "LIST_FILTER_internal_output")
+ENDMACRO(CtkMacroListFilter)