# Initialize CMake ################################################################################

CMake_Minimum_Required              ( VERSION 3.12.0 FATAL_ERROR )

# Set CMAKE_BUILD_TYPE
If                                  ( NOT CMAKE_BUILD_TYPE )
    Set                                 ( CMAKE_BUILD_TYPE "Release" CACHE STRING "Choose the type of build!" FORCE )
EndIf                               ( NOT CMAKE_BUILD_TYPE )
Set_Property                        ( CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Debug Release RelWithDebInfo MinSizeRel )

# Set CMAKE_MODULE_PATH
If                                  ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
    Set                                 ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                                                            "${CMAKE_CURRENT_SOURCE_DIR}/cmake/" )
EndIf                               ( )
If                                  ( EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" )
    Set                                 ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                                                            "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules/cmake" )
EndIf                               ( )

# Project #########################################################################################

Include                             ( GNUInstallDirs )
Include                             ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/asyncpp-options.cmake )
Include                             ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/asyncpp-const.cmake )
Include                             ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/asyncpp-var.cmake )
Project                             ( ${ASYNCPP_PROJECT_NAME}
                                      DESCRIPTION "${ASYNCPP_PROJECT_DESCRIPTION}"
                                      VERSION "${ASYNCPP_VERSION}" )
Include                             ( CTest )

# Subdirectories
Add_SubDirectory                    ( ${CMAKE_CURRENT_SOURCE_DIR}/src )
Add_SubDirectory                    ( ${CMAKE_CURRENT_SOURCE_DIR}/test )

# Install
If                                  (    NOT ASYNCPP_HAS_EXPORT
                                      OR NOT ASYNCPP_INSTALL_PACKAGE )
    Return                              ( )
EndIf                               ( )

Include                             ( CMakePackageConfigHelpers )
Write_Basic_Package_Version_File    ( "${CMAKE_CURRENT_BINARY_DIR}/cmake/asyncpp-config-version.cmake"
                                      VERSION ${ASYNCPP_VERSION}
                                      COMPATIBILITY AnyNewerVersion )
Configure_File                      ( "${CMAKE_CURRENT_SOURCE_DIR}/cmake/asyncpp-config.cmake"
                                      "${CMAKE_CURRENT_BINARY_DIR}/cmake/asyncpp-config.cmake"
                                      @ONLY )

Set                                 ( ConfigPackageLocation "${ASYNCPP_INSTALL_DIR_SHARE}/cmake" )
Install                             ( EXPORT
                                        asyncpp
                                      NAMESPACE
                                        asyncpp::
                                      DESTINATION
                                        ${ConfigPackageLocation} )
Install                             ( FILES
                                        "${CMAKE_CURRENT_BINARY_DIR}/cmake/asyncpp-config.cmake"
                                        "${CMAKE_CURRENT_BINARY_DIR}/cmake/asyncpp-config-version.cmake"
                                      DESTINATION
                                        ${ConfigPackageLocation}
                                      COMPONENT
                                        Devel )
