blob: 7be2cc95c7ace55d710315427f38284cc5b2af4c [file] [log] [blame]
# Make sure that we are in the right directory.
if test ! -f; then
cat >&2 <<__EOF__
You must run bootstrap from the root of the distribution.
exit 1
# Helper functions to get the absolute path of a directory as well as compute
# the relative path between two directories.
# Unfortunately these functions are not as readable as, say, python's
# os.path.relpath method, but they allow us to avoid a hard dependence on
# python or other tools during bootstrap.
abspath() {
cd "`dirname "${1}"`"
echo "${PWD}"/"`basename "${1}"`"
cd "${OLDPWD}"
relpath() {
local from to up
from="`abspath "${1%/}"`" to="`abspath "${2%/}"/`"
while test "${to}" = "${to#"${from}"/}" \
-a "${to}" != "${from}"; do
from="${from%/*}" up="../${up}"
echo "${to:-.}"
# Grab a reference to the repo's git directory. Usually this is simply .git in
# the repo's top level directory. However, when submodules are used, it may
# appear elsewhere. The most up-to-date way of finding this directory is to use
# `git rev-parse --git-common-dir`. This is necessary to support things like
# git worktree in addition to git submodules. However, as of January 2016,
# support for the '--git-common-dir' flag is fairly new, forcing us to fall
# back to the older '--git-dir' flag if '--git-common-dir' is not supported. We
# do this by checking the output of `git rev-parse --git-common-dir` and seeing
# if it gives us a valid directory back. If not, we set the git directory using
# the '--git-dir' flag instead.
_gitdir=`git rev-parse --git-common-dir`
if test ! -d "${_gitdir}"; then
_gitdir=`git rev-parse --git-dir`
# Grab a reference to the git hooks directory as well as the relative path from
# the git hooks directory to the current directory.
_relpath=`relpath "${_hooksdir}" "${PWD}"`
# Install mesos default hooks and gitignore template.
if test ! -e "${_hooksdir}/pre-commit"; then
ln -s "${_relpath}/support/hooks/pre-commit" "${_hooksdir}/pre-commit"
if test ! -e "${_hooksdir}/post-rewrite"; then
ln -s "${_relpath}/support/hooks/post-rewrite" "${_hooksdir}/post-rewrite"
if test ! -e "${_hooksdir}/commit-msg"; then
ln -s "${_relpath}/support/hooks/commit-msg" "${_hooksdir}/commit-msg"
if test ! -e .gitignore; then
ln -s support/gitignore .gitignore
if test ! -e .reviewboardrc; then
ln -s support/reviewboardrc .reviewboardrc
if test ! -e .clang-format; then
ln -s support/clang-format .clang-format
if test ! -e .clang-tidy; then
ln -s support/clang-tidy .clang-tidy
if [ -n "$AUTOMAKE" ] || [ -n "$ACLOCAL" ] ; then
if [ -z "$ACLOCAL" ] || [ -z "$AUTOMAKE" ] ; then
[ -n "$ACLOCAL" ] && _present="ACLOCAL" && _missing="AUTOMAKE"
cat >&2 <<__EOF__
[ERROR]: You are providing the path to ${_present}
through your environment but no reference to ${_missing}.
To fix this error please specify ${_missing} too.
As an example, if you are using automake-1.12 and have
available aclocal-1.12 you will want to do the following:
AUTOMAKE="/usr/local/bin/automake-1.12" \\
ACLOCAL="/usr/local/bin/aclocal-1.12" \\
Your current environment has:
exit 1
AUTOMAKE="$(which automake)"
# Note that we don't use '--no-recursive' because older versions of
# autoconf/autoreconf bail with that option. Unfortunately this means
# that we'll modify a lot of files in 3rdparty/libprocess, but that
# may change in the future.
autoreconf --install -Wall --verbose "${@}"