blob: ceceb528963efe0c8c9c8b5f686a67bed44244a9 [file] [log] [blame]
#!/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 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
set MAN_BASE_URL='"http://www.kernel.org/pub/software/scm/git/docs/"' \
MAN_BOLD_LITERAL=YesPlease \
$SHA1IMPLEMENTATION \
GNU_ROFF=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"} \
${O:+CFLAGS="-g -Wall $O"} \
${tests:+"T=$tests"} \
"$@"
status=$?
eval "$clean"
exit $status