[PATCH 01/10] meson: Store controls and properties YAML files in variables
Paul Elder
paul.elder at ideasonboard.com
Thu Aug 15 03:31:59 CEST 2024
On Fri, Aug 09, 2024 at 03:59:05AM +0300, Laurent Pinchart wrote:
> 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>
Reviewed-by: Paul Elder <paul.elder 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