diff options
Diffstat (limited to 'infra/nncc/cmake/modules/add_subdirectories.cmake')
-rw-r--r-- | infra/nncc/cmake/modules/add_subdirectories.cmake | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/infra/nncc/cmake/modules/add_subdirectories.cmake b/infra/nncc/cmake/modules/add_subdirectories.cmake new file mode 100644 index 000000000..06b7c768d --- /dev/null +++ b/infra/nncc/cmake/modules/add_subdirectories.cmake @@ -0,0 +1,27 @@ +function(list_subdirectories OUTPUT_VARIABLE) + cmake_parse_arguments(ARG "" "" "EXCLUDES" ${ARGN}) + + file(GLOB PROJECT_FILES + RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} + "*/CMakeLists.txt") + + foreach(PROJECT_FILE IN ITEMS ${PROJECT_FILES}) + get_filename_component(PROJECT_DIR ${PROJECT_FILE} DIRECTORY) + list(FIND ARG_EXCLUDES ${PROJECT_DIR} PROJECT_INDEX) + if(${PROJECT_INDEX} EQUAL -1) + list(APPEND PROJECT_LIST ${PROJECT_DIR}) + endif(${PROJECT_INDEX} EQUAL -1) + endforeach(PROJECT_FILE) + + set(${OUTPUT_VARIABLE} ${PROJECT_LIST} PARENT_SCOPE) +endfunction(list_subdirectories) + +function(add_subdirectories) + cmake_parse_arguments(ARG "" "" "EXCLUDES" ${ARGN}) + + list_subdirectories(PROJECT_DIRS EXCLUDES ${ARG_EXCLUDES}) + + foreach(PROJECT_DIR IN ITEMS ${PROJECT_DIRS}) + add_subdirectory(${PROJECT_DIR}) + endforeach(PROJECT_DIR) +endfunction(add_subdirectories) |