From b9f1136d0395262fb156c65b969baa349d845af6 Mon Sep 17 00:00:00 2001 From: Raul Santos Date: Thu, 29 Jun 2023 18:27:48 +0200 Subject: [PATCH] C#: Add platform name to the exported data directory --- .../GodotTools/Export/ExportPlugin.cs | 2 +- modules/mono/godotsharp_dirs.cpp | 45 +++++++++++++++---- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs b/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs index 4d61372ab09..b98df190ca6 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs @@ -170,7 +170,7 @@ namespace GodotTools.Export string ridOS = DetermineRuntimeIdentifierOS(platform); string ridArch = DetermineRuntimeIdentifierArch(arch); string runtimeIdentifier = $"{ridOS}-{ridArch}"; - string projectDataDirName = $"data_{GodotSharpDirs.CSharpProjectName}_{arch}"; + string projectDataDirName = $"data_{GodotSharpDirs.CSharpProjectName}_{platform}_{arch}"; if (platform == OS.Platforms.MacOS) { projectDataDirName = Path.Combine("Contents", "Resources", projectDataDirName); diff --git a/modules/mono/godotsharp_dirs.cpp b/modules/mono/godotsharp_dirs.cpp index 279b5cfed2e..00ef4ccdde1 100644 --- a/modules/mono/godotsharp_dirs.cpp +++ b/modules/mono/godotsharp_dirs.cpp @@ -95,6 +95,38 @@ String _get_mono_user_dir() { #endif } +#if !TOOLS_ENABLED +// This should be the equivalent of GodotTools.Utils.OS.PlatformNameMap. +static const char *platform_name_map[][2] = { + { "Windows", "windows" }, + { "macOS", "macos" }, + { "Linux", "linuxbsd" }, + { "FreeBSD", "linuxbsd" }, + { "NetBSD", "linuxbsd" }, + { "BSD", "linuxbsd" }, + { "UWP", "uwp" }, + { "Haiku", "haiku" }, + { "Android", "android" }, + { "iOS", "ios" }, + { "Web", "web" }, + { nullptr, nullptr } +}; + +String _get_platform_name() { + String platform_name = OS::get_singleton()->get_name(); + + int idx = 0; + while (platform_name_map[idx][0] != nullptr) { + if (platform_name_map[idx][0] == platform_name) { + return platform_name_map[idx][1]; + } + idx++; + } + + return ""; +} +#endif + class _GodotSharpDirs { public: String res_metadata_dir; @@ -139,12 +171,13 @@ private: #endif api_assemblies_dir = api_assemblies_base_dir.path_join(GDMono::get_expected_api_build_config()); #else // TOOLS_ENABLED + String platform = _get_platform_name(); String arch = Engine::get_singleton()->get_architecture_name(); String appname_safe = path::get_csharp_project_name(); String packed_path = "res://.godot/mono/publish/" + arch; if (DirAccess::exists(packed_path)) { // The dotnet publish data is packed in the pck/zip. - String data_dir_root = OS::get_singleton()->get_cache_path().path_join("data_" + appname_safe + "_" + arch); + String data_dir_root = OS::get_singleton()->get_cache_path().path_join("data_" + appname_safe + "_" + platform + "_" + arch); bool has_data = false; if (!has_data) { // 1. Try to access the data directly. @@ -173,16 +206,10 @@ private: api_assemblies_dir = data_dir_root; } else { // The dotnet publish data is in a directory next to the executable. - String data_dir_root = exe_dir.path_join("data_" + appname_safe + "_" + arch); - if (!DirAccess::exists(data_dir_root)) { - data_dir_root = exe_dir.path_join("data_Godot_" + arch); - } + String data_dir_root = exe_dir.path_join("data_" + appname_safe + "_" + platform + "_" + arch); #ifdef MACOS_ENABLED if (!DirAccess::exists(data_dir_root)) { - data_dir_root = res_dir.path_join("data_" + appname_safe + "_" + arch); - } - if (!DirAccess::exists(data_dir_root)) { - data_dir_root = res_dir.path_join("data_Godot_" + arch); + data_dir_root = res_dir.path_join("data_" + appname_safe + "_" + platform + "_" + arch); } #endif api_assemblies_dir = data_dir_root;