[PATCH 01/10] meson: Store controls and properties YAML files in variables

Laurent Pinchart laurent.pinchart at ideasonboard.com
Fri Aug 9 02:59:05 CEST 2024


When generating control headers, the YAML files to be used are
determined dynamically based on the selected pipeline handlers. As part
of this process, the build system populates an array of meson File
objects used an an input for the control headers generation custom
target, as well as an array of file names (as strings). The file names
array is later used to generate the control source files for the
libcamera core, as well as the source code for controls support in the
Python bindings.

Both of the source code generators manually turn the array of file names
into File objects. This duplicates code and reduces readability. A third
similar implementation has also been proposed to generate control
support sources in the GStreamer element, making the issue worse.

To simplify this, store File objects instead of file names in the
controls_files array. As the meson configuration summary doesn't support
File objects, create a separate controls_files_names to store the file
names for that sole purpose.

The exact same process occurs for properties, address them the same way.

Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
---
 include/libcamera/meson.build |  8 ++++++--
 meson.build                   |  4 ++--
 src/libcamera/meson.build     |  2 --
 src/py/libcamera/meson.build  | 15 ++-------------
 4 files changed, 10 insertions(+), 19 deletions(-)

diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index c8c900eba66a..36de1c2a393c 100644
--- a/include/libcamera/meson.build
+++ b/include/libcamera/meson.build
@@ -47,7 +47,9 @@ controls_map = {
 
 control_headers = []
 controls_files = []
+controls_files_names = []
 properties_files = []
+properties_files_names = []
 
 foreach mode, entry : controls_map
     files_list = []
@@ -70,10 +72,12 @@ foreach mode, entry : controls_map
     outfile = ''
     if mode == 'controls'
         outfile = 'control_ids.h'
-        controls_files += files_list
+        controls_files += input_files
+        controls_files_names += files_list
     else
         outfile = 'property_ids.h'
-        properties_files += files_list
+        properties_files += input_files
+        properties_files_names += files_list
     endif
 
     template_file = files(outfile + '.in')
diff --git a/meson.build b/meson.build
index 59293e478b00..432ae1337b4a 100644
--- a/meson.build
+++ b/meson.build
@@ -278,8 +278,8 @@ py_mod.find_installation('python3', modules : py_modules)
 summary({
             'Enabled pipelines': pipelines,
             'Enabled IPA modules': enabled_ipa_names,
-            'Controls files': controls_files,
-            'Properties files': properties_files,
+            'Controls files': controls_files_names,
+            'Properties files': properties_files_names,
             'Hotplug support': libudev.found(),
             'Tracing support': tracing_enabled,
             'Android support': android_enabled,
diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
index c3efc5278ec8..79b8cbaf1311 100644
--- a/src/libcamera/meson.build
+++ b/src/libcamera/meson.build
@@ -134,8 +134,6 @@ controls_mode_files = {
 }
 
 foreach mode, input_files : controls_mode_files
-    input_files = files(input_files)
-
     if mode == 'controls'
         template_file = files('control_ids.cpp.in')
     else
diff --git a/src/py/libcamera/meson.build b/src/py/libcamera/meson.build
index 4807ca7d75ed..2e67407598db 100644
--- a/src/py/libcamera/meson.build
+++ b/src/py/libcamera/meson.build
@@ -28,32 +28,21 @@ pycamera_sources = files([
 
 # Generate controls
 
-gen_py_controls_input_files = []
 gen_py_controls_template = files('py_controls_generated.cpp.in')
-
 gen_py_controls = files('gen-py-controls.py')
 
-foreach file : controls_files
-    gen_py_controls_input_files += files('../../libcamera/' + file)
-endforeach
-
 pycamera_sources += custom_target('py_gen_controls',
-                                  input : gen_py_controls_input_files,
+                                  input : controls_files,
                                   output : ['py_controls_generated.cpp'],
                                   command : [gen_py_controls, '--mode', 'controls', '-o', '@OUTPUT@',
                                              '-t', gen_py_controls_template, '@INPUT@'])
 
 # Generate properties
 
-gen_py_property_enums_input_files = []
 gen_py_properties_template = files('py_properties_generated.cpp.in')
 
-foreach file : properties_files
-    gen_py_property_enums_input_files += files('../../libcamera/' + file)
-endforeach
-
 pycamera_sources += custom_target('py_gen_properties',
-                                  input : gen_py_property_enums_input_files,
+                                  input : properties_files,
                                   output : ['py_properties_generated.cpp'],
                                   command : [gen_py_controls, '--mode', 'properties', '-o', '@OUTPUT@',
                                              '-t', gen_py_properties_template, '@INPUT@'])
-- 
Regards,

Laurent Pinchart



More information about the libcamera-devel mailing list