[libcamera-devel] [PATCH] package metadata

Christian Rauch Rauch.Christian at gmx.de
Sat Aug 13 22:59:40 CEST 2022


Hi Laurent,

I can understand (and was kind of expecting) that you do not want to add
that file.

While those build systems (catkin, colcon) can be used independently of
ROS, they are not used widely outside of ROS at the moment. I intend to
package "libcamera" and use it in a camera node. For this, I have to
provide the package.xml. If this is not merged upstream, I will have to
patch the file in. This is why I was hoping that the file could be
merged, and I do not have to manually patch the file for every release.

Regarding bitrot... The solution is to just run a colcon build job. This
is simplified with actions on GitHub:
https://github.com/christianrauch/libcamera-ci/blob/ci/.github/workflows/colcon.yml.
If you have a custom build server somewhere, I could add a CI job for
colcon there.

If bitrot is the only concern, then I am offering to maintain the
package.xml and its build job, in return for not having to manually
patch that file :-)

Best,
Christian


Am 13.08.22 um 18:30 schrieb Laurent Pinchart:
> Hi Christian,
>
> On Sat, Aug 13, 2022 at 12:40:36AM +0200, Christian Rauch via libcamera-devel wrote:
>> Am 12.08.22 um 00:34 schrieb Laurent Pinchart:
>>> On Thu, Aug 11, 2022 at 09:52:30PM +0200, Christian Rauch via libcamera-devel wrote:
>>>> This metadata file provides information, amongst others, about the version,
>>>> licence, maintainers and build dependencies. This file is used by build
>>>> systems (catkin, colcon) to manage a dependency graph and resolve those
>>>> dependencies automatically.
>>>>
>>>> The file structure is defined at: https://www.ros.org/reps/rep-0149.html
>>>>
>>>> Signed-off-by: Christian Rauch <Rauch.Christian at gmx.de>
>>>> ---
>>>>  package.xml | 32 ++++++++++++++++++++++++++++++++
>>>>  1 file changed, 32 insertions(+)
>>>>  create mode 100644 package.xml
>>>>
>>>> diff --git a/package.xml b/package.xml
>>>> new file mode 100644
>>>> index 00000000..8b06f507
>>>> --- /dev/null
>>>> +++ b/package.xml
>>>> @@ -0,0 +1,32 @@
>>>> +<?xml version="1.0"?>
>>>> +<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
>>>> +<package format="3">
>>>> +  <name>libcamera</name>
>>>> +
>>>> +  <version>0.0.0</version>
>>>> +
>>>> +  <description>An open source camera stack and framework for Linux, Android, and ChromeOS</description>
>>>> +
>>>> +  <maintainer email="libcamera-devel at lists.libcamera.org">libcamera project</maintainer>
>>>> +
>>>> +  <license>LGPL-2.1</license>
>>>> +
>>>> +  <url>https://libcamera.org</url>
>>>> +
>>>> +  <buildtool_depend>python3-meson-pip</buildtool_depend>
>>>> +  <buildtool_depend>ninja-build</buildtool_depend>
>>>> +
>>>> +  <build_depend>python3-yaml</build_depend>
>>>> +  <build_depend>python3-ply</build_depend>
>>>> +  <build_depend>python3-jinja2</build_depend>
>>>> +
>>>> +  <depend>libgnutls28-dev</depend>
>>>> +  <depend>openssl</depend>
>>>
>>> openssl is a build dependency. Since a few days ago, it can also
>>> optionally be a runtime dependency to replace gnutls.
>>>
>>>> +  <depend>boost</depend>
>>>
>>> We don't depend on boost anymore.
>>>
>>>> +  <depend>libudev-dev</depend>
>>>> +  <depend>libunwind-dev</depend>
>>>
>>> These two dependencies are optional. I'm curious, how are optional
>>> dependencies supposed to be handled ? package.xml seems specific to ROS,
>>> does it need to pick a set of options that will be enabled in the
>>> context of ROS, and then list the corresponding dependencies here ? If
>>> so, how would libcamera be built on ROS, how are the meson configuration
>>> option set ?
>>
>> There is no way to define or handle optional dependencies. The
>> "package.xml" does not interact with the options for the build system.
>>
>> While this kind of metadata definition originates from ROS, it can be
>> used in conjunction with colcon and rosdep to build plain CMake or meson
>> packages without any dependencies on ROS packages. "colcon" is a kind of
>> meta build system to build large sets of packages with cross source
>> dependencies, and "rosdep" is a tool to install binary dependencies via
>> distribution packages.
>>
>> Running "colcon build" will run with the default configuration. You can
>> pass meson specific options via "--meson-args". However, there is no way
>> to let the "package.xml" and "rosdep" know which of those dependencies
>> are optional and depending on some build options. I am not sure if there
>> is a way to specify package-specific build options inside the package.
>> However, since libcamera defines most features as auto, you could simply
>> add those optional dependencies to the metadata and let libcamera
>> activate that feature automatically.
>
> This sounds to me like package.xml is then similar to OpenEmbedded .bb
> recipes, or to the Buildroot package .mk files. I'm not very
> enthousiastic about carrying in the libcamera repository package
> descriptions for lots of different build systems, they don't really seem
> to belong to libcamera. They're also bound to bitrot as we won't test
> them.
>
>>>> +
>>>> +  <export>
>>>> +    <build_type>meson</build_type>
>>>> +  </export>
>>>> +</package>
>


More information about the libcamera-devel mailing list