From: "Daniel P. Berrangé" <berrange@redhat.com>
To: qemu-devel@nongnu.org
Cc: "Kevin Wolf" <kwolf@redhat.com>,
"Daniel P. Berrangé" <berrange@redhat.com>,
qemu-block@nongnu.org, libvir-list@redhat.com,
"Max Reitz" <mreitz@redhat.com>,
"Dan Streetman" <ddstreet@canonical.com>,
"Gerd Hoffmann" <kraxel@redhat.com>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: [PULL 09/13] configure: replace --enable/disable-git-update with --with-git-submodules
Date: Fri, 29 Jan 2021 17:10:58 +0000 [thread overview]
Message-ID: <20210129171102.4109641-10-berrange@redhat.com> (raw)
In-Reply-To: <20210129171102.4109641-1-berrange@redhat.com>
From: Dan Streetman <ddstreet@canonical.com>
Replace the --enable-git-update and --disable-git-update configure params
with the param --with-git-submodules=(update|validate|ignore) to
allow 3 options for building from a git repo.
This is needed because downstream packagers, e.g. Debian, Ubuntu, etc,
also keep the source code in git, but do not want to enable the
'git_update' mode; with the current code, that's not possible even
if the downstream package specifies --disable-git-update.
The previous parameters are deprecated but still available; the
--enable-git-update parameter maps to --with-git-submodules=update and
--disable-git-update parameter maps to --with-git-submodules=validate.
The configure script behavior is slightly modified, where previously
the dtc, capstone, and slirp submodules were not validated when
--disable-git-update was specified (but were updated with git-update
enabled), now they are validated when using --with-git-submodules=validate
and are only ignored when using --with-git-submodules=ignore.
Signed-off-by: Dan Streetman <ddstreet@canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
---
Makefile | 24 ++-----------------
configure | 51 ++++++++++++++++++++++++++++++----------
scripts/git-submodule.sh | 34 ++++++++++++++++++++-------
3 files changed, 66 insertions(+), 43 deletions(-)
diff --git a/Makefile b/Makefile
index 291ea19f2e..b0dff73904 100644
--- a/Makefile
+++ b/Makefile
@@ -47,30 +47,10 @@ git-submodule-update:
Makefile: .git-submodule-status
.PHONY: git-submodule-update
-
-git_module_status := $(shell \
- cd '$(SRC_PATH)' && \
- GIT="$(GIT)" ./scripts/git-submodule.sh status $(GIT_SUBMODULES); \
- echo $$?; \
-)
-
-ifeq (1,$(git_module_status))
-ifeq (no,$(GIT_UPDATE))
git-submodule-update:
$(call quiet-command, \
- echo && \
- echo "GIT submodule checkout is out of date. Please run" && \
- echo " scripts/git-submodule.sh update $(GIT_SUBMODULES)" && \
- echo "from the source directory checkout $(SRC_PATH)" && \
- echo && \
- exit 1)
-else
-git-submodule-update:
- $(call quiet-command, \
- (cd $(SRC_PATH) && GIT="$(GIT)" ./scripts/git-submodule.sh update $(GIT_SUBMODULES)), \
- "GIT","$(GIT_SUBMODULES)")
-endif
-endif
+ (GIT="$(GIT)" "$(SRC_PATH)/scripts/git-submodule.sh" $(GIT_SUBMODULES_ACTION) $(GIT_SUBMODULES)), \
+ "GIT","$(GIT_SUBMODULES)")
# 0. ensure the build tree is okay
diff --git a/configure b/configure
index 87de49e2c2..8fc59848b2 100755
--- a/configure
+++ b/configure
@@ -254,12 +254,12 @@ gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
if test -e "$source_path/.git"
then
- git_update=yes
+ git_submodules_action="update"
git_submodules="ui/keycodemapdb"
git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
else
- git_update=no
+ git_submodules_action="ignore"
git_submodules=""
if ! test -f "$source_path/ui/keycodemapdb/README"
@@ -1508,9 +1508,16 @@ for opt do
;;
--with-git=*) git="$optarg"
;;
- --enable-git-update) git_update=yes
+ --enable-git-update)
+ git_submodules_action="update"
+ echo "--enable-git-update deprecated, use --with-git-submodules=update"
;;
- --disable-git-update) git_update=no
+ --disable-git-update)
+ git_submodules_action="validate"
+ echo "--disable-git-update deprecated, use --with-git-submodules=validate"
+ ;;
+ --with-git-submodules=*)
+ git_submodules_action="$optarg"
;;
--enable-debug-mutex) debug_mutex=yes
;;
@@ -1566,6 +1573,21 @@ for opt do
esac
done
+case $git_submodules_action in
+ update|validate)
+ if test ! -e "$source_path/.git"; then
+ echo "ERROR: cannot $git_submodules_action git submodules without .git"
+ exit 1
+ fi
+ ;;
+ ignore)
+ ;;
+ *)
+ echo "ERROR: invalid --with-git-submodules= value '$git_submodules_action'"
+ exit 1
+ ;;
+esac
+
libdir="${libdir:-$prefix/lib}"
libexecdir="${libexecdir:-$prefix/libexec}"
includedir="${includedir:-$prefix/include}"
@@ -1710,6 +1732,9 @@ Advanced options (experts only):
--ninja=NINJA use specified ninja [$ninja]
--smbd=SMBD use specified smbd [$smbd]
--with-git=GIT use specified git [$git]
+ --with-git-submodules=update update git submodules (default if .git dir exists)
+ --with-git-submodules=validate fail if git submodules are not up to date
+ --with-git-submodules=ignore do not update or check git submodules (default if no .git dir)
--static enable static build [$static]
--mandir=PATH install man pages in PATH
--datadir=PATH install firmware in PATH/$qemu_suffix
@@ -1926,7 +1951,7 @@ python="$python -B"
if test -z "$meson"; then
if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.3; then
meson=meson
- elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
+ elif test $git_submodules_action != 'ignore' ; then
meson=git
elif test -e "${source_path}/meson/meson.py" ; then
meson=internal
@@ -1994,7 +2019,7 @@ fi
# Consult white-list to determine whether to enable werror
# by default. Only enable by default for git builds
if test -z "$werror" ; then
- if test -e "$source_path/.git" && \
+ if test "$git_submodules_action" != "ignore" && \
{ test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
werror="yes"
else
@@ -3550,7 +3575,7 @@ fi
case "$fdt" in
auto | enabled | internal)
# Simpler to always update submodule, even if not needed.
- if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
+ if test "$git_submodules_action" != "ignore"; then
git_submodules="${git_submodules} dtc"
fi
;;
@@ -4264,7 +4289,7 @@ fi
case "$capstone" in
auto | enabled | internal)
# Simpler to always update submodule, even if not needed.
- if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
+ if test "$git_submodules_action" != "ignore"; then
git_submodules="${git_submodules} capstone"
fi
;;
@@ -5211,7 +5236,7 @@ fi
case "$slirp" in
auto | enabled | internal)
# Simpler to always update submodule, even if not needed.
- if test -e "${source_path}/.git" && test $git_update = 'yes' ; then
+ if test "$git_submodules_action" != "ignore"; then
git_submodules="${git_submodules} slirp"
fi
;;
@@ -5385,7 +5410,7 @@ if test "$cpu" = "s390x" ; then
roms="$roms s390-ccw"
# SLOF is required for building the s390-ccw firmware on s390x,
# since it is using the libnet code from SLOF for network booting.
- if test -e "${source_path}/.git" ; then
+ if test "$git_submodules_action" != "ignore"; then
git_submodules="${git_submodules} roms/SLOF"
fi
fi
@@ -5423,8 +5448,8 @@ else
cxx=
fi
-if test $git_update = 'yes' ; then
- (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
+if !(GIT="$git" "$source_path/scripts/git-submodule.sh" "$git_submodules_action" "$git_submodules"); then
+ exit 1
fi
config_host_mak="config-host.mak"
@@ -5435,7 +5460,7 @@ echo >> $config_host_mak
echo all: >> $config_host_mak
echo "GIT=$git" >> $config_host_mak
echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
-echo "GIT_UPDATE=$git_update" >> $config_host_mak
+echo "GIT_SUBMODULES_ACTION=$git_submodules_action" >> $config_host_mak
echo "ARCH=$ARCH" >> $config_host_mak
diff --git a/scripts/git-submodule.sh b/scripts/git-submodule.sh
index 65ed877aef..e225d3a963 100755
--- a/scripts/git-submodule.sh
+++ b/scripts/git-submodule.sh
@@ -9,9 +9,14 @@ command=$1
shift
maybe_modules="$@"
+# if --with-git-submodules=ignore, do nothing
+test "$command" = "ignore" && exit 0
+
test -z "$GIT" && GIT=git
-error() {
+cd "$(dirname "$0")/.."
+
+update_error() {
echo "$0: $*"
echo
echo "Unable to automatically checkout GIT submodules '$modules'."
@@ -24,7 +29,7 @@ error() {
echo "Alternatively you may disable automatic GIT submodule checkout"
echo "with:"
echo
- echo " $ ./configure --disable-git-update"
+ echo " $ ./configure --with-git-submodules=validate"
echo
echo "and then manually update submodules prior to running make, with:"
echo
@@ -33,6 +38,19 @@ error() {
exit 1
}
+validate_error() {
+ if test "$1" = "validate"; then
+ echo "GIT submodules checkout is out of date, and submodules"
+ echo "configured for validate only. Please run"
+ echo " scripts/git-submodule.sh update $maybe_modules"
+ echo "from the source directory or call configure with"
+ echo " --with-git-submodules=update"
+ echo "To disable GIT submodules validation, use"
+ echo " --with-git-submodules=ignore"
+ fi
+ exit 1
+}
+
modules=""
for m in $maybe_modules
do
@@ -52,18 +70,18 @@ then
fi
case "$command" in
-status)
+status|validate)
if test -z "$maybe_modules"
then
- test -s ${substat} && exit 1 || exit 0
+ test -s ${substat} && validate_error "$command" || exit 0
fi
- test -f "$substat" || exit 1
+ test -f "$substat" || validate_error "$command"
for module in $modules; do
CURSTATUS=$($GIT submodule status $module)
OLDSTATUS=$(cat $substat | grep $module)
if test "$CURSTATUS" != "$OLDSTATUS"; then
- exit 1
+ validate_error "$command"
fi
done
exit 0
@@ -76,10 +94,10 @@ update)
fi
$GIT submodule update --init $modules 1>/dev/null
- test $? -ne 0 && error "failed to update modules"
+ test $? -ne 0 && update_error "failed to update modules"
$GIT submodule status $modules > "${substat}"
- test $? -ne 0 && error "failed to save git submodule status" >&2
+ test $? -ne 0 && update_error "failed to save git submodule status" >&2
;;
esac
--
2.29.2
next prev parent reply other threads:[~2021-01-29 17:31 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-29 17:10 [PULL 00/13] Misc patches Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 01/13] crypto: Fix some code style problems, add spaces around operator Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 02/13] crypto: Move USER_CREATABLE to secret_common base class Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 03/13] crypto: Forbid broken unloading of secrets Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 04/13] crypto: Fix memory leaks in set_loaded for tls-* Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 05/13] os: deprecate the -enable-fips option and QEMU's FIPS enforcement Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 06/13] Prefer 'on' | 'off' over 'yes' | 'no' for bool options Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 07/13] docs: simplify and clarify the platform support rules Daniel P. Berrangé
2021-01-29 17:10 ` [PULL 08/13] docs: fix missing backslash in certtool shell example Daniel P. Berrangé
2021-01-29 17:10 ` Daniel P. Berrangé [this message]
2021-01-29 17:10 ` [PULL 10/13] crypto: Add spaces around operator Daniel P. Berrangé
2021-01-29 17:11 ` [PULL 11/13] ui: update keycodemapdb submodule commit Daniel P. Berrangé
2021-01-29 17:11 ` [PULL 12/13] tests: Fix runtime error in test-authz-pam Daniel P. Berrangé
2021-01-29 17:11 ` [PULL 13/13] tests: Replace deprecated ASN1 code Daniel P. Berrangé
2021-01-29 17:21 ` [PULL 00/13] Misc patches no-reply
2021-01-29 23:04 ` Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20210129171102.4109641-10-berrange@redhat.com \
--to=berrange@redhat.com \
--cc=ddstreet@canonical.com \
--cc=kraxel@redhat.com \
--cc=kwolf@redhat.com \
--cc=libvir-list@redhat.com \
--cc=mreitz@redhat.com \
--cc=pbonzini@redhat.com \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.