summaryrefslogtreecommitdiffstats
path: root/cmake/addons/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to 'cmake/addons/CMakeLists.txt')
-rw-r--r--cmake/addons/CMakeLists.txt72
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.
245set(SUPPORTED_ADDON_FOUND FALSE) 245set(SUPPORTED_ADDON_FOUND FALSE)
246 246
247if(NOT ADDONS_TO_BUILD)
248 set(ADDONS_TO_BUILD "all")
249endif()
250
251if(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}")
281endif()
282
247foreach(addon ${addons}) 283foreach(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)