| 1 | #!/bin/sh |
| 2 | |
| 3 | MASTER=master |
| 4 | |
| 5 | if test -z "$GIT" |
| 6 | then |
| 7 | case "$(git version 2>/dev/null)" in |
| 8 | "git version"*) |
| 9 | GIT=git ;; |
| 10 | *) |
| 11 | echo >&2 "No git to bootstrap" |
| 12 | exit 1 ;; |
| 13 | esac |
| 14 | fi |
| 15 | |
| 16 | inst_prefix=$( |
| 17 | IFS=: |
| 18 | for p in $PATH |
| 19 | do |
| 20 | probed=${p%/git-active/bin} |
| 21 | if test "$probed" != "$p" |
| 22 | then |
| 23 | echo "$probed" |
| 24 | exit |
| 25 | fi |
| 26 | done |
| 27 | echo $HOME |
| 28 | ) |
| 29 | |
| 30 | LANG=C |
| 31 | |
| 32 | for cv in PYTHON_PATH=python TCL_PATH=tclsh TCLTKPATH=wish |
| 33 | do |
| 34 | cmd=${cv#*=} |
| 35 | var=${cv%=*} |
| 36 | eval $( |
| 37 | if test -f "/usr/bin/$cmd" |
| 38 | then |
| 39 | break |
| 40 | fi |
| 41 | for p in /usr/bin /usr/local/bin |
| 42 | do |
| 43 | if test -f "$p/$cmd" |
| 44 | then |
| 45 | echo "$var=$p/$cmd; export $var" |
| 46 | break |
| 47 | fi |
| 48 | found=$(find "$p/$cmd"* -type f 2>/dev/null | head -n 1) |
| 49 | if test -f "$found" |
| 50 | then |
| 51 | echo "$var=$found; export $var" |
| 52 | break |
| 53 | fi |
| 54 | done |
| 55 | ) |
| 56 | done |
| 57 | |
| 58 | tests= jobs= oldtest= with_shell= testpen= silent= |
| 59 | clean=: |
| 60 | |
| 61 | determine_branch () { |
| 62 | expr "$($GIT symbolic-ref --no-recurse HEAD 2>/dev/null || |
| 63 | $GIT symbolic-ref HEAD 2>/dev/null)" : 'refs/heads/\(.*\)' || |
| 64 | echo detached |
| 65 | } |
| 66 | |
| 67 | determine_version () { |
| 68 | v=`$GIT describe HEAD` |
| 69 | expr "$v" : '.*-g[0-9a-f]*$' >/dev/null && { |
| 70 | echo >&2 "You are on 'snap' but $v is not an official version." |
| 71 | exit 1 |
| 72 | } |
| 73 | echo "$v" |
| 74 | } |
| 75 | |
| 76 | determine_long_version () { |
| 77 | $GIT describe HEAD 2>/dev/null || echo unknown-g00000000 | |
| 78 | sed -e 's/-/./g' |
| 79 | } |
| 80 | |
| 81 | BUILTIN_CLEAN_FIX=8687f777 |
| 82 | if ! git merge-base --is-ancestor $BUILTIN_CLEAN_FIX HEAD |
| 83 | then |
| 84 | NO_PEDANTIC=YesPlease |
| 85 | fi |
| 86 | |
| 87 | DEVELOPER= |
| 88 | case "$NO_PEDANTIC" in |
| 89 | ?*) ;; |
| 90 | '') |
| 91 | DEVELOPER=1 |
| 92 | ;; |
| 93 | 'not-used-anymore') |
| 94 | # PEDANT="-Wtypedef-redefinition $PEDANT" |
| 95 | PEDANT="-Werror -Wold-style-definition $PEDANT" |
| 96 | PEDANT="-Wpointer-arith -Woverflow -Wunused $PEDANT" |
| 97 | PEDANT="-Wold-style-declaration -Wstrict-prototypes $PEDANT" |
| 98 | PEDANT="-Wstrict-prototypes $PEDANT" |
| 99 | ;; |
| 100 | esac |
| 101 | |
| 102 | while case $# in 0) break ;; esac |
| 103 | do |
| 104 | case "$1" in |
| 105 | --pedantic) |
| 106 | echo >&2 "(no need to say --pedantic)" |
| 107 | ;; |
| 108 | -j*) |
| 109 | case "$NO_JOBS" in |
| 110 | ?*) jobs= ;; |
| 111 | '') jobs=$1 ;; |
| 112 | esac |
| 113 | ;; |
| 114 | -s) |
| 115 | silent=-s |
| 116 | ;; |
| 117 | -noprove | --noprove) |
| 118 | oldtest=t |
| 119 | ;; |
| 120 | -loose | --loose) |
| 121 | DEVELOPER= PEDANT= |
| 122 | ;; |
| 123 | --memtrash) |
| 124 | testpen=testpen.$$ |
| 125 | ;; |
| 126 | --memtrash=*) |
| 127 | testpen=testpen.${1#--memtrash=} |
| 128 | ;; |
| 129 | --locale=*) |
| 130 | LANG=${1#*=} |
| 131 | ;; |
| 132 | --test=*) |
| 133 | tests=$( |
| 134 | cd t && |
| 135 | IFS="$IFS," |
| 136 | for t in ${1#*=} |
| 137 | do |
| 138 | eval echo "t$t-*.sh" |
| 139 | done | tr '\012' ' ' |
| 140 | ) |
| 141 | ;; |
| 142 | --long) |
| 143 | GIT_TEST_LONG=YesPlease |
| 144 | export GIT_TEST_LONG |
| 145 | ;; |
| 146 | --bash) |
| 147 | with_shell=/bin/bash |
| 148 | ;; |
| 149 | --dash) |
| 150 | with_shell=/bin/dash |
| 151 | ;; |
| 152 | --ksh) |
| 153 | with_shell=/bin/ksh |
| 154 | ;; |
| 155 | --) |
| 156 | shift |
| 157 | break |
| 158 | ;; |
| 159 | -*) |
| 160 | echo >&2 "Eh $1?" |
| 161 | exit 1 |
| 162 | ;; |
| 163 | *) |
| 164 | break |
| 165 | ;; |
| 166 | esac |
| 167 | shift |
| 168 | done |
| 169 | |
| 170 | if test -n "$testpen" |
| 171 | then |
| 172 | for TRASH in /dev/shm /tmp "" |
| 173 | do |
| 174 | if test -n "$TRASH" && |
| 175 | mkdir -p "$TRASH/$testpen" 2>/dev/null && |
| 176 | test -w "$TRASH/$testpen" |
| 177 | then |
| 178 | testpen=$(cd "$TRASH/$testpen" && /bin/pwd) |
| 179 | TRASH="--root=$testpen" |
| 180 | clean="$clean; rmdir '$testpen'" |
| 181 | break |
| 182 | fi |
| 183 | done |
| 184 | GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}" |
| 185 | export GIT_TEST_OPTS |
| 186 | fi |
| 187 | |
| 188 | if test -z "$oldtest" && |
| 189 | sh -c 'prove --version >/dev/null 2>&1' && |
| 190 | sh -c 'prove --exec : >/dev/null 2>&1' |
| 191 | then |
| 192 | # --state=slow,save |
| 193 | DEFAULT_TEST_TARGET=prove |
| 194 | GIT_PROVE_OPTS="${GIT_PROVE_OPTS:+$GIT_PROVE_OPTS }--timer $jobs" |
| 195 | export DEFAULT_TEST_TARGET GIT_PROVE_OPTS |
| 196 | fi |
| 197 | |
| 198 | LC_ALL=$LANG |
| 199 | export LANG LC_ALL |
| 200 | |
| 201 | branch=$(determine_branch) |
| 202 | |
| 203 | case "$branch" in |
| 204 | next | maint | $MASTER | seen | jch) |
| 205 | prefix="$inst_prefix/git-$branch" |
| 206 | ;; |
| 207 | snap) |
| 208 | v=$(determine_version) |
| 209 | prefix="$inst_prefix/git-snap-$v" |
| 210 | ;; |
| 211 | *) |
| 212 | prefix="$inst_prefix/git-test" ;; |
| 213 | esac |
| 214 | |
| 215 | clean="$clean; rm -f version" |
| 216 | determine_long_version >version |
| 217 | |
| 218 | set "prefix=$prefix" "$@" |
| 219 | if test -n "$with_shell" && test -f "$with_shell" |
| 220 | then |
| 221 | set "SHELL_PATH=$with_shell" "SHELL=$with_shell" "$@" |
| 222 | fi |
| 223 | |
| 224 | if grep >/dev/null DC_SHA1 Makefile |
| 225 | then |
| 226 | SHA1IMPLEMENTATION=DC_SHA1=YesPlease |
| 227 | elif grep >/dev/null BLK_SHA1 Makefile |
| 228 | then |
| 229 | SHA1IMPLEMENTATION=BLK_SHA1=YesPlease |
| 230 | else |
| 231 | SHA1IMPLEMENTATION= |
| 232 | fi |
| 233 | |
| 234 | if test -f sha256/nettle.h && test -f /usr/include/nettle/sha2.h |
| 235 | then |
| 236 | SHA1IMPLEMENTATION="$SHA1IMPLEMENTATION NETTLE_SHA256=YesPlease" |
| 237 | fi |
| 238 | |
| 239 | set MAN_BASE_URL='"http://www.kernel.org/pub/software/scm/git/docs/"' \ |
| 240 | $SHA1IMPLEMENTATION \ |
| 241 | USE_ASCIIDOCTOR=YesPlease \ |
| 242 | USE_LIBPCRE=YesPlease \ |
| 243 | "$@" |
| 244 | |
| 245 | # Platform hack |
| 246 | if test -z "${make:+set}" && { |
| 247 | test -x /usr/local/bin/gmake || |
| 248 | test -x /usr/pkg/bin/gmake || |
| 249 | test -x /usr/bin/gmake |
| 250 | } |
| 251 | then |
| 252 | make=gmake |
| 253 | fi |
| 254 | if test -f /bin/ginstall |
| 255 | then |
| 256 | set INSTALL=ginstall "$@" |
| 257 | fi |
| 258 | |
| 259 | GIT_SKIP_TESTS=${GIT_SKIP_TESTS:+"$GIT_SKIP_TESTS "}"t9999" |
| 260 | export GIT_SKIP_TESTS |
| 261 | |
| 262 | unset SSH_AGENT_PID SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION \ |
| 263 | GPG_AGENT_INFO GNOME_KEYRING_CONTROL GNOME_KEYRING_PID \ |
| 264 | XDG_SESSION_COOKIE XDG_SESSION_PATH XDG_SEAT_PATH XDG_DATA_DIRS \ |
| 265 | PGPPATH AUTO_PROXY WINDOWID SESSION_MANAGER XDG_CONFIG_DIRS STY \ |
| 266 | GDMSESSION KRB5CCNAME GNOME_DESKTOP_SESSION_ID \ |
| 267 | DBUS_SESSION_BUS_ADDRESS LESSOPEN WINDOW DISPLAY GTK_IM_MODULE \ |
| 268 | XDG_CURRENT_DESKTOP LESSCLOSE XAUTHORITY |
| 269 | |
| 270 | # O=-fsanitize=address Meta/Make |
| 271 | |
| 272 | ${make-make} \ |
| 273 | $jobs \ |
| 274 | $silent \ |
| 275 | ETC_GITCONFIG=$prefix/etc/gitconfig \ |
| 276 | ${DEVELOPER:+"DEVELOPER=YesPlease"} \ |
| 277 | SPATCH_FLAGS="--all-includes --recursive-includes --patch ." \ |
| 278 | SPATCH_BATCH_SIZE=16 \ |
| 279 | CFLAGS="-g -Wdeclaration-after-statement ${O:+ $O}" \ |
| 280 | ${tests:+"T=$tests"} ${tests:+UNIT_TESTS=} \ |
| 281 | "$@" |
| 282 | status=$? |
| 283 | eval "$clean" |
| 284 | exit $status |