1#!/bin/sh 2# 3# This code is licensed under the GPL version 2 or later. See 4# the COPYING file in the top-level directory. 5 6substat=".git-submodule-status" 7 8command=$1 9shift 10maybe_modules="$@" 11 12# if --with-git-submodules=ignore, do nothing 13test "$command" = "ignore" && exit 0 14 15test -z "$GIT" && GIT=git 16 17cd "$(dirname "$0")/.." 18 19update_error() { 20 echo "$0: $*" 21 echo 22 echo "Unable to automatically checkout GIT submodules '$modules'." 23 echo "If you require use of an alternative GIT binary (for example to" 24 echo "enable use of a transparent proxy), then please specify it by" 25 echo "running configure by with the '--with-git' argument. e.g." 26 echo 27 echo " $ ./configure --with-git='tsocks git'" 28 echo 29 echo "Alternatively you may disable automatic GIT submodule checkout" 30 echo "with:" 31 echo 32 echo " $ ./configure --with-git-submodules=validate" 33 echo 34 echo "and then manually update submodules prior to running make, with:" 35 echo 36 echo " $ scripts/git-submodule.sh update $modules" 37 echo 38 exit 1 39} 40 41validate_error() { 42 if test "$1" = "validate"; then 43 echo "GIT submodules checkout is out of date, and submodules" 44 echo "configured for validate only. Please run" 45 echo " scripts/git-submodule.sh update $maybe_modules" 46 echo "from the source directory or call configure with" 47 echo " --with-git-submodules=update" 48 echo "To disable GIT submodules validation, use" 49 echo " --with-git-submodules=ignore" 50 fi 51 exit 1 52} 53 54if test -n "$maybe_modules" && ! test -e ".git" 55then 56 echo "$0: unexpectedly called with submodules but no git checkout exists" 57 exit 1 58fi 59 60modules="" 61for m in $maybe_modules 62do 63 $GIT submodule status $m 1> /dev/null 2>&1 64 if test $? = 0 65 then 66 modules="$modules $m" 67 else 68 echo "warn: ignoring non-existent submodule $m" 69 fi 70done 71 72case "$command" in 73status|validate) 74 if test -z "$maybe_modules" 75 then 76 test -s ${substat} && validate_error "$command" || exit 0 77 fi 78 79 test -f "$substat" || validate_error "$command" 80 for module in $modules; do 81 CURSTATUS=$($GIT submodule status $module) 82 OLDSTATUS=$(cat $substat | grep $module) 83 if test "$CURSTATUS" != "$OLDSTATUS"; then 84 validate_error "$command" 85 fi 86 done 87 exit 0 88 ;; 89update) 90 if test -z "$maybe_modules" 91 then 92 test -e $substat || touch $substat 93 exit 0 94 fi 95 96 $GIT submodule update --init $modules 1>/dev/null 97 test $? -ne 0 && update_error "failed to update modules" 98 99 $GIT submodule status $modules > "${substat}" 100 test $? -ne 0 && update_error "failed to save git submodule status" >&2 101 ;; 102esac 103 104exit 0 105