#!/bin/bash export SCRIPT_DIR=$(dirname "$0") ## ## Configuration Variables ## config () { # A whitespace-separated list of executables that must be present and locatable. # These will each be installed through Homebrew if not found. : ${REQUIRED_TOOLS="cmake libssh2 libtool autoconf automake pkg-config"} export REQUIRED_TOOLS } ## ## Bootstrap Process ## main () { config local submodules=$(git submodule status) local result=$? if [ "$result" -ne "0" ] then exit $result fi if [ -n "$submodules" ] then echo "*** Updating submodules..." update_submodules fi if [ -n "$REQUIRED_TOOLS" ] then echo "*** Checking dependencies..." check_deps fi } check_deps () { # Check if Homebrew is installed which -s brew local result=$? if [ "$result" -ne "0" ] then echo echo "Homebrew is not installed (http://brew.sh). You will need to manually ensure the following tools are installed:" echo " $REQUIRED_TOOLS" echo echo "Additionally, the following libssh2 files must be symlinked under /usr/local:" echo " lib/libssh2.a include/libssh2.h include/libssh2_sftp.h include/libssh2_publickey.h" exit $result fi # Ensure that we have libgit2's dependencies installed. installed=`brew list` for tool in $REQUIRED_TOOLS do # Skip packages that are already installed. echo "$installed" | grep -q "$tool" && code=$? || code=$? if [ "$code" -eq "0" ] then continue elif [ "$code" -ne "1" ] then exit $code fi echo "*** Installing $tool with Homebrew..." brew install "$tool" done brew_prefix=`brew --prefix` expected_prefix=/usr/local if [ "$brew_prefix" != "$expected_prefix" ] then echo "*** Adding soft links into $expected_prefix..." products=(lib/libssh2.a include/libssh2.h include/libssh2_sftp.h include/libssh2_publickey.h) for product in "${products[@]}" do destination="$expected_prefix/$product" if [ -e "$destination" ] then continue fi sudo mkdir -p "$(dirname "$destination")" sudo ln -s "$brew_prefix/$product" "$destination" done fi } bootstrap_submodule () { local bootstrap="script/bootstrap" if [ -e "$bootstrap" ] then echo "*** Bootstrapping $name..." "$bootstrap" >/dev/null else update_submodules fi } update_submodules () { git submodule sync --quiet && \ git submodule update --init && \ git submodule foreach --quiet bootstrap_submodule } export -f bootstrap_submodule export -f update_submodules main