[libcamera-devel] [PATCH] libcamera: skip auto version generation when building for Chromium OS

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed Jul 10 13:56:52 CEST 2019


Hi Paul,

Thank you for the patch.

On Wed, Jul 10, 2019 at 08:49:16PM +0900, Paul Elder wrote:
> Commit b817bcec6b53 ("libcamera: Auto generate version information")
> causes the build to fail in the Chromium OS build environment, because
> git update-index tries to take a lock (ie. write) in the git repo that
> is outside of the build directory.
> 
> The solution is to simply skip git update-index if we are building in
> the Chromium OS build environment, and this decision is made if the
> build directory is not a subdirectory of the source directory.

It's a bit of a hack though, so I'd make this clear

"As the build runs in a sandbox that traps write accesses instead of
disallowing them through regular permissions, we can't easily determine
if write access to the source tree is permitted or will cause a fault.
To work around this, check if the build directory is not a subdirectory
of the source directory, in which case we don't assume write access and
skip git update-index. This shouldn't generate too many false positives
as the build directory is typically placed in the source directory
during development, and building packages usually doesn't use a dirty
git tree."

> Signed-off-by: Paul Elder <paul.elder at ideasonboard.com>
> ---
>  meson.build          |  3 ++-
>  utils/gen-version.sh | 11 +++++++++--
>  2 files changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/meson.build b/meson.build
> index 8f3d0ce..99a3a80 100644
> --- a/meson.build
> +++ b/meson.build
> @@ -15,7 +15,8 @@ project('libcamera', 'c', 'cpp',
>  # 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.source_root()).stdout().strip()
> +                                    meson.source_root(),
> +                                    meson.build_root()).stdout().strip()
>  if libcamera_git_version == ''
>      libcamera_git_version = meson.project_version()
>  endif
> diff --git a/utils/gen-version.sh b/utils/gen-version.sh
> index 708c01d..8700479 100755
> --- a/utils/gen-version.sh
> +++ b/utils/gen-version.sh
> @@ -3,7 +3,10 @@
>  # SPDX-License-Identifier: GPL-2.0-or-later
>  # Generate a version string using git describe
>  
> -if [ -n "$1" ]
> +SRC_DIR="$1"
> +BUILD_DIR="$2"

We tend to use lower-case variables.

> +
> +if [ -n $SRC_DIR ]
>  then
>  	cd "$1" 2>/dev/null || exit 1
>  fi
> @@ -24,7 +27,11 @@ fi
>  
>  # Append a '-dirty' suffix if the working tree is dirty. Prevent false
>  # positives due to changed timestamps by running git update-index.
> -git update-index --refresh > /dev/null 2>&1
> +if [ \( -n $SRC_DIR \) -a \( -n $BUILD_DIR \) -a
> +     $(echo $BUILD_DIR | grep $SRC_DIR) ]

How about simplifying this by just returning at the top of the script if
either variable isn't set ? The script is only called by meson, so we
control what parameters get passed to it.

> +then
> +	git update-index --refresh > /dev/null 2>&1
> +fi
>  git diff-index --quiet HEAD || version="$version-dirty"
>  
>  # Replace first '-' with a '+' to denote build metadata, strip the 'g' in from

-- 
Regards,

Laurent Pinchart


More information about the libcamera-devel mailing list