Rework and modernize all CMake code

This commit is contained in:
Dmitry Marakasov 2019-02-20 22:35:59 +03:00
parent d9f649438d
commit 9b2896c88a
17 changed files with 203 additions and 339 deletions

View File

@ -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}

View File

@ -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 <experimental/optional>\nint main() { std::experimental::optional<int> o; return !o; }"
"experimental/optional header"
check_cxx_source_compiles(
"#include <optional>\nint main() { std::optional<int> 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 <experimental/optional>\nint main() { std::experimental::optional<int> 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)
# library
if(SDL2PP_STATIC)
ADD_LIBRARY(SDL2pp STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})
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})
TARGET_LINK_LIBRARIES(SDL2pp ${SDL2_ALL_LIBRARIES})
SET_TARGET_PROPERTIES(SDL2pp PROPERTIES VERSION 8.3.0 SOVERSION 8)
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
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>
$<INSTALL_INTERFACE:include>
)
target_link_libraries(SDL2pp PUBLIC ${SDL2_ALL_LIBRARIES})
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()

View File

@ -1,6 +1,5 @@
libSDL2pp - C++11 bindings/wrapper for SDL2
Copyright (C) 2013-2015 Dmitry Marakasov <amdmi3@amdmi3.ru>
Copyright (C) 2013-2019 Dmitry Marakasov <amdmi3@amdmi3.ru>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
@ -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.

View File

@ -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)

View File

@ -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

View File

@ -66,7 +66,22 @@
///
////////////////////////////////////////////////////////////
#if defined(SDL2PP_WITH_EXPERIMENTAL_OPTIONAL)
#if defined(SDL2PP_WITH_STD_OPTIONAL)
# include <optional>
namespace SDL2pp {
template<typename T>
using Optional = std:::optional<T>;
using BadOptionalAccess = std::bad_optional_access;
constexpr std::nullopt_t NullOpt = std::nullopt;
}
#elif defined(SDL2PP_WITH_EXPERIMENTAL_OPTIONAL)
# include <experimental/optional>

View File

@ -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)

View File

@ -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)

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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)

View File

@ -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)

View File

@ -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`

View File

@ -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()