
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]
252 lines
8.1 KiB
Bash
Executable File
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
|
|
|