Files

159 lines
3.9 KiB
Bash
Executable File

#!/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 ()
{
echo "** 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 or /opt/homebrew :"
echo " lib/libssh2.a include/libssh2.h include/libssh2_sftp.h include/libssh2_publickey.h"
if [ ! -z "$CI" ]
then
echo
echo "I will try to install brew now on the github runner"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
fi
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
echo "*** $tool is available 👍"
continue
elif [ "$code" -ne "1" ]
then
exit $code
fi
echo "*** Installing $tool with Homebrew..."
brew install "$tool"
done
brew_prefix=$(brew --prefix)
if [[ $(uname -m) == 'arm64' ]]; then
echo "** Running on a Apple Silicon M1"
expected_prefix=/opt/homebrew
else
echo "** Running on a Apple x86"
expected_prefix=/usr/local
fi
install_path="./External"
pwd
set -x
cp "$brew_prefix"/lib/libcrypto.a $install_path
cp "$brew_prefix"/lib/libssl.a $install_path
cp "$brew_prefix"/lib/libssh2.a $install_path
set +x
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
# openssl@1 is expected
#sslSource=$(find $brew_prefix -name libcrypto.a | grep openssl | sort | head -1 | xargs dirname)
#echo "Find libcrypto.a and take first $sslSource and copy to install_path=$install_path"
#cp $sslSource/* "$install_path" 2>/dev/null | echo "Copy and ignore subdirectory. This makes build work on x86 and arm64"
}
bootstrap_submodule ()
{
local bootstrap="script/bootstrap"
if [ -e "$bootstrap" ]
then
echo "*** Bootstrapping ..."
"$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