# ===========================================================================
# CMakeLists.txt
# --------------
#
# Top-level CMake build configuration file. It defines project meta-data
# and decides what sub directories have to be considered for the
# configuration process.
# ---------------------------------------------------------------------------
#
# author : Emanuele Parisi
# ===========================================================================

cmake_minimum_required(VERSION
                       3.1.3)

# ---------------------------------------------------------------------------
# Initialize project configuration.
# ---------------------------------------------------------------------------

project(CppUtilities
        LANGUAGES CXX
        VERSION 0.1.0.0)
set(CppUtilities_DESCRIPTION
    A set of C++ classes and functions per performing utility tasks.)
set(CppUtilities_HOMEPAGE_URL
    http://philae.polito.it/gitlab/parisi/cpputilities)

# ---------------------------------------------------------------------------
# Select the proper default build type.
# ---------------------------------------------------------------------------

if (NOT CMAKE_BUILD_TYPE)
	set(CMAKE_BUILD_TYPE
	    "Release"
	    CACHE STRING
	    "The default project build type is 'Release'")
endif ()
message(STATUS
        "CMake build type is ${CMAKE_BUILD_TYPE}")

# ---------------------------------------------------------------------------
# Configure CppUtilities library targets.
# ---------------------------------------------------------------------------

add_subdirectory(include)

# ---------------------------------------------------------------------------
# Check what of the optional CppUtilities project targets have to be
# configured.
# ---------------------------------------------------------------------------

option(CppUtilities_BUILD_TESTS
       "Choose if tests have to be configured" OFF)
if (${CppUtilities_BUILD_TESTS})
	add_subdirectory(tests)
else ()
	message(STATUS
	        "User chose not to build tests")
endif ()

option(CppUtilities_BUILD_DOCS
       "Choose if documentation has to be configured" OFF)
if (${CppUtilities_BUILD_DOCS})
	add_subdirectory(docs)
else ()
	message(STATUS
	        "User chose not to build documentation")
endif ()

# ---------------------------------------------------------------------------
# Generate *ConfigVersion.cmake file.
# ---------------------------------------------------------------------------

include(CMakePackageConfigHelpers)
set(CppUtilities_CONFIG_VERSION_MODULE_PATH
    ${CMAKE_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake)
write_basic_package_version_file(${CppUtilities_CONFIG_VERSION_MODULE_PATH}
                                 COMPATIBILITY
                                 SameMajorVersion)

# ---------------------------------------------------------------------------
# Configure install procedures.
# ---------------------------------------------------------------------------

include(GNUInstallDirs)
install(EXPORT
        CppUtilitiesExport
        DESTINATION
        ${CMAKE_INSTALL_LIBDIR}/cmake/CppUtilities
        FILE
        CppUtilitiesConfig.cmake
        NAMESPACE
        CppUtilities::)
install(FILES
        ${CMAKE_BINARY_DIR}/CppUtilitiesConfigVersion.cmake
        DESTINATION
        ${CMAKE_INSTALL_LIBDIR}/cmake/CppUtilities)
install(DIRECTORY
        ${CMAKE_SOURCE_DIR}/include/cpputilities
        DESTINATION
        ${CMAKE_INSTALL_INCLUDEDIR}
        FILES_MATCHING
        PATTERN
        *.h)
