From 8d3ca718b51e682056b63176d851611e6864c15e Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Sun, 19 Jan 2025 06:39:13 +0100 Subject: [PATCH 01/15] legacymenu: Make networkingmenu.cpp optional networkingmenu.cpp was always being built, but the CLIENT_SERVER macro was used to comment out the implementation. A more orthodox way to achieve the same effect without relying on macros is to let the build system decide whether this source file should be built. --- src/modules/userinterface/legacymenu/CMakeLists.txt | 4 +++- .../userinterface/legacymenu/racescreens/networkingmenu.cpp | 2 -- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/modules/userinterface/legacymenu/CMakeLists.txt b/src/modules/userinterface/legacymenu/CMakeLists.txt index 2a5198f92..16db8c8e5 100644 --- a/src/modules/userinterface/legacymenu/CMakeLists.txt +++ b/src/modules/userinterface/legacymenu/CMakeLists.txt @@ -55,7 +55,7 @@ SET(CONFSCREENS_HEADERS ${CS}/confscreens.h ${CS}/advancedgraphconfig.h SET(RS racescreens) SET(RACESCREENS_SOURCES ${RS}/raceselectmenu.cpp #${RS}/raceweekendmenu.cpp - ${RS}/racemanmenu.cpp ${RS}/fileselect.cpp ${RS}/networkingmenu.cpp + ${RS}/racemanmenu.cpp ${RS}/fileselect.cpp ${RS}/raceconfigstate.cpp ${RS}/trackselect.cpp ${RS}/driverselect.cpp ${RS}/garagemenu.cpp ${RS}/raceparamsmenu.cpp ${RS}/carsetupmenu.cpp @@ -67,6 +67,8 @@ IF(OPTION_CLIENT_SERVER) SET(RACESCREENS_SOURCES ${RACESCREENS_SOURCES} ${RS}/csnetworkingmenu.cpp ${RS}/csnetclientsettings.cpp ${RS}/csnetserversettings.cpp) +ELSE() + SET(RACESCREENS_SOURCES ${RACESCREENS_SOURCES} ${RS}/networkingmenu.cpp) ENDIF(OPTION_CLIENT_SERVER) SET(RACESCREENS_HEADERS ${RS}/racescreens.h ${RS}/garagemenu.h ${RS}/carsetupmenu.h) #${RS}/raceweekendscreens.h) diff --git a/src/modules/userinterface/legacymenu/racescreens/networkingmenu.cpp b/src/modules/userinterface/legacymenu/racescreens/networkingmenu.cpp index 71694519e..e9079bf16 100644 --- a/src/modules/userinterface/legacymenu/racescreens/networkingmenu.cpp +++ b/src/modules/userinterface/legacymenu/racescreens/networkingmenu.cpp @@ -22,7 +22,6 @@ Should also allow choosing IP address, track, etc ... */ -#ifndef CLIENT_SERVER #include #include #include @@ -1110,4 +1109,3 @@ GetHumanDriver(NetDriver &driver,int index) return 1; } -#endif // #ifndef CLIENT_SERVER From ae4f837d5a58fbf1674f0a1592c76ee979c5e0c3 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Sun, 19 Jan 2025 06:20:05 +0100 Subject: [PATCH 02/15] CMakeLists.txt: Fix undefined behaviour on EXISTS According to the documentation [1], EXISTS only has well-defined behaviour when an absolute path is given. This fixes a bug where re-configuring the project would fail because CMake would inadverently jump to the invalid branch. [1]: https://cmake.org/cmake/help/latest/command/if.html#exists --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 134f101bb..e2357126a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,7 +41,7 @@ if(SD_ASSUME_DATADIR) 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) +elseif(EXISTS ${CMAKE_CURRENT_LIST_DIR}/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) From 1e660bc583e20918cba7bf53f6beb74388be7042 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:25:33 +0100 Subject: [PATCH 03/15] CMakeLists.txt: Always set data_version Otherwise, cpack/debian.cmake would be unable to propagate the required version for speed-dreams-data to CPACK_DEBIAN_PACKAGE_DEPENDS [1] when SD_ASSUME_DATADIR is defined. [1]: https://cmake.org/cmake/help/latest/cpack_gen/deb.html#variable:CPACK_DEBIAN_PACKAGE_DEPENDS --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e2357126a..002b2272a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -34,6 +34,7 @@ IF(APPLE) ENDIF(APPLE) option(SD_ASSUME_DATADIR "Assume default directory for speed-dreams-data") +set(data_version 2.3.0) include(GNUInstallDirs) if(SD_ASSUME_DATADIR) @@ -48,7 +49,6 @@ elseif(EXISTS ${CMAKE_CURRENT_LIST_DIR}/speed-dreams-data/CMakeLists.txt) 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) From ce433d14d2935b8bbfc3d14a1720b3ed607e4787 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:26:26 +0100 Subject: [PATCH 04/15] cmake: Replace SOURCE_DIR with CMAKE_SOURCE_DIR CMAKE_SOURCE_DIR already points to the directory for the top-level CMakelists.txt [1], so SOURCE_DIR is redundant. [1]: https://cmake.org/cmake/help/latest/variable/CMAKE_SOURCE_DIR.html --- cmake/checks.cmake | 4 ---- cmake/doxygenconfig.in.cmake | 4 ++-- cmake/install.cmake | 4 ++-- cmake/macros.cmake | 10 ++-------- cmake/options.cmake | 2 +- cmake/robot.cmake | 2 +- src/main/CMakeLists.txt | 2 +- src/tools/accc/CMakeLists.txt | 2 +- src/tools/menuview/CMakeLists.txt | 2 +- src/tools/nfs2ac/CMakeLists.txt | 2 +- src/tools/nfsperf/CMakeLists.txt | 2 +- src/tools/trackgen/CMakeLists.txt | 2 +- 12 files changed, 14 insertions(+), 24 deletions(-) diff --git a/cmake/checks.cmake b/cmake/checks.cmake index f5cabaa82..c4332de14 100644 --- a/cmake/checks.cmake +++ b/cmake/checks.cmake @@ -1,7 +1,3 @@ -IF(NOT DEFINED SOURCE_DIR) - MESSAGE(ERROR ": Please first include macro's") -ENDIF(NOT DEFINED SOURCE_DIR) - INCLUDE(CheckIncludeFiles) INCLUDE(CheckFunctionExists) INCLUDE(CheckLibraryExists) diff --git a/cmake/doxygenconfig.in.cmake b/cmake/doxygenconfig.in.cmake index d5da3a64c..f63bbf973 100755 --- a/cmake/doxygenconfig.in.cmake +++ b/cmake/doxygenconfig.in.cmake @@ -114,7 +114,7 @@ FULL_PATH_NAMES = YES # If left blank the directory from which doxygen is run is used as the # path to strip. -STRIP_FROM_PATH = @SOURCE_DIR@ +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of # the path mentioned in the documentation of a class, which tells @@ -564,7 +564,7 @@ WARN_LOGFILE = # directories like "/usr/src/myproject". Separate the files or directories # with spaces. -INPUT = @SOURCE_DIR@/src +INPUT = @CMAKE_SOURCE_DIR@/src # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is diff --git a/cmake/install.cmake b/cmake/install.cmake index 11846b856..d4bf5c11c 100644 --- a/cmake/install.cmake +++ b/cmake/install.cmake @@ -50,8 +50,8 @@ ENDMACRO(_GET_TARGET_REAL_PATHNAME TGT_NAME VAR_PATHNAME) # Installs bt.so in ${prefix}/${SD_LIBDIR}/drivers/bt # SD_INSTALL_FILES(BIN TARGETS speed-dreams) # Installs the speed-dreams target in ${prefix}/${SD_BINDIR} -# SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES sd2-menuview.6) -# Installs ${SOURCE_DIR}/doc/man/sd2-menuview.6 in ${prefix}/${SD_MANDIR}/man6 +# SD_INSTALL_FILES(MAN man6 PREFIX ${CMAKE_SOURCE_DIR}/doc/man FILES sd2-menuview.6) +# Installs ${CMAKE_SOURCE_DIR}/doc/man/sd2-menuview.6 in ${prefix}/${SD_MANDIR}/man6 MACRO(SD_INSTALL_FILES) SET(SD_INSTALL_FILES_SYNTAX ${SD_INSTALL_FILES_SYNTAX} "LIB,1,1,IS_LIB,LIB_PATH") diff --git a/cmake/macros.cmake b/cmake/macros.cmake index 2b43bc265..c7f391b72 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -36,12 +36,6 @@ IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) ENDIF() ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) -# Determine the source folder if ??? -IF(NOT SOURCE_DIR AND IN_SOURCETREE) - SET(SOURCE_DIR ${CMAKE_SOURCE_DIR}) - MARK_AS_ADVANCED(SOURCE_DIR) -ENDIF(NOT SOURCE_DIR AND IN_SOURCETREE) - # The path of the folder of the current CMakeLists.txt GET_FILENAME_COMPONENT(CURRENT_LIST_FILE_PATH ${CMAKE_CURRENT_LIST_FILE} PATH) @@ -279,7 +273,7 @@ MACRO(SD_GENERATE_CLOBBER_SCRIPT) IF(MSVC) - SET(TGT_SCRIPT "${SOURCE_DIR}/clobber.bat") + SET(TGT_SCRIPT "${CMAKE_SOURCE_DIR}/clobber.bat") FILE(WRITE "${TGT_SCRIPT}" "@echo off\n") FILE(APPEND "${TGT_SCRIPT}" "rem CMake-generated script for in-source build tree total cleanup\n") FILE(APPEND "${TGT_SCRIPT}" "rem (remove any build-system-generated file (+ .bak, *~, ... etc), \n") @@ -337,7 +331,7 @@ MACRO(SD_GENERATE_CLOBBER_SCRIPT) ELSE(MSVC) - SET(TGT_SCRIPT "${SOURCE_DIR}/clobber.sh") + SET(TGT_SCRIPT "${CMAKE_SOURCE_DIR}/clobber.sh") FILE(WRITE "${TGT_SCRIPT}" "#!/bin/sh\n") FILE(APPEND "${TGT_SCRIPT}" "# CMake-generated script for in-source build tree total cleanup\n") FILE(APPEND "${TGT_SCRIPT}" "# (remove any build-system-generated file (+ .bak, *~, ... etc), \n") diff --git a/cmake/options.cmake b/cmake/options.cmake index 552db8e1c..678995129 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -28,7 +28,7 @@ MACRO(ADD_SD_COMPILE_OPTIONS) ADD_DEFINITIONS(-DHAVE_CONFIG_H) IF(IN_SOURCETREE) - SET(INCLUDE_CANDIDATE ${SOURCE_DIR}) + SET(INCLUDE_CANDIDATE ${CMAKE_SOURCE_DIR}) ELSE(IN_SOURCETREE) SET(INCLUDE_CANDIDATE "") ENDIF(IN_SOURCETREE) diff --git a/cmake/robot.cmake b/cmake/robot.cmake index 1ba436a4c..74b62f955 100644 --- a/cmake/robot.cmake +++ b/cmake/robot.cmake @@ -65,7 +65,7 @@ MACRO(GENERATE_ROBOT_DEF_FILE ROBOTNAME DEF_FILE) # Generate the .def file SET(ROBOT_NAME "${ROBOTNAME}") IF(IN_SOURCETREE) - CONFIGURE_FILE(${SOURCE_DIR}/cmake/robot.def.in.cmake ${DEF_FILE}) + CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/robot.def.in.cmake ${DEF_FILE}) ELSE(IN_SOURCETREE) CONFIGURE_FILE(${SD_DATADIR}/cmake/robot.def.in.cmake ${DEF_FILE}) ENDIF(IN_SOURCETREE) diff --git a/src/main/CMakeLists.txt b/src/main/CMakeLists.txt index 66710497c..e6de45657 100644 --- a/src/main/CMakeLists.txt +++ b/src/main/CMakeLists.txt @@ -45,7 +45,7 @@ IF(MINGW) ENDIF(MINGW) IF(UNIX) - SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) + SD_INSTALL_FILES(MAN man6 PREFIX ${CMAKE_SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) ENDIF(UNIX) SD_INSTALL_FILES(BIN TARGETS ${_TARGET_NAME}) diff --git a/src/tools/accc/CMakeLists.txt b/src/tools/accc/CMakeLists.txt index 81aeb1639..68f7b1a15 100644 --- a/src/tools/accc/CMakeLists.txt +++ b/src/tools/accc/CMakeLists.txt @@ -15,7 +15,7 @@ SD_ADD_EXECUTABLE(${_TARGET_NAME} ${ACCC_SOURCES} ${ACCC_HEADERS}) ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability) IF(UNIX) - SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) + SD_INSTALL_FILES(MAN man6 PREFIX ${CMAKE_SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) ENDIF(UNIX) SD_INSTALL_FILES(BIN TARGETS ${_TARGET_NAME}) diff --git a/src/tools/menuview/CMakeLists.txt b/src/tools/menuview/CMakeLists.txt index 8568e9d55..6ae8e41a9 100644 --- a/src/tools/menuview/CMakeLists.txt +++ b/src/tools/menuview/CMakeLists.txt @@ -47,7 +47,7 @@ IF(MINGW) ENDIF(MINGW) IF(UNIX) - SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) + SD_INSTALL_FILES(MAN man6 PREFIX ${CMAKE_SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) ENDIF(UNIX) SD_INSTALL_FILES(BIN TARGETS ${_TARGET_NAME}) diff --git a/src/tools/nfs2ac/CMakeLists.txt b/src/tools/nfs2ac/CMakeLists.txt index 3fd5b7fa3..a0401b56f 100644 --- a/src/tools/nfs2ac/CMakeLists.txt +++ b/src/tools/nfs2ac/CMakeLists.txt @@ -13,7 +13,7 @@ SD_ADD_EXECUTABLE(${_TARGET_NAME} ${NFS2AC_SOURCES}) ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability) IF(UNIX) - SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) + SD_INSTALL_FILES(MAN man6 PREFIX ${CMAKE_SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) ENDIF(UNIX) SD_INSTALL_FILES(BIN TARGETS ${_TARGET_NAME}) diff --git a/src/tools/nfsperf/CMakeLists.txt b/src/tools/nfsperf/CMakeLists.txt index bab1be5b5..150931663 100644 --- a/src/tools/nfsperf/CMakeLists.txt +++ b/src/tools/nfsperf/CMakeLists.txt @@ -19,7 +19,7 @@ ADD_SDLIB_LIBRARY(${_TARGET_NAME} portability tgf txml) # txml ignored if OPTION ADD_DL_LIBRARY(${_TARGET_NAME}) IF(UNIX) - SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) + SD_INSTALL_FILES(MAN man6 PREFIX ${CMAKE_SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) ENDIF(UNIX) SD_INSTALL_FILES(BIN TARGETS ${_TARGET_NAME}) diff --git a/src/tools/trackgen/CMakeLists.txt b/src/tools/trackgen/CMakeLists.txt index bba7bb7e4..534e9d74c 100644 --- a/src/tools/trackgen/CMakeLists.txt +++ b/src/tools/trackgen/CMakeLists.txt @@ -51,7 +51,7 @@ IF(MINGW) ENDIF(MINGW) IF(UNIX) - SD_INSTALL_FILES(MAN man6 PREFIX ${SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) + SD_INSTALL_FILES(MAN man6 PREFIX ${CMAKE_SOURCE_DIR}/doc/man FILES ${_TARGET_NAME}.6) ENDIF(UNIX) SD_INSTALL_FILES(BIN TARGETS ${_TARGET_NAME}) From ce1b5555cdad5c886f9395b5f292aae5ef70f1f4 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:26:41 +0100 Subject: [PATCH 05/15] macros.cmake: Remove CURRENT_LIST_FILE_PATH CMAKE_CURRENT_LIST_DIR already holds the path to the directory for the current list file. [1] [1]: https://cmake.org/cmake/help/latest/variable/CMAKE_CURRENT_LIST_DIR.html --- cmake/macros.cmake | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index c7f391b72..38c72b1df 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -36,12 +36,9 @@ IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) ENDIF() ENDIF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) -# The path of the folder of the current CMakeLists.txt -GET_FILENAME_COMPONENT(CURRENT_LIST_FILE_PATH ${CMAKE_CURRENT_LIST_FILE} PATH) - # Macros arg list parsing tools. IF(NOT _ALREADY_DONE) - INCLUDE(${CURRENT_LIST_FILE_PATH}/splitargn.cmake) + INCLUDE(${CMAKE_CURRENT_LIST_DIR}/splitargn.cmake) ENDIF(NOT _ALREADY_DONE) # Include dir for config.h @@ -134,23 +131,23 @@ ENDIF(UNIX) STRING(REGEX REPLACE "^(.*[^/])/*$" "\\1" SD_LOCALDIR_TMP ${SD_LOCALDIR}) SET(SD_LOCALDIR ${SD_LOCALDIR_TMP}) -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CURRENT_LIST_FILE_PATH}) +SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}) SET(CMAKE_INSTALL_RPATH "${SD_LIBDIR_ABS}/lib") # Configuration options macros. -INCLUDE(${CURRENT_LIST_FILE_PATH}/options.cmake) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/options.cmake) # Robots-related macros. -INCLUDE(${CURRENT_LIST_FILE_PATH}/robot.cmake) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/robot.cmake) # Robots-related macros. -INCLUDE(${CURRENT_LIST_FILE_PATH}/install.cmake) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/install.cmake) # Internal dependencies macros (includes and libs). -INCLUDE(${CURRENT_LIST_FILE_PATH}/internaldeps.cmake) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/internaldeps.cmake) # 3rd party dependencies macros (includes and libs). -INCLUDE(${CURRENT_LIST_FILE_PATH}/thirdpartydeps.cmake) +INCLUDE(${CMAKE_CURRENT_LIST_DIR}/thirdpartydeps.cmake) # Use as a replacement of native ADD_DIRECTORY if the target folder may be optional # (if it is actually not there, and OPTION_CHECK_CONTENTS is Off, From f845faad4a852301634be9293bbe8ed206198df0 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:27:27 +0100 Subject: [PATCH 06/15] macros.cmake: Simplify SD install directories The build system relied on overly complex logic already defined by the GNUInstallDirs module [1], which is already included by the top-level CMakeLists.txt. [1]: https://cmake.org/cmake/help/latest/module/GNUInstallDirs.html --- cmake/macros.cmake | 68 ++++++---------------------------------------- 1 file changed, 9 insertions(+), 59 deletions(-) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index 38c72b1df..44de00bfb 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -68,71 +68,21 @@ ENDIF(WIN32) SET(SD_TOOLS_EXECPREFIX "sd2-" CACHE STRING "Prefix for the tools executable names") MARK_AS_ADVANCED(SD_TOOLS_EXECPREFIX) -# Determine the default value of the data, bin and lib (and man) folders. -IF(IN_SOURCETREE) - IF(CMAKE_SIZEOF_VOID_P MATCHES 4) - SET(_DEFLIBDIR "lib") - ELSE() - SET(_DEFLIBDIR "lib64") - ENDIF() - IF(WIN32) - SET(SD_BINDIR bin CACHE PATH "Place where the executables should go") - SET(SD_LIBDIR ${_DEFLIBDIR} CACHE PATH "Place where the libraries should go") - SET(SD_INCLUDEDIR include CACHE PATH "Place where the include files should go") - ELSE(WIN32) #UNIX - SET(SD_BINDIR games CACHE PATH "Place where the executables should go") - SET(SD_LIBDIR ${_DEFLIBDIR}/games/speed-dreams-2 CACHE PATH "Place where the libraries should go") - SET(SD_INCLUDEDIR include/speed-dreams-2 CACHE PATH "Place where the include files should go") - SET(SD_MANDIR share/man CACHE PATH "Place where the manual pages should go") - ENDIF(WIN32) - MARK_AS_ADVANCED(SD_BINDIR) - MARK_AS_ADVANCED(SD_LIBDIR) - MARK_AS_ADVANCED(SD_INCLUDEDIR) - IF(UNIX) - MARK_AS_ADVANCED(SD_MANDIR) - ENDIF(UNIX) -ELSE(IN_SOURCETREE) - SET(SD_LIBDIR ${SD_LIBDIR_ABS}) - SET(SD_BINDIR ${SD_BINDIR_ABS}) - SET(SD_INCLUDEDIR ${SD_INCLUDEDIR_ABS}) - IF(UNIX) - SET(SD_MANDIR ${SD_MANDIR_ABS}) - ENDIF(UNIX) -ENDIF(IN_SOURCETREE) +IF(WIN32) + SET(SD_BINDIR ${CMAKE_INSTALL_BINDIR} CACHE PATH "Place where the executables should go") +ELSE() + SET(SD_BINDIR games CACHE PATH "Place where the executables should go") +ENDIF() -# Determine the aboslute paths of the data, bin and lib (and man) folders. - -IF(IS_ABSOLUTE ${SD_LIBDIR}) - GET_FILENAME_COMPONENT(SD_LIBDIR_ABS ${SD_LIBDIR} ABSOLUTE) -ELSE(IS_ABSOLUTE ${SD_LIBDIR}) - GET_FILENAME_COMPONENT(SD_LIBDIR_ABS ${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR} ABSOLUTE) -ENDIF(IS_ABSOLUTE ${SD_LIBDIR}) - -IF(IS_ABSOLUTE ${SD_BINDIR}) - GET_FILENAME_COMPONENT(SD_BINDIR_ABS ${SD_BINDIR} ABSOLUTE) -ELSE(IS_ABSOLUTE ${SD_BINDIR}) - GET_FILENAME_COMPONENT(SD_BINDIR_ABS ${CMAKE_INSTALL_PREFIX}/${SD_BINDIR} ABSOLUTE) -ENDIF(IS_ABSOLUTE ${SD_BINDIR}) - -IF(IS_ABSOLUTE ${SD_INCLUDEDIR}) - GET_FILENAME_COMPONENT(SD_INCLUDEDIR_ABS ${SD_INCLUDEDIR} ABSOLUTE) -ELSE(IS_ABSOLUTE ${SD_INCLUDEDIR}) - GET_FILENAME_COMPONENT(SD_INCLUDEDIR_ABS ${CMAKE_INSTALL_PREFIX}/${SD_INCLUDEDIR} ABSOLUTE) -ENDIF(IS_ABSOLUTE ${SD_INCLUDEDIR}) - -IF(UNIX) - IF(IS_ABSOLUTE ${SD_MANDIR}) - GET_FILENAME_COMPONENT(SD_MANDIR_ABS ${SD_MANDIR} ABSOLUTE) - ELSE(IS_ABSOLUTE ${SD_MANDIR}) - GET_FILENAME_COMPONENT(SD_MANDIR_ABS ${CMAKE_INSTALL_PREFIX}/${SD_MANDIR} ABSOLUTE) - ENDIF(IS_ABSOLUTE ${SD_MANDIR}) -ENDIF(UNIX) +SET(SD_LIBDIR ${CMAKE_INSTALL_LIBDIR}/games/speed-dreams-2 CACHE PATH "Place where the libraries should go") +SET(SD_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/speed-dreams-2 CACHE PATH "Place where the include files should go") +SET(SD_MANDIR ${CMAKE_INSTALL_MANDIR} CACHE PATH "Place where the manual pages should go") STRING(REGEX REPLACE "^(.*[^/])/*$" "\\1" SD_LOCALDIR_TMP ${SD_LOCALDIR}) SET(SD_LOCALDIR ${SD_LOCALDIR_TMP}) SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}) -SET(CMAKE_INSTALL_RPATH "${SD_LIBDIR_ABS}/lib") +SET(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR}/lib) # Configuration options macros. INCLUDE(${CMAKE_CURRENT_LIST_DIR}/options.cmake) From 7e0f8b111ac26a2c5ac3c4a25787a9f02c65fe9d Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:29:10 +0100 Subject: [PATCH 07/15] cmake: Set CMAKE_INSTALL_RPATH from top-level CMakeLists.txt There is no need to assign this variable every time macros.cmake is included. --- CMakeLists.txt | 5 +++++ cmake/macros.cmake | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 002b2272a..2540bbf76 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,6 +75,11 @@ endif() INCLUDE(cmake/macros.cmake) INCLUDE(cmake/checks.cmake) +set(CMAKE_INSTALL_RPATH + ${CMAKE_INSTALL_RPATH} + ${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR}/lib +) + CHECK_HEADERS_H() CHECK_FUNCTIONS() CHECK_LIBRARIES() diff --git a/cmake/macros.cmake b/cmake/macros.cmake index 44de00bfb..feaf53a7b 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -82,7 +82,6 @@ STRING(REGEX REPLACE "^(.*[^/])/*$" "\\1" SD_LOCALDIR_TMP ${SD_LOCALDIR}) SET(SD_LOCALDIR ${SD_LOCALDIR_TMP}) SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}) -SET(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR}/lib) # Configuration options macros. INCLUDE(${CMAKE_CURRENT_LIST_DIR}/options.cmake) From 90f44af3b1512ec36efb8c389a37d59a8d0f521c Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:30:03 +0100 Subject: [PATCH 08/15] CMakeLists.txt: Use CMAKE_INSTALL_RPATH_USE_LINK_PATH When set, this CMake variable converts the rpath from the build directory to the installation directory. [1] [1]: https://cmake.org/cmake/help/latest/variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH.html --- CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2540bbf76..bb0d608d4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,6 +80,8 @@ set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR}/lib ) +set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + CHECK_HEADERS_H() CHECK_FUNCTIONS() CHECK_LIBRARIES() From 14a19abcc6ebe5625842618c2b2c22843b31adf2 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:39:44 +0100 Subject: [PATCH 09/15] Move CMAKE_MODULE_PATH to top-level CMakeLists.txt There is no need to assign CMAKE_MODULE_PATH every time macros.cmake is included. --- CMakeLists.txt | 2 ++ cmake/macros.cmake | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bb0d608d4..5068971b9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,8 @@ option(SD_ASSUME_DATADIR "Assume default directory for speed-dreams-data") set(data_version 2.3.0) include(GNUInstallDirs) +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}/cmake) + 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) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index feaf53a7b..ee9d44da6 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -81,8 +81,6 @@ SET(SD_MANDIR ${CMAKE_INSTALL_MANDIR} CACHE PATH "Place where the manual pages s STRING(REGEX REPLACE "^(.*[^/])/*$" "\\1" SD_LOCALDIR_TMP ${SD_LOCALDIR}) SET(SD_LOCALDIR ${SD_LOCALDIR_TMP}) -SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_LIST_DIR}) - # Configuration options macros. INCLUDE(${CMAKE_CURRENT_LIST_DIR}/options.cmake) From c5266013fcb6a0095eeab3dde5d8879f4d4a2fbf Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:39:58 +0100 Subject: [PATCH 10/15] cmake: Use CMAKE_CXX_COMPILER_ID SD_BUILD_INFO_COMPILER_NAME is redundant since CMAKE_CXX_COMPILER_ID can already be used for this purpose, even if their values are not identical. --- CMakeLists.txt | 6 ++++++ cmake/config.h.in.cmake | 14 +------------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5068971b9..d51d70780 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -74,6 +74,12 @@ else() message(STATUS "Data directory: ${SD_DATADIR_ABS}") endif() +if(CMAKE_CXX_COMPILER_ID) + set(SD_BUILD_INFO_COMPILER_NAME ${CMAKE_CXX_COMPILER_ID}) +else() + set(SD_BUILD_INFO_COMPILER_NAME "Unknown") +endif() + INCLUDE(cmake/macros.cmake) INCLUDE(cmake/checks.cmake) diff --git a/cmake/config.h.in.cmake b/cmake/config.h.in.cmake index 07781aa14..fc98e1a9f 100755 --- a/cmake/config.h.in.cmake +++ b/cmake/config.h.in.cmake @@ -159,19 +159,7 @@ # define SD_BUILD_INFO_CONFIGURATION "${CMAKE_BUILD_TYPE}" #endif -#if defined(_MSC_VER) -# define SD_BUILD_INFO_COMPILER_NAME "MSC" -#elif defined(__GNUC__) -# if defined(__MINGW32__) -# define SD_BUILD_INFO_COMPILER_NAME "MinGW GCC" -# elif defined(__INTEL_COMPILER) -# define SD_BUILD_INFO_COMPILER_NAME "Intel" -# else -# define SD_BUILD_INFO_COMPILER_NAME "GCC" -# endif -#else -# define SD_BUILD_INFO_COMPILER_NAME "Unknown" -#endif +#define SD_BUILD_INFO_COMPILER_NAME "${SD_BUILD_INFO_COMPILER_NAME}" /* Run-time directories */ #define SD_DATADIR "${SD_DATADIR}/" From e26c923811420a2d8c8d489d67d29a61e161682c Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:40:15 +0100 Subject: [PATCH 11/15] cmake: Remove IN_SOURCETREE config.h is always generated from config.h.in.cmake, so IN_SOURCETREE did not provide any actual value. --- cmake/macros.cmake | 22 +++------------------- cmake/options.cmake | 21 --------------------- cmake/robot.cmake | 6 +----- 3 files changed, 4 insertions(+), 45 deletions(-) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index ee9d44da6..ac71abdea 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -20,11 +20,6 @@ #MESSAGE(STATUS "Processing ${CMAKE_CURRENT_SOURCE_DIR} ...") -# By default, we assume an "in-source" build. -IF(NOT DEFINED IN_SOURCETREE) - SET(IN_SOURCETREE TRUE) -ENDIF(NOT DEFINED IN_SOURCETREE) - # Setup the install prefix. IF(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) IF(WIN32) @@ -41,20 +36,6 @@ IF(NOT _ALREADY_DONE) INCLUDE(${CMAKE_CURRENT_LIST_DIR}/splitargn.cmake) ENDIF(NOT _ALREADY_DONE) -# Include dir for config.h -IF(IN_SOURCETREE) - FIND_PATH(CONFIGH_INCLUDE_DIR config.h PATHS ${SOURCE_DIR} ${CMAKE_BINARY_DIR} NO_DEFAULT_PATH) - FIND_PATH(CONFIGH_INCLUDE_DIR config.h PATHS ${SOURCE_DIR} ${CMAKE_BINARY_DIR}) - MARK_AS_ADVANCED(CONFIGH_INCLUDE_DIR) - IF(CONFIGH_INCLUDE_DIR) - SET(HAVE_CONFIG_H TRUE) - ELSE(CONFIGH_INCLUDE_DIR) - SET(HAVE_CONFIG_H FALSE) - ENDIF(CONFIGH_INCLUDE_DIR) -ELSE(IN_SOURCETREE) - SET(HAVE_CONFIG_H FALSE) -ENDIF(IN_SOURCETREE) - # Determine the default value of the user settings folder. IF(WIN32) SET(SD_LOCALDIR "~/speed-dreams-2.settings" CACHE STRING "Where the user settings files should go") @@ -321,6 +302,9 @@ MACRO(SD_GENERATE_CLOBBER_SCRIPT) ENDMACRO(SD_GENERATE_CLOBBER_SCRIPT) +ADD_COMPILE_DEFINITIONS(HAVE_CONFIG_H) +INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) + # Add non-default compile options. ADD_SD_COMPILE_OPTIONS() diff --git a/cmake/options.cmake b/cmake/options.cmake index 678995129..834c7bdfe 100644 --- a/cmake/options.cmake +++ b/cmake/options.cmake @@ -22,27 +22,6 @@ INCLUDE(CMakeDependentOption) MACRO(ADD_SD_COMPILE_OPTIONS) - # This has to be done more than once, because HAVE_CONFIG_H may change. - IF(HAVE_CONFIG_H) - - ADD_DEFINITIONS(-DHAVE_CONFIG_H) - - IF(IN_SOURCETREE) - SET(INCLUDE_CANDIDATE ${CMAKE_SOURCE_DIR}) - ELSE(IN_SOURCETREE) - SET(INCLUDE_CANDIDATE "") - ENDIF(IN_SOURCETREE) - FIND_PATH(CONFIGH_INCLUDE_DIR config.h ${INCLUDE_CANDIDATE} /usr/include /usr/local/include NO_DEFAULT_PATH) - FIND_PATH(CONFIGH_INCLUDE_DIR config.h ${INCLUDE_CANDIDATE} /usr/include /usr/local/include) - MARK_AS_ADVANCED(CONFIGH_INCLUDE_DIR) - IF(CONFIGH_INCLUDE_DIR) - INCLUDE_DIRECTORIES(${CONFIGH_INCLUDE_DIR}) - ELSE(CONFIGH_INCLUDE_DIR) - MESSAGE(FATAL_ERROR "Cannot find config.h header file") - ENDIF(CONFIGH_INCLUDE_DIR) - - ENDIF(HAVE_CONFIG_H) - # Build options (do it only once). IF(NOT _ALREADY_DONE) diff --git a/cmake/robot.cmake b/cmake/robot.cmake index 74b62f955..875cd61c3 100644 --- a/cmake/robot.cmake +++ b/cmake/robot.cmake @@ -64,11 +64,7 @@ MACRO(GENERATE_ROBOT_DEF_FILE ROBOTNAME DEF_FILE) # Generate the .def file SET(ROBOT_NAME "${ROBOTNAME}") - IF(IN_SOURCETREE) - CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/robot.def.in.cmake ${DEF_FILE}) - ELSE(IN_SOURCETREE) - CONFIGURE_FILE(${SD_DATADIR}/cmake/robot.def.in.cmake ${DEF_FILE}) - ENDIF(IN_SOURCETREE) + CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/cmake/robot.def.in.cmake ${DEF_FILE}) ENDMACRO(GENERATE_ROBOT_DEF_FILE ROBOTNAME DEF_FILE) From 791428f66c4965220295541e4a116c5ce69981e0 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:40:30 +0100 Subject: [PATCH 12/15] cmake: Remove clobber script CMake discourages in-tree builds (i.e., when PROJECT_SOURCE_DIR equals PROJECT_BINARY_DIR), and so is the use of a clobber script for in-tree builds. --- CMakeLists.txt | 5 -- cmake/macros.cmake | 111 --------------------------------------------- 2 files changed, 116 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d51d70780..3488cf277 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,11 +153,6 @@ ENDIF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") # Must be the last ADD_SUBDIRECTORY for FIXUP_BUNDLE to work ADD_SUBDIRECTORY(packaging) -# Generate a 'make clobber'-like clobber.sh/.bat script in case of an in-source build. -IF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") - SD_GENERATE_CLOBBER_SCRIPT() -ENDIF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") - # Add an unistall target. CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall.cmake" "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" IMMEDIATE @ONLY) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index ac71abdea..d12c64d6c 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -191,117 +191,6 @@ MACRO(SD_ADD_LIBRARY TARGET_NAME TARGET_TYPE) ENDMACRO(SD_ADD_LIBRARY TARGET_NAME TARGET_TYPE) - - -# Generate clobber.sh/bat shell script (remove _any_ build system generated file) -MACRO(SD_GENERATE_CLOBBER_SCRIPT) - - IF(MSVC) - - SET(TGT_SCRIPT "${CMAKE_SOURCE_DIR}/clobber.bat") - FILE(WRITE "${TGT_SCRIPT}" "@echo off\n") - FILE(APPEND "${TGT_SCRIPT}" "rem CMake-generated script for in-source build tree total cleanup\n") - FILE(APPEND "${TGT_SCRIPT}" "rem (remove any build-system-generated file (+ .bak, *~, ... etc), \n") - FILE(APPEND "${TGT_SCRIPT}" "rem in case you want to get back to something like\n") - FILE(APPEND "${TGT_SCRIPT}" "rem right after a 'svn checkout' command).\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "rem Check if we are on top of a CMake-enabled SD source tree\n") - FILE(APPEND "${TGT_SCRIPT}" "if not exist CMakeLists.txt goto ERROR\n") - FILE(APPEND "${TGT_SCRIPT}" "if not exist cmake goto ERROR\n") - FILE(APPEND "${TGT_SCRIPT}" "if not exist data goto ERROR\n") - FILE(APPEND "${TGT_SCRIPT}" "if not exist src goto ERROR\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "echo Cleaning up in-source build tree ...\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "rem CMake/compiler generated files and dirs\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "del CMakeCache.txt\n") - FILE(APPEND "${TGT_SCRIPT}" "del CMakeLists.txt.user\n") - FILE(APPEND "${TGT_SCRIPT}" "del config.h\n") - FILE(APPEND "${TGT_SCRIPT}" "del CPackConfig.cmake\n") - FILE(APPEND "${TGT_SCRIPT}" "del CPackSourceConfig.cmake\n") - FILE(APPEND "${TGT_SCRIPT}" "del uninstall.cmake\n") - FILE(APPEND "${TGT_SCRIPT}" "del doxygen_config\n") - FILE(APPEND "${TGT_SCRIPT}" "del install_manifest.txt\n") - FILE(APPEND "${TGT_SCRIPT}" "del speed-dreams-2.ncb\n") - FILE(APPEND "${TGT_SCRIPT}" "del /ah speed-dreams-2.suo\n") - FILE(APPEND "${TGT_SCRIPT}" "del speed-dreams-2.sln\n") - FILE(APPEND "${TGT_SCRIPT}" "del version.h\n") - FILE(APPEND "${TGT_SCRIPT}" "del xmlversion_loc.txt\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q *.vcproj*\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q cmake_install.cmake\n") - FILE(APPEND "${TGT_SCRIPT}" "for /f \"tokens=*\" %%G in ('dir /b /ad /s CMakeFiles*') do rmdir /s /q %%G\n") - FILE(APPEND "${TGT_SCRIPT}" "for /f \"tokens=*\" %%G in ('dir /b /ad /s *.dir') do rmdir /s /q %%G\n") - FILE(APPEND "${TGT_SCRIPT}" "for /f \"tokens=*\" %%G in ('dir /b /ad /s Debug*') do rmdir /s /q %%G\n") - FILE(APPEND "${TGT_SCRIPT}" "for /f \"tokens=*\" %%G in ('dir /b /ad /s Release*') do rmdir /s /q %%G\n") - FILE(APPEND "${TGT_SCRIPT}" "rmdir /s /q _CPack_Packages\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "rem Other useless files\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q *.*~\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q *.~*\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q *.bak\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q *.flc\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q *.orig\n") - FILE(APPEND "${TGT_SCRIPT}" "del /s /q *.cbp\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "echo Done.\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "goto END\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" ":ERROR\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "echo Bad current dir for that ; please run from the root folder of a CMake-enabled SD source tree.\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" ":END\n") - - ELSE(MSVC) - - SET(TGT_SCRIPT "${CMAKE_SOURCE_DIR}/clobber.sh") - FILE(WRITE "${TGT_SCRIPT}" "#!/bin/sh\n") - FILE(APPEND "${TGT_SCRIPT}" "# CMake-generated script for in-source build tree total cleanup\n") - FILE(APPEND "${TGT_SCRIPT}" "# (remove any build-system-generated file (+ .bak, *~, ... etc), \n") - FILE(APPEND "${TGT_SCRIPT}" "# in case you want to get back to something like\n") - FILE(APPEND "${TGT_SCRIPT}" "# right after a 'svn checkout' command).\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" "# Check if we are on top of a CMake-enabled SD source tree\n") - FILE(APPEND "${TGT_SCRIPT}" "if [ -f CMakeLists.txt -a -d cmake -a -d data -a -d src ] ; then\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" " echo \"Cleaning up in-source build tree ...\"\n") - FILE(APPEND "${TGT_SCRIPT}" " \n") - FILE(APPEND "${TGT_SCRIPT}" " # CMake/compiler generated files and dirs\n") - FILE(APPEND "${TGT_SCRIPT}" " rm -f CMakeCache.txt CMakeLists.txt.user config.h doxygen_config\n") - FILE(APPEND "${TGT_SCRIPT}" " rm -f CPackConfig.cmake CPackSourceConfig.cmake\n") - FILE(APPEND "${TGT_SCRIPT}" " rm -f uninstall.cmake\n") - FILE(APPEND "${TGT_SCRIPT}" " rm -f xmlversion_loc.txt install_manifest.txt version.h.txt\n") - FILE(APPEND "${TGT_SCRIPT}" " rm -fr _CPack_Packages\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -depth -type d -name \"CMakeFiles\" -exec rm -fr {} \\;\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"cmake_install.cmake\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"Makefile\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.so\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find src/tools -type f -name \"sd2-*\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find src/tools/xmlversion -type f -name \"xmlversion\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find src/main -type f -name \"speed-dreams-2\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" "\n") - FILE(APPEND "${TGT_SCRIPT}" " # Other useless files\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.rej\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.orig\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.flc\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.bak\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.cbp\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.a\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*~\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " find . -type f -name \"*.~*\" -delete\n") - FILE(APPEND "${TGT_SCRIPT}" " \n") - FILE(APPEND "${TGT_SCRIPT}" " echo \"Done.\"\n") - FILE(APPEND "${TGT_SCRIPT}" " \n") - FILE(APPEND "${TGT_SCRIPT}" "else\n") - FILE(APPEND "${TGT_SCRIPT}" " echo \"Bad current dir for that ; please run from the root folder of a CMake-enabled SD source tree.\"\n") - FILE(APPEND "${TGT_SCRIPT}" "fi\n") - EXECUTE_PROCESS(COMMAND chmod ugo+x ${TGT_SCRIPT}) - ENDIF(MSVC) - -ENDMACRO(SD_GENERATE_CLOBBER_SCRIPT) - ADD_COMPILE_DEFINITIONS(HAVE_CONFIG_H) INCLUDE_DIRECTORIES(${CMAKE_BINARY_DIR}) From 195f223d5fe572ec0b7ba5e3124e681aea54b288 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:40:47 +0100 Subject: [PATCH 13/15] Remove cmake/uninstall.cmake Having an uninstall target is unjustified extra maintenance burden for no benefit. Instead, it is recommended to install to a CMAKE_INSTALL_PREFIX that the user can easily remove e.g.: by deleting a directory as a non-privileged user. --- CMakeLists.txt | 10 ---------- cmake/uninstall.cmake | 20 -------------------- 2 files changed, 30 deletions(-) delete mode 100755 cmake/uninstall.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 3488cf277..07c6b29dd 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -153,16 +153,6 @@ ENDIF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") # Must be the last ADD_SUBDIRECTORY for FIXUP_BUNDLE to work ADD_SUBDIRECTORY(packaging) -# Add an unistall target. -CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/cmake/uninstall.cmake" - "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" IMMEDIATE @ONLY) -IF(MSVC) - SET(_UNINST_TGT_NAME "UNINSTALL") -ELSE(MSVC) - SET(_UNINST_TGT_NAME "uninstall") -ENDIF(MSVC) -ADD_CUSTOM_TARGET(${_UNINST_TGT_NAME} "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/uninstall.cmake" ) - IF(OPTION_CHECK_CONTENTS) INCLUDE(cmake/prerelease.cmake) ENDIF(OPTION_CHECK_CONTENTS) diff --git a/cmake/uninstall.cmake b/cmake/uninstall.cmake deleted file mode 100755 index 7201d538c..000000000 --- a/cmake/uninstall.cmake +++ /dev/null @@ -1,20 +0,0 @@ -# CMake script behind the 'uninstall' target. - -IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") -ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") - -FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" FILES_TO_REMOVE) -STRING(REGEX REPLACE "\n" ";" FILES_TO_REMOVE "${FILES_TO_REMOVE}") -FOREACH(FILE_TO_REMOVE ${FILES_TO_REMOVE}) - MESSAGE(STATUS "Uninstalling: $ENV{DESTDIR}${FILE_TO_REMOVE}") - IF(EXISTS "$ENV{DESTDIR}${FILE_TO_REMOVE}") - EXEC_PROGRAM("@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${FILE_TO_REMOVE}\"" - OUTPUT_VARIABLE RM_OUT RETURN_VALUE RM_RETVAL) - IF(NOT "${RM_RETVAL}" STREQUAL "0") - MESSAGE(FATAL_ERROR "Failed to remove $ENV{DESTDIR}${FILE_TO_REMOVE} (err code ${RM_RETVAL})") - ENDIF(NOT "${RM_RETVAL}" STREQUAL "0") - ELSE(EXISTS "$ENV{DESTDIR}${FILE_TO_REMOVE}") - MESSAGE(STATUS "File \"$ENV{DESTDIR}${FILE_TO_REMOVE}\" does not exist.") - ENDIF(EXISTS "$ENV{DESTDIR}${FILE_TO_REMOVE}") -ENDFOREACH(FILE_TO_REMOVE) From 6df4b6bf98300eae32cb0793fbd4a07f74313e45 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:41:04 +0100 Subject: [PATCH 14/15] CMakeLists.txt: Assume CMAKE_INSTALL_RPATH for packaging CPack does not install to CMAKE_INSTALL_PREFIX, but CPACK_PACKAGING_INSTALL_PREFIX. However, the executables' rpath would still be configured for ${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR}/lib instead of ${CPACK_PACKAGING_INSTALL_PREFIX}/${SD_LIBDIR}/lib, making executables to fail to find their respective shared libraries. Unfortunately, CPACK_PACKAGING_INSTALL_PREFIX is not defined by CMake, but CPack, so it is not available from this context, so this commit assumes its default value. [1] [1]: https://cmake.org/cmake/help/latest/variable/CPACK_PACKAGING_INSTALL_PREFIX.html --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 07c6b29dd..9846d054c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -86,6 +86,7 @@ INCLUDE(cmake/checks.cmake) set(CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_RPATH} ${CMAKE_INSTALL_PREFIX}/${SD_LIBDIR}/lib + /usr/${SD_LIBDIR}/lib ) set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) From 48bea8cf25ffe2229f01c7a80cd78dfc62f606b6 Mon Sep 17 00:00:00 2001 From: Xavier Del Campo Romero Date: Fri, 17 Jan 2025 06:46:19 +0100 Subject: [PATCH 15/15] CMakeLists.txt: Remove reference to INSTALL_SD_CMAKE This macro had already been removed by the commit below. Moreover, in-tree builds are discouraged by CMake. commit cf18241a16f4507a94b64cd6126d31c6be915245 Author: Xavier Del Campo Romero Date: Sat Dec 28 14:13:38 2024 +0100 cmake: Get SD_DATADIR from speed-dreams-data package --- CMakeLists.txt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9846d054c..8831e210d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -144,13 +144,6 @@ IF(MSVC) INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc/userman/images/ DESTINATION ./doc/images/) ENDIF(MSVC) - -# Useful for using an installation of SD as a robot development framework without building it. -# Only do for an in source tree build as INSTALL_SD_CMAKE() doesn't seem to use CMAKE_INSTALL_PREFIX -IF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") - INSTALL_SD_CMAKE() -ENDIF("${PROJECT_SOURCE_DIR}" STREQUAL "${PROJECT_BINARY_DIR}") - # Must be the last ADD_SUBDIRECTORY for FIXUP_BUNDLE to work ADD_SUBDIRECTORY(packaging)