362 lines
8.4 KiB
Bash
Executable File
362 lines
8.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
_localPropertiesPath=./android/local.properties
|
|
|
|
function downloadUrl() {
|
|
if program_exists "aria2c"; then
|
|
aria2c --max-connection-per-server=16 --split=16 --dir="$1" -o "$2" "$3"
|
|
else
|
|
wget --show-progress --output-document="$1/$2" "$3"
|
|
fi
|
|
}
|
|
|
|
function install_nsis() {
|
|
# NSIS (Nullsoft Scriptable Install System) is a professional open source system to create Windows installers. It is designed to be as small and flexible as possible and is therefore very suitable for internet distribution.
|
|
linux_install nsis
|
|
}
|
|
|
|
function install_node() {
|
|
if nvm_installed; then
|
|
install_node_via_nvm
|
|
else
|
|
install_node_via_package_manager
|
|
fi
|
|
}
|
|
|
|
function install_and_setup_package_manager() {
|
|
if is_macos; then
|
|
install_homebrew_if_needed
|
|
brew_tap "caskroom/cask"
|
|
elif is_linux; then
|
|
# Linux
|
|
buildtools=(
|
|
autoconf
|
|
automake
|
|
build-essential
|
|
cmake
|
|
curl
|
|
g++
|
|
libssl-dev
|
|
libtool
|
|
make
|
|
python-dev
|
|
wget
|
|
unzip
|
|
)
|
|
|
|
for package in "${buildtools[@]}"; do
|
|
linux_install "$package"
|
|
done
|
|
fi
|
|
}
|
|
|
|
function install_wget() {
|
|
if is_macos; then
|
|
brew_install wget
|
|
fi
|
|
# it's installed on ubuntu/debian by default
|
|
}
|
|
|
|
function needs_java8_linux() {
|
|
! program_exists "java" || !(java -version 2>&1 | grep -q "1.8.0")
|
|
}
|
|
|
|
function install_java8() {
|
|
if is_macos; then
|
|
brew_cask_install "caskroom/versions/java8"
|
|
elif is_linux; then
|
|
if needs_java8_linux; then
|
|
sudo su << EOF
|
|
add-apt-repository ppa:webupd8team/java -y
|
|
apt update
|
|
echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections
|
|
apt install -y oracle-java8-installer
|
|
EOF
|
|
else
|
|
already_installed "java8"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function install_leiningen() {
|
|
if is_macos; then
|
|
brew_install leiningen
|
|
elif is_linux; then
|
|
install_leiningen_linux
|
|
fi
|
|
}
|
|
|
|
function install_leiningen_linux() {
|
|
local destination=/usr/bin/lein
|
|
|
|
if ! program_exists "lein"; then
|
|
cecho "@b@blue[[+ Installing lein...]]"
|
|
|
|
sudo su << EOF
|
|
curl --silent \
|
|
https://raw.githubusercontent.com/technomancy/leiningen/stable/bin/lein \
|
|
-o $destination
|
|
|
|
chmod 755 $destination
|
|
|
|
cd $HOME && lein upgrade
|
|
EOF
|
|
else
|
|
already_installed "lein"
|
|
fi
|
|
}
|
|
|
|
function install_clojure_cli() {
|
|
if is_macos; then
|
|
brew_install clojure
|
|
elif is_linux; then
|
|
install_clojure_cli_linux
|
|
fi
|
|
}
|
|
|
|
function install_clojure_cli_linux() {
|
|
if ! program_exists "lein"; then
|
|
cecho "@b@blue[[+ Installing Clojure CLI...]]"
|
|
|
|
local current_dir=$(pwd)
|
|
sudo su << EOF
|
|
curl --silent \
|
|
https://download.clojure.org/install/linux-install-1.9.0.381.sh \
|
|
-o /tmp/clojure
|
|
|
|
chmod +x /tmp/clojure
|
|
cd /tmp
|
|
./clojure
|
|
EOF
|
|
cd "$current_dir"
|
|
else
|
|
already_installed "Clojure CLI"
|
|
fi
|
|
}
|
|
|
|
function install_watchman() {
|
|
if is_macos; then
|
|
brew_install watchman
|
|
elif is_linux; then
|
|
if ! program_exists "watchman"; then
|
|
local current_dir=$(pwd)
|
|
local clone_path="/tmp/watchman"
|
|
|
|
git clone https://github.com/facebook/watchman.git $clone_path
|
|
cd $clone_path
|
|
git checkout v4.9.0
|
|
./autogen.sh && \
|
|
./configure && \
|
|
make && \
|
|
sudo make install
|
|
|
|
cd "$current_dir"
|
|
else
|
|
already_installed "watchman"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
function install_homebrew_if_needed() {
|
|
! is_macos && return 1
|
|
|
|
if test ! $(which brew); then
|
|
cecho "@b@blue[[+ Installing homebrew]]"
|
|
|
|
ruby -e "$(curl -fsSL \
|
|
https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
|
|
|
brew update
|
|
else
|
|
already_installed "Homebrew"
|
|
fi
|
|
}
|
|
|
|
function install_android_sdk() {
|
|
if is_macos; then
|
|
brew_cask_install android-sdk
|
|
elif is_linux; then
|
|
install_android_sdk_linux
|
|
fi
|
|
|
|
use_android_sdk
|
|
}
|
|
|
|
function install_android_sdk_linux() {
|
|
cecho "@b@yellow[[+ Skipping Android SDK setup, not implemented on Linux]]"
|
|
|
|
return 1
|
|
}
|
|
|
|
function install_maven() {
|
|
brew_install maven
|
|
linux_install maven
|
|
}
|
|
|
|
function install_react_native_cli() {
|
|
cd "$(repo_path)"
|
|
|
|
local npm_command="npm"
|
|
|
|
if is_linux && ! nvm_installed; then
|
|
# aptitude version of node requires sudo for global install
|
|
npm_command="sudo npm"
|
|
fi
|
|
|
|
if npm list -g | grep -q react-native-cli; then
|
|
already_installed "react-native-cli"
|
|
else
|
|
$npm_command install -g react-native-cli
|
|
fi
|
|
}
|
|
|
|
function install_node_via_nvm() {
|
|
local nvmrc="$(repo_path)/.nvmrc"
|
|
|
|
cd "$(repo_path)"
|
|
|
|
if [ ! -e "$nvmrc" ]; then
|
|
cecho "@b@blue[[+ Installing Node 8 (Node 10 is not supported by Realm and Node 9 doesn't support npm 5.5.1)]]"
|
|
|
|
nvm install 8.9.4
|
|
nvm alias status-im 8.9.4
|
|
echo status-im > "$nvmrc"
|
|
|
|
nvm use status-im
|
|
npm install -g npm@5.5.1 # Explicitly downgrade to v5.5.1 of npm, since Status Desktop builds require it (npm install hangs with version higher than 5.5.1). We could maintain two versions of npm (5.5.1 for Desktop and a more recent on for mobile) but that can be confusing and lead to inconsistent environments
|
|
else
|
|
local version_alias=$(cat "$nvmrc")
|
|
nvm use $version_alias
|
|
|
|
local version=$(node -v)
|
|
cecho "+ Node already installed ($version_alias $version via NVM)... skipping."
|
|
fi
|
|
|
|
local npm_version=$(npm -v)
|
|
if [[ $npm_version != "5.5.1" ]]; then
|
|
cecho "@b@red[[+ npm version $npm_version is installed. npm version 5.5.1 is recommended.]]"
|
|
fi
|
|
}
|
|
|
|
function install_node_via_package_manager() {
|
|
if ! program_exists "node"; then
|
|
if is_macos; then
|
|
brew_install node
|
|
elif is_linux; then
|
|
curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash -
|
|
linux_update
|
|
|
|
linux_install nodejs
|
|
fi
|
|
else
|
|
cecho \
|
|
"+ Node already installed ($(node -v) via package manager)... skipping."
|
|
fi
|
|
}
|
|
|
|
function required_pod_version() {
|
|
cat "$(repo_path)/ios/Podfile.lock" | grep "COCOAPODS: " | awk '{ print $2 }'
|
|
}
|
|
|
|
function correct_pod_version_is_installed() {
|
|
! program_exists "pod" && return 1
|
|
|
|
[[ "$(required_pod_version)" == "$(pod --version)" ]]
|
|
}
|
|
|
|
function using_rvm() {
|
|
program_exists "rvm"
|
|
}
|
|
|
|
function initialize_rvm() {
|
|
cd "$(repo_path)"
|
|
|
|
if [ ! -e "$(repo_path)/.ruby-version" ]; then
|
|
rvm use --default > /dev/null
|
|
echo "$(rvm current)" > .ruby-version
|
|
fi
|
|
|
|
rvm use . >/dev/null
|
|
}
|
|
|
|
function using_cocoapods() {
|
|
is_macos
|
|
}
|
|
|
|
function install_cocoapods() {
|
|
! using_cocoapods && return 1
|
|
|
|
local gem_command="sudo gem"
|
|
local destination="system Ruby"
|
|
local version=$(required_pod_version)
|
|
|
|
if using_rvm; then
|
|
initialize_rvm
|
|
|
|
gem_command="gem"
|
|
destination="RVM ($(rvm current))"
|
|
fi
|
|
|
|
if ! program_exists "pod"; then
|
|
$gem_command install cocoapods -v "$version"
|
|
elif ! correct_pod_version_is_installed; then
|
|
cecho "@b@blue[[+ Updating to cocoapods $version]]"
|
|
|
|
$gem_command uninstall cocoapods --ignore-dependencies --silent
|
|
$gem_command install cocoapods -v "$version"
|
|
else
|
|
cecho "+ cocoapods already installed to $destination... skipping."
|
|
fi
|
|
}
|
|
|
|
function dependency_setup() {
|
|
cecho "@b@blue[[\$ $@]]"
|
|
echo
|
|
|
|
cd "$(repo_path)"
|
|
eval "$@" || (cecho "@b@red[[Error running dependency install]]" && exit 1)
|
|
|
|
echo
|
|
echo " + done"
|
|
echo
|
|
}
|
|
|
|
function use_android_sdk() {
|
|
if [ -n "$ANDROID_SDK_ROOT" ]; then
|
|
if ! grep -Fq "sdk.dir" $_localPropertiesPath; then
|
|
echo "sdk.dir=$ANDROID_SDK_ROOT" | tee -a $_localPropertiesPath
|
|
fi
|
|
else
|
|
local _docUrl="https://docs.status.im/docs/build_status.html"
|
|
cecho "@yellow[[ANDROID_SDK_ROOT environment variable not defined, please install the Android SDK.]]"
|
|
cecho "@yellow[[(see $_docUrl).]]"
|
|
|
|
echo
|
|
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
function install_android_ndk() {
|
|
if grep -Fq "ndk.dir" $_localPropertiesPath; then
|
|
cecho "@green[[Android NDK already declared.]]"
|
|
else
|
|
local _ndkParentDir=~/Android/Sdk
|
|
mkdir -p $_ndkParentDir
|
|
cecho "@cyan[[Downloading Android NDK.]]"
|
|
|
|
PLATFORM="linux"
|
|
if [ "$(uname)" == "Darwin" ]; then # we run osx
|
|
PLATFORM="darwin"
|
|
fi
|
|
|
|
downloadUrl . android-ndk.zip https://dl.google.com/android/repository/android-ndk-r10e-$PLATFORM-x86_64.zip && \
|
|
cecho "@cyan[[Extracting Android NDK to $_ndkParentDir.]]" && \
|
|
unzip -q -o ./android-ndk.zip -d "$_ndkParentDir" && \
|
|
rm -f ./android-ndk.zip && \
|
|
_ndkTargetDir="$_ndkParentDir/$(ls $_ndkParentDir | grep ndk)" && \
|
|
echo "ndk.dir=$_ndkTargetDir" | tee -a $_localPropertiesPath && \
|
|
cecho "@blue[[Android NDK installation completed in $_ndkTargetDir.]]"
|
|
fi
|
|
}
|