diff options
| author | Mathieu Comandon <strycore@gmail.com> | 2015-11-07 10:50:47 -0800 |
|---|---|---|
| committer | Mathieu Comandon <strycore@gmail.com> | 2015-11-10 12:49:04 -0800 |
| commit | f2ae1a25457ea679f2964a5d3d351d0a1e58750b (patch) | |
| tree | 3f305d34ec3663ae3a329b0722964807a7becbc8 /Source/Core/Common/FileUtil.cpp | |
| parent | 973118511aab5e4a0724aaeae065048e8357e9e6 (diff) | |
Implement relocatable builds on Linux
- Change the path of the Sys folder to the executable's location
- Add LINUX_LOCAL_DEV flag to use relocatable version on Linux
- Add CMake definition for relocatable build
Diffstat (limited to 'Source/Core/Common/FileUtil.cpp')
| -rw-r--r-- | Source/Core/Common/FileUtil.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/Source/Core/Common/FileUtil.cpp b/Source/Core/Common/FileUtil.cpp index 84961d54ad..585b0c5cc1 100644 --- a/Source/Core/Common/FileUtil.cpp +++ b/Source/Core/Common/FileUtil.cpp @@ -728,12 +728,12 @@ std::string GetBundleDirectory() } #endif -#ifdef _WIN32 std::string& GetExeDirectory() { static std::string DolphinPath; if (DolphinPath.empty()) { +#ifdef _WIN32 TCHAR Dolphin_exe_Path[2048]; TCHAR Dolphin_exe_Clean_Path[MAX_PATH]; GetModuleFileName(nullptr, Dolphin_exe_Path, 2048); @@ -742,10 +742,20 @@ std::string& GetExeDirectory() else DolphinPath = TStrToUTF8(Dolphin_exe_Path); DolphinPath = DolphinPath.substr(0, DolphinPath.find_last_of('\\')); +#else + char Dolphin_exe_Path[PATH_MAX]; + ssize_t len = ::readlink("/proc/self/exe", Dolphin_exe_Path, sizeof(Dolphin_exe_Path)); + if (len == -1 || len == sizeof(Dolphin_exe_Path)) + { + len = 0; + } + Dolphin_exe_Path[len] = '\0'; + DolphinPath = Dolphin_exe_Path; + DolphinPath = DolphinPath.substr(0, DolphinPath.rfind('/')); +#endif } return DolphinPath; } -#endif std::string GetSysDirectory() { @@ -753,7 +763,7 @@ std::string GetSysDirectory() #if defined (__APPLE__) sysDir = GetBundleDirectory() + DIR_SEP + SYSDATA_DIR; -#elif defined (_WIN32) +#elif defined (_WIN32) || defined (LINUX_LOCAL_DEV) sysDir = GetExeDirectory() + DIR_SEP + SYSDATA_DIR; #else sysDir = SYSDATA_DIR; |
