#!/bin/bash
# Copyright 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Wrapper for execution of cross-compiled introspection binaries.
#
# gobject-introspection compiles small binaries for the target and executes them
# at build time in order to dump introspection metadata for various libraries on
# the target. Since these binaries are compiled for the target and not the build
# host they cannot be run normally. This script uses the platform2_test wrapper
# to find the appropriate QEMU wrapper to emulate the target and to chroot into
# the sysroot in order to be able to succesfully execute these cross-compiled
# binaries.
#
# We pass the sysroot as an explicit argument to the platform2_test wrapper as
# well as the following arguments:
#
# 1. The platform2_test wrapper filters environment variables by a small
#    allow-list. We explicitly forward the default value of LD_LIBRARY_PATH
#    through the wrapper and add an additional value: Some of the introspection
#    binaries need to link against a shared object built in
#    gobject-introspection itself, which hasn't yet been installed to the
#    sysroot since we're still in the compile phase of the package itself. So we
#    add a subdirectory of the package's WORKDIR to LD_LIBRARY_PATH that we know
#    contains the build artifacts so that the loader can properly discover them.
#    We strip any leading instances of $SYSROOT from the WORKDIR path since we
#    will be chroot-ing into the sysoot as part of the introspection binary
#    execution.
#
# 2. Remove all instances of $SYSROOT from arguments to the introspection
#    binaries. This also done because we are chroot-ing into sysroot already.
#    `/build/$board` becomes `/`, so
#    `--library-path='/build/$board/usr/lib/libfoo'` needs to become
#    `--library-path='/usr/lib/libfoo'`.

"${CHROOT_SOURCE_ROOT}"/src/platform2/common-mk/platform2_test.py \
    --sysroot="${SYSROOT}" \
    --env LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${WORKDIR/${SYSROOT}/}/${P}-build/girepository/" \
    -- \
    "${@//${SYSROOT}/}"
