# 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/" )
    Set                               ( CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
                                                          "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules" )
EndIf                             ( )

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

Include                           ( CTest )
Include                           ( GNUInstallDirs )
Include                           ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppargs-options.cmake )
Include                           ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppargs-const.cmake )
Include                           ( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/cppargs-var.cmake )
Project                           ( ${CPPARGS_PROJECT_NAME}
                                    DESCRIPTION "${CPPARGS_PROJECT_DESCRIPTION}"
                                    VERSION "${CPPARGS_VERSION}" )

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

# Install
If                                (    NOT CPPARGS_HAS_EXPORT
                                    OR NOT CPPARGS_INSTALL_PACKAGE )
    Return                            ( )
EndIf                             ( )

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

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