[PATCH] configure: replace --enable/disable-git-update with --with-git-submodules

Dan Streetman posted 1 patch 3 years, 6 months ago
Test checkpatch passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/20201016203857.62572-1-ddstreet@canonical.com
Maintainers: "Daniel P. Berrangé" <berrange@redhat.com>
There is a newer version of this series
Makefile                 | 26 ++-----------------
configure                | 55 +++++++++++++++++++++++++---------------
scripts/git-submodule.sh | 34 +++++++++++++++++++------
3 files changed, 62 insertions(+), 53 deletions(-)
[PATCH] configure: replace --enable/disable-git-update with --with-git-submodules
Posted by Dan Streetman 3 years, 6 months ago
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.

Signed-off-by: Dan Streetman <ddstreet@canonical.com>
---
 Makefile                 | 26 ++-----------------
 configure                | 55 +++++++++++++++++++++++++---------------
 scripts/git-submodule.sh | 34 +++++++++++++++++++------
 3 files changed, 62 insertions(+), 53 deletions(-)

diff --git a/Makefile b/Makefile
index c37e513431..033455dc8f 100644
--- a/Makefile
+++ b/Makefile
@@ -34,33 +34,11 @@ ifneq ($(wildcard config-host.mak),)
 all:
 include config-host.mak
 
-git-submodule-update:
-
 .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)")
 
 export NINJA=./ninjatool
 
diff --git a/configure b/configure
index f839c2a557..c5df778790 100755
--- a/configure
+++ b/configure
@@ -249,12 +249,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"
@@ -1478,9 +1478,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
   ;;
@@ -1528,6 +1535,20 @@ 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
+
 firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
 libdir="${libdir:-$prefix/lib}"
 libexecdir="${libexecdir:-$prefix/libexec}"
@@ -1868,7 +1889,7 @@ python="$python -B"
 if test -z "$meson"; then
     if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; 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
@@ -1936,7 +1957,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
@@ -3824,9 +3845,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
-      git_submodules="${git_submodules} dtc"
-    fi
+    git_submodules="${git_submodules} dtc"
     ;;
 esac
 
@@ -4696,9 +4715,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
-      git_submodules="${git_submodules} capstone"
-    fi
+    git_submodules="${git_submodules} capstone"
     ;;
 esac
 
@@ -5636,9 +5653,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
-      git_submodules="${git_submodules} slirp"
-    fi
+    git_submodules="${git_submodules} slirp"
     ;;
 esac
 
@@ -5893,9 +5908,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
-      git_submodules="${git_submodules} roms/SLOF"
-    fi
+    git_submodules="${git_submodules} roms/SLOF"
   fi
 fi
 
@@ -5931,8 +5944,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"
@@ -5960,7 +5973,7 @@ echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
 echo "qemu_desktopdir=$qemu_desktopdir" >> $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.25.1


Re: [PATCH] configure: replace --enable/disable-git-update with --with-git-submodules
Posted by Dan Streetman 3 years, 4 months ago
Hi, just a ping to try to keep this alive, does the patch look ok? I
can rebase it on the latest git if so (and if needed)

