From be933ef2241d79558f91796cc5b3a161f72ebf9c Mon Sep 17 00:00:00 2001 From: manuel Date: Mon, 19 Oct 2020 00:52:24 +0200 Subject: sync with upstream --- cmake/addons/CMakeLists.txt | 72 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 63 insertions(+), 9 deletions(-) (limited to 'cmake/addons/CMakeLists.txt') diff --git a/cmake/addons/CMakeLists.txt b/cmake/addons/CMakeLists.txt index 3dccc01..c1313d7 100644 --- a/cmake/addons/CMakeLists.txt +++ b/cmake/addons/CMakeLists.txt @@ -244,26 +244,80 @@ endif() # error either in ADDONS_TO_BUILD or in the directory configuration. set(SUPPORTED_ADDON_FOUND FALSE) +if(NOT ADDONS_TO_BUILD) + set(ADDONS_TO_BUILD "all") +endif() + +if(NOT ADDONS_TO_BUILD STREQUAL "all") + # Exact addon match list + set(REGEX_ADDONS_TO_BUILD ${ADDONS_TO_BUILD}) + set(EXACT_MATCH_ADDON_LIST "") + set(EXCLUDE_ADDONS "") + + foreach(addon ${ADDONS_TO_BUILD}) + set(FOUND_EXCLUSION "") + string(REGEX MATCH "^[-](.*)" FOUND_EXCLUSION "${addon}") + if(NOT FOUND_EXCLUSION STREQUAL "") + list(APPEND EXCLUDE_ADDONS ${CMAKE_MATCH_1}) + list(REMOVE_ITEM REGEX_ADDONS_TO_BUILD "-${CMAKE_MATCH_1}") + else() + foreach(addonrepoitem ${addons}) + if(NOT (addonrepoitem MATCHES platforms.txt)) + # need to strip regex chars, or the filter regex will use + string(REPLACE "*" "" strippedregex ${addon}) + if(${addonrepoitem} MATCHES "^.*\/(${strippedregex}).txt") + list(APPEND EXACT_MATCH_ADDON_LIST ${addon}) + # remove exact matches from addons_to_build + list(REMOVE_ITEM REGEX_ADDONS_TO_BUILD "${addon}") + endif() + endif() + endforeach() + endif() + endforeach() + + message(STATUS "Exclusion list: ${EXCLUDE_ADDONS}") + message(STATUS "Exact Match list: ${EXACT_MATCH_ADDON_LIST}") + message(STATUS "Regex list: ${REGEX_ADDONS_TO_BUILD}") +endif() + foreach(addon ${addons}) if(NOT (addon MATCHES platforms.txt)) file(STRINGS ${addon} def) string(REPLACE " " ";" def ${def}) list(GET def 0 id) - set(ADDON_FOUND FALSE) - # try to find a perfect match - list(FIND ADDONS_TO_BUILD ${id} idx) - if(idx GREATER -1 OR "${ADDONS_TO_BUILD}" STREQUAL "all") + if("${ADDONS_TO_BUILD}" STREQUAL "all") set(ADDON_FOUND TRUE) - # Maybe we have a regex else() - foreach(ADDONLISTITEM ${ADDONS_TO_BUILD}) - if(id MATCHES "${ADDONLISTITEM}") - message(STATUS "Pattern ${ADDONLISTITEM} matches ${id}, building addon") - set(ADDON_FOUND TRUE) + set(ADDON_EXCLUDE FALSE) + set(ADDON_FOUND FALSE) + foreach(exclusion ${EXCLUDE_ADDONS}) + if(id MATCHES "${exclusion}") + set(ADDON_EXCLUDE TRUE) + message(STATUS "Addon ${id} matches exclusion rule -${exclusion}") break() endif() endforeach() + + if(ADDON_EXCLUDE) + continue() + endif() + + list(FIND EXACT_MATCH_ADDON_LIST ${id} idx) + if(idx GREATER -1) + # exact match, so build + message(STATUS "Exact match ${id}, building addon") + set(ADDON_FOUND TRUE) + else() + # regex search + foreach(ADDONLISTITEM ${REGEX_ADDONS_TO_BUILD}) + if(id MATCHES "${ADDONLISTITEM}") + message(STATUS "Pattern ${ADDONLISTITEM} matches ${id}, building addon") + set(ADDON_FOUND TRUE) + break() + endif() + endforeach() + endif() endif() if(ADDON_FOUND) -- cgit v1.2.3