From 880d53d88ac03700aeed2be648b8f6fb886a0760 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Mon, 13 Jan 2025 21:58:08 +0100 Subject: [PATCH] Find speed-dreams-data submodule by default Now that speed-dreams-data is available as a submodule, this allows the build system to choose it for in-tree builds. Therefore, CMake will perform in the following order: 1. Do not search the speed-dreams-data package if SD_ASSUME_DATADIR is set. 2. Otherwise, do an in-tree build if the submodule has been updated. 3. Otherwise, search for the speed-dreams-data package on standard locations and CMAKE_PREFIX_PATH and/or CMAKE_FIND_ROOT_PATH. 4. Otherwise, return an error message. SD_HAS_DATADIR was rendered redundant, so it has been removed. However, SD_DATADIR_INSTALL_PREFIX was introduced because it would not equal SD_DATADIR_ABS for in-tree builds, where an installed version of the speed-dreams-data package is not required. In-tree builds now allow to generate NSIS installers with both code and data. --- CMakeLists.txt | 55 ++++++++++++++++++++++-------------- cmake/config.h.in.cmake | 12 ++------ cpack/common.cmake | 2 +- cpack/nsis.cmake | 4 +-- src/libs/tgf/application.cpp | 2 ++ src/main/CMakeLists.txt | 2 +- 6 files changed, 43 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 86550422..134f101b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,30 +33,43 @@ IF(APPLE) SET(CMAKE_CXX_STANDARD_REQUIRED True) ENDIF(APPLE) -option(SD_ASSUME_DATADIR "Assume default directory for speed-dreams-data if not found") +option(SD_ASSUME_DATADIR "Assume default directory for speed-dreams-data") +include(GNUInstallDirs) -set(data_version 2.3.0) -find_package(speed-dreams-data ${data_version}) - -if(NOT SD_DATADIR) - if(SD_ASSUME_DATADIR) - include(GNUInstallDirs) - - set(SD_DATADIR ${CMAKE_INSTALL_DATADIR}/games/speed-dreams-2) - set(SD_DATADIR_ABS ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/games/speed-dreams-2) - message(STATUS "Data directory: ${SD_DATADIR_ABS} (assumed)") - set(SD_HAS_DATADIR true) - else() - message(WARNING "Data directory not found or incompatible with version " - "${data_version}. Speed Dreams should still " - "be able to build, but it might not run successfully. " - "If speed-dreams-data has been installed to a non-standard location, " - "please add -DCMAKE_PREFIX_PATH= to the command line to " - "find it.") - endif() +if(SD_ASSUME_DATADIR) + set(SD_DATADIR ${CMAKE_INSTALL_DATADIR}/games/speed-dreams-2) + set(SD_DATADIR_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/games/speed-dreams-2) + set(SD_DATADIR_ABS ${SD_DATADIR_INSTALL_PREFIX}) + message(STATUS "Data directory: ${SD_DATADIR_ABS} (assumed)") +elseif(EXISTS speed-dreams-data/CMakeLists.txt) + add_subdirectory(speed-dreams-data) + set(SD_DATADIR ${CMAKE_INSTALL_DATADIR}/games/speed-dreams-2) + set(SD_DATADIR_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATADIR}/games/speed-dreams-2) + set(SD_DATADIR_ABS ${CMAKE_CURRENT_SOURCE_DIR}/speed-dreams-data/data) + message(STATUS "Data directory: ${SD_DATADIR_ABS} (in-tree)") else() + set(data_version 2.3.0) + find_package(speed-dreams-data ${data_version} QUIET) + + if(NOT SD_DATADIR) + message(FATAL_ERROR + "Data directory not found or incompatible with version " + "${data_version}. Please perform one of the following actions:\n" + "- Update the data git submodule to do an in-tree build with the " + " command below, and then configure the project again:\n" + "git submodule update --init --recursive\n" + "- If speed-dreams-data has been installed to a non-standard " + "location, configure the project with " + "-DCMAKE_PREFIX_PATH=.\n" + "- Configure the project with -DSD_ASSUME_DATADIR=1 to assume " + "speed-dreams-data was installed into a standard location. " + "Speed Dreams should then still be able to build, but it might " + "not run successfully. This option is usually only recommended " + "for CI/CD and packagers." + ) + endif() + message(STATUS "Data directory: ${SD_DATADIR_ABS}") - set(SD_HAS_DATADIR true) endif() INCLUDE(cmake/macros.cmake) diff --git a/cmake/config.h.in.cmake b/cmake/config.h.in.cmake index e4d1e78e..07781aa1 100755 --- a/cmake/config.h.in.cmake +++ b/cmake/config.h.in.cmake @@ -174,15 +174,9 @@ #endif /* Run-time directories */ -#cmakedefine SD_HAS_DATADIR - -#if defined(SD_HAS_DATADIR) -# define SD_DATADIR "${SD_DATADIR}/" -# define SD_DATADIR_ABS "${SD_DATADIR_ABS}/" -#else -# define SD_DATADIR "" -# define SD_DATADIR_ABS "" -#endif +#define SD_DATADIR "${SD_DATADIR}/" +#define SD_DATADIR_ABS "${SD_DATADIR_ABS}/" +#define SD_DATADIR_INSTALL_PREFIX "${SD_DATADIR_INSTALL_PREFIX}/" #define SD_LIBDIR "${SD_LIBDIR}/" #define SD_BINDIR "${SD_BINDIR}/" diff --git a/cpack/common.cmake b/cpack/common.cmake index 011f812a..74521119 100644 --- a/cpack/common.cmake +++ b/cpack/common.cmake @@ -27,7 +27,7 @@ computer-controlled driver implementations, flexible race configuration master server to compare your best lap times against other players." ) -if(SD_HAS_DATADIR AND NOT SD_ASSUME_DATADIR) +if(NOT SD_ASSUME_DATADIR) set(CPACK_PACKAGE_ICON "${SD_DATADIR_ABS}/data/img/header.bmp") endif() diff --git a/cpack/nsis.cmake b/cpack/nsis.cmake index 81f9b51f..7082f5a2 100644 --- a/cpack/nsis.cmake +++ b/cpack/nsis.cmake @@ -8,7 +8,7 @@ set(CPACK_NSIS_INSTALLED_ICON_NAME ${PROJECT_NAME}) set(CPACK_NSIS_MUI_FINISHPAGE_RUN ${PROJECT_NAME}) -set(CPACK_NSIS_DISPLAY_NAME "Speed Dreams ${CPACK_PACKAGE_VERSION} (engine and tools)") +set(CPACK_NSIS_DISPLAY_NAME "Speed Dreams ${CPACK_PACKAGE_VERSION}") set(CPACK_NSIS_URL_INFO_ABOUT "${CMAKE_PROJECT_HOMEPAGE_URL}") set(CPACK_NSIS_HELP_LINK "https://forge.a-lec.org/speed-dreams/") set(CPACK_PACKAGE_EXECUTABLES @@ -23,7 +23,7 @@ set(CPACK_NSIS_MENU_LINKS "https://forge.a-lec.org/speed-dreams/" "Project source repositories" "/doc/userman/how_to_drive.html" "User manual") -if(SD_HAS_DATADIR AND NOT SD_ASSUME_DATADIR) +if(NOT SD_ASSUME_DATADIR) set(CPACK_NSIS_MUI_ICON "${SD_DATADIR_ABS}/data/icons/icon.ico") set(CPACK_NSIS_MUI_UNIICON "${SD_DATADIR_ABS}/data/icons/icon.ico") set(CPACK_NSIS_MUI_WELCOMEFINISHPAGE_BITMAP "${SD_DATADIR_ABS}/data/img/header-vert.bmp") diff --git a/src/libs/tgf/application.cpp b/src/libs/tgf/application.cpp index 486ef6b7..1ee2dc51 100644 --- a/src/libs/tgf/application.cpp +++ b/src/libs/tgf/application.cpp @@ -449,6 +449,8 @@ bool GfApplication::parseOptions() strDataDir = GfSetDataDir(SD_DATADIR); if (strDataDir.empty() || !GfDirExists(strDataDir.c_str())) strDataDir = GfSetDataDir(SD_DATADIR_ABS); + if (strDataDir.empty() || !GfDirExists(strDataDir.c_str())) + strDataDir = GfSetDataDir(SD_DATADIR_INSTALL_PREFIX); // Check if ALL the Speed-dreams dirs have a usable value, and exit if not. if (strLocalDir.empty() || strLibDir.empty() || strBinDir.empty() || strDataDir.empty()) diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt index a299adf8..66710497 100644 --- a/src/main/CMakeLists.txt +++ b/src/main/CMakeLists.txt @@ -9,7 +9,7 @@ IF(MSVC) SET(_SOURCES ${_SOURCES} main.rc resource.h ../../data/data/icons/icon.ico) ENDIF(MSVC) -IF(SD_HAS_DATADIR AND NOT SD_ASSUME_DATADIR) +IF(NOT SD_ASSUME_DATADIR) configure_file(${CMAKE_SOURCE_DIR}/cmake/${PROJECT_NAME}.rc.in.cmake ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.rc) SET(_SOURCES ${_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.rc)