From c57eaf77571765461a83cde7e01a57460f02ff87 Mon Sep 17 00:00:00 2001 From: mendrak Date: Thu, 19 Sep 2024 20:56:02 -0700 Subject: [PATCH] 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. --- editor/export/editor_export_platform.cpp | 26 +++++++++++++++++++++++- editor/export/editor_export_platform.h | 2 ++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/editor/export/editor_export_platform.cpp b/editor/export/editor_export_platform.cpp index 91c9ff9807c..27216c2399a 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 & Vector forced_export = get_forced_export_files(); for (int i = 0; i < forced_export.size(); i++) { - Vector array = FileAccess::get_file_as_bytes(forced_export[i]); + Vector 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 & return OK; } +Vector EditorExportPlatform::_filter_extension_list_config_file(const String &p_config_path, const HashSet &p_paths) { + Ref f = FileAccess::open(p_config_path, FileAccess::READ); + if (f.is_null()) { + ERR_FAIL_V_MSG(Vector(), "Can't open file from path '" + String(p_config_path) + "'."); + } + Vector 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 c7378ffec7e..a33bdce72a7 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 &da, const Vector &p_filters, HashSet &r_list, bool exclude); void _edit_filter_list(HashSet &r_list, const String &p_filter, bool exclude); + static Vector _filter_extension_list_config_file(const String &p_config_path, const HashSet &p_paths); + struct FileExportCache { uint64_t source_modified_time = 0; String source_md5;