diff options
Diffstat (limited to 'modules')
| -rw-r--r-- | modules/mono/build_scripts/mono_configure.py | 11 | ||||
| -rw-r--r-- | modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs | 12 | ||||
| -rw-r--r-- | modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj | 4 | ||||
| -rw-r--r-- | modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs | 8 | ||||
| -rw-r--r-- | modules/mono/editor/editor_internal_calls.cpp | 14 | ||||
| -rw-r--r-- | modules/mono/mono_gd/gd_mono.cpp | 28 | ||||
| -rw-r--r-- | modules/mono/mono_gd/gd_mono_field.cpp | 10 | ||||
| -rw-r--r-- | modules/mono/mono_gd/gd_mono_marshal.cpp | 2 | ||||
| -rw-r--r-- | modules/visual_script/visual_script_editor.cpp | 4 | ||||
| -rw-r--r-- | modules/websocket/wsl_peer.cpp | 3 | ||||
| -rw-r--r-- | modules/websocket/wsl_peer.h | 2 |
11 files changed, 50 insertions, 48 deletions
diff --git a/modules/mono/build_scripts/mono_configure.py b/modules/mono/build_scripts/mono_configure.py index 89d56def7d..033c467da9 100644 --- a/modules/mono/build_scripts/mono_configure.py +++ b/modules/mono/build_scripts/mono_configure.py @@ -446,18 +446,19 @@ def copy_mono_shared_libs(env, mono_root, target_mono_root_dir): if not os.path.isdir(target_mono_lib_dir): os.makedirs(target_mono_lib_dir) + lib_file_names = [] if platform == 'osx': - # TODO: Make sure nothing is missing - copy(os.path.join(mono_root, 'lib', 'libMonoPosixHelper.dylib'), target_mono_lib_dir) + lib_file_names = [lib_name + '.dylib' for lib_name in [ + 'libmono-btls-shared', 'libmono-native-compat', 'libMonoPosixHelper' + ]] elif is_unix_like(platform): lib_file_names = [lib_name + '.so' for lib_name in [ 'libmono-btls-shared', 'libmono-ee-interp', 'libmono-native', 'libMonoPosixHelper', 'libmono-profiler-aot', 'libmono-profiler-coverage', 'libmono-profiler-log', 'libMonoSupportW' ]] - for lib_file_name in lib_file_names: - copy_if_exists(os.path.join(mono_root, 'lib', lib_file_name), target_mono_lib_dir) - + for lib_file_name in lib_file_names: + copy_if_exists(os.path.join(mono_root, 'lib', lib_file_name), target_mono_lib_dir) def pkgconfig_try_find_mono_root(mono_lib_names, sharedlib_ext): tmpenv = Environment() diff --git a/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs b/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs index dd1b58b34b..96cafba87f 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Export/ExportPlugin.cs @@ -78,7 +78,13 @@ namespace GodotTools.Export catch (Exception e) { maybeLastExportError = e.Message; - GD.PushError($"Failed to export project: {e.Message}"); + + // 'maybeLastExportError' cannot be null or empty if there was an error, so we + // must consider the possibility of exceptions being thrown without a message. + if (string.IsNullOrEmpty(maybeLastExportError)) + maybeLastExportError = $"Exception thrown: {e.GetType().Name}"; + + GD.PushError($"Failed to export project: {maybeLastExportError}"); Console.Error.WriteLine(e); // TODO: Do something on error once _ExportBegin supports failing. } @@ -513,7 +519,7 @@ namespace GodotTools.Export case OS.Platforms.HTML5: return "wasm-wasm32"; default: - throw new NotSupportedException(); + throw new NotSupportedException($"Platform not supported: {platform}"); } } @@ -655,7 +661,7 @@ namespace GodotTools.Export case OS.Platforms.HTML5: return "wasm"; default: - throw new NotSupportedException(); + throw new NotSupportedException($"Platform not supported: {platform}"); } } diff --git a/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj b/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj index dbd774a66a..15b9e50a8d 100644 --- a/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj +++ b/modules/mono/editor/GodotTools/GodotTools/GodotTools.csproj @@ -34,7 +34,6 @@ <HintPath>..\packages\JetBrains.Annotations.2019.1.3\lib\net20\JetBrains.Annotations.dll</HintPath> <Private>True</Private> </Reference> - <Reference Include="Mono.Posix" /> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"> <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> <Private>True</Private> @@ -100,8 +99,5 @@ <ItemGroup> <None Include="packages.config" /> </ItemGroup> - <ItemGroup> - <Content Include="Ides\Rider\.editorconfig" /> - </ItemGroup> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> </Project>
\ No newline at end of file diff --git a/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs b/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs index 5a867b7f8b..279e67b3eb 100644 --- a/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs +++ b/modules/mono/editor/GodotTools/GodotTools/Utils/OS.cs @@ -5,7 +5,6 @@ using System.Diagnostics.CodeAnalysis; using System.IO; using System.Linq; using System.Runtime.CompilerServices; -using Mono.Unix.Native; namespace GodotTools.Utils { @@ -15,6 +14,9 @@ namespace GodotTools.Utils [MethodImpl(MethodImplOptions.InternalCall)] static extern string GetPlatformName(); + [MethodImpl(MethodImplOptions.InternalCall)] + static extern bool UnixFileHasExecutableAccess(string filePath); + public static class Names { public const string Windows = "Windows"; @@ -105,7 +107,7 @@ namespace GodotTools.Utils searchDirs.AddRange(pathDirs); string nameExt = Path.GetExtension(name); - bool hasPathExt = string.IsNullOrEmpty(nameExt) || windowsExts.Contains(nameExt, StringComparer.OrdinalIgnoreCase); + bool hasPathExt = !string.IsNullOrEmpty(nameExt) && windowsExts.Contains(nameExt, StringComparer.OrdinalIgnoreCase); searchDirs.Add(System.IO.Directory.GetCurrentDirectory()); // last in the list @@ -131,7 +133,7 @@ namespace GodotTools.Utils searchDirs.Add(System.IO.Directory.GetCurrentDirectory()); // last in the list return searchDirs.Select(dir => Path.Combine(dir, name)) - .FirstOrDefault(path => File.Exists(path) && Syscall.access(path, AccessModes.X_OK) == 0); + .FirstOrDefault(path => File.Exists(path) && UnixFileHasExecutableAccess(path)); } public static void RunProcess(string command, IEnumerable<string> arguments) diff --git a/modules/mono/editor/editor_internal_calls.cpp b/modules/mono/editor/editor_internal_calls.cpp index 443b4ba841..48a3259a90 100644 --- a/modules/mono/editor/editor_internal_calls.cpp +++ b/modules/mono/editor/editor_internal_calls.cpp @@ -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); } diff --git a/modules/mono/mono_gd/gd_mono.cpp b/modules/mono/mono_gd/gd_mono.cpp index 29274be559..6cafa6709f 100644 --- a/modules/mono/mono_gd/gd_mono.cpp +++ b/modules/mono/mono_gd/gd_mono.cpp @@ -119,28 +119,6 @@ void gd_mono_profiler_init() { #if defined(DEBUG_ENABLED) -bool gd_mono_wait_for_debugger_msecs(uint32_t p_msecs) { - - do { - if (mono_is_debugger_attached()) - return true; - - int last_tick = OS::get_singleton()->get_ticks_msec(); - - OS::get_singleton()->delay_usec((p_msecs < 25 ? p_msecs : 25) * 1000); - - uint32_t tdiff = OS::get_singleton()->get_ticks_msec() - last_tick; - - if (tdiff > p_msecs) { - p_msecs = 0; - } else { - p_msecs -= tdiff; - } - } while (p_msecs > 0); - - return mono_is_debugger_attached(); -} - void gd_mono_debug_init() { mono_debug_init(MONO_DEBUG_FORMAT_MONO); @@ -402,12 +380,6 @@ void GDMono::initialize() { Error domain_load_err = _load_scripts_domain(); ERR_FAIL_COND_MSG(domain_load_err != OK, "Mono: Failed to load scripts domain."); -#if defined(DEBUG_ENABLED) && !defined(JAVASCRIPT_ENABLED) - bool debugger_attached = gd_mono_wait_for_debugger_msecs(500); - if (!debugger_attached && OS::get_singleton()->is_stdout_verbose()) - print_error("Mono: Debugger wait timeout"); -#endif - _register_internal_calls(); print_verbose("Mono: INITIALIZED"); diff --git a/modules/mono/mono_gd/gd_mono_field.cpp b/modules/mono/mono_gd/gd_mono_field.cpp index d84359b1ab..56a9bf46a3 100644 --- a/modules/mono/mono_gd/gd_mono_field.cpp +++ b/modules/mono/mono_gd/gd_mono_field.cpp @@ -110,8 +110,14 @@ void GDMonoField::set_value_from_variant(MonoObject *p_object, const Variant &p_ } break; case MONO_TYPE_STRING: { - MonoString *mono_string = GDMonoMarshal::mono_string_from_godot(p_value); - mono_field_set_value(p_object, mono_field, mono_string); + if (p_value.get_type() == Variant::NIL) { + // Otherwise, Variant -> String would return the string "Null" + MonoString *mono_string = NULL; + mono_field_set_value(p_object, mono_field, mono_string); + } else { + MonoString *mono_string = GDMonoMarshal::mono_string_from_godot(p_value); + mono_field_set_value(p_object, mono_field, mono_string); + } } break; case MONO_TYPE_VALUETYPE: { diff --git a/modules/mono/mono_gd/gd_mono_marshal.cpp b/modules/mono/mono_gd/gd_mono_marshal.cpp index f74fe5715c..9f55b31edc 100644 --- a/modules/mono/mono_gd/gd_mono_marshal.cpp +++ b/modules/mono/mono_gd/gd_mono_marshal.cpp @@ -374,6 +374,8 @@ MonoObject *variant_to_mono_object(const Variant *p_var, const ManagedType &p_ty } case MONO_TYPE_STRING: { + if (p_var->get_type() == Variant::NIL) + return NULL; // Otherwise, Variant -> String would return the string "Null" return (MonoObject *)mono_string_from_godot(p_var->operator String()); } break; diff --git a/modules/visual_script/visual_script_editor.cpp b/modules/visual_script/visual_script_editor.cpp index 70f421a80a..13b645732e 100644 --- a/modules/visual_script/visual_script_editor.cpp +++ b/modules/visual_script/visual_script_editor.cpp @@ -572,7 +572,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) { if (nd_list->is_input_port_editable()) { has_gnode_text = true; Button *btn = memnew(Button); - btn->set_text("Add Input Port"); + btn->set_text(TTR("Add Input Port")); hbnc->add_child(btn); btn->connect("pressed", this, "_add_input_port", varray(E->get())); } @@ -581,7 +581,7 @@ void VisualScriptEditor::_update_graph(int p_only_id) { hbnc->add_spacer(); has_gnode_text = true; Button *btn = memnew(Button); - btn->set_text("Add Output Port"); + btn->set_text(TTR("Add Output Port")); hbnc->add_child(btn); btn->connect("pressed", this, "_add_output_port", varray(E->get())); } diff --git a/modules/websocket/wsl_peer.cpp b/modules/websocket/wsl_peer.cpp index 9d610109ed..a86bcd1404 100644 --- a/modules/websocket/wsl_peer.cpp +++ b/modules/websocket/wsl_peer.cpp @@ -142,7 +142,7 @@ int wsl_genmask_callback(wslay_event_context_ptr ctx, uint8_t *buf, size_t len, void wsl_msg_recv_callback(wslay_event_context_ptr ctx, const struct wslay_event_on_msg_recv_arg *arg, void *user_data) { struct WSLPeer::PeerData *peer_data = (struct WSLPeer::PeerData *)user_data; - if (!peer_data->valid) { + if (!peer_data->valid || peer_data->closing) { return; } WSLPeer *peer = (WSLPeer *)peer_data->peer; @@ -293,6 +293,7 @@ void WSLPeer::close(int p_code, String p_reason) { CharString cs = p_reason.utf8(); wslay_event_queue_close(_data->ctx, p_code, (uint8_t *)cs.ptr(), cs.size()); wslay_event_send(_data->ctx); + _data->closing = true; } _in_buffer.clear(); diff --git a/modules/websocket/wsl_peer.h b/modules/websocket/wsl_peer.h index 01ad250468..a0242d120f 100644 --- a/modules/websocket/wsl_peer.h +++ b/modules/websocket/wsl_peer.h @@ -53,6 +53,7 @@ public: bool destroy; bool valid; bool is_server; + bool closing; void *obj; void *peer; Ref<StreamPeer> conn; @@ -68,6 +69,7 @@ public: id = 1; ctx = NULL; obj = NULL; + closing = false; peer = NULL; } }; |