diff options
Diffstat (limited to 'cmake/addons/CMakeLists.txt')
| -rw-r--r-- | cmake/addons/CMakeLists.txt | 72 |
1 files changed, 63 insertions, 9 deletions
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() | |||
| 244 | # error either in ADDONS_TO_BUILD or in the directory configuration. | 244 | # error either in ADDONS_TO_BUILD or in the directory configuration. |
| 245 | set(SUPPORTED_ADDON_FOUND FALSE) | 245 | set(SUPPORTED_ADDON_FOUND FALSE) |
| 246 | 246 | ||
| 247 | if(NOT ADDONS_TO_BUILD) | ||
| 248 | set(ADDONS_TO_BUILD "all") | ||
| 249 | endif() | ||
| 250 | |||
| 251 | if(NOT ADDONS_TO_BUILD STREQUAL "all") | ||
| 252 | # Exact addon match list | ||
| 253 | set(REGEX_ADDONS_TO_BUILD ${ADDONS_TO_BUILD}) | ||
| 254 | set(EXACT_MATCH_ADDON_LIST "") | ||
| 255 | set(EXCLUDE_ADDONS "") | ||
| 256 | |||
| 257 | foreach(addon ${ADDONS_TO_BUILD}) | ||
| 258 | set(FOUND_EXCLUSION "") | ||
| 259 | string(REGEX MATCH "^[-](.*)" FOUND_EXCLUSION "${addon}") | ||
| 260 | if(NOT FOUND_EXCLUSION STREQUAL "") | ||
| 261 | list(APPEND EXCLUDE_ADDONS ${CMAKE_MATCH_1}) | ||
| 262 | list(REMOVE_ITEM REGEX_ADDONS_TO_BUILD "-${CMAKE_MATCH_1}") | ||
| 263 | else() | ||
| 264 | foreach(addonrepoitem ${addons}) | ||
| 265 | if(NOT (addonrepoitem MATCHES platforms.txt)) | ||
| 266 | # need to strip regex chars, or the filter regex will use | ||
| 267 | string(REPLACE "*" "" strippedregex ${addon}) | ||
| 268 | if(${addonrepoitem} MATCHES "^.*\/(${strippedregex}).txt") | ||
| 269 | list(APPEND EXACT_MATCH_ADDON_LIST ${addon}) | ||
| 270 | # remove exact matches from addons_to_build | ||
| 271 | list(REMOVE_ITEM REGEX_ADDONS_TO_BUILD "${addon}") | ||
| 272 | endif() | ||
| 273 | endif() | ||
| 274 | endforeach() | ||
| 275 | endif() | ||
| 276 | endforeach() | ||
| 277 | |||
| 278 | message(STATUS "Exclusion list: ${EXCLUDE_ADDONS}") | ||
| 279 | message(STATUS "Exact Match list: ${EXACT_MATCH_ADDON_LIST}") | ||
| 280 | message(STATUS "Regex list: ${REGEX_ADDONS_TO_BUILD}") | ||
| 281 | endif() | ||
| 282 | |||
| 247 | foreach(addon ${addons}) | 283 | foreach(addon ${addons}) |
| 248 | if(NOT (addon MATCHES platforms.txt)) | 284 | if(NOT (addon MATCHES platforms.txt)) |
| 249 | file(STRINGS ${addon} def) | 285 | file(STRINGS ${addon} def) |
| 250 | string(REPLACE " " ";" def ${def}) | 286 | string(REPLACE " " ";" def ${def}) |
| 251 | list(GET def 0 id) | 287 | list(GET def 0 id) |
| 252 | 288 | ||
| 253 | set(ADDON_FOUND FALSE) | 289 | if("${ADDONS_TO_BUILD}" STREQUAL "all") |
| 254 | # try to find a perfect match | ||
| 255 | list(FIND ADDONS_TO_BUILD ${id} idx) | ||
| 256 | if(idx GREATER -1 OR "${ADDONS_TO_BUILD}" STREQUAL "all") | ||
| 257 | set(ADDON_FOUND TRUE) | 290 | set(ADDON_FOUND TRUE) |
| 258 | # Maybe we have a regex | ||
| 259 | else() | 291 | else() |
| 260 | foreach(ADDONLISTITEM ${ADDONS_TO_BUILD}) | 292 | set(ADDON_EXCLUDE FALSE) |
| 261 | if(id MATCHES "${ADDONLISTITEM}") | 293 | set(ADDON_FOUND FALSE) |
| 262 | message(STATUS "Pattern ${ADDONLISTITEM} matches ${id}, building addon") | 294 | foreach(exclusion ${EXCLUDE_ADDONS}) |
| 263 | set(ADDON_FOUND TRUE) | 295 | if(id MATCHES "${exclusion}") |
| 296 | set(ADDON_EXCLUDE TRUE) | ||
| 297 | message(STATUS "Addon ${id} matches exclusion rule -${exclusion}") | ||
| 264 | break() | 298 | break() |
| 265 | endif() | 299 | endif() |
| 266 | endforeach() | 300 | endforeach() |
| 301 | |||
| 302 | if(ADDON_EXCLUDE) | ||
| 303 | continue() | ||
| 304 | endif() | ||
| 305 | |||
| 306 | list(FIND EXACT_MATCH_ADDON_LIST ${id} idx) | ||
| 307 | if(idx GREATER -1) | ||
| 308 | # exact match, so build | ||
| 309 | message(STATUS "Exact match ${id}, building addon") | ||
| 310 | set(ADDON_FOUND TRUE) | ||
| 311 | else() | ||
| 312 | # regex search | ||
| 313 | foreach(ADDONLISTITEM ${REGEX_ADDONS_TO_BUILD}) | ||
| 314 | if(id MATCHES "${ADDONLISTITEM}") | ||
| 315 | message(STATUS "Pattern ${ADDONLISTITEM} matches ${id}, building addon") | ||
| 316 | set(ADDON_FOUND TRUE) | ||
| 317 | break() | ||
| 318 | endif() | ||
| 319 | endforeach() | ||
| 320 | endif() | ||
| 267 | endif() | 321 | endif() |
| 268 | 322 | ||
| 269 | if(ADDON_FOUND) | 323 | if(ADDON_FOUND) |
