Skip to content

Commit ef9cb79

Browse files
committed
Remove GDExtension compatibility code for Godot 4.0
1 parent ea6a141 commit ef9cb79

File tree

4 files changed

+19
-344
lines changed

4 files changed

+19
-344
lines changed

core/extension/gdextension.cpp

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
#include "core/version.h"
3838

3939
extern void gdextension_setup_interface();
40-
extern void *gdextension_get_legacy_interface();
4140
extern GDExtensionInterfaceFunctionPtr gdextension_get_proc_address(const char *p_name);
4241

4342
typedef GDExtensionBool (*GDExtensionLegacyInitializationFunction)(void *p_interface, GDExtensionClassLibraryPtr p_library, GDExtensionInitialization *r_initialization);
@@ -450,7 +449,7 @@ GDExtensionInterfaceFunctionPtr GDExtension::get_interface_function(StringName p
450449
return *function;
451450
}
452451

453-
Error GDExtension::open_library(const String &p_path, const String &p_entry_symbol, bool p_use_legacy_interface) {
452+
Error GDExtension::open_library(const String &p_path, const String &p_entry_symbol) {
454453
Error err = OS::get_singleton()->open_dynamic_library(p_path, library, true, &library_path);
455454
if (err != OK) {
456455
ERR_PRINT("GDExtension dynamic library not found: " + p_path);
@@ -467,15 +466,8 @@ Error GDExtension::open_library(const String &p_path, const String &p_entry_symb
467466
return err;
468467
}
469468

470-
GDExtensionBool ret = 0;
471-
if (p_use_legacy_interface) {
472-
GDExtensionLegacyInitializationFunction initialization_function = (GDExtensionLegacyInitializationFunction)entry_funcptr;
473-
ret = initialization_function(gdextension_get_legacy_interface(), this, &initialization);
474-
475-
} else {
476-
GDExtensionInitializationFunction initialization_function = (GDExtensionInitializationFunction)entry_funcptr;
477-
ret = initialization_function(&gdextension_get_proc_address, this, &initialization);
478-
}
469+
GDExtensionInitializationFunction initialization_function = (GDExtensionInitializationFunction)entry_funcptr;
470+
GDExtensionBool ret = initialization_function(&gdextension_get_proc_address, this, &initialization);
479471

480472
if (ret) {
481473
level_initialized = -1;
@@ -486,10 +478,6 @@ Error GDExtension::open_library(const String &p_path, const String &p_entry_symb
486478
}
487479
}
488480

489-
Error GDExtension::open_library_compat_76406(const String &p_path, const String &p_entry_symbol) {
490-
return open_library(p_path, p_entry_symbol, true);
491-
}
492-
493481
void GDExtension::close_library() {
494482
ERR_FAIL_COND(library == nullptr);
495483
OS::get_singleton()->close_dynamic_library(library);
@@ -525,8 +513,7 @@ void GDExtension::deinitialize_library(InitializationLevel p_level) {
525513
}
526514

527515
void GDExtension::_bind_methods() {
528-
ClassDB::bind_method(D_METHOD("open_library", "path", "entry_symbol", "use_legacy_interface"), &GDExtension::open_library, DEFVAL(false));
529-
ClassDB::bind_compatibility_method(D_METHOD("open_library", "path", "entry_symbol"), &GDExtension::open_library_compat_76406);
516+
ClassDB::bind_method(D_METHOD("open_library", "path", "entry_symbol"), &GDExtension::open_library);
530517
ClassDB::bind_method(D_METHOD("close_library"), &GDExtension::close_library);
531518
ClassDB::bind_method(D_METHOD("is_library_open"), &GDExtension::is_library_open);
532519

@@ -599,9 +586,20 @@ Ref<Resource> GDExtensionResourceLoader::load(const String &p_path, const String
599586
compatibility_minimum[i] = parts[i];
600587
}
601588
}
589+
} else {
590+
if (r_error) {
591+
*r_error = ERR_INVALID_DATA;
592+
}
593+
ERR_PRINT("GDExtension configuration file must contain a \"configuration/compatibility_minimum\" key: " + p_path);
594+
return Ref<Resource>();
602595
}
603-
if (compatibility_minimum[0] < 4) {
604-
compatibility_minimum[0] = 4;
596+
597+
if (compatibility_minimum[0] < 4 || (compatibility_minimum[0] == 4 && compatibility_minimum[1] == 0)) {
598+
if (r_error) {
599+
*r_error = ERR_INVALID_DATA;
600+
}
601+
ERR_PRINT(vformat("GDExtension's compatibility_minimum (%d.%d.%d) must be at least 4.1.0: %s", compatibility_minimum[0], compatibility_minimum[1], compatibility_minimum[2], p_path));
602+
return Ref<Resource>();
605603
}
606604

607605
bool compatible = true;
@@ -635,12 +633,10 @@ Ref<Resource> GDExtensionResourceLoader::load(const String &p_path, const String
635633
library_path = p_path.get_base_dir().path_join(library_path);
636634
}
637635

638-
bool use_legacy_interface = compatibility_minimum[0] == 4 && compatibility_minimum[1] == 0;
639-
640636
Ref<GDExtension> lib;
641637
lib.instantiate();
642638
String abs_path = ProjectSettings::get_singleton()->globalize_path(library_path);
643-
err = lib->open_library(abs_path, entry_symbol, use_legacy_interface);
639+
err = lib->open_library(abs_path, entry_symbol);
644640

645641
if (r_error) {
646642
*r_error = err;

core/extension/gdextension.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,8 +72,7 @@ class GDExtension : public Resource {
7272
static String get_extension_list_config_file();
7373
static String find_extension_library(const String &p_path, Ref<ConfigFile> p_config, std::function<bool(String)> p_has_feature, PackedStringArray *r_tags = nullptr);
7474

75-
Error open_library(const String &p_path, const String &p_entry_symbol, bool p_use_legacy_interface = false);
76-
Error open_library_compat_76406(const String &p_path, const String &p_entry_symbol);
75+
Error open_library(const String &p_path, const String &p_entry_symbol);
7776
void close_library();
7877

7978
enum InitializationLevel {

0 commit comments

Comments
 (0)