Skip to content

Commit

Permalink
Merge pull request #78846 from raulsntos/dotnet/data_dir_name_now_wit…
Browse files Browse the repository at this point in the history
…h_more_platform

C#: Add platform name to the exported data directory
  • Loading branch information
YuriSizov authored Aug 4, 2023
2 parents dc6ea03 + b9f1136 commit c244903
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ private void _ExportBeginImpl(string[] features, bool isDebug, string path, long
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);
Expand Down
45 changes: 36 additions & 9 deletions modules/mono/godotsharp_dirs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -139,12 +171,13 @@ class _GodotSharpDirs {
#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.
Expand Down Expand Up @@ -173,16 +206,10 @@ class _GodotSharpDirs {
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;
Expand Down

0 comments on commit c244903

Please sign in to comment.