summaryrefslogtreecommitdiff
path: root/cmake/modules/ExtendCMakeFunction.cmake
blob: 06b7c768d37570e9a42d2c8d9e3c1e3fdfce3684 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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)