Message ID | 20201016203857.62572-1-ddstreet@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | configure: replace --enable/disable-git-update with --with-git-submodules | expand |
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 >
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
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
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(-)