cmake_minimum_required(VERSION 2.8)
cmake_policy(SET CMP0048 NEW)

project(skizzle VERSION 0.1.0 LANGUAGES CXX)

# Inclusion des fichiers d'en-tête et de source
include_directories(include)
file(GLOB_RECURSE SOURCES "src/*.cpp")

# Affichage de tous les avertisements
if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4")
elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
    set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wall -Wno-long-long -pedantic")
endif()

# Activation du standard C++11 sur le compilateur
if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX)
    include(CheckCXXCompilerFlag)
    CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
    CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)

    if(COMPILER_SUPPORTS_CXX11)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    elseif(COMPILER_SUPPORTS_CXX0X)
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
    else()
        message(STATUS "Votre version de gcc ne supporte pas C++11. \
        Le projet ne compilera probablement pas. Les versions de gcc \
        compatibles sont 4.6 et supérieures.")
    endif()
elseif(MSVC)
    if(MSVC_VERSION LESS 1800)
        message(STATUS "Votre version de Visual Studio ne supporte \
        pas C++11. Le projet ne compilera probablement pas. Les versions \
        de Visual Studio compatibles sont 2012 et supérieures.")
    endif()
endif()

# Recherche des librairies
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
add_executable(${CMAKE_PROJECT_NAME} ${SOURCES})

find_package(SFML 2.3.2 REQUIRED system window graphics network audio)
find_package(Boost 1.58.0 COMPONENTS system filesystem)
set(SFGUI_STATIC_LIBRARIES YES)
find_package(SFGUI 0.2.3 REQUIRED)

include_directories(${SFML_INCLUDE_DIR})
include_directories(${Boost_INCLUDE_DIRS})
include_directories(${SFGUI_INCLUDE_DIR})

target_link_libraries(${CMAKE_PROJECT_NAME} ${SFML_LIBRARIES})
target_link_libraries(${CMAKE_PROJECT_NAME} ${Boost_LIBRARIES})
target_link_libraries(${CMAKE_PROJECT_NAME} ${SFGUI_LIBRARY} ${SFGUI_DEPENDENCIES})

# Informations pour la création des packages
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
set(CPACK_PACKAGE_CONTACT "Maëlle Beuret, Rémi Cérès, Mattéo Delabre")
set(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/cmake/${CMAKE_PROJECT_NAME}-128.png")
set(CPACK_MONOLITHIC_INSTALL YES)
set(CPACK_PACKAGE_EXECUTABLES "skizzle;Skizzle")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Skizzle est un jeu inspiré des jeux de \
plateformes, des jeux de réflexion et de coopération.")

# Création des packages en fonction du système actuel
if(WIN32)
    set(CPACK_GENERATOR "NSIS")

    #############################################
    # TODO: ajout des instructions pour Windows #
    #############################################

elseif(UNIX AND NOT APPLE)
    set(CPACK_GENERATOR "DEB")
    set(CPACK_DEBIAN_PACKAGE_SECTION "games")
    set(CPACK_DEBIAN_PACKAGE_DEPENDS "libsfml-system2.3v5 (>= 2.3.2), \
    libsfml-window2.3v5 (>= 2.3.2), libsfml-graphics2.3v5 (>= 2.3.2), \
    libsfml-audio2.3v5 (>= 2.3.2), libboost-system1.58.0 (>= 1.58.0), \
    libboost-filesystem1.58.0 (>= 1.58.0)")

    # Installation de l'exécutable
    install(TARGETS ${CMAKE_PROJECT_NAME} DESTINATION games)

    # Installation de la documentation et des ressources
    install(FILES README.md DESTINATION share/${CMAKE_PROJECT_NAME})
    install(DIRECTORY res docs DESTINATION share/${CMAKE_PROJECT_NAME})

    # Installation des icônes
    install(FILES cmake/${CMAKE_PROJECT_NAME}.svg DESTINATION share/pixmaps)
    install(FILES ${CPACK_PACKAGE_ICON}
        RENAME ${CMAKE_PROJECT_NAME}.png
        DESTINATION share/pixmaps)

    foreach(ICON_SIZE 16 32 48 64 128 256 512)
        install(FILES cmake/${CMAKE_PROJECT_NAME}-${ICON_SIZE}.png
            RENAME ${CMAKE_PROJECT_NAME}.png
            DESTINATION share/icons/hicolor/${ICON_SIZE}x${ICON_SIZE}/apps)
    endforeach(ICON_SIZE)

    # Installation du fichier d'application
    install(FILES cmake/${CMAKE_PROJECT_NAME}.desktop
        DESTINATION share/applications)
else()
    message(STATUS "Votre plateforme n'a pas été configurée pour produire \
    des packages. La commande 'make package' ne fonctionnera pas, mais le \
    projet peut compiler et vous serez en mesure de l'exécuter.")
endif()

include(CPack)
