diff --git a/cmake/Modules/FindFMOD.cmake b/cmake/Modules/FindFMOD.cmake index cfa9a6265..7237a5629 100644 --- a/cmake/Modules/FindFMOD.cmake +++ b/cmake/Modules/FindFMOD.cmake @@ -23,6 +23,7 @@ FIND_PATH(FMOD_INCLUDE_DIR /opt/local/include/fmodstudio/ /opt/include/ /opt/include/fmodstudio/ + /opt/fmodengine/api/core/inc/ ) FIND_LIBRARY(FMOD_LIBRARY @@ -42,6 +43,7 @@ FIND_LIBRARY(FMOD_LIBRARY /opt/lib64 /opt/lib /usr/freeware/lib64 + /usr/lib/fmodengine ) if (FMOD_LIBRARY) diff --git a/src/editor.cpp b/src/editor.cpp index 7cfab087c..758f66531 100644 --- a/src/editor.cpp +++ b/src/editor.cpp @@ -20,6 +20,9 @@ #include "init.hpp" #include "mod_tools.hpp" #include +#ifdef LINUX +#include +#endif #ifndef EDITOR #define EDITOR #endif @@ -1579,10 +1582,21 @@ int main(int argc, char** argv) #ifdef WINDOWS strcpy(outputdir, "./"); #else - char *basepath = getenv("HOME"); - snprintf(outputdir, sizeof(outputdir), "%s/.barony", basepath); - if ( access(outputdir, F_OK) == -1 ) - mkdir(outputdir, 0777); + std::string basepath; + if (strlen(getenv("XDG_DATA_HOME")) > 0) + { + printlog("Picked up XDG_DATA_HOME: %s", getenv("XDG_DATA_HOME")); + basepath = getenv("XDG_DATA_HOME"); + basepath += "/barony"; + } + else + { + printlog("XDG_DATA_HOME does not exit, using HOME"); + basepath = getenv("HOME"); + basepath += "/.local/share/barony"; + } + snprintf(outputdir, sizeof(outputdir), "%s", basepath.c_str()); + std::filesystem::create_directories(outputdir); #endif // load default language file (english) diff --git a/src/game.cpp b/src/game.cpp index 24b442dbf..dad2388e0 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -65,6 +65,7 @@ #include #include #include +#include static SDL_bool SDL_MouseModeBeforeSignal = SDL_FALSE; static int SDL_MouseShowBeforeSignal = SDL_ENABLE; @@ -6755,29 +6756,32 @@ int main(int argc, char** argv) strcpy(outputdir, "./"); #else #ifndef NINTENDO - char *basepath = getenv("HOME"); + std::string basepath; + if (strlen(getenv("XDG_DATA_HOME")) > 0) + { + printlog("Picked up $XDG_DATA_HOME: %s", getenv("XDG_DATA_HOME")); + basepath = getenv("XDG_DATA_HOME"); + basepath += "/barony"; + } + else + { + printlog("XDG_DATA_HOME does not exit, using ~/.local/share/barony"); + basepath = getenv("HOME"); + basepath += "/.local/share/barony"; + } #ifdef USE_EOS #ifdef STEAMWORKS //Steam + EOS - snprintf(outputdir, sizeof(outputdir), "%s/.barony", basepath); + snprintf(outputdir, sizeof(outputdir), "%s", basepath.c_str()); #else //Just EOS. - std::string firstDotdir(basepath); - firstDotdir += "/.barony/"; - if (access(firstDotdir.c_str(), F_OK) == -1) - { - mkdir(firstDotdir.c_str(), 0777); //Since this mkdir is not equivalent to mkdir -p, have to create each part of the path manually. - } - snprintf(outputdir, sizeof(outputdir), "%s/epicgames", firstDotdir.c_str()); + snprintf(outputdir, sizeof(outputdir), "%s/epicgames", basepath.c_str()); #endif #else //USE_EOS //No EOS. Could be Steam though. Or could also not. - snprintf(outputdir, sizeof(outputdir), "%s/.barony", basepath); + snprintf(outputdir, sizeof(outputdir), "%s", basepath.c_str()); #endif - if (access(outputdir, F_OK) == -1) - { - mkdir(outputdir, 0777); - } + std::filesystem::create_directories(outputdir); // mkdir -p from C++ 17 https://en.cppreference.com/w/cpp/filesystem/create_directory.html #else // !NINTENDO strcpy(outputdir, "save:"); #endif // NINTENDO