diff --git a/CMakeLists.txt b/CMakeLists.txt index 2a02376..668d19c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,85 +1,85 @@ -PROJECT(libSDL2pp) +cmake_minimum_required(VERSION 3.0 FATAL_ERROR) # meta -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +project(libSDL2pp) -SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) +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_MAJOR_VERSION 0) +set(SDL2PP_MINOR_VERSION 16) +set(SDL2PP_PATCH_VERSION 0) -SET(SDL2PP_VERSION "${SDL2PP_MAJOR_VERSION}.${SDL2PP_MINOR_VERSION}.${SDL2PP_PATCH_VERSION}") +set(SDL2PP_VERSION "${SDL2PP_MAJOR_VERSION}.${SDL2PP_MINOR_VERSION}.${SDL2PP_PATCH_VERSION}") # 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) +option(SDL2PP_WITH_WERROR "Make warnings fatal" OFF) -SET(SDL2PP_CXXSTD "c++11" CACHE STRING "Used c++ standard") +set(SDL2PP_CXXSTD "c++11" CACHE STRING "Used c++ standard") -IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) +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) -ELSE(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) +else() # please set SDL2PP_WITH_IMAGE, SDL2PP_WITH_TTF, SDL2PP_WITH_MIXER in parent project as needed -ENDIF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) +endif() # depends -FIND_PACKAGE(SDL2 REQUIRED) -SET(SDL2_ALL_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) -SET(SDL2_ALL_LIBRARIES ${SDL2_LIBRARY}) -SET(SDL2_ALL_PKGCONFIG_MODULES sdl2) -SET(SDL2PP_EXTRA_LIBRARIES ${SDL2MAIN_LIBRARY}) -SET(SDL2PP_EXTRA_PKGCONFIG_LIBRARIES ${SDL2MAIN_LIBRARY}) +find_package(SDL2 REQUIRED) +set(SDL2_ALL_INCLUDE_DIRS ${SDL2_INCLUDE_DIR}) +set(SDL2_ALL_LIBRARIES ${SDL2_LIBRARY}) +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") - SET(SDL2PP_EXTRA_LIBRARIES ${MINGW32_LIBRARY} ${SDL2PP_EXTRA_LIBRARIES}) - SET(SDL2PP_EXTRA_PKGCONFIG_LIBRARIES "-l${MINGW32_LIBRARY} ${SDL2PP_EXTRA_PKGCONFIG_LIBRARIES}") -ENDIF(MINGW) +if(MINGW) + set(MINGW32_LIBRARY "mingw32" CACHE STRING "mingw32 library") + set(SDL2PP_EXTRA_LIBRARIES ${MINGW32_LIBRARY} ${SDL2PP_EXTRA_LIBRARIES}) + set(SDL2PP_EXTRA_PKGCONFIG_LIBRARIES "-l${MINGW32_LIBRARY} ${SDL2PP_EXTRA_PKGCONFIG_LIBRARIES}") +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_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_image") -ELSE(SDL2PP_WITH_IMAGE) - MESSAGE(STATUS "SDL2_image support disabled") -ENDIF(SDL2PP_WITH_IMAGE) +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_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_image") +else() + message(STATUS "SDL2_image support disabled") +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_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_ttf") -ELSE(SDL2PP_WITH_TTF) - MESSAGE(STATUS "SDL2_ttf support disabled") -ENDIF(SDL2PP_WITH_TTF) +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_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_ttf") +else() + message(STATUS "SDL2_ttf support disabled") +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_PKGCONFIG_MODULES "${SDL2_ALL_PKGCONFIG_MODULES} SDL2_mixer") -ELSE(SDL2PP_WITH_MIXER) - MESSAGE(STATUS "SDL2_mixer support disabled") -ENDIF(SDL2PP_WITH_MIXER) +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_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(MSVC) - SET(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} --coverage") - SET(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_DEBUG} --coverage") - SET(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} --coverage") +if(MSVC) + set(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} /W3") + set(SDL2PP_WERROR_FLAG "/WX") +else() + set(CMAKE_CXX_FLAGS_COVERAGE "${CMAKE_CXX_FLAGS_DEBUG} --coverage") + set(CMAKE_EXE_LINKER_FLAGS_COVERAGE "${CMAKE_EXE_LINKER_FLAGS_DEBUG} --coverage") + set(CMAKE_SHARED_LINKER_FLAGS_COVERAGE "${CMAKE_SHARED_LINKER_FLAGS_DEBUG} --coverage") - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CXXSTD}") - SET(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} -Wall -Wextra -pedantic") - SET(SDL2PP_WERROR_FLAG "-Werror") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CXXSTD}") + set(SDL2PP_WARNINGS "${SDL2PP_WARNINGS} -Wall -Wextra -pedantic") + set(SDL2PP_WERROR_FLAG "-Werror") - INCLUDE(AppendCXXFlagIfSupported) + include(AppendCXXFlagIfSupported) # enable for more cleanups #APPEND_CXX_FLAG_IF_SUPPORTED(-Weverything SDL2PP_WARNINGS) @@ -92,36 +92,36 @@ ELSE(MSVC) # 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(MSVC) +endif() -LIST(REMOVE_DUPLICATES SDL2_ALL_INCLUDE_DIRS) +list(REMOVE_DUPLICATES SDL2_ALL_INCLUDE_DIRS) -INCLUDE_DIRECTORIES(BEFORE ${PROJECT_SOURCE_DIR}) -INCLUDE_DIRECTORIES(SYSTEM ${SDL2_ALL_INCLUDE_DIRS}) +include_directories(BEFORE ${PROJECT_SOURCE_DIR}) +include_directories(SYSTEM ${SDL2_ALL_INCLUDE_DIRS}) -INCLUDE(CheckCompile) -CHECK_COMPILE( +include(CheckCompile) +check_compile( SDL2PP_WITH_EXPERIMENTAL_OPTIONAL "#include \nint main() { std::experimental::optional o; return !o; }" "experimental/optional header" ) -SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WARNINGS}") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WARNINGS}") -IF(SDL2PP_WITH_WERROR) - SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WERROR_FLAG}") -ENDIF(SDL2PP_WITH_WERROR) +if(SDL2PP_WITH_WERROR) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${SDL2PP_WERROR_FLAG}") +endif() # config.h -CONFIGURE_FILE( +configure_file( SDL2pp/Config.hh.in SDL2pp/Config.hh ) -INCLUDE_DIRECTORIES(BEFORE ${PROJECT_BINARY_DIR}) +include_directories(BEFORE ${PROJECT_BINARY_DIR}) # sources -SET(LIBRARY_SOURCES +set(LIBRARY_SOURCES SDL2pp/AudioDevice.cc SDL2pp/AudioLock.cc SDL2pp/AudioSpec.cc @@ -140,7 +140,7 @@ SET(LIBRARY_SOURCES SDL2pp/Window.cc ) -SET(LIBRARY_HEADERS +set(LIBRARY_HEADERS SDL2pp/AudioDevice.hh SDL2pp/AudioSpec.hh SDL2pp/Color.hh @@ -160,146 +160,146 @@ SET(LIBRARY_HEADERS SDL2pp/Window.hh ) -SET(LIBRARY_EXTERNAL_HEADERS +set(LIBRARY_EXTERNAL_HEADERS SDL2pp/external/libcpp_optional.hh ) # optional sources -IF(SDL2PP_WITH_TTF) - SET(LIBRARY_SOURCES +if(SDL2PP_WITH_TTF) + set(LIBRARY_SOURCES ${LIBRARY_SOURCES} SDL2pp/SDLTTF.cc SDL2pp/Font.cc ) - SET(LIBRARY_HEADERS + set(LIBRARY_HEADERS ${LIBRARY_HEADERS} SDL2pp/SDLTTF.hh SDL2pp/Font.hh ) -ENDIF(SDL2PP_WITH_TTF) +endif() -IF(SDL2PP_WITH_IMAGE) - SET(LIBRARY_SOURCES +if(SDL2PP_WITH_IMAGE) + set(LIBRARY_SOURCES ${LIBRARY_SOURCES} SDL2pp/SDLImage.cc ) - SET(LIBRARY_HEADERS + set(LIBRARY_HEADERS ${LIBRARY_HEADERS} SDL2pp/SDLImage.hh ) -ENDIF(SDL2PP_WITH_IMAGE) +endif() -IF(SDL2PP_WITH_MIXER) - SET(LIBRARY_SOURCES +if(SDL2PP_WITH_MIXER) + set(LIBRARY_SOURCES ${LIBRARY_SOURCES} SDL2pp/Chunk.cc SDL2pp/Mixer.cc SDL2pp/Music.cc SDL2pp/SDLMixer.cc ) - SET(LIBRARY_HEADERS + set(LIBRARY_HEADERS ${LIBRARY_HEADERS} SDL2pp/Chunk.hh SDL2pp/Mixer.hh SDL2pp/Music.hh SDL2pp/SDLMixer.hh ) -ENDIF(SDL2PP_WITH_MIXER) +endif() # targets -INCLUDE(GenerateExportHeader) +include(GenerateExportHeader) -IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) +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) + 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) + if(SDL2PP_STATIC) ADD_LIBRARY(SDL2pp STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS}) - ELSE(SDL2PP_STATIC) + 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(SDL2PP_STATIC) + endif() - GENERATE_EXPORT_HEADER(SDL2pp EXPORT_FILE_NAME SDL2pp/Export.hh) + generate_export_header(SDL2pp EXPORT_FILE_NAME SDL2pp/Export.hh) - SET(SDL2PP_LIBRARIES ${SDL2PP_EXTRA_LIBRARIES} SDL2pp ${SDL2_ALL_LIBRARIES}) + set(SDL2PP_LIBRARIES ${SDL2PP_EXTRA_LIBRARIES} SDL2pp ${SDL2_ALL_LIBRARIES}) # examples and tests - IF(SDL2PP_WITH_EXAMPLES) - ADD_SUBDIRECTORY(examples) - ENDIF(SDL2PP_WITH_EXAMPLES) + if(SDL2PP_WITH_EXAMPLES) + add_subdirectory(examples) + endif() - IF(SDL2PP_WITH_TESTS) - ENABLE_TESTING() - ADD_SUBDIRECTORY(tests) - ENDIF(SDL2PP_WITH_TESTS) + if(SDL2PP_WITH_TESTS) + enable_testing() + add_subdirectory(tests) + endif() # doxygen - FIND_PACKAGE(Doxygen) - IF(DOXYGEN_FOUND) - CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) - ADD_CUSTOM_TARGET(doxygen + find_package(Doxygen) + if(DOXYGEN_FOUND) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) + add_custom_target(doxygen ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM ) - ENDIF(DOXYGEN_FOUND) + endif() # pkgconfig and cmake modules - SET(CMAKEMODDIR share/cmake/Modules CACHE STRING "directory where to install cmake module") - 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(CMAKEMODDIR share/cmake/Modules CACHE STRING "directory where to install cmake module") + 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(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR CMAKE_SYSTEM_NAME MATCHES "DragonFly") + endif() - INCLUDE(Join) + 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( + configure_file( sdl2pp.pc.in sdl2pp.pc @ONLY ) - CONFIGURE_FILE( + configure_file( FindSDL2PP.cmake.in FindSDL2PP.cmake @ONLY ) # install - INSTALL(FILES + install(FILES ${LIBRARY_HEADERS} ${PROJECT_BINARY_DIR}/SDL2pp/Config.hh ${PROJECT_BINARY_DIR}/SDL2pp/Export.hh DESTINATION include/SDL2pp ) - INSTALL(FILES ${LIBRARY_EXTERNAL_HEADERS} DESTINATION include/SDL2pp/external) - INSTALL(TARGETS SDL2pp + install(FILES ${LIBRARY_EXTERNAL_HEADERS} DESTINATION include/SDL2pp/external) + install(TARGETS 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}) + 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(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + 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) + 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) + 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") -ENDIF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) + message(STATUS "libSDL2pp ${SDL2PP_VERSION} bundled build") +endif()