[sdk/kde-builder] kde_builder_lib: refactor: Pass deferred options as OptionsBase objects to set_deferred_options()

Andrew Shark <[email protected]>
Newsgroups gmane.comp.kde.cvs
Message-ID <[email protected]>
Git commit 8835ad15b2ddc0959c8dc86bfc9eea3412965ae2 by Andrew Shark.
Committed on 29/07/2026 at 22:13.
Pushed by ashark into branch 'master'.

refactor: Pass deferred options as OptionsBase objects to set_deferred_options()

M  +6    -12   kde_builder_lib/application.py
M  +5    -4    kde_builder_lib/module_resolver.py

https://invent.kde.org/sdk/kde-builder/-/commit/8835ad15b2ddc0959c8dc86bfc9eea3412965ae2

diff --git a/kde_builder_lib/application.py b/kde_builder_lib/application.py
index d33fd6aa..ad0342f5 100644
--- a/kde_builder_lib/application.py
+++ b/kde_builder_lib/application.py
@@ -171,7 +171,7 @@ class Application:
         # returned modules/sets have any such options stripped out. It will also add
         # module-specific options to any returned modules/sets.
         modules_and_sets_from_userconfig: list[Module | ModuleSet]
-        overrides_from_userconfig: list[dict[str, str | dict]]  # "override" nodes.
+        overrides_from_userconfig: list[OptionsBase]  # "override" nodes.
         modules_and_sets_from_userconfig, overrides_from_userconfig = self._process_configs_content(ctx, ctx.rc_file, cmdline_global_options)
 
         ctx.load_persistent_options()
@@ -675,7 +675,7 @@ class Application:
         exit(exitcode)
 
     @staticmethod
-    def _process_configs_content(ctx: BuildContext, config_path: str, cmdline_global_options: dict) -> tuple[list[Module | ModuleSet], list[dict[str, str | dict]]]:
+    def _process_configs_content(ctx: BuildContext, config_path: str, cmdline_global_options: dict) -> tuple[list[Module | ModuleSet], list[OptionsBase]]:
         """
         Read in the settings from the configuration.
 
@@ -751,7 +751,7 @@ class Application:
         seen_modules = {}  # NOTE! *not* module-sets, *just* modules.
         seen_module_sets = {}  # and vice versa
         # seen_module_set_items = {}  # To track option override modules.
-        deferred_options: list[dict[str, str | dict]] = []
+        deferred_options: list[OptionsBase] = []
 
         for node_name, node, config_filename in config_nodes_list:
             if node_name.startswith("group "):
@@ -806,17 +806,11 @@ class Application:
             if node_name.startswith("override "):
                 options_name = node_name.split(" ", maxsplit=1)[1]
                 assert options_name  # ensure the options has some name
-                options: OptionsBase = OptionsBase(ctx)
+                options: OptionsBase = OptionsBase(ctx, options_name)
                 options.apply_config_options(ctx, node, config_filename)
 
-                deferred_options.append({
-                    "name": options_name,
-                    "opts": options.options
-                })
-
-                # NOTE: There is no duplicate options block checking here, and we now currently rely on there being no duplicate checks to allow
-                # for things like kf5-common-options.ksb to be included multiple times.
-                continue  # Don't add to module list
+                deferred_options.append(options)
+                continue
 
         for name, module_set in seen_module_sets.items():
             pass
diff --git a/kde_builder_lib/module_resolver.py b/kde_builder_lib/module_resolver.py
index d046bddb..19a60003 100644
--- a/kde_builder_lib/module_resolver.py
+++ b/kde_builder_lib/module_resolver.py
@@ -15,6 +15,7 @@ from .kb_exception import UnknownKdeProjectException
 from .debug import KBLogger
 from .module.module import Module
 from .module_set.module_set import ModuleSet
+from .options_base import OptionsBase
 
 if TYPE_CHECKING:
     from build_context import BuildContext
@@ -69,7 +70,7 @@ class ModuleResolver:
         self.explicit_group_selectors: list[str] = []
         self.explicit_thirdparty_selectors: list[str] = []
 
-    def set_deferred_options(self, deferred_options: list[dict[str, str | dict]]) -> None:
+    def set_deferred_options(self, deferred_options: list[OptionsBase]) -> None:
         """
         Set options to apply later if a module set resolves to a named module, used for "override" nodes.
 
@@ -83,7 +84,7 @@ class ModuleResolver:
         final_opts: dict[str, dict] = {}
 
         for idx, deferred_entry in enumerate(deferred_options):
-            opts = deferred_entry["opts"]
+            opts = deferred_entry.options
             referenced_modules = opts.get("use-projects", None)
 
             # Skip "override" nodes that don't reference module-sets
@@ -112,8 +113,8 @@ class ModuleResolver:
         # and overlay any new options on
 
         for idx, deferred_entry in enumerate(deferred_options):
-            name = deferred_entry["name"]
-            opts = deferred_entry["opts"]
+            name = deferred_entry.name
+            opts = deferred_entry.options
 
             if name in final_opts:
                 final_opts[name].update(opts)
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.