@@ -10,20 +10,30 @@ project('libcamera', 'c', 'cpp',
],
license : 'LGPL 2.1+')
-# Generate version information. The libcamera_git_version variable contains the
-# full version with git patch count and SHA1 (e.g. 1.2.3+211-c94a24f4), while
-# the libcamera_version variable contains the major.minor.patch (e.g. 1.2.3)
-# only. If the source tree isn't under git control, or if it matches the last
-# git version tag, the build metadata (e.g. +211-c94a24f4) is omitted from
-# libcamera_git_version.
-libcamera_git_version = run_command('utils/gen-version.sh',
- meson.build_root()).stdout().strip()
-if libcamera_git_version == ''
- libcamera_git_version = meson.project_version()
+fs_mod = import('fs')
+if not fs_mod.is_file('version.gen')
+ # Generate version information. The libcamera_git_version variable contains the
+ # the full version with git patch count and SHA1 (e.g. 1.2.3+211-c94a24f4), while
+ # the libcamera_version variable contains the major.minor.patch (e.g. 1.2.3)
+ # only. If the source tree isn't under git control, or if it matches the last
+ # git version tag, the build metadata (e.g. +211-c94a24f4) is omitted from
+ # libcamera_git_version.
+ libcamera_git_version = run_command('utils/gen-version.sh',
+ meson.build_root()).stdout().strip()
+ if libcamera_git_version == ''
+ libcamera_git_version = meson.project_version()
+ endif
+else
+ # Read the version information from the file generated by the utils/run-dist.sh
+ # script on a 'meson dist' command.
+ libcamera_git_version = run_command(['cat', 'version.gen']).stdout().strip()
endif
libcamera_version = libcamera_git_version.split('+')[0]
+# This script gererates the version.gen 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')
@@ -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)
+version_cpp = configure_file(input : 'version.cpp.in',
+ output : 'version.cpp',
+ configuration : version_data)
libcamera_sources += version_cpp
new file mode 100644
@@ -0,0 +1,9 @@
+#!/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 late be picked up by the build system and used in place of running
+# the utils/gen-version.sh script again since we may not be running in the
+# upstream git source tree, and so version information would be lost.
+"$MESON_DIST_ROOT"/utils/gen-version.sh > "$MESON_DIST_ROOT"/version.gen
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 version.gen file in the release tarball with the version string generated from the existing utils/gen-version.sh script. The build system has been updated to check for the presence of this version.gen file and read the version string from it. If the file is not present, the version string is generated by running utils/gen-version.sh as it currently does. Signed-off-by: Naushir Patuck <naush@raspberrypi.com> --- meson.build | 30 ++++++++++++++++++++---------- src/libcamera/meson.build | 11 +++++------ utils/run-dist.sh | 9 +++++++++ 3 files changed, 34 insertions(+), 16 deletions(-) create mode 100644 utils/run-dist.sh