libSDL2pp/CMakeLists.txt
Dmitry Marakasov b20b256d0a Add used SDL libraries into pkgconfig file
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.
2015-01-19 01:05:11 +03:00

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)