diff options
author | mendrak <mendrak@gmail.com> | 2024-09-19 20:56:02 -0700 |
---|---|---|
committer | Pāvels Nadtočajevs <7645683+bruvzg@users.noreply.github.com> | 2024-11-21 19:27:21 +0200 |
commit | c57eaf77571765461a83cde7e01a57460f02ff87 (patch) | |
tree | eb388d4d5f397290a29382d56755eb9c553775bf | |
parent | 9e6098432aac35bae42c9089a29ba2a80320d823 (diff) | |
download | redot-engine-c57eaf77571765461a83cde7e01a57460f02ff87.tar.gz |
Fix issue #97207 by filtering extension_list.cfg
The implemented solution to the problem of the error message
appearing when an excluded GDExtension in an export of a project, is
to filter the lines in the extension_list.cfg file to only include
those that are in the paths actually included for export. If there
are no entries remaining, don't write the file at all.
-rw-r--r-- | editor/export/editor_export_platform.cpp | 26 | ||||
-rw-r--r-- | editor/export/editor_export_platform.h | 2 |
2 files changed, 27 insertions, 1 deletions
diff --git a/editor/export/editor_export_platform.cpp b/editor/export/editor_export_platform.cpp index 91c9ff9807..27216c2399 100644 --- a/editor/export/editor_export_platform.cpp +++ b/editor/export/editor_export_platform.cpp @@ -1495,7 +1495,15 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & Vector<String> forced_export = get_forced_export_files(); for (int i = 0; i < forced_export.size(); i++) { - Vector<uint8_t> array = FileAccess::get_file_as_bytes(forced_export[i]); + Vector<uint8_t> array; + if (GDExtension::get_extension_list_config_file() == forced_export[i]) { + array = _filter_extension_list_config_file(forced_export[i], paths); + if (array.size() == 0) { + continue; + } + } else { + array = FileAccess::get_file_as_bytes(forced_export[i]); + } err = p_save_func(p_udata, forced_export[i], array, idx, total, enc_in_filters, enc_ex_filters, key, seed); if (err != OK) { return err; @@ -1534,6 +1542,22 @@ Error EditorExportPlatform::export_project_files(const Ref<EditorExportPreset> & return OK; } +Vector<uint8_t> EditorExportPlatform::_filter_extension_list_config_file(const String &p_config_path, const HashSet<String> &p_paths) { + Ref<FileAccess> f = FileAccess::open(p_config_path, FileAccess::READ); + if (f.is_null()) { + ERR_FAIL_V_MSG(Vector<uint8_t>(), "Can't open file from path '" + String(p_config_path) + "'."); + } + Vector<uint8_t> data; + while (!f->eof_reached()) { + String l = f->get_line().strip_edges(); + if (p_paths.has(l)) { + data.append_array(l.to_utf8_buffer()); + data.append('\n'); + } + } + return data; +} + Error EditorExportPlatform::_pack_add_shared_object(void *p_userdata, const SharedObject &p_so) { PackData *pack_data = (PackData *)p_userdata; if (pack_data->so_files) { diff --git a/editor/export/editor_export_platform.h b/editor/export/editor_export_platform.h index c7378ffec7..a33bdce72a 100644 --- a/editor/export/editor_export_platform.h +++ b/editor/export/editor_export_platform.h @@ -135,6 +135,8 @@ private: void _edit_files_with_filter(Ref<DirAccess> &da, const Vector<String> &p_filters, HashSet<String> &r_list, bool exclude); void _edit_filter_list(HashSet<String> &r_list, const String &p_filter, bool exclude); + static Vector<uint8_t> _filter_extension_list_config_file(const String &p_config_path, const HashSet<String> &p_paths); + struct FileExportCache { uint64_t source_modified_time = 0; String source_md5; |