12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- # 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)
|