1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296
|
From 7d7dbf9dc15be6e1465c756c2c5ae7f1ab104fc8 Mon Sep 17 00:00:00 2001
From: Dan Streetman <ddstreet@canonical.com>
Date: Tue, 19 Jan 2021 12:20:46 -0500
Subject: [PATCH] configure: replace --enable/disable-git-update with
--with-git-submodules
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
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(-)
--- 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
--- a/configure
+++ b/configure
@@ -249,12 +249,12 @@ gdb_bin=$(command -v "gdb-multiarch" ||
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"
@@ -1483,9 +1483,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_submodules_action="validate"
+ echo "--disable-git-update deprecated, use --with-git-submodules=validate"
;;
- --disable-git-update) git_update=no
+ --with-git-submodules=*)
+ git_submodules_action="$optarg"
;;
--enable-debug-mutex) debug_mutex=yes
;;
@@ -1533,6 +1540,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}"
@@ -1682,6 +1704,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
@@ -1880,7 +1905,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
@@ -1948,7 +1973,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
@@ -3837,7 +3862,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
;;
@@ -4670,7 +4695,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
;;
@@ -5617,7 +5642,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
;;
@@ -5866,7 +5891,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
@@ -5904,8 +5929,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"
@@ -5916,7 +5941,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
--- 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
|