﻿set(TARGET_NAME ${PROJECT_NAME})
message(STATUS "Configuring ${TARGET_NAME}")

# Build configuration

configure_file(
    ${CMAKE_CURRENT_LIST_DIR}/Version.h.in
    ${CMAKE_CURRENT_LIST_DIR}/Version.h)

set(${PROJECT_NAME}_SOURCES "main.cpp")
set(${PROJECT_NAME}_INCLUDES "Version.h")
set(${PROJECT_NAME}_INCLUDE_DIRS "")
set(${PROJECT_NAME}_DEPENDENCIES "")

# Find all subdirectories
set(SUBDIRS_LIST "")
SubDirList(${CMAKE_CURRENT_LIST_DIR} SUBDIRS_LIST)

foreach(SUBDIR IN LISTS SUBDIRS_LIST)
    if (NOT ${PROJECT_NAME}_BUILD_SUBDIR_${SUBDIR})
        option(${PROJECT_NAME}_BUILD_SUBDIR_${SUBDIR} "Build ${SUBDIR} subdirectory" ON)
    endif()
    if(${PROJECT_NAME}_BUILD_SUBDIR_${SUBDIR})
        file(GLOB SUBDIR_SOURCES ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR}/*.cc ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR}/*.cpp)
        list(APPEND ${PROJECT_NAME}_SOURCES ${SUBDIR_SOURCES})
        file(GLOB SUBDIR_INCLUDES ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR}/*.h)
        list(APPEND ${PROJECT_NAME}_INCLUDES ${SUBDIR_INCLUDES})
        list(APPEND ${PROJECT_NAME}_INCLUDE_DIRS ${CMAKE_CURRENT_LIST_DIR}/${SUBDIR})
    endif()
endforeach()

add_executable(${TARGET_NAME} ${${PROJECT_NAME}_SOURCES} ${${PROJECT_NAME}_INCLUDES})
if(NOT ${${PROJECT_NAME}_DEPENDENCIES})
    add_dependencies(${TARGET_NAME} ${${PROJECT_NAME}_DEPENDENCIES})
    target_link_libraries(${TARGET_NAME} ${${PROJECT_NAME}_DEPENDENCIES})
endif()

#include_directories(${CMAKE_CURRENT_LIST_DIR})
#target_include_directories(${TARGET_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR})

install(TARGETS ${TARGET_NAME}
    PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET_NAME}/
    RUNTIME DESTINATION       ${CMAKE_INSTALL_BINDIR}
    LIBRARY DESTINATION       ${CMAKE_INSTALL_LIBDIR}
    INCLUDES DESTINATION      ${CMAKE_INSTALL_INCLUDEDIR}/${TARGET_NAME}/
    ARCHIVE DESTINATION       ${CMAKE_INSTALL_SHAREDSTATEDIR})

message(STATUS "")
message(STATUS "${TARGET_NAME} summary")
message(STATUS "")
foreach(SUBDIR IN LISTS SUBDIRS_LIST)
    message(STATUS "Build subdirectory ${SUBDIR}: \t \t ${${PROJECT_NAME}_BUILD_SUBDIR_${SUBDIR}}")
endforeach()
message(STATUS "")