Mono/C#: Remove GodotTools dependency on the Mono.Posix assembly

MSBuild on Windows uses the system .NET Framework BCL instead of Mono's. Because
of this, it may not be able to find the Mono.Posix assembly, so it's better
not to depend on it. We needed Mono.Posix to call Syscall.access, so we can
replace this with an internal call that does the same in C++.
This commit is contained in:
Ignacio Etcheverry 2019-12-17 13:10:01 +01:00
parent 45908eebf3
commit 5a3ccf4f14
3 changed files with 18 additions and 6 deletions

View file

@ -30,6 +30,10 @@
#include "editor_internal_calls.h"
#ifdef UNIX_ENABLED
#include <unistd.h> // access
#endif
#include "core/os/os.h"
#include "core/version.h"
#include "editor/editor_node.h"
@ -370,6 +374,15 @@ MonoString *godot_icall_Utils_OS_GetPlatformName() {
return GDMonoMarshal::mono_string_from_godot(os_name);
}
MonoBoolean godot_icall_Utils_OS_UnixFileHasExecutableAccess(MonoString *p_file_path) {
#ifdef UNIX_ENABLED
String file_path = GDMonoMarshal::mono_string_to_godot(p_file_path);
return access(file_path.utf8().get_data(), X_OK) == 0;
#else
ERR_FAIL_V(false);
#endif
}
void register_editor_internal_calls() {
// GodotSharpDirs
@ -442,4 +455,5 @@ void register_editor_internal_calls() {
// Utils.OS
mono_add_internal_call("GodotTools.Utils.OS::GetPlatformName", (void *)godot_icall_Utils_OS_GetPlatformName);
mono_add_internal_call("GodotTools.Utils.OS::UnixFileHasExecutableAccess", (void *)godot_icall_Utils_OS_UnixFileHasExecutableAccess);
}