[libcamera-devel] [PATCH] py: Use Meson python module

Tomi Valkeinen tomi.valkeinen at ideasonboard.com
Mon May 16 16:43:20 CEST 2022


Hi,

On 15/05/2022 20:02, Chris Mayo via libcamera-devel wrote:
> Detection with dependency('python3') can fail because not all
> distributions install python-3.pc. Installation is invalid if
> site-packages is not below get_option('libdir').

I don't understand the comment about libdir. Do you mean that this 
installs to the wrong dir if the platform's python site-packages are not 
located under get_option('libdir')?

> Signed-off-by: Chris Mayo <aklhfex at gmail.com>
> ---
>   src/py/libcamera/meson.build | 27 ++++++++++++---------------
>   1 file changed, 12 insertions(+), 15 deletions(-)
> 
> diff --git a/src/py/libcamera/meson.build b/src/py/libcamera/meson.build
> index 0cd7c75b..130c1be6 100644
> --- a/src/py/libcamera/meson.build
> +++ b/src/py/libcamera/meson.build
> @@ -1,6 +1,8 @@
>   # SPDX-License-Identifier: CC0-1.0
>   
> -py3_dep = dependency('python3', required : get_option('pycamera'))
> +pymod = import('python')
> +py3 = pymod.find_installation('python3')
> +py3_dep = py3.dependency(required : get_option('pycamera'))
>   
>   if not py3_dep.found()
>       pycamera_enabled = false
> @@ -44,21 +46,16 @@ pycamera_args = [
>       '-DLIBCAMERA_BASE_PRIVATE',
>   ]
>   
> -destdir = get_option('libdir') / ('python' + py3_dep.version()) / 'site-packages' / 'libcamera'
> +py3.extension_module('_libcamera',
> +                     pycamera_sources,
> +                     install : true,
> +                     dependencies : pycamera_deps,
> +                     cpp_args : pycamera_args,
> +                     subdir : 'libcamera')

The problem is that this doesn't work with cross-compiling. When I 
compile for ARM, I get "_libcamera.cpython-310-x86_64-linux-gnu.so".

If I remember right, I discussed the use of py.extension_module() on 
meson chat, but the conclusion was that it doesn't work for 
cross-compiling. This may have changed, but at least here it doesn't work.

> -pycamera = shared_module('_libcamera',
> -                         pycamera_sources,
> -                         install : true,
> -                         install_dir : destdir,
> -                         name_prefix : '',
> -                         dependencies : pycamera_deps,
> -                         cpp_args : pycamera_args)
> -
> -run_command('ln', '-fsT', '../../../../src/py/libcamera/__init__.py',
> -            meson.current_build_dir() / '__init__.py',
> -            check: true)

Was there a reason to remove this symlink? I want to be able to use the 
bindings without installing. That's the purpose of the symlink.

  Tomi


More information about the libcamera-devel mailing list