From 9b2896c88ae93bc7629cbf21bb378fa99574c252 Mon Sep 17 00:00:00 2001 From: Dmitry Marakasov Date: Wed, 20 Feb 2019 22:35:59 +0300 Subject: [PATCH] Rework and modernize all CMake code --- .travis.yml | 32 ++--- CMakeLists.txt | 172 ++++++++++----------------- COPYING.txt | 8 +- FindSDL2PP.cmake.in | 28 ----- SDL2pp/Config.hh.in | 7 +- SDL2pp/Optional.hh | 17 ++- cmake/AppendCXXFlagIfSupported.cmake | 15 --- cmake/CheckCompile.cmake | 16 --- cmake/FindSDL2.cmake | 36 +++--- cmake/FindSDL2_image.cmake | 25 ++-- cmake/FindSDL2_mixer.cmake | 25 ++-- cmake/FindSDL2_ttf.cmake | 25 ++-- cmake/Join.cmake | 23 ---- examples/CMakeLists.txt | 35 +++--- exttests/cmake/CMakeLists.txt | 13 +- exttests/pkg-config/Makefile | 5 +- tests/CMakeLists.txt | 60 +++++----- 17 files changed, 203 insertions(+), 339 deletions(-) delete mode 100644 FindSDL2PP.cmake.in delete mode 100644 cmake/AppendCXXFlagIfSupported.cmake delete mode 100644 cmake/CheckCompile.cmake delete mode 100644 cmake/Join.cmake diff --git a/.travis.yml b/.travis.yml index 26c46b0..b98f1f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,26 +6,16 @@ matrix: - compiler: gcc env: COVERAGE=yes CXXFLAGS="--coverage" LDFLAGS"=--coverage" - compiler: clang - env: NOOPTLIBS=yes + env: CMAKE_ARGS="-DSDL2PP_WITH_IMAGE=NO -DSDL2PP_WITH_MIXER=NO -DSDL2PP_WITH_TTF=NO" NOOPTLIBS=yes - compiler: clang - env: STATIC=yes + env: CMAKE_ARGS="-DSDL2PP_STATIC=YES" before_install: - sudo add-apt-repository --yes ppa:zoogie/sdl2-snapshots - sudo apt-get update -qq - sudo apt-get install -qq cmake libsdl2-dev cppcheck doxygen pulseaudio - sudo sed -i -e '/using ::gets/ d' /usr/include/c++/4.8/cstdio # build failure with clang/c++1y - - |- - if [ -n "${COVERAGE}" ]; then - pip install --user pyyaml cpp-coveralls - fi - if [ -n "${NOOPTLIBS}" ]; then - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DSDL2PP_WITH_IMAGE=NO -DSDL2PP_WITH_MIXER=NO -DSDL2PP_WITH_TTF=NO" - else - sudo apt-get install -qq libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev - fi - if [ -n "${STATIC}" ]; then - export CMAKE_EXTRA_ARGS="${CMAKE_EXTRA_ARGS} -DSDL2PP_STATIC=YES" - fi + - if [ -n "${COVERAGE}" ]; then pip install --user pyyaml cpp-coveralls; fi + - if [ -z "${NOOPTLIBS}" ]; then sudo apt-get install -qq libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev; fi # evironment for live tests - dbus-launch pulseaudio --start @@ -37,18 +27,20 @@ before_install: script: - export PREFIX=`pwd`.prefix - - cmake . -DCMAKE_INSTALL_PREFIX=${PREFIX} -DSDL2PP_WITH_WERROR=YES ${CMAKE_EXTRA_ARGS} - - VERBOSE=1 make && make ARGS=-V test && make install - - cppcheck -I . --enable=performance,portability,information,missingInclude --error-exitcode=2 SDL2pp # `style' gives false positive in cppcheck 1.61 which comes with trusty + - cmake . -DCMAKE_VERBOSE_MAKEFILE=yes -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Debug ${CMAKE_ARGS} + - cmake --build . + - ctest -V + # `style' gives false positive in cppcheck 1.61 which comes with trusty + - cppcheck -I . --enable=performance,portability,information,missingInclude --error-exitcode=2 SDL2pp + - sudo make install - make doxygen # - "if make doxygen 2>&1 | grep 'warning:'; then echo 'FATAL: doxygen warnings!'; false; fi" - "if git ls-files --others --exclude-standard | grep ''; then echo 'FATAL: incomplete .gitignore'; false; fi" - - cat ${TRAVIS_BUILD_DIR}/sdl2pp.pc - - cd ${TRAVIS_BUILD_DIR}/exttests/pkg-config && PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig make + - cd ${TRAVIS_BUILD_DIR}/exttests/pkg-config && make - cat ${TRAVIS_BUILD_DIR}/FindSDL2PP.cmake - - cd ${TRAVIS_BUILD_DIR}/exttests/cmake && cmake -DCMAKE_MODULE_PATH=${PREFIX}/share/cmake/Modules . && make + - cd ${TRAVIS_BUILD_DIR}/exttests/cmake && cmake . && make - cd ${TRAVIS_BUILD_DIR} diff --git a/CMakeLists.txt b/CMakeLists.txt index b939228..8c3c9a2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,35 +5,43 @@ project(libSDL2pp) set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) -set(SDL2PP_MAJOR_VERSION 0) -set(SDL2PP_MINOR_VERSION 16) -set(SDL2PP_PATCH_VERSION 0) +set(SDL2PP_VERSION_MAJOR 0) +set(SDL2PP_VERSION_MINOR 17) +set(SDL2PP_VERSION_PATCH 0) -set(SDL2PP_VERSION "${SDL2PP_MAJOR_VERSION}.${SDL2PP_MINOR_VERSION}.${SDL2PP_PATCH_VERSION}") +set(SDL2PP_VERSION "${SDL2PP_VERSION_MAJOR}.${SDL2PP_VERSION_MINOR}.${SDL2PP_VERSION_PATCH}") set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED YES) set(CMAKE_CXX_EXTENSIONS NO) -# there are functions present on wiki, but not yet in stable SDL2 releases; -# we hide these under following options -option(SDL2PP_WITH_WERROR "Make warnings fatal" OFF) - if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) - OPTION(SDL2PP_WITH_IMAGE "Enable SDL2_image support" ON) - OPTION(SDL2PP_WITH_TTF "Enable SDL2_ttf support" ON) - OPTION(SDL2PP_WITH_MIXER "Enable SDL2_mixer support" ON) + set(SDL2PP_BUNDLED OFF) + set(SDL2PP_STANDALONE ON) else() + set(SDL2PP_BUNDLED ON) + set(SDL2PP_STANDALONE OFF) +endif() + + +if(SDL2PP_STANDALONE) + option(SDL2PP_WITH_IMAGE "Enable SDL2_image support" ON) + option(SDL2PP_WITH_TTF "Enable SDL2_ttf support" ON) + option(SDL2PP_WITH_MIXER "Enable SDL2_mixer support" ON) + + option(SDL2PP_WITH_EXAMPLES "Build examples" ON) + option(SDL2PP_WITH_TESTS "Build tests" ON) + option(SDL2PP_ENABLE_LIVE_TESTS "Enable live tests (require X11 display and audio device)" ON) + option(SDL2PP_STATIC "Build static library instead of shared one" OFF) +else() + set(SDL2PP_STATIC ON CACHE BOOL "Build static library instead of shared one") # please set SDL2PP_WITH_IMAGE, SDL2PP_WITH_TTF, SDL2PP_WITH_MIXER in parent project as needed endif() # depends find_package(SDL2 REQUIRED) -set(SDL2_ALL_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) -set(SDL2_ALL_LIBRARIES ${SDL2_LIBRARY}) +set(SDL2_ALL_LIBRARIES SDL2::SDL2) set(SDL2_ALL_PKGCONFIG_MODULES sdl2) -set(SDL2PP_EXTRA_LIBRARIES ${SDL2MAIN_LIBRARY}) -set(SDL2PP_EXTRA_PKGCONFIG_LIBRARIES ${SDL2MAIN_LIBRARY}) if(MINGW) set(MINGW32_LIBRARY "mingw32" CACHE STRING "mingw32 library") @@ -43,8 +51,7 @@ endif() if(SDL2PP_WITH_IMAGE) find_package(SDL2_image REQUIRED) - set(SDL2_ALL_INCLUDE_DIRS ${SDL2_ALL_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIR}) - set(SDL2_ALL_LIBRARIES ${SDL2_ALL_LIBRARIES} ${SDL2_IMAGE_LIBRARY}) + set(SDL2_ALL_LIBRARIES ${SDL2_ALL_LIBRARIES} SDL2::SDL2_image) set(SDL2_ALL_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_image") else() message(STATUS "SDL2_image support disabled") @@ -52,8 +59,7 @@ endif() if(SDL2PP_WITH_TTF) find_package(SDL2_ttf REQUIRED) - set(SDL2_ALL_INCLUDE_DIRS ${SDL2_ALL_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIR}) - set(SDL2_ALL_LIBRARIES ${SDL2_ALL_LIBRARIES} ${SDL2_TTF_LIBRARY}) + set(SDL2_ALL_LIBRARIES ${SDL2_ALL_LIBRARIES} SDL2::SDL2_ttf) set(SDL2_ALL_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_ttf") else() message(STATUS "SDL2_ttf support disabled") @@ -61,53 +67,26 @@ endif() if(SDL2PP_WITH_MIXER) find_package(SDL2_mixer REQUIRED) - set(SDL2_ALL_INCLUDE_DIRS ${SDL2_ALL_INCLUDE_DIRS} ${SDL2_MIXER_INCLUDE_DIR}) - set(SDL2_ALL_LIBRARIES ${SDL2_ALL_LIBRARIES} ${SDL2_MIXER_LIBRARY}) + set(SDL2_ALL_LIBRARIES ${SDL2_ALL_LIBRARIES} SDL2::SDL2_mixer) set(SDL2_ALL_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_mixer") else() message(STATUS "SDL2_mixer support disabled") endif() # compiler flags & definitions -if(MSVC) - set(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} /W3") - set(SDL2PP_WERROR_FLAG "/WX") -else() - set(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} -Wall -Wextra -pedantic") - set(SDL2PP_WERROR_FLAG "-Werror") +include(CheckCXXSourceCompiles) - include(AppendCXXFlagIfSupported) +set(CMAKE_REQUIRED_FLAGS -std=c++11) # hack, as CMAKE_CXX_STANDARD is not propagated - # enable for more cleanups - #APPEND_CXX_FLAG_IF_SUPPORTED(-Weverything SDL2PP_WARNINGS) - - # always enables some -Weverything warnings - APPEND_CXX_FLAG_IF_SUPPORTED(-Wmissing-prototypes SDL2PP_WARNINGS) - APPEND_CXX_FLAG_IF_SUPPORTED(-Wtautological-compare SDL2PP_WARNINGS) - APPEND_CXX_FLAG_IF_SUPPORTED(-Wshorten-64-to-32 SDL2PP_WARNINGS) - - # disable some -Weverything warnings - #APPEND_CXX_FLAG_IF_SUPPORTED(-Wno-c++98-compat SDL2PP_WARNINGS) - #APPEND_CXX_FLAG_IF_SUPPORTED(-Wno-padded SDL2PP_WARNINGS) -endif() - -list(REMOVE_DUPLICATES SDL2_ALL_INCLUDE_DIRS) - -include_directories(BEFORE ${PROJECT_SOURCE_DIR}) -include_directories(SYSTEM ${SDL2_ALL_INCLUDE_DIRS}) - -include(CheckCompile) -check_compile( - SDL2PP_WITH_EXPERIMENTAL_OPTIONAL - "#include \nint main() { std::experimental::optional o; return !o; }" - "experimental/optional header" +check_cxx_source_compiles( + "#include \nint main() { std::optional o; return !o; }" + SDL2PP_WITH_STD_OPTIONAL ) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WARNINGS}") - -if(SDL2PP_WITH_WERROR) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WERROR_FLAG}") -endif() +check_cxx_source_compiles( + "#include \nint main() { std::experimental::optional o; return !o; }" + SDL2PP_WITH_EXPERIMENTAL_OPTIONAL +) # config.h configure_file( @@ -115,8 +94,6 @@ configure_file( SDL2pp/Config.hh ) -include_directories(BEFORE ${PROJECT_BINARY_DIR}) - # sources set(LIBRARY_SOURCES SDL2pp/AudioDevice.cc @@ -206,26 +183,30 @@ endif() # targets include(GenerateExportHeader) -if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) - # options - option(SDL2PP_WITH_EXAMPLES "Build examples" ON) - option(SDL2PP_WITH_TESTS "Build tests" ON) - option(SDL2PP_ENABLE_LIVE_TESTS "Enable live tests (require X11 display and audio device)" ON) - option(SDL2PP_STATIC "Build static library instead of shared one" OFF) +if(SDL2PP_STATIC) + add_library(SDL2pp STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) + set_target_properties(SDL2pp PROPERTIES + POSITION_INDEPENDENT_CODE ON + ) +else() + add_library(SDL2pp SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) + set_target_properties(SDL2pp PROPERTIES + VERSION 8.3.0 + SOVERSION 8 + C_VISIBILITY_PRESET hidden + ) +endif() +target_include_directories(SDL2pp PUBLIC + $ + $ + $ +) +target_link_libraries(SDL2pp PUBLIC ${SDL2_ALL_LIBRARIES}) +generate_export_header(SDL2pp EXPORT_FILE_NAME SDL2pp/Export.hh) - # library - if(SDL2PP_STATIC) - ADD_LIBRARY(SDL2pp STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) - else() - ADD_LIBRARY(SDL2pp SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) - TARGET_LINK_LIBRARIES(SDL2pp ${SDL2_ALL_LIBRARIES}) - SET_TARGET_PROPERTIES(SDL2pp PROPERTIES VERSION 8.3.0 SOVERSION 8) - endif() - - generate_export_header(SDL2pp EXPORT_FILE_NAME SDL2pp/Export.hh) - - set(SDL2PP_LIBRARIES ${SDL2PP_EXTRA_LIBRARIES} SDL2pp ${SDL2_ALL_LIBRARIES}) +add_library(SDL2pp::SDL2pp ALIAS SDL2pp) +if(SDL2PP_STANDALONE) # examples and tests if(SDL2PP_WITH_EXAMPLES) add_subdirectory(examples) @@ -247,32 +228,15 @@ if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) ) endif() - # pkgconfig and cmake modules - set(CMAKEMODDIR share/cmake/Modules CACHE STRING "directory where to install cmake module") + # pkgconfig module + configure_file(sdl2pp.pc.in sdl2pp.pc @ONLY) + + # install set(PKGCONFIGDIR lib/pkgconfig CACHE STRING "directory where to install pkg-config files") if(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR CMAKE_SYSTEM_NAME MATCHES "DragonFly") SET(PKGCONFIGDIR libdata/pkgconfig) endif() - include(Join) - - JOIN_QUOTED("${SDL2PP_EXTRA_LIBRARIES}" SDL2PP_EXTRA_LIBRARIES_STR) - JOIN_QUOTED("${SDL2_ALL_LIBRARIES}" SDL2_ALL_LIBRARIES_STR) - JOIN_QUOTED("${SDL2_ALL_INCLUDE_DIRS}" SDL2_ALL_INCLUDE_DIRS_STR) - - configure_file( - sdl2pp.pc.in - sdl2pp.pc - @ONLY - ) - - configure_file( - FindSDL2PP.cmake.in - FindSDL2PP.cmake - @ONLY - ) - - # install install(FILES ${LIBRARY_HEADERS} ${PROJECT_BINARY_DIR}/SDL2pp/Config.hh @@ -281,22 +245,12 @@ if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) ) install(FILES ${LIBRARY_EXTERNAL_HEADERS} DESTINATION include/SDL2pp/external) install(TARGETS SDL2pp + EXPORT SDL2pp RUNTIME DESTINATION bin LIBRARY DESTINATION lib ARCHIVE DESTINATION lib ) install(FILES ${PROJECT_BINARY_DIR}/sdl2pp.pc DESTINATION ${PKGCONFIGDIR}) - install(FILES ${PROJECT_BINARY_DIR}/FindSDL2PP.cmake DESTINATION ${CMAKEMODDIR}) - message(STATUS "libSDL2pp ${SDL2PP_VERSION} standalone build") -else() - # library - add_library(SDL2pp STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) - generate_export_header(SDL2pp EXPORT_FILE_NAME SDL2pp/Export.hh) - - # provide variables to parent - set(SDL2PP_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_BINARY_DIR} ${SDL2_ALL_INCLUDE_DIRS} PARENT_SCOPE) - set(SDL2PP_LIBRARIES ${SDL2PP_EXTRA_LIBRARIES} SDL2pp ${SDL2_ALL_LIBRARIES} PARENT_SCOPE) - - message(STATUS "libSDL2pp ${SDL2PP_VERSION} bundled build") + install(EXPORT SDL2pp NAMESPACE SDL2pp:: DESTINATION lib/cmake/SDL2pp FILE SDL2ppConfig.cmake) endif() diff --git a/COPYING.txt b/COPYING.txt index a8290cd..8121524 100644 --- a/COPYING.txt +++ b/COPYING.txt @@ -1,7 +1,6 @@ - libSDL2pp - C++11 bindings/wrapper for SDL2 -Copyright (C) 2013-2015 Dmitry Marakasov - +Copyright (C) 2013-2019 Dmitry Marakasov + This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. @@ -9,7 +8,7 @@ arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: - + 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be @@ -17,4 +16,3 @@ freely, subject to the following restrictions: 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. - diff --git a/FindSDL2PP.cmake.in b/FindSDL2PP.cmake.in deleted file mode 100644 index 344d2b2..0000000 --- a/FindSDL2PP.cmake.in +++ /dev/null @@ -1,28 +0,0 @@ -# - Try to find SDL2pp library -# -# Once done this will define -# -# SDL2PP_FOUND -# SDL2PP_INCLUDE_DIRS -# SDL2PP_LIBRARIES - -IF(SDL2PP_INCLUDE_DIR AND SDL2PP_LIBRARY) - # in cache already - SET(SDL2PP_FIND_QUIETLY TRUE) -ENDIF(SDL2PP_INCLUDE_DIR AND SDL2PP_LIBRARY) - -FIND_PATH(SDL2PP_INCLUDE_DIR SDL2pp/SDL2pp.hh HINTS "@CMAKE_INSTALL_PREFIX@/include") - -FIND_LIBRARY(SDL2PP_LIBRARY NAMES SDL2pp HINTS "@CMAKE_INSTALL_PREFIX@/lib") - -MARK_AS_ADVANCED(SDL2PP_INCLUDE_DIR SDL2PP_LIBRARY) - -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2PP - REQUIRED_VARS SDL2PP_INCLUDE_DIR SDL2PP_LIBRARY -) - -IF(SDL2PP_FOUND) - SET(SDL2PP_INCLUDE_DIRS ${SDL2PP_INCLUDE_DIR} @SDL2_ALL_INCLUDE_DIRS_STR@) - SET(SDL2PP_LIBRARIES @SDL2PP_EXTRA_LIBRARIES_STR@ ${SDL2PP_LIBRARY} @SDL2_ALL_LIBRARIES_STR@) -ENDIF(SDL2PP_FOUND) diff --git a/SDL2pp/Config.hh.in b/SDL2pp/Config.hh.in index f7d1803..ec6f77c 100644 --- a/SDL2pp/Config.hh.in +++ b/SDL2pp/Config.hh.in @@ -22,15 +22,16 @@ #ifndef SDL2PP_CONFIG_HH #define SDL2PP_CONFIG_HH -#define SDL2PP_MAJOR_VERSION @SDL2PP_MAJOR_VERSION@ -#define SDL2PP_MINOR_VERSION @SDL2PP_MINOR_VERSION@ -#define SDL2PP_PATCH_VERSION @SDL2PP_PATCH_VERSION@ +#define SDL2PP_VERSION_MAJOR @SDL2PP_VERSION_MAJOR@ +#define SDL2PP_VERSION_MINOR @SDL2PP_VERSION_MINOR@ +#define SDL2PP_VERSION_PATCH @SDL2PP_VERSION_PATCH@ #define SDL2PP_VERSION "@SDL2PP_VERSION@" #cmakedefine SDL2PP_WITH_IMAGE #cmakedefine SDL2PP_WITH_TTF #cmakedefine SDL2PP_WITH_MIXER +#cmakedefine SDL2PP_WITH_STD_OPTIONAL #cmakedefine SDL2PP_WITH_EXPERIMENTAL_OPTIONAL #endif diff --git a/SDL2pp/Optional.hh b/SDL2pp/Optional.hh index 27ff491..98fe87d 100644 --- a/SDL2pp/Optional.hh +++ b/SDL2pp/Optional.hh @@ -66,7 +66,22 @@ /// //////////////////////////////////////////////////////////// -#if defined(SDL2PP_WITH_EXPERIMENTAL_OPTIONAL) +#if defined(SDL2PP_WITH_STD_OPTIONAL) + +# include + +namespace SDL2pp { + +template +using Optional = std:::optional; + +using BadOptionalAccess = std::bad_optional_access; + +constexpr std::nullopt_t NullOpt = std::nullopt; + +} + +#elif defined(SDL2PP_WITH_EXPERIMENTAL_OPTIONAL) # include diff --git a/cmake/AppendCXXFlagIfSupported.cmake b/cmake/AppendCXXFlagIfSupported.cmake deleted file mode 100644 index ee38818..0000000 --- a/cmake/AppendCXXFlagIfSupported.cmake +++ /dev/null @@ -1,15 +0,0 @@ -INCLUDE(CheckCXXCompilerFlag) - -MACRO(APPEND_CXX_FLAG_IF_SUPPORTED FLAG VARIABLE) - UNSET(HAS_FLAG CACHE) - SET(SAVED_CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET}) - SET(CMAKE_REQUIRED_QUIET YES) - CHECK_CXX_COMPILER_FLAG(${FLAG} HAS_FLAG) - SET(CMAKE_REQUIRED_QUIET ${SAVED_CMAKE_REQUIRED_QUIET}) - IF(HAS_FLAG) - SET(${VARIABLE} "${${VARIABLE}} ${FLAG}") - MESSAGE(STATUS "Checking for ${FLAG}: yes") - ELSE(HAS_FLAG) - MESSAGE(STATUS "Checking for ${FLAG}: no") - ENDIF(HAS_FLAG) -ENDMACRO(APPEND_CXX_FLAG_IF_SUPPORTED) diff --git a/cmake/CheckCompile.cmake b/cmake/CheckCompile.cmake deleted file mode 100644 index 5f93361..0000000 --- a/cmake/CheckCompile.cmake +++ /dev/null @@ -1,16 +0,0 @@ -INCLUDE(CheckCXXSourceCompiles) - -MACRO(CHECK_COMPILE RESULT_VAR CODE DESCRIPTION) - SET(SAVED_CMAKE_REQUIRED_QUIET "${CMAKE_REQUIRED_QUIET}") - SET(SAVED_CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS}") - SET(CMAKE_REQUIRED_QUIET YES) - SET(CMAKE_REQUIRED_FLAGS "${SDL2PP_WERROR_FLAG}") - CHECK_CXX_SOURCE_COMPILES("${CODE}" ${RESULT_VAR}) - SET(CMAKE_REQUIRED_QUIET "${SAVED_CMAKE_REQUIRED_QUIET}") - SET(CMAKE_REQUIRED_FLAGS "${SAVED_CMAKE_REQUIRED_FLAGS}") - IF(${RESULT_VAR}) - MESSAGE(STATUS "Checking for ${DESCRIPTION}: yes") - ELSE(${RESULT_VAR}) - MESSAGE(STATUS "Checking for ${DESCRIPTION}: no") - ENDIF(${RESULT_VAR}) -ENDMACRO(CHECK_COMPILE) diff --git a/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake index ef86bf8..7e2334a 100644 --- a/cmake/FindSDL2.cmake +++ b/cmake/FindSDL2.cmake @@ -1,23 +1,23 @@ -# - Try to locate SDL2 -# This module defines: -# -# SDL2_INCLUDE_DIR -# SDL2_LIBRARY, SDL2MAIN_LIBRARY -# SDL2_FOUND -# +# SDL2::SDL2, SDL2::SDL2main SDL2MAIN_LIBRARY -FIND_PATH(SDL2_INCLUDE_DIR NAMES SDL.h PATH_SUFFIXES SDL2) +find_path(SDL2_INCLUDE_DIR NAMES SDL.h PATH_SUFFIXES SDL2) -FIND_LIBRARY(SDL2_LIBRARY NAMES SDL2) -FIND_LIBRARY(SDL2MAIN_LIBRARY NAMES SDL2main) +find_library(SDL2_LIBRARY NAMES SDL2) +find_library(SDL2MAIN_LIBRARY NAMES SDL2main) -INCLUDE(FindPackageHandleStandardArgs) +if(SDL2_INCLUDE_DIR AND SDL2_LIBRARY) + add_library(SDL2::SDL2 UNKNOWN IMPORTED) + set_property(TARGET SDL2::SDL2 PROPERTY IMPORTED_LOCATION ${SDL2_LIBRARY}) + set_target_properties(SDL2::SDL2 PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${SDL2_INCLUDE_DIR}) -IF (UNIX) - # Fedora has reportedly dropped SDLmain, so don't treat it as mandatory on *nix - FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) -ELSE (UNIX) - FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2MAIN_LIBRARY SDL2_INCLUDE_DIR) -ENDIF (UNIX) + message(STATUS "Found SDL2: ${SDL2_LIBRARY}") -MARK_AS_ADVANCED(SDL2_INCLUDE_DIR SDL2_LIBRARY SDL2MAIN_LIBRARY) + if(SDL2MAIN_LIBRARY) + add_library(SDL2::SDL2main UNKNOWN IMPORTED) + set_property(TARGET SDL2::SDL2main PROPERTY IMPORTED_LOCATION ${SDL2MAIN_LIBRARY}) + + message(STATUS "Found SDL2main: ${SDL2MAIN_LIBRARY}") + endif() +else() + message(FATAL_ERROR "Could not find SDL2") +endif() diff --git a/cmake/FindSDL2_image.cmake b/cmake/FindSDL2_image.cmake index 88adb3f..f34a54e 100644 --- a/cmake/FindSDL2_image.cmake +++ b/cmake/FindSDL2_image.cmake @@ -1,17 +1,14 @@ -# - Try to locate SDL2_image -# This module defines: -# -# SDL2_IMAGE_INCLUDE_DIR -# SDL2_IMAGE_LIBRARY -# SDL2_IMAGE_FOUND -# +# SDL2::SDL2_image -FIND_PATH(SDL2_IMAGE_INCLUDE_DIR NAMES SDL_image.h PATH_SUFFIXES SDL2) +find_path(SDL2_IMAGE_INCLUDE_DIR NAMES SDL_image.h PATH_SUFFIXES SDL2) +find_library(SDL2_IMAGE_LIBRARY NAMES SDL2_image) -FIND_LIBRARY(SDL2_IMAGE_LIBRARY NAMES SDL2_image) +if(SDL2_IMAGE_INCLUDE_DIR AND SDL2_IMAGE_LIBRARY) + add_library(SDL2::SDL2_image UNKNOWN IMPORTED) + set_property(TARGET SDL2::SDL2_image PROPERTY IMPORTED_LOCATION ${SDL2_IMAGE_LIBRARY}) + set_target_properties(SDL2::SDL2_image PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${SDL2_IMAGE_INCLUDE_DIR}) -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_image REQUIRED_VARS SDL2_IMAGE_LIBRARY SDL2_IMAGE_INCLUDE_DIR) - -MARK_AS_ADVANCED(SDL2_IMAGE_INCLUDE_DIR SDL2_IMAGE_LIBRARY) + message(STATUS "Found SDL2_image: ${SDL2_IMAGE_LIBRARY}") +else() + message(FATAL_ERROR "Could not find SDL2_image") +endif() diff --git a/cmake/FindSDL2_mixer.cmake b/cmake/FindSDL2_mixer.cmake index ef5748b..6df3529 100644 --- a/cmake/FindSDL2_mixer.cmake +++ b/cmake/FindSDL2_mixer.cmake @@ -1,17 +1,14 @@ -# - Try to locate SDL2_mixer -# This module defines: -# -# SDL2_MIXER_INCLUDE_DIR -# SDL2_MIXER_LIBRARY -# SDL2_MIXER_FOUND -# +# SDL2::SDL2_mixer -FIND_PATH(SDL2_MIXER_INCLUDE_DIR NAMES SDL_mixer.h PATH_SUFFIXES SDL2) +find_path(SDL2_MIXER_INCLUDE_DIR NAMES SDL_mixer.h PATH_SUFFIXES SDL2) +find_library(SDL2_MIXER_LIBRARY NAMES SDL2_mixer) -FIND_LIBRARY(SDL2_MIXER_LIBRARY NAMES SDL2_mixer) +if(SDL2_MIXER_INCLUDE_DIR AND SDL2_MIXER_LIBRARY) + add_library(SDL2::SDL2_mixer UNKNOWN IMPORTED) + set_property(TARGET SDL2::SDL2_mixer PROPERTY IMPORTED_LOCATION ${SDL2_MIXER_LIBRARY}) + set_target_properties(SDL2::SDL2_mixer PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${SDL2_MIXER_INCLUDE_DIR}) -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_mixer REQUIRED_VARS SDL2_MIXER_LIBRARY SDL2_MIXER_INCLUDE_DIR) - -MARK_AS_ADVANCED(SDL2_MIXER_INCLUDE_DIR SDL2_MIXER_LIBRARY) + message(STATUS "Found SDL2_mixer: ${SDL2_MIXER_LIBRARY}") +else() + message(FATAL_ERROR "Could not find SDL2_mixer") +endif() diff --git a/cmake/FindSDL2_ttf.cmake b/cmake/FindSDL2_ttf.cmake index b480d55..c2c6f17 100644 --- a/cmake/FindSDL2_ttf.cmake +++ b/cmake/FindSDL2_ttf.cmake @@ -1,17 +1,14 @@ -# - Try to locate SDL2_ttf -# This module defines: -# -# SDL2_TTF_INCLUDE_DIR -# SDL2_TTF_LIBRARY -# SDL2_TTF_FOUND -# +# SDL2::SDL2_ttf -FIND_PATH(SDL2_TTF_INCLUDE_DIR NAMES SDL_ttf.h PATH_SUFFIXES SDL2) +find_path(SDL2_TTF_INCLUDE_DIR NAMES SDL_ttf.h PATH_SUFFIXES SDL2) +find_library(SDL2_TTF_LIBRARY NAMES SDL2_ttf) -FIND_LIBRARY(SDL2_TTF_LIBRARY NAMES SDL2_ttf) +if(SDL2_TTF_INCLUDE_DIR AND SDL2_TTF_LIBRARY) + add_library(SDL2::SDL2_ttf UNKNOWN IMPORTED) + set_property(TARGET SDL2::SDL2_ttf PROPERTY IMPORTED_LOCATION ${SDL2_TTF_LIBRARY}) + set_target_properties(SDL2::SDL2_ttf PROPERTIES INTERFACE_INCLUDE_DIRECTORIES ${SDL2_TTF_INCLUDE_DIR}) -INCLUDE(FindPackageHandleStandardArgs) - -FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2_ttf REQUIRED_VARS SDL2_TTF_LIBRARY SDL2_TTF_INCLUDE_DIR) - -MARK_AS_ADVANCED(SDL2_TTF_INCLUDE_DIR SDL2_TTF_LIBRARY) + message(STATUS "Found SDL2_ttf: ${SDL2_TTF_LIBRARY}") +else() + message(FATAL_ERROR "Could not find SDL2_ttf") +endif() diff --git a/cmake/Join.cmake b/cmake/Join.cmake deleted file mode 100644 index a809557..0000000 --- a/cmake/Join.cmake +++ /dev/null @@ -1,23 +0,0 @@ -FUNCTION(JOIN_SIMPLE VALUES OUTPUT) - FOREACH(_VAL ${VALUES}) - IF(DEFINED _TMP) - SET(_TMP "${_TMP} ${_VAL}") - ELSE(DEFINED _TMP) - SET(_TMP "${_VAL}") - ENDIF(DEFINED _TMP) - ENDFOREACH(_VAL) - SET(${OUTPUT} "${_TMP}" PARENT_SCOPE) -ENDFUNCTION() - -FUNCTION(JOIN_QUOTED VALUES OUTPUT) - FOREACH(_VAL ${VALUES}) - STRING(REPLACE "\\" "\\\\" _VAL "${_VAL}") - STRING(REPLACE "\"" "\\\"" _VAL "${_VAL}") - IF(DEFINED _TMP) - SET(_TMP "${_TMP} \"${_VAL}\"") - ELSE(DEFINED _TMP) - SET(_TMP "\"${_VAL}\"") - ENDIF(DEFINED _TMP) - ENDFOREACH(_VAL) - SET(${OUTPUT} "${_TMP}" PARENT_SCOPE) -ENDFUNCTION() diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 33fe8d3..0d4903e 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,6 +1,4 @@ -ADD_DEFINITIONS(-DTESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata") - -SET(EXAMPLES +set(EXAMPLES audio_sine audio_wav lines @@ -8,29 +6,30 @@ SET(EXAMPLES sprites ) -IF(SDL2PP_WITH_IMAGE) - SET(EXAMPLES ${EXAMPLES} +if(SDL2PP_WITH_IMAGE) + set(EXAMPLES ${EXAMPLES} image fill ) -ENDIF(SDL2PP_WITH_IMAGE) +endif(SDL2PP_WITH_IMAGE) -IF(SDL2PP_WITH_MIXER) - SET(EXAMPLES ${EXAMPLES} +if(SDL2PP_WITH_MIXER) + set(EXAMPLES ${EXAMPLES} mixer mixer_music mixer_music_sine mixer_effects ) -ENDIF(SDL2PP_WITH_MIXER) +endif(SDL2PP_WITH_MIXER) -IF(SDL2PP_WITH_TTF) - SET(EXAMPLES ${EXAMPLES} - ttf +if(SDL2PP_WITH_TTF) + set(EXAMPLES ${EXAMPLES} ttf) +endif(SDL2PP_WITH_TTF) + +foreach(EXAMPLE ${EXAMPLES}) + add_executable(${EXAMPLE} ${EXAMPLE}.cc) + target_compile_definitions(${EXAMPLE} PRIVATE + TESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata" ) -ENDIF(SDL2PP_WITH_TTF) - -FOREACH(EXAMPLE ${EXAMPLES}) - ADD_EXECUTABLE(${EXAMPLE} ${EXAMPLE}.cc) - TARGET_LINK_LIBRARIES(${EXAMPLE} ${SDL2PP_LIBRARIES}) -ENDFOREACH(EXAMPLE) + target_link_libraries(${EXAMPLE} SDL2pp::SDL2pp) +endforeach(EXAMPLE) diff --git a/exttests/cmake/CMakeLists.txt b/exttests/cmake/CMakeLists.txt index 5bba701..f877ff9 100644 --- a/exttests/cmake/CMakeLists.txt +++ b/exttests/cmake/CMakeLists.txt @@ -1,10 +1,9 @@ -PROJECT(libSDL2pp) -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +project(libSDL2pp) +cmake_minimum_required(VERSION 2.8) -FIND_PACKAGE(SDL2PP REQUIRED) +find_package(SDL2PP REQUIRED) -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +set(CMAKE_CXX_STANDARD 11) -INCLUDE_DIRECTORIES(${SDL2PP_INCLUDE_DIRS}) -ADD_EXECUTABLE(cmake-ext-test ../../examples/sprites.cc) -TARGET_LINK_LIBRARIES(cmake-ext-test ${SDL2PP_LIBRARIES}) +add_executable(cmake-ext-test ../../examples/sprites.cc) +target_link_libraries(cmake-ext-test SDL2pp::SDL2pp) diff --git a/exttests/pkg-config/Makefile b/exttests/pkg-config/Makefile index 4ca19e1..3ed5997 100644 --- a/exttests/pkg-config/Makefile +++ b/exttests/pkg-config/Makefile @@ -2,12 +2,9 @@ CXX?= g++ CXXFLAGS+= -std=c++11 -SDL2PP_CFLAGS= `pkg-config --cflags sdl2pp` -SDL2PP_LIBS= `pkg-config --libs sdl2pp` - all: make-ext-test make-ext-test: @echo "SDL2PP_CFLAGS=${SDL2PP_CFLAGS}" @echo "SDL2PP_LIBS=${SDL2PP_LIBS}" - ${CXX} ${CXXFLAGS} ../../examples/sprites.cc -o make-ext-test ${SDL2PP_CFLAGS} ${SDL2PP_LIBS} + ${CXX} -o make-ext-test ../../examples/sprites.cc ${CXXFLAGS} `pkg-config --cflags --libs sdl2pp` diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1c14256..7d835f0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,5 +1,5 @@ # simple command-line tests -SET(CLI_TESTS +set(CLI_TESTS test_color test_color_constexpr test_error @@ -11,52 +11,52 @@ SET(CLI_TESTS ) # live tests require X11 display and/or audio output -SET(LIVE_TESTS +set(LIVE_TESTS live_audiodevice live_rendering live_window ) -IF(SDL2PP_WITH_MIXER) - SET(LIVE_TESTS ${LIVE_TESTS} +if(SDL2PP_WITH_MIXER) + set(LIVE_TESTS ${LIVE_TESTS} live_mixer ) -ENDIF(SDL2PP_WITH_MIXER) +endif() -IF(SDL2PP_WITH_IMAGE) - SET(CLI_TESTS ${CLI_TESTS} +if(SDL2PP_WITH_IMAGE) + set(CLI_TESTS ${CLI_TESTS} test_surface ) -ENDIF(SDL2PP_WITH_IMAGE) +endif() -IF(SDL2PP_WITH_TTF) - SET(CLI_TESTS ${CLI_TESTS} +if(SDL2PP_WITH_TTF) + set(CLI_TESTS ${CLI_TESTS} test_font ) -ENDIF(SDL2PP_WITH_TTF) +endif() -ADD_DEFINITIONS(-DTESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata") +add_definitions(-DTESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata") # header tests: these just include specific headers to check if # they are compilable (e.g., includes and forward declarations are # complete and do not require extra includes) -FOREACH(HEADER ${LIBRARY_HEADERS}) - STRING(REGEX REPLACE [^a-zA-Z0-9] _ HEADER_NORMALIZED ${HEADER}) - CONFIGURE_FILE(header_test.cc.in ${HEADER_NORMALIZED}_test.cc) - ADD_EXECUTABLE(${HEADER_NORMALIZED}_test ${HEADER_NORMALIZED}_test.cc) - TARGET_LINK_LIBRARIES(${HEADER_NORMALIZED}_test ${SDL2PP_LIBRARIES}) -ENDFOREACH(HEADER ${TESTS}) +foreach(HEADER ${LIBRARY_HEADERS}) + string(REGEX REPLACE [^a-zA-Z0-9] _ HEADER_NORMALIZED ${HEADER}) + configure_file(header_test.cc.in ${HEADER_NORMALIZED}_test.cc) + add_executable(${HEADER_NORMALIZED}_test ${HEADER_NORMALIZED}_test.cc) + target_link_libraries(${HEADER_NORMALIZED}_test SDL2pp::SDL2pp) +endforeach() -FOREACH(TEST ${CLI_TESTS}) - ADD_EXECUTABLE(${TEST} ${TEST}.cc) - TARGET_LINK_LIBRARIES(${TEST} ${SDL2PP_LIBRARIES}) - ADD_TEST(${TEST} ${TEST}) -ENDFOREACH(TEST ${TESTS}) +foreach(TEST ${CLI_TESTS}) + add_executable(${TEST} ${TEST}.cc) + target_link_libraries(${TEST} SDL2pp::SDL2pp) + add_test(${TEST} ${TEST}) +endforeach() -FOREACH(TEST ${LIVE_TESTS}) - ADD_EXECUTABLE(${TEST} ${TEST}.cc) - TARGET_LINK_LIBRARIES(${TEST} ${SDL2PP_LIBRARIES}) - IF(SDL2PP_ENABLE_LIVE_TESTS) - ADD_TEST(${TEST} ${TEST}) - ENDIF(SDL2PP_ENABLE_LIVE_TESTS) -ENDFOREACH(TEST ${TESTS}) +foreach(TEST ${LIVE_TESTS}) + add_executable(${TEST} ${TEST}.cc) + target_link_libraries(${TEST} SDL2pp::SDL2pp) + if(SDL2PP_ENABLE_LIVE_TESTS) + add_test(${TEST} ${TEST}) + endif() +endforeach()