summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-08-07 19:31:34 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2024-08-15 04:44:09 +0300
commitb8d318ebeba0710d5a7f8292a02570bb9a886f8b (patch)
tree6d640add70e891f7be19c29332ab29cbc0e1f551
parent53108b6ff1c5ea93bee9f8c5329c840e24f24a8d (diff)
meson: Store controls and properties YAML files in variables
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 as 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@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
-rw-r--r--include/libcamera/meson.build8
-rw-r--r--meson.build4
-rw-r--r--src/libcamera/meson.build2
-rw-r--r--src/py/libcamera/meson.build15
4 files changed, 10 insertions, 19 deletions
diff --git a/include/libcamera/meson.build b/include/libcamera/meson.build
index c8c900eb..36de1c2a 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 59293e47..432ae133 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 c3efc527..79b8cbaf 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 4807ca7d..2e674075 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@'])