Only support XDG directory path configuration on Linux
XDG support breaks when running Windows builds via WINE. Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
This commit is contained in:
parent
97df6de4a7
commit
6799d000b1
|
@ -6,7 +6,7 @@
|
|||
<description>
|
||||
This editor-only singleton returns OS-specific paths to various data folders and files. It can be used in editor plugins to ensure files are saved in the correct location on each operating system.
|
||||
[b]Note:[/b] This singleton is not accessible in exported projects. Attempting to access it in an exported project will result in a script error as the singleton won't be declared. To prevent script errors in exported projects, use [method Engine.has_singleton] to check whether the singleton is available before using it.
|
||||
[b]Note:[/b] Godot complies with the [url=https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html]XDG Base Directory Specification[/url] on [i]all[/i] platforms. You can override environment variables following the specification to change the editor and project data paths.
|
||||
[b]Note:[/b] On the Linux/BSD platform, Godot complies with the [url=https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html]XDG Base Directory Specification[/url]. You can override environment variables following the specification to change the editor and project data paths.
|
||||
</description>
|
||||
<tutorials>
|
||||
<link title="File paths in Godot projects">https://docs.godotengine.org/en/latest/tutorials/io/data_paths.html</link>
|
||||
|
|
|
@ -190,14 +190,6 @@ MainLoop *OS_MacOS::get_main_loop() const {
|
|||
}
|
||||
|
||||
String OS_MacOS::get_config_path() const {
|
||||
// The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on macOS as well.
|
||||
if (has_environment("XDG_CONFIG_HOME")) {
|
||||
if (get_environment("XDG_CONFIG_HOME").is_absolute_path()) {
|
||||
return get_environment("XDG_CONFIG_HOME");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_CONFIG_HOME` is a relative path. Ignoring its value and falling back to `$HOME/Library/Application Support` or `.` per the XDG Base Directory specification.");
|
||||
}
|
||||
}
|
||||
if (has_environment("HOME")) {
|
||||
return get_environment("HOME").path_join("Library/Application Support");
|
||||
}
|
||||
|
@ -205,26 +197,10 @@ String OS_MacOS::get_config_path() const {
|
|||
}
|
||||
|
||||
String OS_MacOS::get_data_path() const {
|
||||
// The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on macOS as well.
|
||||
if (has_environment("XDG_DATA_HOME")) {
|
||||
if (get_environment("XDG_DATA_HOME").is_absolute_path()) {
|
||||
return get_environment("XDG_DATA_HOME");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_DATA_HOME` is a relative path. Ignoring its value and falling back to `get_config_path()` per the XDG Base Directory specification.");
|
||||
}
|
||||
}
|
||||
return get_config_path();
|
||||
}
|
||||
|
||||
String OS_MacOS::get_cache_path() const {
|
||||
// The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on macOS as well.
|
||||
if (has_environment("XDG_CACHE_HOME")) {
|
||||
if (get_environment("XDG_CACHE_HOME").is_absolute_path()) {
|
||||
return get_environment("XDG_CACHE_HOME");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `$HOME/Library/Caches` or `get_config_path()` per the XDG Base Directory specification.");
|
||||
}
|
||||
}
|
||||
if (has_environment("HOME")) {
|
||||
return get_environment("HOME").path_join("Library/Caches");
|
||||
}
|
||||
|
|
|
@ -1336,14 +1336,6 @@ uint64_t OS_Windows::get_embedded_pck_offset() const {
|
|||
}
|
||||
|
||||
String OS_Windows::get_config_path() const {
|
||||
// The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well.
|
||||
if (has_environment("XDG_CONFIG_HOME")) {
|
||||
if (get_environment("XDG_CONFIG_HOME").is_absolute_path()) {
|
||||
return get_environment("XDG_CONFIG_HOME").replace("\\", "/");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_CONFIG_HOME` is a relative path. Ignoring its value and falling back to `%APPDATA%` or `.` per the XDG Base Directory specification.");
|
||||
}
|
||||
}
|
||||
if (has_environment("APPDATA")) {
|
||||
return get_environment("APPDATA").replace("\\", "/");
|
||||
}
|
||||
|
@ -1351,29 +1343,13 @@ String OS_Windows::get_config_path() const {
|
|||
}
|
||||
|
||||
String OS_Windows::get_data_path() const {
|
||||
// The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well.
|
||||
if (has_environment("XDG_DATA_HOME")) {
|
||||
if (get_environment("XDG_DATA_HOME").is_absolute_path()) {
|
||||
return get_environment("XDG_DATA_HOME").replace("\\", "/");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_DATA_HOME` is a relative path. Ignoring its value and falling back to `get_config_path()` per the XDG Base Directory specification.");
|
||||
}
|
||||
}
|
||||
return get_config_path();
|
||||
}
|
||||
|
||||
String OS_Windows::get_cache_path() const {
|
||||
static String cache_path_cache;
|
||||
if (cache_path_cache.is_empty()) {
|
||||
// The XDG Base Directory specification technically only applies on Linux/*BSD, but it doesn't hurt to support it on Windows as well.
|
||||
if (has_environment("XDG_CACHE_HOME")) {
|
||||
if (get_environment("XDG_CACHE_HOME").is_absolute_path()) {
|
||||
cache_path_cache = get_environment("XDG_CACHE_HOME").replace("\\", "/");
|
||||
} else {
|
||||
WARN_PRINT_ONCE("`XDG_CACHE_HOME` is a relative path. Ignoring its value and falling back to `%LOCALAPPDATA%\\cache`, `%TEMP%` or `get_config_path()` per the XDG Base Directory specification.");
|
||||
}
|
||||
}
|
||||
if (cache_path_cache.is_empty() && has_environment("LOCALAPPDATA")) {
|
||||
if (has_environment("LOCALAPPDATA")) {
|
||||
cache_path_cache = get_environment("LOCALAPPDATA").replace("\\", "/");
|
||||
}
|
||||
if (cache_path_cache.is_empty() && has_environment("TEMP")) {
|
||||
|
|
Loading…
Reference in New Issue