blob: 9a8fa917d197c2ac103cc18c744df287b3767bdc [file] [log] [blame]
##===- MakefileFunctions.cmake --------------------------------------------===##
#
# Defines functions used within subdirectory CMakeLists.txt, that look a bit
# like standard GNU Make functions. These support the auto-generation of
# CMakeLists.txt from Makefiles, although any use of these should probably be
# looked at and manually translated into more idiomatic CMake.
#
##===----------------------------------------------------------------------===##
# llvm_add_subdirectories - wrapper around add_subdirectory that can take
# multiple items.
macro(llvm_add_subdirectories)
foreach(V ${ARGV})
add_subdirectory(${V})
endforeach(V)
endmacro()
# llvm_prepend - equivalent to $(addprefix var,prefix). Modifies var in place.
function(llvm_prepend var prefix)
set(listVar "")
foreach(f ${ARGN})
list(APPEND listVar "${prefix}${f}")
endforeach(f)
set(${var} "${listVar}" PARENT_SCOPE)
endfunction()
# llvm_filter - equivalent to $(filter needle,haystack). Returns a list containing
# all of the items in ${ARGN} (after needle) that match needle.
macro(llvm_filter output needle)
set(${output})
foreach(haystack_item ${ARGN})
foreach(needle_item ${needle})
if("${haystack_item}" STREQUAL "${needle_item}")
list(APPEND ${output} ${haystack_item})
endif()
endforeach()
endforeach()
endmacro()
# llvm_filter_out - equivalent to $(filter-out needle,haystack). Inverse of
# llvm_filter.
macro(llvm_filter_out output needle)
set(${output} "${ARGN}")
llvm_filter(tmp_output ${needle} ${ARGN})
list(REMOVE_ITEM ${output} ${tmp_output})
endmacro()