38 lines
1.3 KiB
CMake
38 lines
1.3 KiB
CMake
include_guard(GLOBAL)
|
|
|
|
function(find_include_dirs OUT_VAR)
|
|
set(SOURCES ${ARGN})
|
|
|
|
# Get top most common directory prefix for all source files
|
|
set(COMMON_PATH "")
|
|
foreach(FILE IN LISTS SOURCES)
|
|
get_filename_component(DIR ${FILE} DIRECTORY)
|
|
file(REAL_PATH ${DIR} DIR)
|
|
if(COMMON_PATH STREQUAL "")
|
|
set(COMMON_PATH ${DIR})
|
|
else()
|
|
string(LENGTH ${COMMON_PATH} PREFIX_LEN)
|
|
while(NOT ${DIR} MATCHES "^${COMMON_PATH}(/|$)" AND PREFIX_LEN GREATER 0)
|
|
string(SUBSTRING ${COMMON_PATH} 0 ${PREFIX_LEN} COMMON_PATH)
|
|
math(EXPR PREFIX_LEN "${PREFIX_LEN} - 1")
|
|
endwhile()
|
|
endif()
|
|
endforeach()
|
|
|
|
if(NOT IS_DIRECTORY ${COMMON_PATH})
|
|
message(FATAL_ERROR "Could not determine common directory for source files")
|
|
endif()
|
|
|
|
# Recursively find directories that contain .h files under common directory
|
|
file(GLOB_RECURSE HEADER_FILES ${COMMON_PATH}/*.h)
|
|
set(INCLUDE_DIRS "")
|
|
foreach(HEADER_FILE IN LISTS HEADER_FILES)
|
|
get_filename_component(HEADER_DIR ${HEADER_FILE} DIRECTORY)
|
|
list(APPEND INCLUDE_DIRS ${HEADER_DIR})
|
|
endforeach()
|
|
|
|
list(REMOVE_DUPLICATES INCLUDE_DIRS)
|
|
|
|
set(${OUT_VAR} ${INCLUDE_DIRS} PARENT_SCOPE)
|
|
endfunction()
|