Files
systemd/mkosi/mkosi.images/build/mkosi.conf.d/arch/mkosi.build.chroot
T
Maximilian Bosch db5f1952f3 mkosi: /bin/bash -> /usr/bin/env bash
This is analogous to a change in mkosi[1] with the same motivation: some
scripts are run to bootstrap the distribution tree and are thus running
directly on the host system which may not have `/bin/bash` (e.g. NixOS).

As with the `mkosi` change, do that for each shebang for consistency
reasons.

[1] https://github.com/systemd/mkosi/commit/8d2cd50e5192cada7211724ecff3514f0c85cf0f
2026-01-11 06:57:49 +01:00

103 lines
3.9 KiB
Bash
Executable File

#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -e
if [[ "$1" == "clangd" ]]; then
exit 0
fi
if [[ ! -f "pkg/$PKG_SUBDIR/PKGBUILD" ]]; then
echo "PKGBUILD not found at pkg/$PKG_SUBDIR/PKGBUILD, run mkosi once with -ff to make sure the PKGBUILD is cloned" >&2
exit 1
fi
MKOSI_CFLAGS="-O0 -g -Wp,-U_FORTIFY_SOURCE"
if ((LLVM)); then
# TODO: Remove -fno-sanitize-function when https://github.com/systemd/systemd/issues/29972 is fixed.
MKOSI_CFLAGS="$MKOSI_CFLAGS -shared-libasan -fno-sanitize=function"
fi
MKOSI_LDFLAGS=""
if ((LLVM)) && [[ -n "$SANITIZERS" ]]; then
MKOSI_LDFLAGS="$MKOSI_LDFLAGS -Wl,-rpath=$(realpath "$(clang --print-runtime-dir)")"
fi
MKOSI_MESON_OPTIONS="-D mode=developer -D vcs-tag=${VCS_TAG:-true} -D b_sanitize=${SANITIZERS:-none} -Dtime-epoch=1744207869"
if ((WIPE)) && [[ -d "$BUILDDIR/meson-private" ]]; then
MKOSI_MESON_OPTIONS="$MKOSI_MESON_OPTIONS --wipe"
fi
if ((COVERAGE)); then
MKOSI_MESON_OPTIONS="$MKOSI_MESON_OPTIONS -D b_coverage=true"
MKOSI_CFLAGS="$MKOSI_CFLAGS -fprofile-dir=/coverage"
fi
# Override the default options. We specifically disable "strip", "zipman" and "lto" as they slow down builds
# significantly. OPTIONS= cannot be overridden on the makepkg command line so we append to /etc/makepkg.conf
# instead. The rootfs is overlaid with a writable tmpfs during the build script so these changes don't end up
# in the image itself.
tee --append /etc/makepkg.conf >/dev/null <<EOF
export CC="$( ((CC)) && echo "$CC" || ((LLVM)) && echo clang || echo gcc)"
export CXX="$( ((CXX)) && echo "$CXX" || ((LLVM)) && echo clang++ || echo g++)"
export CC_LD="$( ((LD)) && echo "$LD" || ((LLVM)) && echo lld)"
export CXX_LD="$( ((LD)) && echo "$LD" || ((LLVM)) && echo lld)"
export CFLAGS="\$CFLAGS $MKOSI_CFLAGS $CFLAGS"
export CXXFLAGS="\$CXXFLAGS $MKOSI_CFLAGS $CFLAGS"
export LDFLAGS="\$LDFLAGS $MKOSI_LDFLAGS $LDFLAGS"
OPTIONS=(
docs
!libtool
!staticlibs
emptydirs
!zipman
purge
$( ((WITH_DEBUG)) && echo strip || echo !strip)
$( ((WITH_DEBUG)) && echo debug || echo !debug)
!lto
)
EOF
TS="${SOURCE_DATE_EPOCH:-$(date +%s)}"
sed "pkg/$PKG_SUBDIR/PKGBUILD" \
--expression "/-Dsysvinit-path=/d" \
--expression "/-Dsysvrcnd-path=/d" \
--expression "s/^pkgver=.*/pkgver=$(cat meson.version)/" \
--expression "s/^pkgrel=.*/pkgrel=$(date "+%Y%m%d%H%M%S" --date "@$TS")/" >/tmp/PKGBUILD
mount --bind /tmp/PKGBUILD "pkg/$PKG_SUBDIR/PKGBUILD"
(
shopt -s nullglob
rm -f "$BUILDDIR"/*.pkg.tar
)
# We can't configure the source or build directory so we use symlinks instead to make sure they are in the
# expected locations. Because we run with --noextract we are responsible for making sure the source files
# appear in src/. This means not only the systemd source directory, but also the patches and configuration
# files that are shipped in the packaging repository. To achieve this, instead of symlinking the systemd
# sources and build directory directly into "pkg/$PKG_SUBDIR/src", we symlink them into "pkg/$PKG_SUBDIR" and
# then symlink "pkg/$PKG_SUBDIR" to "pkg/$PKG_SUBDIR/src".
trap 'rm -f "pkg/$PKG_SUBDIR/src" "pkg/$PKG_SUBDIR/build" "pkg/$PKG_SUBDIR/systemd"' EXIT
ln --symbolic "$SRCDIR" "pkg/$PKG_SUBDIR/systemd"
ln --symbolic "$BUILDDIR" "pkg/$PKG_SUBDIR/build"
ln --symbolic . "pkg/$PKG_SUBDIR/src"
# We get around makepkg's root check by setting EUID to something else.
# Linting the PKGBUILD takes multiple seconds every build so avoid that by nuking all the linting functions.
# shellcheck disable=SC2046
env --chdir="pkg/$PKG_SUBDIR" \
EUID=123 \
MAKEPKG_LINT_PKGBUILD=0 \
makepkg \
--noextract \
--noprepare \
$( ((WITH_TESTS)) || echo --nocheck) \
--clean \
--force \
_systemd_UPSTREAM=1 \
BUILDDIR="$PWD/pkg/$PKG_SUBDIR" \
PKGDEST="$BUILDDIR" \
PKGEXT=".pkg.tar" \
MESON_EXTRA_CONFIGURE_OPTIONS="$MKOSI_MESON_OPTIONS $MESON_OPTIONS"
cp "$BUILDDIR"/*.pkg.tar "$PACKAGEDIR"