Mercurial > molko
changeset 584:f2737a931658
cmake: start installing
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sat, 18 Mar 2023 10:57:29 +0100 |
parents | 5a4e5b852f8a |
children | 76ce31b0151f |
files | CMakeLists.txt cmake/MlkLibrary.cmake libmlk-core/CMakeLists.txt libmlk-core/libmlk-core-config.cmake libmlk-core/mlk/core/gamepad.c libmlk-util/CMakeLists.txt libmlk-util/libmlk-util-config.cmake |
diffstat | 7 files changed, 177 insertions(+), 53 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Mon Mar 13 13:07:48 2023 +0100 +++ b/CMakeLists.txt Sat Mar 18 10:57:29 2023 +0100 @@ -45,11 +45,25 @@ set(CMAKE_C_FLAGS "/D_CRT_SECURE_NO_WARNINGS ${CMAKE_C_FLAGS}") endif () -option(MLK_WITH_DOXYGEN "Enable doxygen documentation" On) -option(MLK_WITH_EXAMPLES "Enable examples" On) -option(MLK_WITH_NLS "Enable NLS support" Off) -option(MLK_WITH_TESTS "Enable unit tests" On) -option(MLK_WITH_TESTS_GRAPHICAL "Enable unit tests that requires graphical context" On) +include(GNUInstallDirs) +include(CMakePackageConfigHelpers) + +function(mlk_option name value type help) + set(${name} ${value} CACHE ${type} ${help}) +endfunction() + +mlk_option(MLK_WITH_DOXYGEN On + BOOL "Enable doxygen documentation") +mlk_option(MLK_WITH_EXAMPLES On + BOOL "Enable examples") +mlk_option(MLK_WITH_NLS Off + BOOL "Enable NLS support") +mlk_option(MLK_WITH_TESTS On + BOOL "Enable unit tests") +mlk_option(MLK_WITH_TESTS_GRAPHICAL On + BOOL "Enable unit tests that requires graphical context") +mlk_option(MLK_WITH_CMAKEDIR "${CMAKE_INSTALL_LIBDIR}/cmake" + STRING "Destination for CMake files") include(cmake/MlkBcc.cmake) include(cmake/MlkExecutable.cmake) @@ -58,8 +72,6 @@ include(cmake/MlkNls.cmake) include(cmake/MlkTileset.cmake) -include(GNUInstallDirs) - find_package(SDL2 REQUIRED COMPONENTS image ttf) find_package(OpenAL REQUIRED) find_package(SndFile REQUIRED) @@ -97,3 +109,14 @@ add_subdirectory(libmlk-example) add_subdirectory(examples) endif () + +# +# SDL2 is not always configured using CMake on some systems which means the +# CMake configuration file isn't provided, so use our own... +# +install( + FILES + ${CMAKE_SOURCE_DIR}/cmake/FindSDL2.cmake + ${CMAKE_SOURCE_DIR}/cmake/FindSndFile.cmake + DESTINATION "${MLK_WITH_CMAKEDIR}/mlk" +)
--- a/cmake/MlkLibrary.cmake Mon Mar 13 13:07:48 2023 +0100 +++ b/cmake/MlkLibrary.cmake Sat Mar 18 10:57:29 2023 +0100 @@ -22,9 +22,9 @@ include(${CMAKE_CURRENT_LIST_DIR}/MlkTileset.cmake) function(mlk_library) - set(options "") - set(oneValueArgs "NAME;FOLDER;TYPE") - set(multiValueArgs "SOURCES;ASSETS;LANGS;LIBRARIES;INCLUDES;FLAGS;OPTIONS;MAPS;TILESETS") + set(options "INSTALL") + set(oneValueArgs "NAME;FOLDER;TYPE;HEADERS_DIRECTORY") + set(multiValueArgs "SOURCES;ASSETS;LANGS;HEADERS;LIBRARIES;INCLUDES;FLAGS;OPTIONS;MAPS;TILESETS") cmake_parse_arguments(LIB "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) @@ -75,4 +75,44 @@ endif () set_target_properties(${LIB_NAME} PROPERTIES PREFIX "") + + if (LIB_INSTALL) + write_basic_package_version_file( + ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}-config-version.cmake + VERSION ${CMAKE_PROJECT_VERSION} + COMPATIBILITY SameMajorVersion + ) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/${LIB_NAME}-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}-config.cmake + @ONLY + ) + install( + TARGETS ${LIB_NAME} + EXPORT ${LIB_NAME}-targets + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_BINDIR} + ARCHIVE DESTINATION ${CMAKE_INSTALL_BINDIR} + INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + ) + install( + EXPORT ${LIB_NAME}-targets + FILE ${LIB_NAME}-targets.cmake + NAMESPACE mlk:: + DESTINATION ${MLK_WITH_CMAKEDIR}/${LIB_NAME} + ) + install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${LIB_NAME}-config-version.cmake + DESTINATION ${MLK_WITH_CMAKEDIR}/${LIB_NAME} + ) + + if (LIB_HEADERS AND LIB_HEADERS_DIRECTORY) + install( + FILES ${LIB_HEADERS} + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${LIB_HEADERS_DIRECTORY} + ) + endif () + endif () endfunction()
--- a/libmlk-core/CMakeLists.txt Mon Mar 13 13:07:48 2023 +0100 +++ b/libmlk-core/CMakeLists.txt Sat Mar 18 10:57:29 2023 +0100 @@ -20,62 +20,68 @@ set( SOURCES + ${libmlk-core_SOURCE_DIR}/mlk/core/game.c + ${libmlk-core_SOURCE_DIR}/mlk/core/sprite.c + ${libmlk-core_SOURCE_DIR}/mlk/core/trace.c + ${libmlk-core_SOURCE_DIR}/mlk/core/maths.c + ${libmlk-core_SOURCE_DIR}/mlk/core/sys.c + ${libmlk-core_SOURCE_DIR}/mlk/core/util.c + ${libmlk-core_SOURCE_DIR}/mlk/core/drawable-stack.c ${libmlk-core_SOURCE_DIR}/mlk/core/action-script.c - ${libmlk-core_SOURCE_DIR}/mlk/core/action-script.h + ${libmlk-core_SOURCE_DIR}/mlk/core/state.c + ${libmlk-core_SOURCE_DIR}/mlk/core/texture.c + ${libmlk-core_SOURCE_DIR}/mlk/core/font.c + ${libmlk-core_SOURCE_DIR}/mlk/core/painter.c + ${libmlk-core_SOURCE_DIR}/mlk/core/panic.c + ${libmlk-core_SOURCE_DIR}/mlk/core/gamepad.c + ${libmlk-core_SOURCE_DIR}/mlk/core/image.c + ${libmlk-core_SOURCE_DIR}/mlk/core/alloc.c + ${libmlk-core_SOURCE_DIR}/mlk/core/clock.c ${libmlk-core_SOURCE_DIR}/mlk/core/action-stack.c + ${libmlk-core_SOURCE_DIR}/mlk/core/core.c + ${libmlk-core_SOURCE_DIR}/mlk/core/animation.c + ${libmlk-core_SOURCE_DIR}/mlk/core/err.c + ${libmlk-core_SOURCE_DIR}/mlk/core/music.c + ${libmlk-core_SOURCE_DIR}/mlk/core/sound.c + ${libmlk-core_SOURCE_DIR}/mlk/core/event.c + ${libmlk-core_SOURCE_DIR}/mlk/core/drawable.c + ${libmlk-core_SOURCE_DIR}/mlk/core/action.c + ${libmlk-core_SOURCE_DIR}/mlk/core/window.c +) + +set( + HEADERS + ${libmlk-core_SOURCE_DIR}/mlk/core/action-script.h ${libmlk-core_SOURCE_DIR}/mlk/core/action-stack.h - ${libmlk-core_SOURCE_DIR}/mlk/core/action.c ${libmlk-core_SOURCE_DIR}/mlk/core/action.h - ${libmlk-core_SOURCE_DIR}/mlk/core/alloc.c ${libmlk-core_SOURCE_DIR}/mlk/core/alloc.h - ${libmlk-core_SOURCE_DIR}/mlk/core/animation.c ${libmlk-core_SOURCE_DIR}/mlk/core/animation.h - ${libmlk-core_SOURCE_DIR}/mlk/core/clock.c ${libmlk-core_SOURCE_DIR}/mlk/core/clock.h ${libmlk-core_SOURCE_DIR}/mlk/core/color.h - ${libmlk-core_SOURCE_DIR}/mlk/core/core.c ${libmlk-core_SOURCE_DIR}/mlk/core/core.h - ${libmlk-core_SOURCE_DIR}/mlk/core/drawable-stack.c ${libmlk-core_SOURCE_DIR}/mlk/core/drawable-stack.h - ${libmlk-core_SOURCE_DIR}/mlk/core/drawable.c ${libmlk-core_SOURCE_DIR}/mlk/core/drawable.h - ${libmlk-core_SOURCE_DIR}/mlk/core/err.c ${libmlk-core_SOURCE_DIR}/mlk/core/err.h - ${libmlk-core_SOURCE_DIR}/mlk/core/event.c ${libmlk-core_SOURCE_DIR}/mlk/core/event.h - ${libmlk-core_SOURCE_DIR}/mlk/core/font.c ${libmlk-core_SOURCE_DIR}/mlk/core/font.h - ${libmlk-core_SOURCE_DIR}/mlk/core/game.c ${libmlk-core_SOURCE_DIR}/mlk/core/game.h - ${libmlk-core_SOURCE_DIR}/mlk/core/image.c + ${libmlk-core_SOURCE_DIR}/mlk/core/gamepad.h ${libmlk-core_SOURCE_DIR}/mlk/core/image.h ${libmlk-core_SOURCE_DIR}/mlk/core/key.h - ${libmlk-core_SOURCE_DIR}/mlk/core/maths.c ${libmlk-core_SOURCE_DIR}/mlk/core/maths.h ${libmlk-core_SOURCE_DIR}/mlk/core/mouse.h - ${libmlk-core_SOURCE_DIR}/mlk/core/music.c ${libmlk-core_SOURCE_DIR}/mlk/core/music.h - ${libmlk-core_SOURCE_DIR}/mlk/core/painter.c ${libmlk-core_SOURCE_DIR}/mlk/core/painter.h - ${libmlk-core_SOURCE_DIR}/mlk/core/panic.c ${libmlk-core_SOURCE_DIR}/mlk/core/panic.h - ${libmlk-core_SOURCE_DIR}/mlk/core/sound.c ${libmlk-core_SOURCE_DIR}/mlk/core/sound.h - ${libmlk-core_SOURCE_DIR}/mlk/core/sprite.c ${libmlk-core_SOURCE_DIR}/mlk/core/sprite.h - ${libmlk-core_SOURCE_DIR}/mlk/core/state.c ${libmlk-core_SOURCE_DIR}/mlk/core/state.h - ${libmlk-core_SOURCE_DIR}/mlk/core/sys.c ${libmlk-core_SOURCE_DIR}/mlk/core/sys.h ${libmlk-core_SOURCE_DIR}/mlk/core/sys_p.h - ${libmlk-core_SOURCE_DIR}/mlk/core/texture.c ${libmlk-core_SOURCE_DIR}/mlk/core/texture.h ${libmlk-core_SOURCE_DIR}/mlk/core/texture_p.h - ${libmlk-core_SOURCE_DIR}/mlk/core/trace.c ${libmlk-core_SOURCE_DIR}/mlk/core/trace.h - ${libmlk-core_SOURCE_DIR}/mlk/core/util.c ${libmlk-core_SOURCE_DIR}/mlk/core/util.h - ${libmlk-core_SOURCE_DIR}/mlk/core/window.c ${libmlk-core_SOURCE_DIR}/mlk/core/window.h ${libmlk-core_SOURCE_DIR}/mlk/core/window_p.h ) @@ -89,14 +95,6 @@ list(APPEND LIBRARIES ${Intl_LIBRARIES}) endif () -if (MLK_WITH_ZSTD) - list(APPEND LIBRARIES ZSTD::ZSTD) -endif () - -if (MLK_WITH_ZIP) - list(APPEND LIBRARIES Libzip::Libzip) -endif () - if (CMAKE_SYSTEM_NAME MATCHES "Windows") list(APPEND LIBRARIES shlwapi) endif () @@ -107,8 +105,11 @@ mlk_library( NAME libmlk-core - SOURCES ${SOURCES} ${NLS} + SOURCES ${HEADERS} ${NLS} ${SOURCES} + HEADERS ${HEADERS} + HEADERS_DIRECTORY mlk/core LANGS ${NLS} + INSTALL LIBRARIES PUBLIC ${LIBRARIES} @@ -120,8 +121,8 @@ libmlk-util INCLUDES PUBLIC + $<BUILD_INTERFACE:${libmlk-core_SOURCE_DIR}> ${OPENAL_INCLUDE_DIR} - $<BUILD_INTERFACE:${libmlk-core_SOURCE_DIR}> ) source_group(TREE ${libmlk-core_SOURCE_DIR} FILES ${SOURCES} ${NLS})
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-core/libmlk-core-config.cmake Sat Mar 18 10:57:29 2023 +0100 @@ -0,0 +1,23 @@ +# +# libmlk-core-config.cmake -- export file for libmlk-core +# +# Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +include(CMakeFindDependencyMacro) + +find_dependency(libmlk-util) + +include("${CMAKE_CURRENT_LIST_DIR}/libmlk-core-targets.cmake")
--- a/libmlk-core/mlk/core/gamepad.c Mon Mar 13 13:07:48 2023 +0100 +++ b/libmlk-core/mlk/core/gamepad.c Sat Mar 18 10:57:29 2023 +0100 @@ -32,7 +32,7 @@ memset(pad, 0, sizeof (*pad)); if (!(pad->handle = SDL_GameControllerOpen(idx))) - return MLK_ERR_SDL; + return mlk_errf("%s", SDL_GetError()); return 0; } @@ -54,11 +54,11 @@ assert(it); memset(it, 0, sizeof (*it)); - it->idx = -1; + it->index = -1; if ((it->end = SDL_NumJoysticks()) < 0) { it->end = 0; - return MLK_ERR_SDL; + return mlk_errf("%s", SDL_GetError()); } return 0; @@ -71,16 +71,16 @@ * Go to the next gamepad, we need to iterate because SDL can combines * joystick and game controllers with the same API. */ - for (++it->idx; it->idx < it->end && !SDL_IsGameController(it->idx); ++it->idx) + for (++it->index; it->index < it->end && !SDL_IsGameController(it->index); ++it->index) continue; /* End of iteration. */ - if (it->idx >= it->end) { + if (it->index >= it->end) { memset(it, 0, sizeof (*it)); return 0; } - it->name = SDL_GameControllerNameForIndex(it->idx); + it->name = SDL_GameControllerNameForIndex(it->index); return 1; }
--- a/libmlk-util/CMakeLists.txt Mon Mar 13 13:07:48 2023 +0100 +++ b/libmlk-util/CMakeLists.txt Sat Mar 18 10:57:29 2023 +0100 @@ -25,7 +25,6 @@ set( SOURCES ${libmlk-util_SOURCE_DIR}/mlk/util/dir.c - ${libmlk-util_SOURCE_DIR}/mlk/util/dir.h ${libmlk-util_SOURCE_DIR}/mlk/util/fmemopen.c ${libmlk-util_SOURCE_DIR}/mlk/util/openbsd/basename.c ${libmlk-util_SOURCE_DIR}/mlk/util/openbsd/dirname.c @@ -34,6 +33,12 @@ ${libmlk-util_SOURCE_DIR}/mlk/util/openbsd/strlcpy.c ${libmlk-util_SOURCE_DIR}/mlk/util/sysconfig.cmake.h ${libmlk-util_SOURCE_DIR}/mlk/util/util.c +) + +set( + HEADERS + ${libmlk-util_BINARY_DIR}/mlk/util/sysconfig.h + ${libmlk-util_SOURCE_DIR}/mlk/util/dir.h ${libmlk-util_SOURCE_DIR}/mlk/util/util.h ) @@ -56,7 +61,9 @@ mlk_library( NAME libmlk-util SOURCES ${SOURCES} - TYPE STATIC + INSTALL + HEADERS ${HEADERS} + HEADERS_DIRECTORY mlk/util LIBRARIES ${LIBRARIES} INCLUDES PUBLIC
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libmlk-util/libmlk-util-config.cmake Sat Mar 18 10:57:29 2023 +0100 @@ -0,0 +1,30 @@ +# +# libmlk-util-config.cmake -- export file for libmlk-util +# +# Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +# + +include(CMakeFindDependencyMacro) + +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/../mlk;${CMAKE_MODULE_PATH}") + +# Local modules. +find_dependency(SDL2 COMPONENTS ttf image) +find_dependency(SndFile) + +# External modules. +find_dependency(OpenAL) + +include("${CMAKE_CURRENT_LIST_DIR}/libmlk-util-targets.cmake")