+# CMake 3.6 imported macros to simulate list(FILTER ...) subcommand
+#--------------------------------------------------------------------------
+MACRO(prevent_in_source_build)
+ execute_process(COMMAND rm -rf ${CMAKE_SOURCE_DIR}/CMakeCache.txt ${CMAKE_SOURCE_DIR}/CMakeCacheForScript.cmake ${CMAKE_SOURCE_DIR}/CMakeFiles ${CMAKE_SOURCE_DIR}/cmake_install.cmake)
+
+ get_filename_component(srcdir "${CMAKE_SOURCE_DIR}" REALPATH)
+ get_filename_component(bindir "${CMAKE_BINARY_DIR}" REALPATH)
+
+ if(${srcdir} STREQUAL ${bindir})
+ message(FATAL_ERROR "${Red}**** ERROR: You trying to build the project from the source directory or a previous build in-source occured. This isn't allowed, you have to clean CMakeCache.txt file from your source directory (${srcdir}), and build from a separate directory. ****\n")
+ endif()
+ENDMACRO(prevent_in_source_build)
+
+MACRO(PARSE_ARGUMENTS prefix arg_names option_names)
+ SET(DEFAULT_ARGS)
+ FOREACH(arg_name ${arg_names})
+ SET(${prefix}_${arg_name})
+ ENDFOREACH(arg_name)
+ FOREACH(option ${option_names})
+ SET(${prefix}_${option} FALSE)
+ ENDFOREACH(option)
+
+ SET(current_arg_name DEFAULT_ARGS)
+ SET(current_arg_list)
+ FOREACH(arg ${ARGN})
+ LIST_CONTAINS(is_arg_name ${arg} ${arg_names})
+ IF (is_arg_name)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ SET(current_arg_name ${arg})
+ SET(current_arg_list)
+ ELSE (is_arg_name)
+ LIST_CONTAINS(is_option ${arg} ${option_names})
+ IF (is_option)
+ SET(${prefix}_${arg} TRUE)
+ ELSE (is_option)
+ SET(current_arg_list ${current_arg_list} ${arg})
+ ENDIF (is_option)
+ ENDIF (is_arg_name)
+ ENDFOREACH(arg)
+ SET(${prefix}_${current_arg_name} ${current_arg_list})
+ENDMACRO(PARSE_ARGUMENTS)
+
+MACRO(LIST_CONTAINS var value)
+SET(${var})
+FOREACH (value2 ${ARGN})
+ IF (${value} STREQUAL ${value2})
+ SET(${var} TRUE)
+ ENDIF (${value} STREQUAL ${value2})
+ENDFOREACH (value2)
+ENDMACRO(LIST_CONTAINS)
+
+MACRO(LIST_FILTER)
+PARSE_ARGUMENTS(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(LIST_FILTER)
+