diff --git a/.appveyor.yml b/.appveyor.yml index f66a3d4..9459972 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -13,7 +13,7 @@ environment: PREFIX: c:\usr_msvc MSVC: MINGW32: rem - - CMAKE_ARGS: -DCMAKE_C_COMPILER=mingw32-cc -DCMAKE_CXX_COMPILER=mingw32-c++ -DCMAKE_MAKE_PROGRAM=mingw32-make.exe -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_EXE_LINKER_FLAGS="-lmingw32" -DSDL2PP_ENABLE_LIVE_TESTS=OFF -G "MinGW Makefiles" + - CMAKE_ARGS: -DCMAKE_C_COMPILER=mingw32-cc -DCMAKE_CXX_COMPILER=mingw32-c++ -DCMAKE_MAKE_PROGRAM=mingw32-make.exe -DCMAKE_VERBOSE_MAKEFILE=ON -DSDL2PP_ENABLE_LIVE_TESTS=OFF -G "MinGW Makefiles" PREFIX: c:\usr_mingw32 MINGW32: MSVC: rem @@ -103,6 +103,8 @@ build_script: cmake -DCMAKE_PREFIX_PATH=%PREFIX% %CMAKE_ARGS% %MSVC% msbuild "libSDL2pp.sln" /verbosity:normal /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" %MINGW32% mingw32-make + %MINGW32% type FindSDL2PP.cmake + %MINGW32% type sdl2pp.pc # tests; PATH here lists library search paths - |- diff --git a/CMakeLists.txt b/CMakeLists.txt index 23f9deb..45c17bc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,12 +31,18 @@ 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}) + +IF(MINGW) + FIND_LIBRARY(MINGW32_LIBRARY NAMES mingw32) + SET(SDL2PP_EXTRA_LIBRARIES ${MINGW32_LIBRARY} ${SDL2PP_EXTRA_LIBRARIES}) +ENDIF(MINGW) 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") + 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) @@ -45,7 +51,7 @@ 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") + 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) @@ -54,7 +60,7 @@ 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") + 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) @@ -209,6 +215,8 @@ IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) TARGET_LINK_LIBRARIES(SDL2pp ${SDL2_ALL_LIBRARIES}) SET_TARGET_PROPERTIES(SDL2pp PROPERTIES VERSION 7.0.0 SOVERSION 7) + SET(SDL2PP_LIBRARIES ${SDL2PP_EXTRA_LIBRARIES} SDL2pp ${SDL2_ALL_LIBRARIES}) + # examples and tests OPTION(SDL2PP_WITH_EXAMPLES "Build examples" ON) OPTION(SDL2PP_WITH_TESTS "Build tests" ON) @@ -234,21 +242,19 @@ IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) ) ENDIF(DOXYGEN_FOUND) - # pkgconfig + # 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(PKGCONFIGDIR libdata/pkgconfig) ENDIF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD" OR CMAKE_SYSTEM_NAME MATCHES "DragonFly") - 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) + INCLUDE(Join) - SET(SDL2_PKGCONFIG_LIBS "${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_SHARED_LIBRARY_PREFIX}SDL2pp${CMAKE_SHARED_LIBRARY_SUFFIX}") - FOREACH(LIB IN LISTS SDL2_ALL_LIBRARIES) - SET(SDL2_PKGCONFIG_LIBS "${SDL2_PKGCONFIG_LIBS} ${LIB}") - ENDFOREACH(LIB IN SDL2_LIBRARIES) + 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) + JOIN_SIMPLE("${SDL2_ALL_PKGCONFIG_MODULES}" SDL2_ALL_PKGCONFIG_MODULES_STR) CONFIGURE_FILE( sdl2pp.pc.in @@ -256,8 +262,6 @@ IF(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) @ONLY ) - # cmake file - SET(CMAKEMODDIR share/cmake/Modules CACHE STRING "directory where to install cmake module") CONFIGURE_FILE( FindSDL2PP.cmake.in FindSDL2PP.cmake @@ -282,7 +286,7 @@ ELSE(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) # 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) + 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) diff --git a/FindSDL2PP.cmake.in b/FindSDL2PP.cmake.in index 2fda34d..344d2b2 100644 --- a/FindSDL2PP.cmake.in +++ b/FindSDL2PP.cmake.in @@ -11,9 +11,9 @@ IF(SDL2PP_INCLUDE_DIR AND SDL2PP_LIBRARY) 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_PATH(SDL2PP_INCLUDE_DIR SDL2pp/SDL2pp.hh HINTS "@CMAKE_INSTALL_PREFIX@/include") -FIND_LIBRARY(SDL2PP_LIBRARY NAMES SDL2pp HINTS @CMAKE_INSTALL_PREFIX@/lib) +FIND_LIBRARY(SDL2PP_LIBRARY NAMES SDL2pp HINTS "@CMAKE_INSTALL_PREFIX@/lib") MARK_AS_ADVANCED(SDL2PP_INCLUDE_DIR SDL2PP_LIBRARY) @@ -23,6 +23,6 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2PP ) IF(SDL2PP_FOUND) - SET(SDL2PP_INCLUDE_DIRS ${SDL2PP_INCLUDE_DIR} @SDL2_ALL_INCLUDE_DIRS@) - SET(SDL2PP_LIBRARIES ${SDL2PP_LIBRARY} @SDL2_ALL_LIBRARIES@) + 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/cmake/FindSDL2.cmake b/cmake/FindSDL2.cmake index 58456fe..7514f34 100644 --- a/cmake/FindSDL2.cmake +++ b/cmake/FindSDL2.cmake @@ -11,10 +11,8 @@ FIND_PATH(SDL2_INCLUDE_DIR NAMES SDL2/SDL.h) FIND_LIBRARY(SDL2_LIBRARY NAMES SDL2) FIND_LIBRARY(SDL2MAIN_LIBRARY NAMES SDL2main) -SET(SDL2_LIBRARY ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY}) - INCLUDE(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_INCLUDE_DIR SDL2_LIBRARY) -MARK_AS_ADVANCED(SDL2_INCLUDE_DIR SDL2_LIBRARY) +MARK_AS_ADVANCED(SDL2_INCLUDE_DIR SDL2_LIBRARY SDL2MAIN_LIBRARY) diff --git a/cmake/Join.cmake b/cmake/Join.cmake new file mode 100644 index 0000000..a809557 --- /dev/null +++ b/cmake/Join.cmake @@ -0,0 +1,23 @@ +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 12b1dfb..824e2de 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,43 +1,43 @@ ADD_DEFINITIONS(-DTESTDATA_DIR="${PROJECT_SOURCE_DIR}/testdata") ADD_EXECUTABLE(sprites sprites.cc) -TARGET_LINK_LIBRARIES(sprites SDL2pp) +TARGET_LINK_LIBRARIES(sprites ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(lines lines.cc) -TARGET_LINK_LIBRARIES(lines SDL2pp) +TARGET_LINK_LIBRARIES(lines ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(rendertarget rendertarget.cc) -TARGET_LINK_LIBRARIES(rendertarget SDL2pp) +TARGET_LINK_LIBRARIES(rendertarget ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(audio_sine audio_sine.cc) -TARGET_LINK_LIBRARIES(audio_sine SDL2pp) +TARGET_LINK_LIBRARIES(audio_sine ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(audio_wav audio_wav.cc) -TARGET_LINK_LIBRARIES(audio_wav SDL2pp) +TARGET_LINK_LIBRARIES(audio_wav ${SDL2PP_LIBRARIES}) IF(SDL2PP_WITH_IMAGE) ADD_EXECUTABLE(image image.cc) - TARGET_LINK_LIBRARIES(image SDL2pp) + TARGET_LINK_LIBRARIES(image ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(fill fill.cc) - TARGET_LINK_LIBRARIES(fill SDL2pp) + TARGET_LINK_LIBRARIES(fill ${SDL2PP_LIBRARIES}) ENDIF(SDL2PP_WITH_IMAGE) IF(SDL2PP_WITH_TTF) ADD_EXECUTABLE(ttf ttf.cc) - TARGET_LINK_LIBRARIES(ttf SDL2pp) + TARGET_LINK_LIBRARIES(ttf ${SDL2PP_LIBRARIES}) ENDIF(SDL2PP_WITH_TTF) IF(SDL2PP_WITH_MIXER) ADD_EXECUTABLE(mixer mixer.cc) - TARGET_LINK_LIBRARIES(mixer SDL2pp) + TARGET_LINK_LIBRARIES(mixer ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(mixer_music mixer_music.cc) - TARGET_LINK_LIBRARIES(mixer_music SDL2pp) + TARGET_LINK_LIBRARIES(mixer_music ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(mixer_music_sine mixer_music_sine.cc) - TARGET_LINK_LIBRARIES(mixer_music_sine SDL2pp) + TARGET_LINK_LIBRARIES(mixer_music_sine ${SDL2PP_LIBRARIES}) ADD_EXECUTABLE(mixer_effects mixer_effects.cc) - TARGET_LINK_LIBRARIES(mixer_effects SDL2pp) + TARGET_LINK_LIBRARIES(mixer_effects ${SDL2PP_LIBRARIES}) ENDIF(SDL2PP_WITH_MIXER) diff --git a/sdl2pp.pc.in b/sdl2pp.pc.in index 1915aa4..a00040c 100644 --- a/sdl2pp.pc.in +++ b/sdl2pp.pc.in @@ -6,7 +6,7 @@ includedir=${prefix}/include Name: sdl2pp Description: C++11 bindings/wrappers for SDL2 Version: @SDL2PP_VERSION@ -Requires: @SDL2_ALL_PKGCONFIG_MODULES@ +Requires: @SDL2_ALL_PKGCONFIG_MODULES_STR@ Conflicts: -Libs: -L${libdir} -lSDL2pp +Libs: @SDL2PP_EXTRA_LIBRARIES_STR@ -L${libdir} -lSDL2pp Cflags: -I${includedir} diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 7424787..e69b257 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -29,18 +29,18 @@ 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) + TARGET_LINK_LIBRARIES(${HEADER_NORMALIZED}_test ${SDL2PP_LIBRARIES}) ENDFOREACH(HEADER ${TESTS}) FOREACH(TEST ${CLI_TESTS}) ADD_EXECUTABLE(${TEST} ${TEST}.cc) - TARGET_LINK_LIBRARIES(${TEST} SDL2pp) + TARGET_LINK_LIBRARIES(${TEST} ${SDL2PP_LIBRARIES}) ADD_TEST(${TEST} ${TEST}) ENDFOREACH(TEST ${TESTS}) FOREACH(TEST ${LIVE_TESTS}) ADD_EXECUTABLE(${TEST} ${TEST}.cc) - TARGET_LINK_LIBRARIES(${TEST} SDL2pp) + TARGET_LINK_LIBRARIES(${TEST} ${SDL2PP_LIBRARIES}) IF(SDL2PP_ENABLE_LIVE_TESTS) ADD_TEST(${TEST} ${TEST}) ENDIF(SDL2PP_ENABLE_LIVE_TESTS)