Files
NetworkManager/contrib/fedora/rpm/build_clean.sh
Michael Biebl 10e58f7c3c typo fix: allows to -> allows one to
Detected by lintian:

Example:
I: network-manager: typo-in-manual-page "allows to" "allows one to" [usr/share/man/man5/NetworkManager.conf.5.gz:1266]
2025-03-26 19:22:01 +01:00

252 lines
8.1 KiB
Bash
Executable File

#!/bin/bash
set -e
set -o pipefail
die() {
echo "$*" >&2
exit 1
}
usage() {
echo "USAGE: $0 [-h|--help|-?|help] [-f|--force] [-c|--clean] [-S|--srpm] [-g|--git] [-Q|--quick] [-N|--no-dist] [[-w|--with OPTION] ...] [[-W|--without OPTION] ...]"
echo
echo "Does all the steps from a clean git working directory to an RPM of NetworkManager"
echo
echo "This is also the preferred way to create a distribution tarball for release:"
echo " $ $0 -r"
echo
echo "Options:"
echo " -f|--force: force build, even if working directory is not clean and has local modifications"
echo " -c|--clean: run \`git-clean -fdx :/\` before build"
echo " -S|--srpm: only build the SRPM"
echo " -g|--git: create tarball from current git HEAD (skips meson dist)"
echo " -Q|--quick: only create the distribution tarball, without running checks"
echo " -N|--no-dist: skip creating the source tarball if you already did \`meson dist\`"
echo " -w|--with \$OPTION: pass --with \$OPTION to rpmbuild. For example --with debug"
echo " -W|--without \$OPTION: pass --without \$OPTION to rpmbuild. For example --without debug"
echo " -s|--snapshot TEXT: use TEXT as the snapshot version for the new package (overwrites \$NM_BUILD_SNAPSHOT environment)"
echo " -r|--release: built a release tarball (this option must be alone)"
echo " --default-for-debug \$OPTION: set the default for "debug" option in the generated spec file"
echo " --default-for-lto \$OPTION: set the default for "lto" option in the generated spec file"
echo " --default-for-test \$OPTION: set the default for "test" option in the generated spec file"
}
in_set() {
local v="$1"
shift
for v2; do
test "$v" = "$v2" && return 0
done
return 1
}
ORIGDIR="$(readlink -f "$PWD")"
SCRIPTDIR="$(dirname "$(readlink -f "$0")")"
GITDIR="$(cd "$SCRIPTDIR" && git rev-parse --show-toplevel || die "Could not get GITDIR")"
[[ -x "$SCRIPTDIR"/build.sh ]] || die "could not find \"$SCRIPTDIR/build.sh\""
cd "$GITDIR" || die "could not change to $GITDIR"
IGNORE_DIRTY=0
GIT_CLEAN=0
QUICK=0
NO_DIST=0
WITH_LIST=()
SOURCE_FROM_GIT=0
SNAPSHOT="$NM_BUILD_SNAPSHOT"
DO_RELEASE=0
unset BCOND_DEFAULT_DEBUG
unset BCOND_DEFAULT_LTO
unset BCOND_DEFAULT_TEST
ADD_WITH_TEST=1
NARGS=$#
while [[ $# -gt 0 ]]; do
A="$1"
shift
case "$A" in
-h|--help|-\?|help)
usage
exit 0
;;
-f|--force)
IGNORE_DIRTY=1
;;
-r|--release)
[[ $NARGS -eq 1 ]] || die "--release option must be alone"
export NMTST_CHECK_GTK_DOC=1
BUILDTYPE=SRPM
DO_RELEASE=1
;;
-c|--clean)
GIT_CLEAN=1
;;
-S|--srpm)
BUILDTYPE=SRPM
;;
-s|--snapshot)
[[ $# -gt 0 ]] || die "Missing argument to $A"
SNAPSHOT="$1"
shift
;;
-g|--git)
NO_DIST=1
IGNORE_DIRTY=1
SOURCE_FROM_GIT=1
;;
-Q|--quick)
QUICK=1
;;
-N|--no-dist)
NO_DIST=1
IGNORE_DIRTY=1
SOURCE_FROM_GIT=0
;;
-w|--with)
[[ $# -gt 0 ]] || die "Missing argument to $A"
WITH_LIST=("${WITH_LIST[@]}" "--with" "$1")
case "$1" in
debug)
[[ -z ${BCOND_DEFAULT_DEBUG+.} ]] && BCOND_DEFAULT_DEBUG=1
;;
lto)
[[ -z ${BCOND_DEFAULT_LTO+.} ]] && BCOND_DEFAULT_LTO=1
;;
test)
ADD_WITH_TEST=0
[[ -z ${BCOND_DEFAULT_TEST+.} ]] && BCOND_DEFAULT_TEST=1
;;
esac
shift
;;
-W|--without)
[[ $# -gt 0 ]] || die "Missing argument to $A"
WITH_LIST=("${WITH_LIST[@]}" "--without" "$1")
case "$1" in
debug)
[[ -z ${BCOND_DEFAULT_DEBUG+.} ]] && BCOND_DEFAULT_DEBUG=0
;;
lto)
[[ -z ${BCOND_DEFAULT_LTO+.} ]] && BCOND_DEFAULT_LTO=0
;;
test)
ADD_WITH_TEST=0
[[ -z ${BCOND_DEFAULT_TEST+.} ]] && BCOND_DEFAULT_TEST=0
;;
esac
shift
;;
--no-auto-with-test)
# by default, the script adds "-w test" (unless the command line contains
# "-w test" or "-W test"). This flags allows one to suppress that automatism.
# It's really only useful to test the spec file's internal default for the
# "test" option. Otherwise, you can always just explicitly select "-w test"
# or "-W test".
ADD_WITH_TEST=0
;;
--default-for-debug)
[[ $# -gt 0 ]] || die "Missing argument to $A"
in_set "$1" "" 0 1 || die "invalid argument $A \"$1\""
BCOND_DEFAULT_DEBUG="$1"
shift
;;
--default-for-lto)
[[ $# -gt 0 ]] || die "Missing argument to $A"
in_set "$1" "" 0 1 || die "invalid argument $A \"$1\""
BCOND_DEFAULT_LTO="$1"
shift
;;
--default-for-test)
[[ $# -gt 0 ]] || die "Missing argument to $A"
in_set "$1" "" 0 1 || die "invalid argument $A \"$1\""
BCOND_DEFAULT_TEST="$1"
shift
;;
*)
usage
die "Unexpected argument \"$A\""
;;
esac
done
if [[ $GIT_CLEAN == 1 ]]; then
git clean -fdx :/
fi
if [[ $IGNORE_DIRTY != 1 ]]; then
# check for a clean working directory.
# We ignore the /contrib directory, because this is where the automation
# scripts and the build results will be.
if [[ "x$(LANG=C git clean -ndx | grep '^Would \(remove contrib/\|skip repository libgsystem/\).*$' -v)" != x ]]; then
die "The working directory is not clean. Refuse to run. Try \`$0 --force\`, \`$0 --clean\`, or \`git clean -e :/contrib -dx -n\`"
fi
if [[ "x$(git status --porcelain)" != x ]]; then
die "The working directory has local changes. Refuse to run. Try \`$0 --force\`"
fi
fi
get_version_meson() {
meson introspect "$GITDIR/build" --projectinfo |
python -c 'import json, sys; print(json.load(sys.stdin)["version"])'
}
if [[ $NO_DIST != 1 ]]; then
meson setup "$GITDIR/build" \
--prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--sysconfdir=/etc \
--datadir=/usr/share \
--includedir=/usr/include \
--libdir=/usr/lib \
--libexecdir=/usr/libexec \
--localstatedir=/var \
--sharedstatedir=/var/lib \
--mandir=/usr/share/man \
--infodir=/usr/share/info \
-Ddocs=true \
-Dintrospection=true \
-Difcfg_rh=true \
-Difupdown=true \
-Dconfig_logging_backend_default=syslog \
-Dconfig_wifi_backend_default=wpa_supplicant \
-Dlibaudit=yes-disabled-by-default \
-Dpolkit=true \
-Dnm_cloud_setup=true \
-Ddhclient=/usr/sbin/dhclient \
-Dconfig_dhcp_default=internal \
-Dconfig_dns_rc_manager_default=auto \
-Diptables=/usr/sbin/iptables \
-Dnft=/usr/bin/nft \
|| die "Error meson setup"
VERSION="${VERSION:-$(get_version_meson || die "Could not read VERSION")}"
TEST_FLAG=""
if [[ $QUICK == 1 ]]; then
TEST_FLAG="--no-tests"
fi
meson dist --allow-dirty -C "$GITDIR/build/" $TEST_FLAG || die "Error meson dist"
export SOURCE="$(ls -1 "$GITDIR/build/meson-dist/NetworkManager-${VERSION}.tar.xz" 2>/dev/null | head -n1)"
fi
if [[ "$ADD_WITH_TEST" == 1 ]]; then
WITH_LIST=("${WITH_LIST[@]}" "--with" "test")
fi
export SOURCE_FROM_GIT
export BUILDTYPE
export NM_RPMBUILD_ARGS="${WITH_LIST[@]}"
export SNAPSHOT
export DO_RELEASE
export BCOND_DEFAULT_DEBUG="$BCOND_DEFAULT_DEBUG"
export BCOND_DEFAULT_LTO="$BCOND_DEFAULT_LTO"
export BCOND_DEFAULT_TEST="$BCOND_DEFAULT_TEST"
"$SCRIPTDIR"/build.sh