mirror of
https://github.com/libSDL2pp/libSDL2pp.git
synced 2025-08-03 19:05:59 -04:00

As SDL2pp doesn't replace SDL2 and is designed to be used with plain SDL2 code, consumers which use SDL2pp with pkgconfig will almost always be forced to include both SDL2pp and SDL2 includes and libraries. This seems inconvenient, so add SDL2 libraries to SDL2pp pkgconfig file. This also improves consistency with the fact that SDL2 includes are already included in sdl2pp.pc.
224 lines
6.1 KiB
CMake
224 lines
6.1 KiB
CMake
PROJECT(libSDL2pp)
|
|
|
|
# meta
|
|
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
|
|
|
|
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
|
|
|
|
SET(SDL2PP_MAJOR_VERSION 0)
|
|
SET(SDL2PP_MINOR_VERSION 7)
|
|
SET(SDL2PP_PATCH_VERSION 0)
|
|
|
|
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_2_0_4 "Enable new functions available only in SDL2 2.0.4+" OFF)
|
|
OPTION(SDL2PP_WITH_WERROR "Make warnings fatal" OFF)
|
|
|
|
SET(SDL2PP_CXXSTD "c++11" CACHE STRING "Used c++ standard")
|
|
|
|
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)
|
|
ELSE(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
|
# please set SDL2PP_WITH_IMAGE, SDL2PP_WITH_TTF in parent project as needed
|
|
ENDIF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
|
|
|
# depends
|
|
FIND_PACKAGE(SDL2 REQUIRED)
|
|
SET(SDL2_ALL_INCLUDE_DIRS ${SDL2_INCLUDE_DIR})
|
|
SET(SDL2_ALL_LIBRARIES ${SDL2_LIBRARY})
|
|
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})
|
|
ELSE(SDL2PP_WITH_IMAGE)
|
|
MESSAGE(STATUS "SDL2_image support disabled")
|
|
ENDIF(SDL2PP_WITH_IMAGE)
|
|
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})
|
|
ELSE(SDL2PP_WITH_TTF)
|
|
MESSAGE(STATUS "SDL2_ttf support disabled")
|
|
ENDIF(SDL2PP_WITH_TTF)
|
|
|
|
FIND_PACKAGE(Doxygen)
|
|
|
|
# compiler flags & definitions
|
|
IF(MSVC)
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3")
|
|
SET(WERROR_FLAG "/WX")
|
|
ELSE(MSVC)
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=${SDL2PP_CXXSTD} -Wall -Wextra -pedantic")
|
|
SET(WERROR_FLAG "-Werror")
|
|
ENDIF(MSVC)
|
|
|
|
LIST(REMOVE_DUPLICATES SDL2_ALL_INCLUDE_DIRS)
|
|
|
|
INCLUDE_DIRECTORIES(BEFORE ${PROJECT_SOURCE_DIR})
|
|
INCLUDE_DIRECTORIES(${SDL2_ALL_INCLUDE_DIRS})
|
|
|
|
IF(SDL2PP_WITH_WERROR)
|
|
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WERROR_FLAG}")
|
|
ENDIF(SDL2PP_WITH_WERROR)
|
|
|
|
# platform checks
|
|
INCLUDE(CheckCompile)
|
|
CHECK_COMPILE(
|
|
SDL2PP_WITH_EXPERIMENTAL_OPTIONAL
|
|
${PROJECT_SOURCE_DIR}/cmake/std_experimental_optional_test.cc
|
|
"Checking for experimental/optional header"
|
|
)
|
|
CHECK_COMPILE(
|
|
SDL2PP_WITH_DEPRECATED
|
|
${PROJECT_SOURCE_DIR}/cmake/attribute_deprecated_test.cc
|
|
"Checking for [[deprecated]] attribute"
|
|
)
|
|
|
|
# config.h
|
|
CONFIGURE_FILE(
|
|
SDL2pp/Config.hh.in
|
|
SDL2pp/Config.hh
|
|
)
|
|
|
|
INCLUDE_DIRECTORIES(BEFORE ${PROJECT_BINARY_DIR})
|
|
|
|
# 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)
|
|
|
|
# sources
|
|
SET(LIBRARY_SOURCES
|
|
SDL2pp/AudioDevice.cc
|
|
SDL2pp/AudioLock.cc
|
|
SDL2pp/AudioSpec.cc
|
|
SDL2pp/Exception.cc
|
|
SDL2pp/Point.cc
|
|
SDL2pp/RWops.cc
|
|
SDL2pp/Rect.cc
|
|
SDL2pp/Renderer.cc
|
|
SDL2pp/SDL.cc
|
|
SDL2pp/Surface.cc
|
|
SDL2pp/SurfaceLock.cc
|
|
SDL2pp/Texture.cc
|
|
SDL2pp/TextureLock.cc
|
|
SDL2pp/Wav.cc
|
|
SDL2pp/Window.cc
|
|
)
|
|
|
|
SET(LIBRARY_HEADERS
|
|
SDL2pp/AudioDevice.hh
|
|
SDL2pp/AudioSpec.hh
|
|
SDL2pp/ContainerRWops.hh
|
|
SDL2pp/Exception.hh
|
|
SDL2pp/Optional.hh
|
|
SDL2pp/Point.hh
|
|
SDL2pp/RWops.hh
|
|
SDL2pp/Rect.hh
|
|
SDL2pp/Renderer.hh
|
|
SDL2pp/SDL.hh
|
|
SDL2pp/SDL2pp.hh
|
|
SDL2pp/StreamRWops.hh
|
|
SDL2pp/Surface.hh
|
|
SDL2pp/Texture.hh
|
|
SDL2pp/Wav.hh
|
|
SDL2pp/Window.hh
|
|
)
|
|
|
|
SET(LIBRARY_EXTERNAL_HEADERS
|
|
SDL2pp/external/libcpp_optional.hh
|
|
)
|
|
|
|
# optional sources
|
|
IF(SDL2PP_WITH_TTF)
|
|
SET(LIBRARY_SOURCES
|
|
${LIBRARY_SOURCES}
|
|
SDL2pp/SDLTTF.cc
|
|
SDL2pp/Font.cc
|
|
)
|
|
SET(LIBRARY_HEADERS
|
|
${LIBRARY_HEADERS}
|
|
SDL2pp/SDLTTF.hh
|
|
SDL2pp/Font.hh
|
|
)
|
|
ENDIF(SDL2PP_WITH_TTF)
|
|
|
|
IF(SDL2PP_WITH_IMAGE)
|
|
SET(LIBRARY_SOURCES
|
|
${LIBRARY_SOURCES}
|
|
SDL2pp/SDLImage.cc
|
|
)
|
|
SET(LIBRARY_HEADERS
|
|
${LIBRARY_HEADERS}
|
|
SDL2pp/SDLImage.hh
|
|
)
|
|
ENDIF(SDL2PP_WITH_IMAGE)
|
|
|
|
IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
|
MESSAGE(STATUS "libSDL2pp ${SDL2PP_VERSION} standalone build")
|
|
|
|
# library
|
|
ADD_LIBRARY(SDL2pp SHARED ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})
|
|
TARGET_LINK_LIBRARIES(SDL2pp ${SDL2_ALL_LIBRARIES})
|
|
SET_TARGET_PROPERTIES(SDL2pp PROPERTIES VERSION 3.1.0 SOVERSION 3)
|
|
|
|
# examples and tests
|
|
OPTION(SDL2PP_WITH_EXAMPLES "Build examples" ON)
|
|
OPTION(SDL2PP_WITH_TESTS "Build tests" ON)
|
|
OPTION(SDL2PP_ENABLE_GUI_TEST "Enable GUI test (requires X11 display)" ON)
|
|
|
|
IF(SDL2PP_WITH_EXAMPLES)
|
|
ADD_SUBDIRECTORY(examples)
|
|
ENDIF(SDL2PP_WITH_EXAMPLES)
|
|
|
|
IF(SDL2PP_WITH_TESTS)
|
|
ENABLE_TESTING()
|
|
ADD_SUBDIRECTORY(tests)
|
|
ENDIF(SDL2PP_WITH_TESTS)
|
|
|
|
# pkgconfig
|
|
SET(PKGCONFIGDIR lib/pkgconfig CACHE STRING "directory where to install pkg-config files")
|
|
IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
SET(PKGCONFIGDIR libdata/pkgconfig)
|
|
ENDIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
|
|
|
|
SET(SDL2_PKGCONFIG_CFLAGS "")
|
|
FOREACH(INCDIR IN LISTS SDL2_ALL_INCLUDE_DIRS)
|
|
SET(SDL2_PKGCONFIG_CFLAGS "${SDL2_PKGCONFIG_CFLAGS} -I${INCDIR}")
|
|
ENDFOREACH(INCDIR IN SDL2_ALL_INCLUDE_DIRS)
|
|
|
|
SET(SDL2_PKGCONFIG_LIBS "")
|
|
FOREACH(LIB IN LISTS SDL2_ALL_LIBRARIES)
|
|
SET(SDL2_PKGCONFIG_LIBS "${SDL2_PKGCONFIG_LIBS} ${LIB}")
|
|
ENDFOREACH(LIB IN SDL2_LIBRARIES)
|
|
|
|
CONFIGURE_FILE(
|
|
sdl2pp.pc.in
|
|
sdl2pp.pc
|
|
@ONLY
|
|
)
|
|
|
|
# install
|
|
INSTALL(FILES ${LIBRARY_HEADERS} ${PROJECT_BINARY_DIR}/SDL2pp/Config.hh DESTINATION include/SDL2pp)
|
|
INSTALL(FILES ${LIBRARY_EXTERNAL_HEADERS} DESTINATION include/SDL2pp/external)
|
|
INSTALL(TARGETS SDL2pp LIBRARY DESTINATION lib)
|
|
INSTALL(FILES ${PROJECT_BINARY_DIR}/sdl2pp.pc DESTINATION ${PKGCONFIGDIR})
|
|
ELSE(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
|
MESSAGE(STATUS "libSDL2pp ${SDL2PP_VERSION} bundled build")
|
|
|
|
# library
|
|
ADD_LIBRARY(SDL2pp STATIC ${LIBRARY_SOURCES} ${LIBRARY_HEADERS})
|
|
|
|
# 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 ${SDL2_ALL_LIBRARIES} PARENT_SCOPE)
|
|
ENDIF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|