Skip to content

Commit e00e128

Browse files
authored
Merge pull request #2163 from Grumbel/feature/nix-flake-no-submodule
Refactor CMakeLists.txt, split into smaller pieces, accept more system libraries
2 parents d6265b0 + b45a279 commit e00e128

28 files changed

+1371
-1160
lines changed

CMakeLists.txt

Lines changed: 99 additions & 1160 deletions
Large diffs are not rendered by default.

mk/cmake/SuperTux/BuildCPack.cmake

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
option(DISABLE_CPACK_BUNDLING "Build an .app bundle without CPack" OFF)
2+
3+
include(InstallRequiredSystemLibraries)
4+
set(DIRS ${Boost_LIBRARY_DIRS} ${CMAKE_CURRENT_BINARY_DIR}/external/squirrel ${CMAKE_CURRENT_BINARY_DIR}/external/tinygettext)
5+
6+
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT DISABLE_CPACK_BUNDLING)
7+
set(INFOPLIST_CFBUNDLEEXECUTABLE "SuperTux")
8+
9+
find_package(PNG)
10+
foreach(_file ${PNG_LIBRARIES})
11+
get_filename_component(_resolvedFile "${_file}" REALPATH)
12+
get_filename_component(_name "${_file}" NAME)
13+
install(FILES ${_resolvedFile} DESTINATION "MacOS" RENAME ${_name})
14+
endforeach()
15+
find_package(JPEG)
16+
foreach(_file ${JPEG_LIBRARIES})
17+
get_filename_component(_resolvedFile "${_file}" REALPATH)
18+
get_filename_component(_name "${_file}" NAME)
19+
install(FILES ${_resolvedFile} DESTINATION "MacOS" RENAME ${_name})
20+
endforeach()
21+
22+
install(CODE "
23+
if(\"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/\" MATCHES \".*\\\\.app.*\")
24+
include(BundleUtilities)
25+
fixup_bundle(\"${APPS}\" \"\" \"${DIRS}\")
26+
endif()
27+
")
28+
29+
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/tools/darwin/info.plist.in" "${CMAKE_BINARY_DIR}/tools/darwin/info.plist")
30+
31+
set(CPACK_BUNDLE_NAME "SuperTux")
32+
set(CPACK_BUNDLE_PLIST "${CMAKE_BINARY_DIR}/tools/darwin/info.plist")
33+
set(CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.icns")
34+
set(CPACK_BUNDLE_STARTUP_COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/darwin/startup.sh")
35+
set(CPACK_DMG_VOLUME_NAME "SuperTux ${SUPERTUX_VERSION_STRING}")
36+
set(CPACK_DMG_DS_STORE_SETUP_SCRIPT "${CMAKE_CURRENT_SOURCE_DIR}/tools/darwin/dsstore_setup.scpt")
37+
set(CPACK_DMG_BACKGROUND_IMAGE "${CMAKE_CURRENT_SOURCE_DIR}/tools/darwin/background.png")
38+
endif()
39+
40+
set(CPACK_PACKAGE_NAME "SuperTux")
41+
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Jump'n'Run Game featuring Tux")
42+
set(CPACK_PACKAGE_VENDOR "SuperTux Devel Team")
43+
set(CPACK_PACKAGE_CONTACT "SuperTux Devel Team <[email protected]>")
44+
set(CPACK_SOURCE_IGNORE_FILES "/\\\\.git/;${CMAKE_BINARY_DIR};/\\\\..*")
45+
set(CPACK_DEBIAN_PACKAGE_NAME "supertux2")
46+
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libc6 (>= 2.5), libgcc1 (>= 1:4.1), libgl1-mesa-glx | libgl1, libogg0 (>= 1.1.3), libopenal0a, libphysfs-1.0-0, libsdl-image1.2 (>= 1.2.5), libsdl1.2debian (>= 1.2.10-1), libstdc++6 (>= 4.1.2), libvorbis0a (>= 1.1.2), libvorbisfile3 (>= 1.1.2), libcurl3 (>= 7.16)")
47+
set(CPACK_DEBIAN_PACKAGE_DESCRIPTION "Classic 2D jump 'n run sidescroller with Tux\n SuperTux is a classic 2D jump 'n run sidescroller game in a similar\n style like the original SuperMario games. This release of SuperTux\n features 9 enemies, 26 playable levels, software and OpenGL rendering\n modes, configurable joystick and keyboard input, new music and\n completely redone graphics.\n .\n This is a development snapshot of SuperTux. It may suffer from\n critical bugs and has not been fully tested. \n .\n Homepage: http://supertux.lethargik.org/")
48+
set(CPACK_DEBIAN_PACKAGE_SECTION "games")
49+
set(CPACK_RPM_PACKAGE_NAME "supertux2")
50+
set(CPACK_RPM_PACKAGE_DESCRIPTION "Classic 2D jump 'n run sidescroller with Tux\n SuperTux is a classic 2D jump 'n run sidescroller game in a similar\n style like the original SuperMario games. This release of SuperTux\n features 9 enemies, 26 playable levels, software and OpenGL rendering\n modes, configurable joystick and keyboard input, new music and\n completely redone graphics.\n .\n This is a development snapshot of SuperTux. It may suffer from\n critical bugs and has not been fully tested. \n .\n Homepage: http://supertux.lethargik.org/")
51+
set(CPACK_RPM_PACKAGE_LICENSE "GNU General Public License (GPL)")
52+
set(CPACK_RPM_PACKAGE_GROUP "Amusements/Games/Action/Arcade")
53+
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
54+
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt")
55+
set(CPACK_PACKAGE_VERSION_MAJOR ${SUPERTUX_VERSION_MAJOR})
56+
set(CPACK_PACKAGE_VERSION_MINOR ${SUPERTUX_VERSION_MINOR})
57+
58+
if(SUPERTUX_VERSION_TWEAK)
59+
set(CPACK_PACKAGE_VERSION_PATCH "${SUPERTUX_VERSION_PATCH}.${SUPERTUX_VERSION_TWEAK}")
60+
else()
61+
set(CPACK_PACKAGE_VERSION_PATCH ${SUPERTUX_VERSION_PATCH})
62+
endif()
63+
64+
set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${SUPERTUX_VERSION_STRING}-${SUPERTUX_SYSTEM_NAME}")
65+
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${CPACK_PACKAGE_NAME}-${SUPERTUX_VERSION_STRING}-Source")
66+
set(CPACK_PACKAGE_INSTALL_DIRECTORY "SuperTux")
67+
set(CPACK_PACKAGE_EXECUTABLES "supertux2" "SuperTux")
68+
69+
if(WIN32 AND NOT UNIX)
70+
set(CPACK_NSIS_INSTALLED_ICON_NAME "supertux2")
71+
set(CPACK_NSIS_DISPLAY_NAME "SuperTux")
72+
set(CPACK_NSIS_COMPRESSOR "/SOLID lzma")
73+
set(CPACK_WIX_PROGRAM_MENU_FOLDER "")
74+
set(CPACK_WIX_UPGRADE_GUID "93E16F4E-0A68-422A-8ADC-47BE5B9433B2")
75+
set(CPACK_WIX_PRODUCT_ICON "${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.ico")
76+
77+
set(CPACK_WIX_UI_BANNER "${CMAKE_CURRENT_SOURCE_DIR}/mk/wix/banner.png")
78+
set(CPACK_WIX_UI_DIALOG "${CMAKE_CURRENT_SOURCE_DIR}/mk/wix/dialog.png")
79+
set(CPACK_GENERATOR WIX)
80+
endif()
81+
82+
include(CPack)
83+
84+
# EOF #
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
## Configure doxygen
2+
# Adapted from https://tty1.net/blog/2014/cmake-doxygen_en.html
3+
# add a target to generate API documentation with Doxygen
4+
option(BUILD_DOCUMENTATION "Build API documentation using Doxygen" ${DOXYGEN_FOUND})
5+
6+
if(BUILD_DOCUMENTATION)
7+
find_package(Doxygen REQUIRED)
8+
9+
set(doxyfile_in ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in)
10+
set(doxyfile ${CMAKE_CURRENT_BINARY_DIR}/docs/Doxyfile)
11+
12+
configure_file(${doxyfile_in} ${doxyfile} @ONLY)
13+
14+
add_custom_target(doc
15+
COMMAND ${DOXYGEN_EXECUTABLE} ${doxyfile}
16+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
17+
COMMENT "Generating API documentation with Doxygen"
18+
VERBATIM)
19+
endif()
20+
21+
# EOF #
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
if(WIN32 AND NOT UNIX)
2+
if(VCPKG_BUILD)
3+
install(DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/\${CMAKE_INSTALL_CONFIG_NAME}/" DESTINATION ${INSTALL_SUBDIR_BIN} FILES_MATCHING PATTERN "*.dll")
4+
else()
5+
install(FILES ${DLLS} DESTINATION ${INSTALL_SUBDIR_BIN})
6+
endif()
7+
8+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.png ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.ico DESTINATION ".")
9+
10+
option(PACKAGE_VCREDIST "Package the VCREDIST libraries with the program" OFF)
11+
12+
if(PACKAGE_VCREDIST)
13+
set(CMAKE_INSTALL_UCRT_LIBRARIES true)
14+
include(InstallRequiredSystemLibraries)
15+
endif()
16+
17+
else()
18+
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND DISABLE_CPACK_BUNDLING)
19+
20+
set(INFOPLIST_CFBUNDLEEXECUTABLE "supertux2")
21+
22+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/tools/darwin/info.plist.in ${CMAKE_BINARY_DIR}/tools/darwin/info.plist)
23+
install(FILES ${CMAKE_BINARY_DIR}/tools/darwin/info.plist DESTINATION "SuperTux.app/Contents/")
24+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/tools/darwin/receipt DESTINATION "SuperTux.app/Contents/_MASReceipt/")
25+
26+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.png ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.icns DESTINATION "SuperTux.app/Contents/Resources/")
27+
28+
else()
29+
30+
if(UBUNTU_TOUCH)
31+
set(LINUX_DESKTOP_ICON "assets/supertux-256x256.png")
32+
# FIXME: The "install" folder is a folder managed by Clickable and shouldn't be hardcoded here
33+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/supertux2.desktop.in "install/supertux2.desktop")
34+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mk/clickable/supertux2.apparmor DESTINATION ".")
35+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mk/clickable/manifest.json.in ${CMAKE_CURRENT_BINARY_DIR}/install/manifest.json)
36+
set(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/supertux2")
37+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux-256x256.png DESTINATION "assets")
38+
else()
39+
set(LINUX_DESKTOP_ICON "supertux2")
40+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/supertux2.desktop.in "supertux2.desktop")
41+
install(FILES ${CMAKE_BINARY_DIR}/supertux2.desktop DESTINATION "share/applications")
42+
set(APPS "\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${INSTALL_SUBDIR_BIN}/supertux2")
43+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.png ${CMAKE_CURRENT_SOURCE_DIR}/data/images/engine/icons/supertux.xpm DESTINATION "share/pixmaps/")
44+
endif()
45+
46+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/supertux2.svg DESTINATION "share/icons/hicolor/scalable/apps")
47+
48+
endif()
49+
endif()
50+
51+
if(UBUNTU_TOUCH)
52+
install(TARGETS supertux2 DESTINATION ".")
53+
else()
54+
install(TARGETS supertux2 DESTINATION ${INSTALL_SUBDIR_BIN})
55+
endif()
56+
57+
if(EMSCRIPTEN)
58+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mk/emscripten/template.html.in ${CMAKE_CURRENT_BINARY_DIR}/template.html)
59+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mk/emscripten/supertux2.png ${CMAKE_CURRENT_BINARY_DIR}/supertux2.png COPYONLY)
60+
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/mk/emscripten/supertux2_bkg.png ${CMAKE_CURRENT_BINARY_DIR}/supertux2_bkg.png COPYONLY)
61+
endif()
62+
63+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/INSTALL.md ${CMAKE_CURRENT_SOURCE_DIR}/README.md ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE.txt ${CMAKE_CURRENT_SOURCE_DIR}/NEWS.md DESTINATION ${INSTALL_SUBDIR_DOC})
64+
65+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/data/credits.stxt DESTINATION ${INSTALL_SUBDIR_SHARE})
66+
67+
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/supertux2.appdata.xml DESTINATION "share/metainfo" )
68+
69+
install(DIRECTORY
70+
${CMAKE_CURRENT_SOURCE_DIR}/data/images
71+
${CMAKE_CURRENT_SOURCE_DIR}/data/fonts
72+
${CMAKE_CURRENT_SOURCE_DIR}/data/music
73+
${CMAKE_CURRENT_SOURCE_DIR}/data/particles
74+
${CMAKE_CURRENT_SOURCE_DIR}/data/scripts
75+
${CMAKE_CURRENT_SOURCE_DIR}/data/shader
76+
${CMAKE_CURRENT_SOURCE_DIR}/data/speech
77+
${CMAKE_CURRENT_SOURCE_DIR}/data/sounds
78+
${CMAKE_CURRENT_SOURCE_DIR}/data/locale
79+
DESTINATION ${INSTALL_SUBDIR_SHARE})
80+
81+
if(CMAKE_BUILD_TYPE MATCHES "Release|RelWithDebInfo")
82+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/levels
83+
DESTINATION ${INSTALL_SUBDIR_SHARE}
84+
PATTERN "data/levels/test" EXCLUDE
85+
PATTERN "data/levels/test_old" EXCLUDE
86+
PATTERN "data/levels/incubator" EXCLUDE
87+
PATTERN "data/levels/misc/menu.stl.in" EXCLUDE)
88+
else()
89+
install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/data/levels
90+
DESTINATION ${INSTALL_SUBDIR_SHARE}
91+
PATTERN "data/levels/misc/menu.stl.in" EXCLUDE)
92+
endif()
93+
94+
install(FILES "${CMAKE_BINARY_DIR}/data/levels/misc/menu.stl" DESTINATION "${INSTALL_SUBDIR_SHARE}/levels/misc")
95+
96+
# move some config clutter to the advanced section
97+
mark_as_advanced(
98+
INSTALL_SUBDIR_BIN
99+
INSTALL_SUBDIR_SHARE
100+
INSTALL_SUBDIR_DOC
101+
)
102+
103+
# EOF #
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
## If xgettext is available, generate messages.pot for sources
2+
option(GENERATE_MESSAGESPOT "Generate messages.pot files" OFF)
3+
4+
if(GENERATE_MESSAGESPOT)
5+
find_program(XGETTEXT_EXECUTABLE xgettext)
6+
7+
if(NOT XGETTEXT_EXECUTABLE)
8+
message(STATUS "Warning: xgettext not found - will not update messages.pot")
9+
else()
10+
message(STATUS "Found xgettext: ${XGETTEXT_EXECUTABLE}")
11+
12+
set(MESSAGES_POT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/data/locale/messages.pot)
13+
add_custom_command(
14+
OUTPUT ${MESSAGES_POT_FILE}
15+
COMMAND ${XGETTEXT_EXECUTABLE}
16+
ARGS --keyword=_ --language=C++ --output=${MESSAGES_POT_FILE} ${SUPERTUX_SOURCES_CXX}
17+
DEPENDS ${SUPERTUX_SOURCES_CXX}
18+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
19+
COMMENT "Generating POT file ${MESSAGES_POT_FILE}"
20+
)
21+
list(APPEND MESSAGES_POT_FILES ${MESSAGES_POT_FILE})
22+
23+
file(GLOB SUPERTUX_LEVEL_DIRS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} data/levels/*)
24+
foreach(SUPERTUX_LEVEL_DIR ${SUPERTUX_LEVEL_DIRS})
25+
file(GLOB SUPERTUX_LEVELS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${SUPERTUX_LEVEL_DIR}/*.stl ${SUPERTUX_LEVEL_DIR}/*.stwm ${SUPERTUX_LEVEL_DIR}/*.txt)
26+
27+
## Do not add target if SUPERTUX_LEVELS is empty. This is needed for cmake <=2.4
28+
if(SUPERTUX_LEVELS)
29+
set(MESSAGES_POT_FILE ${CMAKE_CURRENT_SOURCE_DIR}/${SUPERTUX_LEVEL_DIR}/messages.pot)
30+
add_custom_command(
31+
OUTPUT ${MESSAGES_POT_FILE}
32+
COMMAND ${XGETTEXT_EXECUTABLE}
33+
ARGS --keyword="_:1" --language=Lisp --force-po --sort-by-file "--output=${MESSAGES_POT_FILE}" ${SUPERTUX_LEVELS}
34+
DEPENDS ${SUPERTUX_LEVELS}
35+
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
36+
COMMENT "Generating POT file ${MESSAGES_POT_FILE}"
37+
)
38+
list(APPEND MESSAGES_POT_FILES ${MESSAGES_POT_FILE})
39+
endif()
40+
41+
endforeach(SUPERTUX_LEVEL_DIR)
42+
43+
add_custom_target(
44+
supertux2-messages ALL
45+
DEPENDS ${MESSAGES_POT_FILES}
46+
)
47+
48+
endif()
49+
50+
mark_as_advanced(
51+
XGETTEXT_EXECUTABLE
52+
)
53+
endif()
54+
55+
# EOF #
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
option(GENERATE_WRAPPER "Build miniswig and generate the wrapper" OFF)
2+
if(GENERATE_WRAPPER)
3+
add_subdirectory(tools/miniswig)
4+
add_custom_command(
5+
OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.hpp
6+
COMMAND cd ${CMAKE_CURRENT_SOURCE_DIR} && ${CMAKE_CXX_COMPILER}
7+
ARGS -x "c++" -E -CC -DSCRIPTING_API src/scripting/wrapper.interface.hpp -o ${CMAKE_CURRENT_BINARY_DIR}/miniswig.tmp -I${CMAKE_CURRENT_SOURCE_DIR}/src
8+
COMMAND tools/miniswig/miniswig
9+
ARGS --input miniswig.tmp --output-cpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.cpp --output-hpp ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.hpp --module supertux --select-namespace scripting
10+
DEPENDS tools/miniswig/miniswig
11+
IMPLICIT_DEPENDS CXX ${CMAKE_CURRENT_SOURCE_DIR}/src/scripting/wrapper.interface.hpp
12+
)
13+
if(USE_CLANG_TIDY)
14+
set_target_properties(miniswig PROPERTIES CXX_CLANG_TIDY "")
15+
endif()
16+
endif()
17+
18+
# EOF #

mk/cmake/SuperTux/BuildTests.cmake

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
option(BUILD_TESTS "Build test cases" OFF)
2+
3+
if(BUILD_TESTS)
4+
find_package(Threads REQUIRED)
5+
find_package(GTest REQUIRED)
6+
7+
# build SuperTux tests
8+
file(GLOB_RECURSE TEST_SUPERTUX_SOURCES tests/*.cpp)
9+
add_executable(test_supertux2 ${TEST_SUPERTUX_SOURCES})
10+
target_compile_options(test_supertux2 PRIVATE ${WARNINGS_CXX_FLAGS})
11+
target_link_libraries(test_supertux2
12+
GTest::GTest GTest::Main
13+
supertux2_lib
14+
${CMAKE_THREAD_LIBS_INIT})
15+
16+
# add 'make test' target, use 'make test ARGS="-V"' or 'ctest -V' for verbose
17+
enable_testing()
18+
add_test(NAME test_supertux2
19+
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
20+
COMMAND test_supertux2)
21+
22+
# Prepare coverage with gcov/lcov
23+
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
24+
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
25+
target_compile_options(supertux2_lib PUBLIC -fprofile-arcs -ftest-coverage)
26+
target_link_options(supertux2_lib PUBLIC -lgcov --coverage)
27+
28+
add_custom_target(coverage_clear_unix
29+
COMMAND find . -name "*.gcda" | xargs rm || true # FIXME: Make this platform-neutral
30+
COMMAND ${CMAKE_COMMAND} -E remove ${CMAKE_CURRENT_BINARY_DIR}/coverage.info
31+
COMMAND ${CMAKE_COMMAND} -E remove_directory ${CMAKE_CURRENT_BINARY_DIR}/coverage)
32+
33+
add_custom_target(coverage_unix
34+
COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target coverage_clear_unix
35+
COMMAND ${CMAKE_CTEST_COMMAND}
36+
COMMAND lcov --capture --directory ${CMAKE_CURRENT_BINARY_DIR} --exclude '/usr/*' --exclude '*/tests/*' --exclude '*/external/*' --output-file ${CMAKE_CURRENT_BINARY_DIR}/coverage.info
37+
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/coverage
38+
COMMAND genhtml ${CMAKE_CURRENT_BINARY_DIR}/coverage.info -o ${CMAKE_CURRENT_BINARY_DIR}/coverage -t "${SUPERTUX_VERSION_STRING}")
39+
else()
40+
message(WARNING "Coverage for non-GNU compilers has yet to be implemented")
41+
endif()
42+
else()
43+
message(WARNING "Building tests in a non-Debug build will NOT make files for coverage! Change CMAKE_BUILD_TYPE to Debug to prepare for coverage analysis.")
44+
endif()
45+
endif()
46+
47+
# EOF #
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
if(EXISTS "${CMAKE_SOURCE_DIR}/.git")
2+
## Find revision of WC
3+
mark_as_advanced(GIT_EXECUTABLE)
4+
find_program(GIT_EXECUTABLE git)
5+
if(NOT GIT_EXECUTABLE EQUAL "GIT_EXECUTABLE-NOTFOUND")
6+
include(GetGitRevisionDescription)
7+
git_describe(VERSION_STRING_GIT "--tags" "--match" "?[0-9]*.[0-9]*.[0-9]*")
8+
string(REPLACE "v" "" VERSION_LIST ${VERSION_STRING_GIT})
9+
string(REGEX REPLACE "[^\\-]+\\-([0-9]+)\\-.*" "\\1" VERSION_NUMBER_GIT "${VERSION_LIST}")
10+
string(REGEX REPLACE "(-|_|\\.)" ";" VERSION_LIST ";${VERSION_LIST}")
11+
endif()
12+
endif()
13+
14+
get_filename_component(BASEDIR ${CMAKE_SOURCE_DIR} NAME)
15+
if("${VERSION_LIST}" STREQUAL "")
16+
if(${BASEDIR} MATCHES "supertux2-[0-9\\.]*")
17+
string(REGEX REPLACE "(\\.|_|-)" ";" VERSION_LIST ${BASEDIR})
18+
endif()
19+
endif()
20+
21+
file(GLOB ORIG_TGZ ../*.orig.tar.gz)
22+
if("${VERSION_LIST}" STREQUAL "" AND (NOT "${ORIG_TGZ}" STREQUAL ""))
23+
get_filename_component(BASEDIR ${ORIG_TGZ} NAME)
24+
string(REGEX REPLACE "(\\.|_|-)" ";" VERSION_LIST ${BASEDIR})
25+
endif()
26+
27+
list(LENGTH VERSION_LIST VERSION_LIST_SIZE)
28+
29+
if(${VERSION_LIST_SIZE} GREATER 0)
30+
list(GET VERSION_LIST 1 MAJOR_VERSION_GIT)
31+
list(GET VERSION_LIST 2 MINOR_VERSION_GIT)
32+
list(GET VERSION_LIST 3 PATCH_VERSION_GIT)
33+
34+
if("${VERSION_STRING_GIT}" STREQUAL "")
35+
set(VERSION_STRING_GIT "${MAJOR_VERSION_GIT}.${MINOR_VERSION_GIT}.${PATCH_VERSION_GIT}")
36+
endif()
37+
38+
configure_file("${CMAKE_SOURCE_DIR}/version.cmake.in" "${CMAKE_SOURCE_DIR}/version.cmake")
39+
endif()
40+
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/version.cmake")
41+
message( SEND_ERROR "Could not find GIT or valid version.cmake. Version information will be invalid." )
42+
endif()
43+
include("${CMAKE_SOURCE_DIR}/version.cmake")
44+
45+
if(FORCE_VERSION_STRING)
46+
set(SUPERTUX_VERSION_STRING "${FORCE_VERSION_STRING}")
47+
endif()
48+
set(SUPERTUX_VERSION ${SUPERTUX_VERSION_STRING})
49+
50+
configure_file(version.h.in ${CMAKE_BINARY_DIR}/version.h )
51+
52+
set_source_files_properties(${CMAKE_BINARY_DIR}/version.h
53+
PROPERTIES GENERATED true)
54+
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/supertux/main.cpp
55+
PROPERTIES OBJECT_DEPENDS "${CMAKE_BINARY_DIR}/version.h")
56+
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/supertux/title_screen.cpp
57+
PROPERTIES OBJECT_DEPENDS "${CMAKE_BINARY_DIR}/version.h")
58+
set_source_files_properties(${CMAKE_CURRENT_SOURCE_DIR}/src/addon/addon_manager.cpp
59+
PROPERTIES OBJECT_DEPENDS "${CMAKE_BINARY_DIR}/version.h")
60+
61+
# EOF #

0 commit comments

Comments
 (0)