diff --git a/CMakeLists.txt b/CMakeLists.txt index 72b638b..b4fa9a6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,4 @@ - -cmake_minimum_required(VERSION 2.8.3) +cmake_minimum_required(VERSION 3.0.2) # define a macro that helps defining an option macro(csfml_set_option var default type docstring) @@ -17,7 +16,7 @@ csfml_set_option(CMAKE_BUILD_TYPE Release STRING "Choose the type of build (Debu project(CSFML) # include the configuration file -include(${CMAKE_SOURCE_DIR}/cmake/Config.cmake) +include(${PROJECT_SOURCE_DIR}/cmake/Config.cmake) # setup version numbers set(VERSION_MAJOR 2) @@ -25,7 +24,7 @@ set(VERSION_MINOR 5) set(VERSION_PATCH 1) # add the CSFML header path -include_directories(${CMAKE_SOURCE_DIR}/include) +include_directories(${PROJECT_SOURCE_DIR}/include) # add an option for choosing the build type (shared or static) csfml_set_option(BUILD_SHARED_LIBS TRUE BOOL "TRUE to build CSFML as shared libraries, FALSE to build it as static libraries") diff --git a/cmake/Config.cmake b/cmake/Config.cmake index 6b543db..bb7cd36 100644 --- a/cmake/Config.cmake +++ b/cmake/Config.cmake @@ -33,27 +33,12 @@ else() endif() # detect the compiler and its version -# Note: on some platforms (OS X), CMAKE_COMPILER_IS_GNUCXX is true -# even when CLANG is used, therefore the Clang test is done first -if(CMAKE_CXX_COMPILER MATCHES ".*clang[+][+]" OR CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - # CMAKE_CXX_COMPILER_ID is an internal CMake variable subject to change, - # but there is no other way to detect CLang at the moment - set(SFML_COMPILER_CLANG 1) - execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "--version" OUTPUT_VARIABLE CLANG_VERSION_OUTPUT) - string(REGEX REPLACE ".*clang version ([0-9]+\\.[0-9]+).*" "\\1" SFML_CLANG_VERSION "${CLANG_VERSION_OUTPUT}") -elseif(CMAKE_COMPILER_IS_GNUCXX) - set(SFML_COMPILER_GCC 1) - execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpversion" OUTPUT_VARIABLE GCC_VERSION_OUTPUT) - string(REGEX REPLACE "([0-9]+\\.[0-9]+).*" "\\1" SFML_GCC_VERSION "${GCC_VERSION_OUTPUT}") - execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "--version" OUTPUT_VARIABLE GCC_COMPILER_VERSION) - string(REGEX MATCHALL ".*(tdm[64]*-[1-9]).*" SFML_COMPILER_GCC_TDM "${GCC_COMPILER_VERSION}") - execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpmachine" OUTPUT_VARIABLE GCC_MACHINE) - string(STRIP "${GCC_MACHINE}" GCC_MACHINE) - if(${GCC_MACHINE} MATCHES ".*w64.*") - set(SFML_COMPILER_GCC_W64 1) - endif() -elseif(MSVC) +# Note: The detection is order is important because: +# - Visual Studio can both use MSVC and Clang +# - GNUCXX can still be set on macOS when using Clang +if(MSVC) set(SFML_COMPILER_MSVC 1) + if(MSVC_VERSION EQUAL 1400) set(SFML_MSVC_VERSION 8) elseif(MSVC_VERSION EQUAL 1500) @@ -70,6 +55,26 @@ elseif(MSVC) set(SFML_MSVC_VERSION 15) elseif(MSVC_VERSION LESS_EQUAL 1929) set(SFML_MSVC_VERSION 16) + elseif(MSVC_VERSION LESS_EQUAL 1939) + set(SFML_MSVC_VERSION 17) + endif() +elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + set(SFML_COMPILER_CLANG 1) + + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "--version" OUTPUT_VARIABLE CLANG_VERSION_OUTPUT) + string(REGEX REPLACE ".*clang version ([0-9]+\\.[0-9]+).*" "\\1" SFML_CLANG_VERSION "${CLANG_VERSION_OUTPUT}") +elseif(CMAKE_COMPILER_IS_GNUCXX) + set(SFML_COMPILER_GCC 1) + + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpversion" OUTPUT_VARIABLE GCC_VERSION_OUTPUT) + string(REGEX REPLACE "([0-9]+\\.[0-9]+).*" "\\1" SFML_GCC_VERSION "${GCC_VERSION_OUTPUT}") + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "--version" OUTPUT_VARIABLE GCC_COMPILER_VERSION) + string(REGEX MATCHALL ".*(tdm[64]*-[1-9]).*" SFML_COMPILER_GCC_TDM "${GCC_COMPILER_VERSION}") + execute_process(COMMAND "${CMAKE_CXX_COMPILER}" "-dumpmachine" OUTPUT_VARIABLE GCC_MACHINE) + string(STRIP "${GCC_MACHINE}" GCC_MACHINE) + + if(GCC_MACHINE MATCHES ".*w64.*") + set(SFML_COMPILER_GCC_W64 1) endif() else() message(FATAL_ERROR "Unsupported compiler") diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 3a652a2..9811247 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -3,7 +3,7 @@ find_package(Doxygen REQUIRED) # set the input and output documentation paths -set(DOXYGEN_INPUT_DIR ${CMAKE_SOURCE_DIR}) +set(DOXYGEN_INPUT_DIR ${PROJECT_SOURCE_DIR}) set(DOXYGEN_OUTPUT_DIR ${CMAKE_BINARY_DIR}/doc) # see if we can generate the CHM documentation diff --git a/src/SFML/Audio/CMakeLists.txt b/src/SFML/Audio/CMakeLists.txt index b661d60..38999ed 100644 --- a/src/SFML/Audio/CMakeLists.txt +++ b/src/SFML/Audio/CMakeLists.txt @@ -1,6 +1,6 @@ -set(INCROOT ${CMAKE_SOURCE_DIR}/include/SFML/Audio) -set(SRCROOT ${CMAKE_SOURCE_DIR}/src/SFML/Audio) +set(INCROOT ${PROJECT_SOURCE_DIR}/include/SFML/Audio) +set(SRCROOT ${PROJECT_SOURCE_DIR}/src/SFML/Audio) # all source files set(SRC diff --git a/src/SFML/CMakeLists.txt b/src/SFML/CMakeLists.txt index 744ea43..ee93719 100644 --- a/src/SFML/CMakeLists.txt +++ b/src/SFML/CMakeLists.txt @@ -1,9 +1,9 @@ # include the SFML specific macros -include(${CMAKE_SOURCE_DIR}/cmake/Macros.cmake) +include(${PROJECT_SOURCE_DIR}/cmake/Macros.cmake) # add the CSFML sources path -include_directories(${CMAKE_SOURCE_DIR}/src) +include_directories(${PROJECT_SOURCE_DIR}/src) # set the output directory for CSFML libraries set(LIBRARY_OUTPUT_PATH "${CMAKE_BINARY_DIR}/lib") diff --git a/src/SFML/Graphics/CMakeLists.txt b/src/SFML/Graphics/CMakeLists.txt index 5e56f32..39e8daa 100644 --- a/src/SFML/Graphics/CMakeLists.txt +++ b/src/SFML/Graphics/CMakeLists.txt @@ -1,6 +1,6 @@ -set(INCROOT ${CMAKE_SOURCE_DIR}/include/SFML/Graphics) -set(SRCROOT ${CMAKE_SOURCE_DIR}/src/SFML/Graphics) +set(INCROOT ${PROJECT_SOURCE_DIR}/include/SFML/Graphics) +set(SRCROOT ${PROJECT_SOURCE_DIR}/src/SFML/Graphics) # all source files set(SRC diff --git a/src/SFML/Main/CMakeLists.txt b/src/SFML/Main/CMakeLists.txt index fe5057c..031ebf5 100644 --- a/src/SFML/Main/CMakeLists.txt +++ b/src/SFML/Main/CMakeLists.txt @@ -1,6 +1,6 @@ # define the csfml-main target -add_library(csfml-main STATIC ${CMAKE_SOURCE_DIR}/src/SFML/Main/SFML_Main.cpp) +add_library(csfml-main STATIC ${PROJECT_SOURCE_DIR}/src/SFML/Main/SFML_Main.cpp) # set the debug suffix set_target_properties(csfml-main PROPERTIES DEBUG_POSTFIX -d) diff --git a/src/SFML/Network/CMakeLists.txt b/src/SFML/Network/CMakeLists.txt index cda03eb..cd90788 100644 --- a/src/SFML/Network/CMakeLists.txt +++ b/src/SFML/Network/CMakeLists.txt @@ -1,6 +1,6 @@ -set(INCROOT ${CMAKE_SOURCE_DIR}/include/SFML/Network) -set(SRCROOT ${CMAKE_SOURCE_DIR}/src/SFML/Network) +set(INCROOT ${PROJECT_SOURCE_DIR}/include/SFML/Network) +set(SRCROOT ${PROJECT_SOURCE_DIR}/src/SFML/Network) # all source files set(SRC diff --git a/src/SFML/System/CMakeLists.txt b/src/SFML/System/CMakeLists.txt index 2e62ec1..e254a57 100644 --- a/src/SFML/System/CMakeLists.txt +++ b/src/SFML/System/CMakeLists.txt @@ -1,10 +1,10 @@ -set(INCROOT ${CMAKE_SOURCE_DIR}/include/SFML/System) -set(SRCROOT ${CMAKE_SOURCE_DIR}/src/SFML/System) +set(INCROOT ${PROJECT_SOURCE_DIR}/include/SFML/System) +set(SRCROOT ${PROJECT_SOURCE_DIR}/src/SFML/System) # all source files set(SRC - ${CMAKE_SOURCE_DIR}/include/SFML/GPUPreference.h + ${PROJECT_SOURCE_DIR}/include/SFML/GPUPreference.h ${INCROOT}/Export.h ${SRCROOT}/Clock.cpp ${SRCROOT}/ClockStruct.h diff --git a/src/SFML/Window/CMakeLists.txt b/src/SFML/Window/CMakeLists.txt index 6438ce3..b1a2a69 100644 --- a/src/SFML/Window/CMakeLists.txt +++ b/src/SFML/Window/CMakeLists.txt @@ -1,6 +1,6 @@ -set(INCROOT ${CMAKE_SOURCE_DIR}/include/SFML/Window) -set(SRCROOT ${CMAKE_SOURCE_DIR}/src/SFML/Window) +set(INCROOT ${PROJECT_SOURCE_DIR}/include/SFML/Window) +set(SRCROOT ${PROJECT_SOURCE_DIR}/src/SFML/Window) # all source files set(SRC