1aef45d51SDaniel P. Berrange#!/bin/sh 2aef45d51SDaniel P. Berrange# 3aef45d51SDaniel P. Berrange# This code is licensed under the GPL version 2 or later. See 4aef45d51SDaniel P. Berrange# the COPYING file in the top-level directory. 5aef45d51SDaniel P. Berrange 6aef45d51SDaniel P. Berrangesubstat=".git-submodule-status" 7aef45d51SDaniel P. Berrange 8aef45d51SDaniel P. Berrangecommand=$1 9aef45d51SDaniel P. Berrangeshift 1037b5e74eSDaniel P. Berrangemaybe_modules="$@" 11aef45d51SDaniel P. Berrange 128edddaa2SPaolo Bonzinitest -z "$maybe_modules" && exit 0 1350cfed80SPaolo Bonzinitest -z "$GIT" && GIT=$(command -v git) 14cc84d63aSDaniel P. Berrange 157d7dbf9dSDan Streetmancd "$(dirname "$0")/.." 167d7dbf9dSDan Streetman 178edddaa2SPaolo Bonzinino_git_error= 188edddaa2SPaolo Bonziniif ! test -e ".git"; then 198edddaa2SPaolo Bonzini no_git_error='no git checkout exists' 208edddaa2SPaolo Bonzinielif test -z "$GIT"; then 218edddaa2SPaolo Bonzini no_git_error='git binary not found' 228edddaa2SPaolo Bonzinifi 238edddaa2SPaolo Bonzini 248edddaa2SPaolo Bonziniis_git() { 258edddaa2SPaolo Bonzini test -z "$no_git_error" 268edddaa2SPaolo Bonzini} 278edddaa2SPaolo Bonzini 287d7dbf9dSDan Streetmanupdate_error() { 29cc84d63aSDaniel P. Berrange echo "$0: $*" 30cc84d63aSDaniel P. Berrange echo 31cc84d63aSDaniel P. Berrange echo "Unable to automatically checkout GIT submodules '$modules'." 32cc84d63aSDaniel P. Berrange echo "If you require use of an alternative GIT binary (for example to" 3350cfed80SPaolo Bonzini echo "enable use of a transparent proxy), please disable automatic" 3450cfed80SPaolo Bonzini echo "GIT submodule checkout with:" 35f62bbee5SDaniel P. Berrange echo 366f3ae23bSPaolo Bonzini echo " $ ./configure --disable-download" 37f62bbee5SDaniel P. Berrange echo 38f62bbee5SDaniel P. Berrange echo "and then manually update submodules prior to running make, with:" 39f62bbee5SDaniel P. Berrange echo 4050cfed80SPaolo Bonzini echo " $ GIT='tsocks git' scripts/git-submodule.sh update $modules" 41f62bbee5SDaniel P. Berrange echo 42cc84d63aSDaniel P. Berrange exit 1 43cc84d63aSDaniel P. Berrange} 44cc84d63aSDaniel P. Berrange 457d7dbf9dSDan Streetmanvalidate_error() { 468edddaa2SPaolo Bonzini if is_git && test "$1" = "validate"; then 477d7dbf9dSDan Streetman echo "GIT submodules checkout is out of date, and submodules" 487d7dbf9dSDan Streetman echo "configured for validate only. Please run" 497d7dbf9dSDan Streetman echo " scripts/git-submodule.sh update $maybe_modules" 507d7dbf9dSDan Streetman echo "from the source directory or call configure with" 516f3ae23bSPaolo Bonzini echo " --enable-download" 527d7dbf9dSDan Streetman fi 537d7dbf9dSDan Streetman exit 1 547d7dbf9dSDan Streetman} 557d7dbf9dSDan Streetman 56d120116bSPaolo Bonzinicheck_updated() { 57d120116bSPaolo Bonzini local CURSTATUS OLDSTATUS 58d120116bSPaolo Bonzini CURSTATUS=$($GIT submodule status $module) 59d120116bSPaolo Bonzini OLDSTATUS=$(grep $module $substat) 60d120116bSPaolo Bonzini test "$CURSTATUS" = "$OLDSTATUS" 61d120116bSPaolo Bonzini} 62d120116bSPaolo Bonzini 638edddaa2SPaolo Bonziniif is_git; then 648edddaa2SPaolo Bonzini test -e $substat || touch $substat 6537b5e74eSDaniel P. Berrange modules="" 6637b5e74eSDaniel P. Berrange for m in $maybe_modules 6737b5e74eSDaniel P. Berrange do 6837b5e74eSDaniel P. Berrange $GIT submodule status $m 1> /dev/null 2>&1 6937b5e74eSDaniel P. Berrange if test $? = 0 7037b5e74eSDaniel P. Berrange then 7137b5e74eSDaniel P. Berrange modules="$modules $m" 728edddaa2SPaolo Bonzini grep $m $substat > /dev/null 2>&1 || $GIT submodule status $module >> $substat 7337b5e74eSDaniel P. Berrange else 7437b5e74eSDaniel P. Berrange echo "warn: ignoring non-existent submodule $m" 7537b5e74eSDaniel P. Berrange fi 7637b5e74eSDaniel P. Berrange done 778edddaa2SPaolo Bonzinielse 788edddaa2SPaolo Bonzini modules=$maybe_modules 798edddaa2SPaolo Bonzinifi 8037b5e74eSDaniel P. Berrange 81aef45d51SDaniel P. Berrangecase "$command" in 827d7dbf9dSDan Streetmanstatus|validate) 831a920d2bSJuan Quintela for module in $modules; do 848edddaa2SPaolo Bonzini if is_git; then 85d120116bSPaolo Bonzini check_updated $module || validate_error "$command" 868edddaa2SPaolo Bonzini elif ! (set xyz "$module"/* && test -e "$2"); then 878edddaa2SPaolo Bonzini # The directory does not exist or it contains no files 888edddaa2SPaolo Bonzini echo "$0: sources not available for $module and $no_git_error" 898edddaa2SPaolo Bonzini validate_error "$command" 908edddaa2SPaolo Bonzini fi 911a920d2bSJuan Quintela done 92aef45d51SDaniel P. Berrange ;; 938edddaa2SPaolo Bonzini 94aef45d51SDaniel P. Berrangeupdate) 958edddaa2SPaolo Bonzini is_git || { 968edddaa2SPaolo Bonzini echo "$0: unexpectedly called with submodules but $no_git_error" 978edddaa2SPaolo Bonzini exit 1 988edddaa2SPaolo Bonzini } 9949ad3cfaSDaniel P. Berrange 100cc84d63aSDaniel P. Berrange $GIT submodule update --init $modules 1>/dev/null 1017d7dbf9dSDan Streetman test $? -ne 0 && update_error "failed to update modules" 102d120116bSPaolo Bonzini for module in $modules; do 103d120116bSPaolo Bonzini check_updated $module || echo Updated "$module" 104d120116bSPaolo Bonzini done 105cc84d63aSDaniel P. Berrange 106f9540bb1SPeter Maydell (while read -r REPLY; do 107fdb8fd8cSPaolo Bonzini for module in $modules; do 108fdb8fd8cSPaolo Bonzini case $REPLY in 109fdb8fd8cSPaolo Bonzini *" $module "*) continue 2 ;; 110fdb8fd8cSPaolo Bonzini esac 111fdb8fd8cSPaolo Bonzini done 112fdb8fd8cSPaolo Bonzini printf '%s\n' "$REPLY" 113fdb8fd8cSPaolo Bonzini done 114fdb8fd8cSPaolo Bonzini $GIT submodule status $modules 115fdb8fd8cSPaolo Bonzini test $? -ne 0 && update_error "failed to save git submodule status" >&2) < $substat > $substat.new 116fdb8fd8cSPaolo Bonzini mv -f $substat.new $substat 117aef45d51SDaniel P. Berrange ;; 118aef45d51SDaniel P. Berrangeesac 119cc84d63aSDaniel P. Berrange 120cc84d63aSDaniel P. Berrangeexit 0 121