From: Dan Streetman <ddstreet(a)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(a)canonical.com>
Signed-off-by: Daniel P. Berrangé <berrange(a)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