#!/bin/sh MASTER=master if test -z "$GIT" then case "$(git version 2>/dev/null)" in "git version"*) GIT=git ;; *) echo >&2 "No git to bootstrap" exit 1 ;; esac fi inst_prefix=$( IFS=: for p in $PATH do probed=${p%/git-active/bin} if test "$probed" != "$p" then echo "$probed" exit fi done echo $HOME ) LANG=C for cv in PYTHON_PATH=python TCL_PATH=tclsh TCLTKPATH=wish do cmd=${cv#*=} var=${cv%=*} eval $( if test -f "/usr/bin/$cmd" then break fi for p in /usr/bin /usr/local/bin do if test -f "$p/$cmd" then echo "$var=$p/$cmd; export $var" break fi found=$(find "$p/$cmd"* -type f 2>/dev/null | head -n 1) if test -f "$found" then echo "$var=$found; export $var" break fi done ) done tests= jobs= skip= oldtest= with_dash= testpen= clean=: case `uname` in OpenBSD) # O="-fgnu89-inline" skip="t9402" ;; NetBSD) OLD_ICONV=YesPlease; export OLD_ICONV skip="t5000 t9402" ;; FreeBSD) OLD_ICONV=YesPlease; export OLD_ICONV skip="t5560" ;; SunOS) NEEDS_CRYPTO_WITH_SSL=YesPlease ; export NEEDS_CRYPTO_WITH_SSL NO_PEDANTIC=CannotDo ;; esac determine_branch () { expr "$($GIT symbolic-ref --no-recurse HEAD 2>/dev/null || $GIT symbolic-ref HEAD 2>/dev/null)" : 'refs/heads/\(.*\)' || echo detached } determine_version () { v=`$GIT describe HEAD` expr "$v" : '.*-g[0-9a-f]*$' >/dev/null && { echo >&2 "You are on 'snap' but $v is not an official version." exit 1 } echo "$v" } determine_long_version () { $GIT describe HEAD 2>/dev/null || echo unknown-g00000000 | sed -e 's/-/./g' } BUILTIN_CLEAN_FIX=8687f777 if ! git merge-base --is-ancestor $BUILTIN_CLEAN_FIX HEAD then NO_PEDANTIC=YesPlease fi DEVELOPER= case "$NO_PEDANTIC" in ?*) ;; '') DEVELOPER=1 ;; 'not-used-anymore') # PEDANT="-Wtypedef-redefinition $PEDANT" PEDANT="-Werror -Wold-style-definition $PEDANT" PEDANT="-Wpointer-arith -Woverflow -Wunused $PEDANT" PEDANT="-Wold-style-declaration -Wstrict-prototypes $PEDANT" PEDANT="-Wstrict-prototypes $PEDANT" ;; esac while case $# in 0) break ;; esac do case "$1" in --pedantic) echo >&2 "(no need to say --pedantic)" ;; -j*) case "$NO_JOBS" in ?*) jobs= ;; '') jobs=$1 ;; esac ;; -noprove | --noprove) oldtest=t ;; -loose | --loose) DEVELOPER= PEDANT= ;; --memtrash) testpen=testpen.$$ ;; --memtrash=*) testpen=testpen.${1#--memtrash=} ;; --locale=*) LANG=${1#*=} ;; --test=*) tests=$( cd t && IFS="$IFS," for t in ${1#*=} do eval echo "t$t-*.sh" done | tr '\012' ' ' ) ;; --long) GIT_TEST_LONG=YesPlease export GIT_TEST_LONG ;; --dash) with_dash=y ;; --) shift break ;; -*) echo >&2 "Eh $1?" exit 1 ;; *) break ;; esac shift done if test -n "$testpen" then for TRASH in /dev/shm /tmp "" do if test -n "$TRASH" && mkdir -p "$TRASH/$testpen" 2>/dev/null && test -w "$TRASH/$testpen" then testpen=$(cd "$TRASH/$testpen" && /bin/pwd) TRASH="--root=$testpen" clean="$clean; rmdir '$testpen'" break fi done GIT_TEST_OPTS="$TRASH${GIT_TEST_OPTS+" $GIT_TEST_OPTS"}" export GIT_TEST_OPTS fi test -f /bin/dash || with_dash= if test -z "$tests" && test -n "$skip" then GIT_SKIP_TESTS="${GIT_SKIP_TESTS:-$skip}" export GIT_SKIP_TESTS fi if test -z "$oldtest" && sh -c 'prove --version >/dev/null 2>&1' && sh -c 'prove --exec : >/dev/null 2>&1' then # --state=slow,save DEFAULT_TEST_TARGET=prove GIT_PROVE_OPTS="${GIT_PROVE_OPTS:+$GIT_PROVE_OPTS }--timer $jobs" export DEFAULT_TEST_TARGET GIT_PROVE_OPTS fi LC_ALL=$LANG export LANG LC_ALL branch=$(determine_branch) case "$branch" in next | maint | $MASTER | seen | jch) prefix="$inst_prefix/git-$branch" ;; snap) v=$(determine_version) prefix="$inst_prefix/git-snap-$v" ;; *) prefix="$inst_prefix/git-test" ;; esac clean="$clean; rm -f version" determine_long_version >version set "prefix=$prefix" "$@" if test -n "$with_dash" && test -f /bin/dash then set "SHELL_PATH=/bin/dash" "$@" fi if grep >/dev/null DC_SHA1 Makefile then SHA1IMPLEMENTATION=DC_SHA1=YesPlease elif grep >/dev/null BLK_SHA1 Makefile then SHA1IMPLEMENTATION=BLK_SHA1=YesPlease else SHA1IMPLEMENTATION= fi if test -f sha256/nettle.h && test -f /usr/include/nettle/sha2.h then SHA1IMPLEMENTATION="$SHA1IMPLEMENTATION NETTLE_SHA256=YesPlease" fi set MAN_BASE_URL='"http://www.kernel.org/pub/software/scm/git/docs/"' \ MAN_BOLD_LITERAL=YesPlease \ $SHA1IMPLEMENTATION \ GNU_ROFF=YesPlease \ USE_LIBPCRE=YesPlease \ "$@" # Platform hack if test -z "${make:+set}" && { test -x /usr/local/bin/gmake || test -x /usr/pkg/bin/gmake || test -x /usr/bin/gmake } then make=gmake fi if test -f /bin/ginstall then set INSTALL=ginstall "$@" fi unset SSH_AGENT_PID SSH_CLIENT SSH_TTY SSH_AUTH_SOCK SSH_CONNECTION \ GPG_AGENT_INFO GNOME_KEYRING_CONTROL GNOME_KEYRING_PID \ XDG_SESSION_COOKIE XDG_SESSION_PATH XDG_SEAT_PATH XDG_DATA_DIRS \ PGPPATH AUTO_PROXY WINDOWID SESSION_MANAGER XDG_CONFIG_DIRS STY \ GDMSESSION KRB5CCNAME GNOME_DESKTOP_SESSION_ID \ DBUS_SESSION_BUS_ADDRESS LESSOPEN WINDOW DISPLAY GTK_IM_MODULE \ XDG_CURRENT_DESKTOP LESSCLOSE XAUTHORITY # O=-fsanitize=address Meta/Make ${make-make} \ $jobs \ ETC_GITCONFIG=$prefix/etc/gitconfig \ ${DEVELOPER:+"DEVELOPER=YesPlease"} \ SPATCH_FLAGS="--all-includes --recursive-includes --patch ." \ SPATCH_BATCH_SIZE=16 \ CFLAGS="-g -Wall -Wunused -Wdeclaration-after-statement -std=gnu99${O:+ $O}" \ ${tests:+"T=$tests"} ${tests:+UNIT_TESTS=} \ "$@" status=$? eval "$clean" exit $status