[libcamera-devel] [PATCH v3] build: Preserve upstream git versioning using meson dist

Naushir Patuck naush at raspberrypi.com
Thu Oct 14 14:18:38 CEST 2021


Hi Kieran,

On Thu, 14 Oct 2021 at 13:16, Kieran Bingham <
kieran.bingham at ideasonboard.com> wrote:

> Quoting Naushir Patuck (2021-10-14 11:16:35)
> > When distributions build and package libcamera libraries, they may not
> > necessarily run the build in the upstream source tree. In these cases,
> the git
> > SHA1 versioning information will be lost.
> >
> > This change addresses that problem by requiring package managers to run
> > 'meson dist' to create a tarball of the source files and build from
> there.
> > On runing 'meson dist', the utils/run-dist.sh script will create a
> > .tarball-version file in the release tarball with the version string
> generated
> > from the existing utils/gen-version.sh script.
> >
> > The utils/gen-version.sh script has been updated to check for the
> presence of
> > this .tarball-version file and read the version string from it instead of
> > creating one.
> >
> > Signed-off-by: Naushir Patuck <naush at raspberrypi.com>
> > ---
> >  meson.build               |  3 +++
> >  src/libcamera/meson.build | 11 +++++------
> >  utils/gen-version.sh      |  9 +++++++++
> >  utils/run-dist.sh         | 11 +++++++++++
> >  4 files changed, 28 insertions(+), 6 deletions(-)
> >  create mode 100644 utils/run-dist.sh
> >
> > diff --git a/meson.build b/meson.build
> > index a49c484fe64e..67be6762108c 100644
> > --- a/meson.build
> > +++ b/meson.build
> > @@ -24,6 +24,9 @@ endif
> >
> >  libcamera_version = libcamera_git_version.split('+')[0]
> >
> > +# This script gererates the .tarball-version file on a 'meson dist'
> command.
> > +meson.add_dist_script('utils/run-dist.sh')
> > +
> >  # Configure the build environment.
> >  cc = meson.get_compiler('c')
> >  cxx = meson.get_compiler('cpp')
> > diff --git a/src/libcamera/meson.build b/src/libcamera/meson.build
> > index 243dd3c180eb..360eaf80ecf1 100644
> > --- a/src/libcamera/meson.build
> > +++ b/src/libcamera/meson.build
> > @@ -93,12 +93,11 @@ endforeach
> >
> >  libcamera_sources += control_sources
> >
> > -gen_version = meson.source_root() / 'utils' / 'gen-version.sh'
> > -
> > -version_cpp = vcs_tag(command : [gen_version, meson.build_root()],
> > -                      input : 'version.cpp.in',
> > -                      output : 'version.cpp',
> > -                      fallback : meson.project_version())
> > +version_data = configuration_data()
> > +version_data.set('VCS_TAG', libcamera_git_version)
>
> configuration_data() is already available as config_h, so I think we can
> use that directly instead of version_data.
>
> > +version_cpp = configure_file(input : 'version.cpp.in',
> > +                             output : 'version.cpp',
> > +                             configuration : version_data)
> >
> >  libcamera_sources += version_cpp
> >
> > diff --git a/utils/gen-version.sh b/utils/gen-version.sh
> > index b09ad495f86a..216b1ff0b33e 100755
> > --- a/utils/gen-version.sh
> > +++ b/utils/gen-version.sh
> > @@ -5,6 +5,15 @@
> >
> >  build_dir="$1"
> >
> > +# If .tarball-version exists, output the version string from the file
> and exit.
> > +# This file is auto-generated on a 'meson dist' command from the
> run-dist.sh
> > +# script.
> > +if [ -f "${MESON_SOURCE_ROOT}"/.tarball-version ]
> > +then
> > +       cat "${MESON_SOURCE_ROOT}"/.tarball-version
> > +       exit 0
> > +fi
> > +
>
> I'm not sure I'm keen on tieing this script to require MESON variables.
>
> Would this script need to read .tarball-version if called externally
> from meson? Perhaps not...
>
>
> The script already processes $1 as the build_dir as passed from meson.
>
> The sources are available under $build_dir/sources/ ... so I wonder if
> it's cleaner to use that somehow.
>
> But it's probably fine to use the env variables too.
>

Oops, this change has been superseded with v4.  In that version, we do
not use the env variables anymore.  They are instead passed into the
script as cmd line arguments.

Regards,
Naush


>
> --
> Kieran
>
>
>
> >  # Bail out if the directory isn't under git control
> >  src_dir=$(git rev-parse --git-dir 2>&1) || exit 1
> >  src_dir=$(readlink -f "$src_dir/..")
> > diff --git a/utils/run-dist.sh b/utils/run-dist.sh
> > new file mode 100644
> > index 000000000000..e89c3733b56c
> > --- /dev/null
> > +++ b/utils/run-dist.sh
> > @@ -0,0 +1,11 @@
> > +#!/bin/sh
> > +
> > +# SPDX-License-Identifier: GPL-2.0-or-later
> > +#
> > +# On a meson dist run, generate the version string and store it in a
> file.
> > +# This will later be picked up by the utils/gen-version.sh script and
> used
> > +# instead of re-generating it. This way, if we are not building in the
> upstream
> > +# git source tree, the upstream version information will be preserved.
> > +
> > +cd "$MESON_SOURCE_ROOT" || return
> > +./utils/gen-version.sh > "$MESON_DIST_ROOT"/.tarball-version
> > --
> > 2.25.1
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.libcamera.org/pipermail/libcamera-devel/attachments/20211014/943fb278/attachment-0001.htm>


More information about the libcamera-devel mailing list