From edeae704f90118bc2aafa91e2835d58e854228bb Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 24 Feb 2019 15:49:05 +0100 Subject: [PATCH 01/14] Use base dir instead of working dir for data files --- CMakeLists.txt | 8 ++++++++ src/common/config.h.cmake | 4 ++-- src/common/system/system.cpp | 5 +++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 887cf06d..797b29aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -370,24 +370,32 @@ if(PORTABLE OR (PLATFORM_WINDOWS AND MXE)) # We need to use STRING because PATH doesn't accept relative paths set(COLOBOT_INSTALL_BIN_DIR ./ CACHE STRING "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ./ CACHE STRING "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR data CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR lang CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ./data CACHE STRING "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ./lang CACHE STRING "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ./doc CACHE STRING "Colobot documentation directory") elseif(PLATFORM_WINDOWS) set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR data CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR lang CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/data CACHE PATH "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE PATH "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE PATH "Colobot documentation directory") elseif(PLATFORM_MACOSX) set(COLOBOT_INSTALL_BIN_DIR ../MacOS CACHE STRING "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ../MacOS CACHE STRING "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR . CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR i18n CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR . CACHE STRING "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR i18n CACHE SRING "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR doc CACHE STRING "Colobot documentation directory") else() set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/games CACHE PATH "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/colobot CACHE PATH "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR ../share/games/colobot CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR ../share/locale CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/games/colobot CACHE PATH "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/share/locale CACHE PATH "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory") diff --git a/src/common/config.h.cmake b/src/common/config.h.cmake index f6d0bcae..6100d7dc 100644 --- a/src/common/config.h.cmake +++ b/src/common/config.h.cmake @@ -18,5 +18,5 @@ #cmakedefine PORTABLE_SAVES @PORTABLE_SAVES@ -#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_INSTALL_DATA_DIR@" -#define COLOBOT_I18N_DIR "@COLOBOT_INSTALL_I18N_DIR@" +#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_RELATIVE_DATA_DIR@" +#define COLOBOT_I18N_DIR "@COLOBOT_RELATIVE_I18N_DIR@" diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index 12dc1d36..efec405b 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -36,6 +36,7 @@ #include #include +#include std::unique_ptr CSystemUtils::Create() { @@ -178,12 +179,12 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte std::string CSystemUtils::GetDataPath() { - return COLOBOT_DEFAULT_DATADIR; + return std::string{PHYSFS_getBaseDir()} + COLOBOT_DEFAULT_DATADIR; } std::string CSystemUtils::GetLangPath() { - return COLOBOT_I18N_DIR; + return std::string{PHYSFS_getBaseDir()} + COLOBOT_I18N_DIR; } std::string CSystemUtils::GetSaveDir() From 7268bcca1109e760589e16b32aa50415f3e47d8c Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 24 Feb 2019 17:16:54 +0100 Subject: [PATCH 02/14] Use workdir paths on dev builds --- src/common/system/system.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index efec405b..2ef642ab 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -179,12 +179,20 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte std::string CSystemUtils::GetDataPath() { +#if DEV_BUILD + return std::string{"./"} + COLOBOT_DEFAULT_DATADIR; +#else return std::string{PHYSFS_getBaseDir()} + COLOBOT_DEFAULT_DATADIR; +#endif } std::string CSystemUtils::GetLangPath() { +#if DEV_BUILD + return std::string{"./"} + COLOBOT_I18N_DIR; +#else return std::string{PHYSFS_getBaseDir()} + COLOBOT_I18N_DIR; +#endif } std::string CSystemUtils::GetSaveDir() From 266944c9d27b4bf2458feb4de4c5403fb9f38858 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Mon, 25 Feb 2019 23:00:05 +0100 Subject: [PATCH 03/14] Use SDL_GetBasePath() instead of physfs because it's buggy in old version --- src/common/system/system.cpp | 13 ++++++++++--- src/common/system/system.h | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index 2ef642ab..c1886852 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include std::unique_ptr CSystemUtils::Create() { @@ -177,12 +177,19 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte return result; } +std::string CSystemUtils::GetBasePath() +{ + if (m_basePath.empty()) + m_basePath = SDL_GetBasePath(); + return m_basePath; +} + std::string CSystemUtils::GetDataPath() { #if DEV_BUILD return std::string{"./"} + COLOBOT_DEFAULT_DATADIR; #else - return std::string{PHYSFS_getBaseDir()} + COLOBOT_DEFAULT_DATADIR; + return GetBasePath() + COLOBOT_DEFAULT_DATADIR; #endif } @@ -191,7 +198,7 @@ std::string CSystemUtils::GetLangPath() #if DEV_BUILD return std::string{"./"} + COLOBOT_I18N_DIR; #else - return std::string{PHYSFS_getBaseDir()} + COLOBOT_I18N_DIR; + return GetBasePath() + COLOBOT_I18N_DIR; #endif } diff --git a/src/common/system/system.h b/src/common/system/system.h index 36e736c9..7912f27a 100644 --- a/src/common/system/system.h +++ b/src/common/system/system.h @@ -127,6 +127,9 @@ public: /** The difference is \a after - \a before. */ virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) = 0; + //! Returns the path where the executable binary is located + virtual std::string GetBasePath(); + //! Returns the data path (containing textures, levels, helpfiles, etc) virtual std::string GetDataPath(); @@ -140,5 +143,6 @@ public: virtual void Usleep(int usecs) = 0; private: + std::string m_basePath; std::vector> m_timeStamps; }; From 472aadf9ab3339ef069757600e6d277d953d936f Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Mon, 25 Feb 2019 23:42:34 +0100 Subject: [PATCH 04/14] Fix minor memory leak --- src/common/system/system.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index c1886852..0b8001a1 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -180,7 +180,11 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte std::string CSystemUtils::GetBasePath() { if (m_basePath.empty()) - m_basePath = SDL_GetBasePath(); + { + auto* path = SDL_GetBasePath(); + m_basePath = path; + SDL_free(path); + } return m_basePath; } From 5cefa57dd5088193a8c28c2078444096f7e3ef15 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 24 Feb 2019 15:49:05 +0100 Subject: [PATCH 05/14] Use base dir instead of working dir for data files --- CMakeLists.txt | 8 ++++++++ src/common/config.h.cmake | 4 ++-- src/common/system/system.cpp | 5 +++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ba6cd2d9..031971af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -394,24 +394,32 @@ if(PORTABLE OR (PLATFORM_WINDOWS AND MXE)) # We need to use STRING because PATH doesn't accept relative paths set(COLOBOT_INSTALL_BIN_DIR ./ CACHE STRING "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ./ CACHE STRING "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR data CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR lang CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ./data CACHE STRING "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ./lang CACHE STRING "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ./doc CACHE STRING "Colobot documentation directory") elseif(PLATFORM_WINDOWS) set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR data CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR lang CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/data CACHE PATH "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE PATH "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE PATH "Colobot documentation directory") elseif(PLATFORM_MACOSX) set(COLOBOT_INSTALL_BIN_DIR ../MacOS CACHE STRING "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ../MacOS CACHE STRING "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR . CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR i18n CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR . CACHE STRING "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR i18n CACHE SRING "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR doc CACHE STRING "Colobot documentation directory") else() set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/games CACHE PATH "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/colobot CACHE PATH "Colobot libraries directory") + set(COLOBOT_RELATIVE_DATA_DIR ../share/games/colobot CACHE STRING "Colobot shared data directory (relative)") + set(COLOBOT_RELATIVE_I18N_DIR ../share/locale CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/games/colobot CACHE PATH "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/share/locale CACHE PATH "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory") diff --git a/src/common/config.h.cmake b/src/common/config.h.cmake index f6d0bcae..6100d7dc 100644 --- a/src/common/config.h.cmake +++ b/src/common/config.h.cmake @@ -18,5 +18,5 @@ #cmakedefine PORTABLE_SAVES @PORTABLE_SAVES@ -#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_INSTALL_DATA_DIR@" -#define COLOBOT_I18N_DIR "@COLOBOT_INSTALL_I18N_DIR@" +#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_RELATIVE_DATA_DIR@" +#define COLOBOT_I18N_DIR "@COLOBOT_RELATIVE_I18N_DIR@" diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index 12dc1d36..efec405b 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -36,6 +36,7 @@ #include #include +#include std::unique_ptr CSystemUtils::Create() { @@ -178,12 +179,12 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte std::string CSystemUtils::GetDataPath() { - return COLOBOT_DEFAULT_DATADIR; + return std::string{PHYSFS_getBaseDir()} + COLOBOT_DEFAULT_DATADIR; } std::string CSystemUtils::GetLangPath() { - return COLOBOT_I18N_DIR; + return std::string{PHYSFS_getBaseDir()} + COLOBOT_I18N_DIR; } std::string CSystemUtils::GetSaveDir() From 41379ded7ef8ffadaf829e338ddbc13137282682 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 24 Feb 2019 17:16:54 +0100 Subject: [PATCH 06/14] Use workdir paths on dev builds --- src/common/system/system.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index efec405b..2ef642ab 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -179,12 +179,20 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte std::string CSystemUtils::GetDataPath() { +#if DEV_BUILD + return std::string{"./"} + COLOBOT_DEFAULT_DATADIR; +#else return std::string{PHYSFS_getBaseDir()} + COLOBOT_DEFAULT_DATADIR; +#endif } std::string CSystemUtils::GetLangPath() { +#if DEV_BUILD + return std::string{"./"} + COLOBOT_I18N_DIR; +#else return std::string{PHYSFS_getBaseDir()} + COLOBOT_I18N_DIR; +#endif } std::string CSystemUtils::GetSaveDir() From 2d3d03cc382674e2396eed6d111818316639793c Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Mon, 25 Feb 2019 23:00:05 +0100 Subject: [PATCH 07/14] Use SDL_GetBasePath() instead of physfs because it's buggy in old version --- src/common/system/system.cpp | 13 ++++++++++--- src/common/system/system.h | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index 2ef642ab..c1886852 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include std::unique_ptr CSystemUtils::Create() { @@ -177,12 +177,19 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte return result; } +std::string CSystemUtils::GetBasePath() +{ + if (m_basePath.empty()) + m_basePath = SDL_GetBasePath(); + return m_basePath; +} + std::string CSystemUtils::GetDataPath() { #if DEV_BUILD return std::string{"./"} + COLOBOT_DEFAULT_DATADIR; #else - return std::string{PHYSFS_getBaseDir()} + COLOBOT_DEFAULT_DATADIR; + return GetBasePath() + COLOBOT_DEFAULT_DATADIR; #endif } @@ -191,7 +198,7 @@ std::string CSystemUtils::GetLangPath() #if DEV_BUILD return std::string{"./"} + COLOBOT_I18N_DIR; #else - return std::string{PHYSFS_getBaseDir()} + COLOBOT_I18N_DIR; + return GetBasePath() + COLOBOT_I18N_DIR; #endif } diff --git a/src/common/system/system.h b/src/common/system/system.h index 36e736c9..7912f27a 100644 --- a/src/common/system/system.h +++ b/src/common/system/system.h @@ -127,6 +127,9 @@ public: /** The difference is \a after - \a before. */ virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) = 0; + //! Returns the path where the executable binary is located + virtual std::string GetBasePath(); + //! Returns the data path (containing textures, levels, helpfiles, etc) virtual std::string GetDataPath(); @@ -140,5 +143,6 @@ public: virtual void Usleep(int usecs) = 0; private: + std::string m_basePath; std::vector> m_timeStamps; }; From 61a7aa2592af45a03b6dec7920d4c49bcf36dfbe Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Mon, 25 Feb 2019 23:42:34 +0100 Subject: [PATCH 08/14] Fix minor memory leak --- src/common/system/system.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index c1886852..0b8001a1 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -180,7 +180,11 @@ float CSystemUtils::TimeStampDiff(SystemTimeStamp *before, SystemTimeStamp *afte std::string CSystemUtils::GetBasePath() { if (m_basePath.empty()) - m_basePath = SDL_GetBasePath(); + { + auto* path = SDL_GetBasePath(); + m_basePath = path; + SDL_free(path); + } return m_basePath; } From d4b2f23c4aae83b83d3bda66ebf4eee2339e3ac5 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Fri, 3 Apr 2020 20:15:24 +0200 Subject: [PATCH 09/14] Add handling of env variables --- src/app/app.cpp | 29 +++++++++++++++++++++++++++- src/app/app.h | 4 +++- src/app/main.cpp | 2 ++ src/app/pathman.cpp | 6 +++++- src/common/system/system.cpp | 5 +++++ src/common/system/system.h | 3 +++ src/common/system/system_linux.cpp | 12 ++++++++++++ src/common/system/system_linux.h | 2 ++ src/common/system/system_macosx.cpp | 6 ++++++ src/common/system/system_macosx.h | 2 ++ src/common/system/system_windows.cpp | 16 +++++++++++++++ src/common/system/system_windows.h | 2 ++ 12 files changed, 86 insertions(+), 3 deletions(-) diff --git a/src/app/app.cpp b/src/app/app.cpp index 6f864572..94b6319e 100644 --- a/src/app/app.cpp +++ b/src/app/app.cpp @@ -220,6 +220,30 @@ CSoundInterface* CApplication::GetSound() return m_sound.get(); } +void CApplication::LoadEnvironmentVariables() +{ + auto dataDir = m_systemUtils->GetEnvVar("COLOBOT_DATA_DIR"); + if (!dataDir.empty()) + { + m_pathManager->SetDataPath(dataDir); + GetLogger()->Info("Using data dir (based on environment variable): '%s'\n", dataDir.c_str()); + } + + auto langDir = m_systemUtils->GetEnvVar("COLOBOT_LANG_DIR"); + if (!langDir.empty()) + { + m_pathManager->SetLangPath(langDir); + GetLogger()->Info("Using lang dir (based on environment variable): '%s'\n", langDir.c_str()); + } + + auto saveDir = m_systemUtils->GetEnvVar("COLOBOT_SAVE_DIR"); + if (!saveDir.empty()) + { + m_pathManager->SetSavePath(saveDir); + GetLogger()->Info("Using save dir (based on environment variable): '%s'\n", saveDir.c_str()); + } +} + ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[]) { enum OptionType @@ -286,15 +310,18 @@ ParseArgsStatus CApplication::ParseArguments(int argc, char *argv[]) GetLogger()->Message("\n"); GetLogger()->Message("%s\n", COLOBOT_FULLNAME); GetLogger()->Message("\n"); - GetLogger()->Message("List of available options:\n"); + GetLogger()->Message("List of available options and environment variables:\n"); GetLogger()->Message(" -help this help\n"); GetLogger()->Message(" -debug modes enable debug modes (more info printed in logs; see code for reference of modes)\n"); GetLogger()->Message(" -runscene sceneNNN run given scene on start\n"); GetLogger()->Message(" -scenetest win every mission right after it's loaded\n"); GetLogger()->Message(" -loglevel level set log level to level (one of: trace, debug, info, warn, error, none)\n"); GetLogger()->Message(" -langdir path set custom language directory path\n"); + GetLogger()->Message(" environment variable: COLOBOT_LANG_DIR\n"); GetLogger()->Message(" -datadir path set custom data directory path\n"); + GetLogger()->Message(" environment variable: COLOBOT_DATA_DIR\n"); GetLogger()->Message(" -savedir path set custom save directory path (must be writable)\n"); + GetLogger()->Message(" environment variable: COLOBOT_SAVE_DIR\n"); GetLogger()->Message(" -mod path load datadir mod from given path\n"); GetLogger()->Message(" -resolution WxH set resolution\n"); GetLogger()->Message(" -headless headless mode - disables graphics, sound and user interaction\n"); diff --git a/src/app/app.h b/src/app/app.h index ccae3a5c..0c7f6388 100644 --- a/src/app/app.h +++ b/src/app/app.h @@ -164,7 +164,9 @@ public: CSoundInterface* GetSound(); public: - //! Parses commandline arguments + //! Loads some data from environment variables + void LoadEnvironmentVariables(); + //! Parses commandline arguments (they take priority) ParseArgsStatus ParseArguments(int argc, char *argv[]); //! Initializes the application bool Create(); diff --git a/src/app/main.cpp b/src/app/main.cpp index 9fdb89a3..af0fc99a 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -172,6 +172,8 @@ int main(int argc, char *argv[]) int code = 0; CApplication app(systemUtils.get()); // single instance of the application + app.LoadEnvironmentVariables(); + ParseArgsStatus status = app.ParseArguments(argc, argv); if (status == PARSE_ARGS_FAIL) { diff --git a/src/app/pathman.cpp b/src/app/pathman.cpp index 60715ac1..954fcc4e 100644 --- a/src/app/pathman.cpp +++ b/src/app/pathman.cpp @@ -41,7 +41,7 @@ CPathManager::CPathManager(CSystemUtils* systemUtils) : m_dataPath(systemUtils->GetDataPath()) , m_langPath(systemUtils->GetLangPath()) , m_savePath(systemUtils->GetSaveDir()) - , m_modAutoloadDir{ m_dataPath + "/mods", m_savePath + "/mods" } + , m_modAutoloadDir{} , m_mods{} { } @@ -130,6 +130,10 @@ void CPathManager::InitPaths() { GetLogger()->Info("Data path: %s\n", m_dataPath.c_str()); GetLogger()->Info("Save path: %s\n", m_savePath.c_str()); + + m_modAutoloadDir.push_back(m_dataPath + "/mods"); + m_modAutoloadDir.push_back(m_savePath + "/mods"); + if (!m_modAutoloadDir.empty()) { GetLogger()->Info("Mod autoload dirs:\n"); diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index 0b8001a1..b22d0771 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -210,3 +210,8 @@ std::string CSystemUtils::GetSaveDir() { return "./saves"; } + +std::string CSystemUtils::GetEnvVar(const std::string& str) +{ + return std::string(); +} diff --git a/src/common/system/system.h b/src/common/system/system.h index 7912f27a..431ddd41 100644 --- a/src/common/system/system.h +++ b/src/common/system/system.h @@ -139,6 +139,9 @@ public: //! Returns the save dir location virtual std::string GetSaveDir(); + //! Returns environment variable + virtual std::string GetEnvVar(const std::string &str); + //! Sleep for given amount of microseconds virtual void Usleep(int usecs) = 0; diff --git a/src/common/system/system_linux.cpp b/src/common/system/system_linux.cpp index 9bfe431a..b71befe5 100644 --- a/src/common/system/system_linux.cpp +++ b/src/common/system/system_linux.cpp @@ -126,6 +126,18 @@ std::string CSystemUtilsLinux::GetSaveDir() #endif } +std::string CSystemUtilsLinux::GetEnvVar(const std::string& name) +{ + char* envVar = getenv(name.c_str()); + if (envVar != nullptr) + { + + GetLogger()->Trace("Detected environment variable %s = %s\n", name.c_str(), envVar); + return std::string(envVar); + } + return ""; +} + void CSystemUtilsLinux::Usleep(int usec) { usleep(usec); diff --git a/src/common/system/system_linux.h b/src/common/system/system_linux.h index f1576f31..c4de2c7f 100644 --- a/src/common/system/system_linux.h +++ b/src/common/system/system_linux.h @@ -45,6 +45,8 @@ public: std::string GetSaveDir() override; + std::string GetEnvVar(const std::string& name) override; + void Usleep(int usec) override; private: diff --git a/src/common/system/system_macosx.cpp b/src/common/system/system_macosx.cpp index 9ef7ce1d..8a537e11 100644 --- a/src/common/system/system_macosx.cpp +++ b/src/common/system/system_macosx.cpp @@ -113,6 +113,12 @@ std::string CSystemUtilsMacOSX::GetSaveDir() #endif } +std::string CSystemUtilsMacOSX::GetEnvVar(const std::string& str) +{ + // TODO: I have no Mac + return std::string(); +} + void CSystemUtilsMacOSX::Usleep(int usec) { usleep(usec); diff --git a/src/common/system/system_macosx.h b/src/common/system/system_macosx.h index 5b572ec4..708d26fc 100644 --- a/src/common/system/system_macosx.h +++ b/src/common/system/system_macosx.h @@ -36,6 +36,8 @@ public: std::string GetLangPath() override; std::string GetSaveDir() override; + std::string GetEnvVar(const std::string& str) override; + void Usleep(int usec) override; private: diff --git a/src/common/system/system_windows.cpp b/src/common/system/system_windows.cpp index a20bfcf1..5254db83 100644 --- a/src/common/system/system_windows.cpp +++ b/src/common/system/system_windows.cpp @@ -131,6 +131,22 @@ std::string CSystemUtilsWindows::GetSaveDir() #endif } +std::string CSystemUtilsWindows::GetEnvVar(const std::string& name) +{ + std::wstring wname(name.begin(), name.end()); + wchar_t* envVar = _wgetenv(wname.c_str()); + if (envVar == nullptr) + { + return ""; + } + else + { + std::string var = UTF8_Encode(std::wstring(envVar)); + GetLogger()->Trace("Detected environment variable %s = %s\n", name.c_str(), var.c_str()); + return var; + } +} + void CSystemUtilsWindows::Usleep(int usec) { LARGE_INTEGER ft; diff --git a/src/common/system/system_windows.h b/src/common/system/system_windows.h index 74f02455..05f3c910 100644 --- a/src/common/system/system_windows.h +++ b/src/common/system/system_windows.h @@ -43,6 +43,8 @@ public: std::string GetSaveDir() override; + std::string GetEnvVar(const std::string& name) override; + void Usleep(int usec) override; public: From 8f122d66031c1c590b4d18abe8971e29f8184d04 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Fri, 3 Apr 2020 20:18:14 +0200 Subject: [PATCH 10/14] Fix MSVC compilation (again) --- CMakeLists.txt | 2 +- src/CBot/CBotInstr/CBotExprLitString.cpp | 2 ++ src/CMakeLists.txt | 5 +++++ 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 031971af..06fbdd22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,7 +198,7 @@ elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") add_definitions(-DNOEXCEPT= -DHAS_MSVC_EXCEPTION_BUG) # Needed for Debug information (it's set to "No" by default for some reason) - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS} /DEBUG /NODEFAULTLIB:MSVCRTD /NODEFAULTLIB:LIBCMT") set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS} /DEBUG") else() message(FATAL_ERROR "Your C++ compiler doesn't seem to be supported.") diff --git a/src/CBot/CBotInstr/CBotExprLitString.cpp b/src/CBot/CBotInstr/CBotExprLitString.cpp index 72cca72b..fd8ca73f 100644 --- a/src/CBot/CBotInstr/CBotExprLitString.cpp +++ b/src/CBot/CBotInstr/CBotExprLitString.cpp @@ -24,6 +24,8 @@ #include "CBot/CBotVar/CBotVar.h" +#include + namespace CBot { diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7f75a7e1..7df4c47f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -66,6 +66,8 @@ elseif(PLATFORM_WINDOWS) find_library(WEBP_LIBRARY NAMES webp.lib) find_library(LZMA_LIBRARY NAMES lzma.lib) find_library(FREETYPE_LIBRARY NAMES freetype.lib) + find_library(ICONV_LIBRARY NAMES libiconv.lib) + find_library(CHARSET_LIBRARY NAMES libcharset.lib) set(MSVC_LIBS ${LIBINTL_LIBRARY} ${OPENAL_MSVC_LIBS} @@ -75,6 +77,8 @@ elseif(PLATFORM_WINDOWS) ${WEBP_LIBRARY} ${LZMA_LIBRARY} ${FREETYPE_LIBRARY} + ${ICONV_LIBRARY} + ${CHARSET_LIBRARY} winmm.lib dxguid.lib imm32.lib @@ -83,6 +87,7 @@ elseif(PLATFORM_WINDOWS) version.lib wsock32.lib ws2_32.lib + setupapi.lib ) else(${MSVC_STATIC}) set(MSVC_LIBS ${LIBINTL_LIBRARY}) From 621453a01c51f84bc7b20ea9b20a05764fd6a29e Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 5 Apr 2020 13:24:45 +0200 Subject: [PATCH 11/14] Make all relative paths use base dir --- CMakeLists.txt | 36 +++++++++++++++++----------- src/common/config.h.cmake | 4 ++-- src/common/system/system.cpp | 18 +++++++------- src/common/system/system.h | 6 ++--- src/common/system/system_linux.cpp | 17 +++++++------ src/common/system/system_macosx.h | 2 +- src/common/system/system_windows.cpp | 10 ++++---- 7 files changed, 50 insertions(+), 43 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 06fbdd22..28b0c84f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -230,7 +230,10 @@ option(DEV_BUILD "Enable development build (enables some debugging tools, local # PLEASE DO NOT USE ON UNOFFICIAL BUILDS. Thanks. option(OFFICIAL_COLOBOT_BUILD "Official build (changes crash screen text)" OFF) -# Portable build - load all data from current directory +# Hardcode relative paths instead of absolute paths +option(USE_RELATIVE_PATHS "Generate relative paths from absolute paths" OFF) + +# Portable build - load all data from the base directory option(PORTABLE "Portable build" OFF) # Portable saves - suitable for e.g. putting the whole game on external storage and moving your saves with it @@ -392,39 +395,44 @@ endif() # Installation paths defined before compiling sources if(PORTABLE OR (PLATFORM_WINDOWS AND MXE)) # We need to use STRING because PATH doesn't accept relative paths - set(COLOBOT_INSTALL_BIN_DIR ./ CACHE STRING "Colobot binary directory") - set(COLOBOT_INSTALL_LIB_DIR ./ CACHE STRING "Colobot libraries directory") - set(COLOBOT_RELATIVE_DATA_DIR data CACHE STRING "Colobot shared data directory (relative)") - set(COLOBOT_RELATIVE_I18N_DIR lang CACHE STRING "Colobot translations directory (relative)") - set(COLOBOT_INSTALL_DATA_DIR ./data CACHE STRING "Colobot shared data directory") - set(COLOBOT_INSTALL_I18N_DIR ./lang CACHE STRING "Colobot translations directory") - set(COLOBOT_INSTALL_DOC_DIR ./doc CACHE STRING "Colobot documentation directory") + set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE STRING "Colobot binary directory") + set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE STRING "Colobot libraries directory") + set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/data CACHE STRING "Colobot shared data directory") + set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE STRING "Colobot translations directory") + set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE STRING "Colobot documentation directory") + set(USE_RELATIVE_PATHS ON) elseif(PLATFORM_WINDOWS) set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot libraries directory") - set(COLOBOT_RELATIVE_DATA_DIR data CACHE STRING "Colobot shared data directory (relative)") - set(COLOBOT_RELATIVE_I18N_DIR lang CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/data CACHE PATH "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE PATH "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE PATH "Colobot documentation directory") elseif(PLATFORM_MACOSX) set(COLOBOT_INSTALL_BIN_DIR ../MacOS CACHE STRING "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ../MacOS CACHE STRING "Colobot libraries directory") - set(COLOBOT_RELATIVE_DATA_DIR . CACHE STRING "Colobot shared data directory (relative)") - set(COLOBOT_RELATIVE_I18N_DIR i18n CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR . CACHE STRING "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR i18n CACHE SRING "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR doc CACHE STRING "Colobot documentation directory") else() set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/games CACHE PATH "Colobot binary directory") set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/lib/colobot CACHE PATH "Colobot libraries directory") - set(COLOBOT_RELATIVE_DATA_DIR ../share/games/colobot CACHE STRING "Colobot shared data directory (relative)") - set(COLOBOT_RELATIVE_I18N_DIR ../share/locale CACHE STRING "Colobot translations directory (relative)") set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/share/games/colobot CACHE PATH "Colobot shared data directory") set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/share/locale CACHE PATH "Colobot translations directory") set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/share/doc/colobot CACHE PATH "Colobot documentation directory") endif() +# Generate relative paths from absolute paths +if(USE_RELATIVE_PATHS) + message(STATUS "Generating relative paths") + file(RELATIVE_PATH COLOBOT_DATA_DIR ${COLOBOT_INSTALL_BIN_DIR} ${COLOBOT_INSTALL_DATA_DIR}) + file(RELATIVE_PATH COLOBOT_I18N_DIR ${COLOBOT_INSTALL_BIN_DIR} ${COLOBOT_INSTALL_I18N_DIR}) + + add_definitions(-DUSE_RELATIVE_PATHS) +else() + set(COLOBOT_DATA_DIR ${COLOBOT_INSTALL_DATA_DIR}) + set(COLOBOT_I18N_DIR ${COLOBOT_INSTALL_I18N_DIR}) +endif() + # Subdirectory with sources add_subdirectory(src) diff --git a/src/common/config.h.cmake b/src/common/config.h.cmake index 6100d7dc..556e067e 100644 --- a/src/common/config.h.cmake +++ b/src/common/config.h.cmake @@ -18,5 +18,5 @@ #cmakedefine PORTABLE_SAVES @PORTABLE_SAVES@ -#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_RELATIVE_DATA_DIR@" -#define COLOBOT_I18N_DIR "@COLOBOT_RELATIVE_I18N_DIR@" +#define COLOBOT_DEFAULT_DATADIR "@COLOBOT_DATA_DIR@" +#define COLOBOT_I18N_DIR "@COLOBOT_I18N_DIR@" diff --git a/src/common/system/system.cpp b/src/common/system/system.cpp index b22d0771..d69fbf6c 100644 --- a/src/common/system/system.cpp +++ b/src/common/system/system.cpp @@ -190,28 +190,28 @@ std::string CSystemUtils::GetBasePath() std::string CSystemUtils::GetDataPath() { -#if DEV_BUILD - return std::string{"./"} + COLOBOT_DEFAULT_DATADIR; -#else +#ifdef USE_RELATIVE_PATHS return GetBasePath() + COLOBOT_DEFAULT_DATADIR; +#else + return COLOBOT_DEFAULT_DATADIR; #endif } std::string CSystemUtils::GetLangPath() { -#if DEV_BUILD - return std::string{"./"} + COLOBOT_I18N_DIR; -#else +#ifdef USE_RELATIVE_PATHS return GetBasePath() + COLOBOT_I18N_DIR; +#else + return COLOBOT_I18N_DIR; #endif } std::string CSystemUtils::GetSaveDir() { - return "./saves"; + return GetBasePath() + "saves"; } -std::string CSystemUtils::GetEnvVar(const std::string& str) +std::string CSystemUtils::GetEnvVar(const std::string& name) { - return std::string(); + return ""; } diff --git a/src/common/system/system.h b/src/common/system/system.h index 431ddd41..95901390 100644 --- a/src/common/system/system.h +++ b/src/common/system/system.h @@ -127,7 +127,7 @@ public: /** The difference is \a after - \a before. */ virtual long long TimeStampExactDiff(SystemTimeStamp *before, SystemTimeStamp *after) = 0; - //! Returns the path where the executable binary is located + //! Returns the path where the executable binary is located (ends with the path separator) virtual std::string GetBasePath(); //! Returns the data path (containing textures, levels, helpfiles, etc) @@ -139,8 +139,8 @@ public: //! Returns the save dir location virtual std::string GetSaveDir(); - //! Returns environment variable - virtual std::string GetEnvVar(const std::string &str); + //! Returns the environment variable with the given name or an empty string if it does not exist + virtual std::string GetEnvVar(const std::string &name); //! Sleep for given amount of microseconds virtual void Usleep(int usecs) = 0; diff --git a/src/common/system/system_linux.cpp b/src/common/system/system_linux.cpp index b71befe5..69551bce 100644 --- a/src/common/system/system_linux.cpp +++ b/src/common/system/system_linux.cpp @@ -102,23 +102,23 @@ std::string CSystemUtilsLinux::GetSaveDir() std::string savegameDir; // Determine savegame dir according to XDG Base Directory Specification - char *envXDG_DATA_HOME = getenv("XDG_DATA_HOME"); - if (envXDG_DATA_HOME == nullptr) + auto envXDG_DATA_HOME = GetEnvVar("XDG_DATA_HOME"); + if (envXDG_DATA_HOME.empty()) { - char *envHOME = getenv("HOME"); - if (envHOME == nullptr) + auto envHOME = GetEnvVar("HOME"); + if (envHOME.empty()) { - GetLogger()->Warn("Unable to find directory for saves - using current directory"); - savegameDir = "./saves"; + GetLogger()->Warn("Unable to find directory for saves - using default directory"); + savegameDir = CSystemUtils::GetSaveDir(); } else { - savegameDir = std::string(envHOME) + "/.local/share/colobot"; + savegameDir = envHOME + "/.local/share/colobot"; } } else { - savegameDir = std::string(envXDG_DATA_HOME) + "/colobot"; + savegameDir = envXDG_DATA_HOME + "/colobot"; } GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str()); @@ -131,7 +131,6 @@ std::string CSystemUtilsLinux::GetEnvVar(const std::string& name) char* envVar = getenv(name.c_str()); if (envVar != nullptr) { - GetLogger()->Trace("Detected environment variable %s = %s\n", name.c_str(), envVar); return std::string(envVar); } diff --git a/src/common/system/system_macosx.h b/src/common/system/system_macosx.h index 708d26fc..c8ea607a 100644 --- a/src/common/system/system_macosx.h +++ b/src/common/system/system_macosx.h @@ -36,7 +36,7 @@ public: std::string GetLangPath() override; std::string GetSaveDir() override; - std::string GetEnvVar(const std::string& str) override; + std::string GetEnvVar(const std::string& name) override; void Usleep(int usec) override; diff --git a/src/common/system/system_windows.cpp b/src/common/system/system_windows.cpp index 5254db83..9a8e6833 100644 --- a/src/common/system/system_windows.cpp +++ b/src/common/system/system_windows.cpp @@ -115,15 +115,15 @@ std::string CSystemUtilsWindows::GetSaveDir() #else std::string savegameDir; - wchar_t* envUSERPROFILE = _wgetenv(L"USERPROFILE"); - if (envUSERPROFILE == nullptr) + auto envUSERPROFILE = GetEnvVar("USERPROFILE"); + if (envUSERPROFILE.empty()) { - GetLogger()->Warn("Unable to find directory for saves - using current directory"); - savegameDir = "./saves"; + GetLogger()->Warn("Unable to find directory for saves - using default directory"); + savegameDir = CSystemUtils::GetSaveDir(); } else { - savegameDir = UTF8_Encode(std::wstring(envUSERPROFILE)) + "\\colobot"; + savegameDir = envUSERPROFILE + "\\colobot"; } GetLogger()->Trace("Saved game files are going to %s\n", savegameDir.c_str()); From 0597c0efda4b654cec04ef56947a10330062fa26 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 5 Apr 2020 14:11:08 +0200 Subject: [PATCH 12/14] Try to fix Jenkins build --- CMakeLists.txt | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 28b0c84f..63f1ace6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -394,12 +394,11 @@ endif() # Installation paths defined before compiling sources if(PORTABLE OR (PLATFORM_WINDOWS AND MXE)) - # We need to use STRING because PATH doesn't accept relative paths - set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE STRING "Colobot binary directory") - set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE STRING "Colobot libraries directory") - set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/data CACHE STRING "Colobot shared data directory") - set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE STRING "Colobot translations directory") - set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE STRING "Colobot documentation directory") + set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory") + set(COLOBOT_INSTALL_LIB_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot libraries directory") + set(COLOBOT_INSTALL_DATA_DIR ${CMAKE_INSTALL_PREFIX}/data CACHE PATH "Colobot shared data directory") + set(COLOBOT_INSTALL_I18N_DIR ${CMAKE_INSTALL_PREFIX}/lang CACHE PATH "Colobot translations directory") + set(COLOBOT_INSTALL_DOC_DIR ${CMAKE_INSTALL_PREFIX}/doc CACHE PATH "Colobot documentation directory") set(USE_RELATIVE_PATHS ON) elseif(PLATFORM_WINDOWS) set(COLOBOT_INSTALL_BIN_DIR ${CMAKE_INSTALL_PREFIX}/ CACHE PATH "Colobot binary directory") From c5e8df16e07d2586dd461458124e2f7ed158f957 Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Sun, 5 Apr 2020 14:20:53 +0200 Subject: [PATCH 13/14] Try #2 to fix Jenkins build --- Jenkinsfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Jenkinsfile b/Jenkinsfile index 47dbd3c2..980e0b6c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -27,6 +27,7 @@ pipeline { dir('build/windows') { sh ''' # FIXME: without -lsetupapi linking sdl2 fails + rm -rf * /opt/mxe/usr/bin/i686-w64-mingw32.static-cmake \ -DCMAKE_CXX_STANDARD_LIBRARIES="-lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 -lsetupapi" \ -DCMAKE_INSTALL_PREFIX=/install \ From b925838a913a61a993acdeac1ea06caa8c10f09e Mon Sep 17 00:00:00 2001 From: MrSimbax Date: Tue, 7 Apr 2020 17:43:45 +0200 Subject: [PATCH 14/14] Try no. 3 to fix Jenkins --- Jenkinsfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Jenkinsfile b/Jenkinsfile index 980e0b6c..35f66489 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -54,6 +54,7 @@ pipeline { sh 'mkdir -p build/linux' dir('build/linux') { sh ''' + rm -rf * cmake \ -DCMAKE_INSTALL_PREFIX=/install -DCMAKE_SKIP_INSTALL_RPATH=ON \ -DCMAKE_BUILD_TYPE=RelWithDebInfo -DDEV_BUILD=1 -DPORTABLE=1 -DTOOLS=1 -DTESTS=1 -DDESKTOP=1 ../..