mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
98 lines
2.8 KiB
CMake
98 lines
2.8 KiB
CMake
include(SwiftUtils)
|
|
|
|
function(list_subtract lhs rhs result_var_name)
|
|
set(result)
|
|
foreach(item IN LISTS lhs)
|
|
if(NOT "${item}" IN_LIST rhs)
|
|
list(APPEND result "${item}")
|
|
endif()
|
|
endforeach()
|
|
set("${result_var_name}" "${result}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(list_intersect lhs rhs result_var_name)
|
|
set(result)
|
|
foreach(item IN LISTS lhs)
|
|
if("${item}" IN_LIST rhs)
|
|
list(APPEND result "${item}")
|
|
endif()
|
|
endforeach()
|
|
set("${result_var_name}" "${result}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(list_union lhs rhs result_var_name)
|
|
set(result)
|
|
foreach(item IN LISTS lhs rhs)
|
|
if(NOT "${item}" IN_LIST result)
|
|
list(APPEND result "${item}")
|
|
endif()
|
|
endforeach()
|
|
set("${result_var_name}" "${result}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(_list_add_string_suffix input_list suffix result_var_name)
|
|
set(result)
|
|
foreach(element ${input_list})
|
|
list(APPEND result "${element}${suffix}")
|
|
endforeach()
|
|
set("${result_var_name}" "${result}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(_list_escape_for_shell input_list result_var_name)
|
|
set(result "")
|
|
foreach(element ${input_list})
|
|
string(REPLACE " " "\\ " element "${element}")
|
|
set(result "${result}${element} ")
|
|
endforeach()
|
|
set("${result_var_name}" "${result}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(list_replace input_list old new)
|
|
set(replaced_list)
|
|
foreach(item ${${input_list}})
|
|
if(${item} STREQUAL ${old})
|
|
list(APPEND replaced_list ${new})
|
|
else()
|
|
list(APPEND replaced_list ${item})
|
|
endif()
|
|
endforeach()
|
|
set("${input_list}" "${replaced_list}" PARENT_SCOPE)
|
|
endfunction()
|
|
|
|
function(list_has_duplicates l outvar)
|
|
set(LCOPY "${l}")
|
|
list(REMOVE_DUPLICATES "${LCOPY}")
|
|
list(LENGTH l L_LENGTH)
|
|
list(LENGTH LCOPY LCOPY_LENGTH)
|
|
|
|
if (${L_LENGTH} EQUAL ${LCOPY_LENGTH})
|
|
set(${outvar} FALSE PARENT_SCOPE)
|
|
else()
|
|
set(${outvar} TRUE PARENT_SCOPE)
|
|
endif()
|
|
endfunction()
|
|
|
|
function(precondition_list_is_set l)
|
|
list_has_duplicates(${l} HAS_DUPLICATES)
|
|
precondition(HAS_DUPLICATES NEGATE
|
|
MESSAGE "List ${l} has duplicate elements and thus is not a set. Contents: ${${l}}")
|
|
endfunction()
|
|
|
|
function(precondition_list_is_disjoint first)
|
|
set(RESULT "${${first}}")
|
|
set(REST ${ARGN})
|
|
foreach(l ${REST})
|
|
# First do a precondition check that RESULT and l are disjoint.
|
|
list_intersect("${RESULT}" "${${l}}" TMP_INTERSECTION)
|
|
list(LENGTH TMP_INTERSECTION TMP_INTERSECTION_LENGTH)
|
|
precondition_binary_op(EQUAL ${TMP_INTERSECTION_LENGTH} 0
|
|
MESSAGE "Found non-empty set intersection.")
|
|
# Then union l into RESULT so that we can check the next list.
|
|
list_union(RESULT "${${l}}" "${RESULT}")
|
|
endforeach()
|
|
endfunction()
|
|
|
|
function(precondition_list_empty l message)
|
|
precondition(l NEGATE MESSAGE "${message}")
|
|
endfunction()
|