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

Dan Scally dan.scally at ideasonboard.com
Wed Aug 14 23:50:09 CEST 2024


Hi Laurent - thanks for the set

On 09/08/2024 01:59, 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
s/an an/as an
> 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: Daniel Scally <dan.scally 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@'])


More information about the libcamera-devel mailing list