On Fri, Oct 16, 2020 at 4:39 PM Dan Streetman <ddstreet@canonical.com> wrote:
>
> 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.
>
> Signed-off-by: Dan Streetman <ddstreet@canonical.com>
> ---
>  Makefile                 | 26 ++-----------------
>  configure                | 55 +++++++++++++++++++++++++---------------
>  scripts/git-submodule.sh | 34 +++++++++++++++++++------
>  3 files changed, 62 insertions(+), 53 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index c37e513431..033455dc8f 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -34,33 +34,11 @@ ifneq ($(wildcard config-host.mak),)
>  all:
>  include config-host.mak
>
> -git-submodule-update:
> -
>  .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)")
>
>  export NINJA=./ninjatool
>
> diff --git a/configure b/configure
> index f839c2a557..c5df778790 100755
> --- a/configure
> +++ b/configure
> @@ -249,12 +249,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"
> @@ -1478,9 +1478,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
>    ;;
> @@ -1528,6 +1535,20 @@ 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
> +
>  firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
>  libdir="${libdir:-$prefix/lib}"
>  libexecdir="${libexecdir:-$prefix/libexec}"
> @@ -1868,7 +1889,7 @@ python="$python -B"
>  if test -z "$meson"; then
>      if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; 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
> @@ -1936,7 +1957,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
> @@ -3824,9 +3845,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
> -      git_submodules="${git_submodules} dtc"
> -    fi
> +    git_submodules="${git_submodules} dtc"
>      ;;
>  esac
>
> @@ -4696,9 +4715,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
> -      git_submodules="${git_submodules} capstone"
> -    fi
> +    git_submodules="${git_submodules} capstone"
>      ;;
>  esac
>
> @@ -5636,9 +5653,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
> -      git_submodules="${git_submodules} slirp"
> -    fi
> +    git_submodules="${git_submodules} slirp"
>      ;;
>  esac
>
> @@ -5893,9 +5908,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
> -      git_submodules="${git_submodules} roms/SLOF"
> -    fi
> +    git_submodules="${git_submodules} roms/SLOF"
>    fi
>  fi
>
> @@ -5931,8 +5944,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"
> @@ -5960,7 +5973,7 @@ echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
>  echo "qemu_desktopdir=$qemu_desktopdir" >> $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.25.1
>

Re: [PATCH] configure: replace --enable/disable-git-update with --with-git-submodules
Posted by Daniel P. Berrangé 3 years, 4 months ago
On Wed, Dec 09, 2020 at 09:38:51AM -0500, Dan Streetman wrote:
> Hi, just a ping to try to keep this alive, does the patch look ok? I
> can rebase it on the latest git if so (and if needed)

Yes, I meant to ask for a rebase. The impl broadly looks fine to me.

> 
> On Fri, Oct 16, 2020 at 4:39 PM Dan Streetman <ddstreet@canonical.com> wrote:
> >
> > 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.
> >
> > Signed-off-by: Dan Streetman <ddstreet@canonical.com>
> > ---
> >  Makefile                 | 26 ++-----------------
> >  configure                | 55 +++++++++++++++++++++++++---------------
> >  scripts/git-submodule.sh | 34 +++++++++++++++++++------
> >  3 files changed, 62 insertions(+), 53 deletions(-)
> >
> > diff --git a/Makefile b/Makefile
> > index c37e513431..033455dc8f 100644
> > --- a/Makefile
> > +++ b/Makefile
> > @@ -34,33 +34,11 @@ ifneq ($(wildcard config-host.mak),)
> >  all:
> >  include config-host.mak
> >
> > -git-submodule-update:
> > -
> >  .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)")
> >
> >  export NINJA=./ninjatool
> >
> > diff --git a/configure b/configure
> > index f839c2a557..c5df778790 100755
> > --- a/configure
> > +++ b/configure
> > @@ -249,12 +249,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"
> > @@ -1478,9 +1478,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
> >    ;;
> > @@ -1528,6 +1535,20 @@ 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
> > +
> >  firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
> >  libdir="${libdir:-$prefix/lib}"
> >  libexecdir="${libexecdir:-$prefix/libexec}"
> > @@ -1868,7 +1889,7 @@ python="$python -B"
> >  if test -z "$meson"; then
> >      if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; 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
> > @@ -1936,7 +1957,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
> > @@ -3824,9 +3845,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
> > -      git_submodules="${git_submodules} dtc"
> > -    fi
> > +    git_submodules="${git_submodules} dtc"
> >      ;;
> >  esac
> >
> > @@ -4696,9 +4715,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
> > -      git_submodules="${git_submodules} capstone"
> > -    fi
> > +    git_submodules="${git_submodules} capstone"
> >      ;;
> >  esac
> >
> > @@ -5636,9 +5653,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
> > -      git_submodules="${git_submodules} slirp"
> > -    fi
> > +    git_submodules="${git_submodules} slirp"
> >      ;;
> >  esac
> >
> > @@ -5893,9 +5908,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
> > -      git_submodules="${git_submodules} roms/SLOF"
> > -    fi
> > +    git_submodules="${git_submodules} roms/SLOF"
> >    fi
> >  fi
> >
> > @@ -5931,8 +5944,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"
> > @@ -5960,7 +5973,7 @@ echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
> >  echo "qemu_desktopdir=$qemu_desktopdir" >> $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.25.1
> >
> 

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|