[libcamera-devel] [PATCH v2] meson: Use library() in order to let user chose the library type

Kieran Bingham kieran.bingham at ideasonboard.com
Wed Dec 7 13:05:18 CET 2022


Hi Christian,

Quoting Christian Rauch via libcamera-devel (2022-12-02 21:08:18)
> Defining libraries via shared_library() prevents compiling libcamera as
> static library. The meson project recommends using library() instead of
> shared_library(), static_library() or both_libraries():
> https://mesonbuild.com/Reference-manual_functions.html#library

I'm afraid I'm a bit worried by this patch. It's not clear what you're
trying to solve?

libcamera doesn't really fit well to static library usage in my opinion.
(At least not right now).

Because libcamera dynamically loads IPA modules, which are identified by
a configured path - the implementation of the both the library and the
IPA's should 'match'. We do have an ability to version match IPA
components, but I don't think it's used right now. Perhaps we should tie
that to the version number of libcamera at least. (It was supposed to be
an IPA interface specific version number).

If you statically link in libcamera to an application, you won't be able
to statically link in the IPA modules, and I would be worried that this
would cause support issues in the future.

If you are trying to ensure your application does not use a distribution
provided package of libcamera, I would recommend instead building a
custom libcamera with a custom -Dprefix=/usr/local/mylibcamera/ and
using that to link against with your application. Then all the search
paths will be correct, and it would function without the distribution
installed package.

--
Kieran




> Signed-off-by: Christian Rauch <Rauch.Christian at gmx.de>
> ---
>  src/libcamera/base/meson.build | 18 +++++++++---------
>  src/libcamera/meson.build      | 18 +++++++++---------
>  2 files changed, 18 insertions(+), 18 deletions(-)
> 
> diff --git a/src/libcamera/base/meson.build b/src/libcamera/base/meson.build
> index 7a7fd7e4..91dc1e71 100644
> --- a/src/libcamera/base/meson.build
> +++ b/src/libcamera/base/meson.build
> @@ -48,15 +48,15 @@ libcamera_base_deps = [
>  # the use of headers which must not be exposed to the libcamera public api.
>  libcamera_base_args = [ '-DLIBCAMERA_BASE_PRIVATE' ]
> 
> -libcamera_base_lib = shared_library('libcamera-base',
> -                                    [libcamera_base_sources, libcamera_base_headers],
> -                                    version : libcamera_version,
> -                                    soversion : libcamera_soversion,
> -                                    name_prefix : '',
> -                                    install : true,
> -                                    cpp_args : libcamera_base_args,
> -                                    include_directories : libcamera_includes,
> -                                    dependencies : libcamera_base_deps)
> +libcamera_base_lib = library('libcamera-base',
> +                             [libcamera_base_sources, libcamera_base_headers],
> +                             version : libcamera_version,
> +                             soversion : libcamera_soversion,
> +                             name_prefix : '',
> +                             install : true,
> +                             cpp_args : libcamera_base_args,
> +                             include_directories : libcamera_includes,
> +                             dependencies : libcamera_base_deps)
> 
>  libcamera_base = declare_dependency(sources : [
>                                          libcamera_base_headers,
> diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> index 0494e808..cd1bf4ed 100644
> --- a/src/libcamera/meson.build
> +++ b/src/libcamera/meson.build
> @@ -163,15 +163,15 @@ libcamera_deps = [
>  # runtime if the library is running from an installed location by checking
>  # for the presence or abscence of the dynamic tag.
> 
> -libcamera = shared_library('libcamera',
> -                           libcamera_sources,
> -                           version : libcamera_version,
> -                           soversion : libcamera_soversion,
> -                           name_prefix : '',
> -                           install : true,
> -                           include_directories : includes,
> -                           build_rpath : '/',
> -                           dependencies : libcamera_deps)
> +libcamera = library('libcamera',
> +                    libcamera_sources,
> +                    version : libcamera_version,
> +                    soversion : libcamera_soversion,
> +                    name_prefix : '',
> +                    install : true,
> +                    include_directories : includes,
> +                    build_rpath : '/',
> +                    dependencies : libcamera_deps)
> 
>  libcamera_public = declare_dependency(sources : [
>                                            libcamera_ipa_headers,
> --
> 2.34.1
>


More information about the libcamera-devel mailing list