mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 08:25:32 +00:00
Fixes: #13177 We now need to install sdkmanager through a different Homebrew package / "cask". This does get us `sdkmanager`, but it has a new default location for its Android SDK, while our builds still refer to the old location under the home directory. The build script thus needs a bit of tweaking to force `sdkmanager` to operate based on the location we've previously referred to. Additionally, macOS machines typically default to the zsh terminal these days, so the old profile auto-config doesn't work. This adds and documents example profile script that can be used to configure a macOS dev machine's terminal environment.
229 lines
6.2 KiB
Bash
Executable file
229 lines
6.2 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
set -u
|
|
|
|
## Note: does not use standard build script include
|
|
# adjust relative paths as necessary. Note that this will not work in a symlinked path reliably
|
|
THIS_SCRIPT="${BASH_SOURCE[0]}"
|
|
THIS_DIR=$(dirname "$THIS_SCRIPT")
|
|
|
|
# Determine which components to install
|
|
REQUIRE_ANDROID=false
|
|
REQUIRE_IOS=false
|
|
REQUIRE_MACOS=false
|
|
REQUIRE_WEB=false
|
|
|
|
# Optional components
|
|
REQUIRE_KMC=false
|
|
REQUIRE_PANDOC=false
|
|
REQUIRE_SENTRYCLI=false
|
|
|
|
# Parse args
|
|
shopt -s nocasematch
|
|
|
|
PARAMFOUND=false
|
|
|
|
function print_help() {
|
|
echo "Usage: macos.sh targets"
|
|
echo
|
|
echo "The targets parameter determines the platforms and components"
|
|
echo "that this script will setup your environment to build."
|
|
echo
|
|
echo " group targets:"
|
|
echo " all build all platform targets"
|
|
echo " all-optional build all targets, including optional"
|
|
echo
|
|
echo " platform targets:"
|
|
echo " android ios macos web"
|
|
echo
|
|
echo " optional targets:"
|
|
echo " kmc Keyman keyboard compiler"
|
|
echo " pandoc Documentation compiler"
|
|
echo " sentry-cli sentry.keyman.com debug symbol uploader"
|
|
echo
|
|
echo "Note: If a target has dependencies, those will automatically"
|
|
echo " be included."
|
|
}
|
|
|
|
while [[ $# -gt 0 ]] ; do
|
|
key="$1"
|
|
case $key in
|
|
--help)
|
|
print_help
|
|
exit 0
|
|
;;
|
|
android)
|
|
REQUIRE_ANDROID=true
|
|
PARAMFOUND=true
|
|
;;
|
|
ios)
|
|
REQUIRE_IOS=true
|
|
PARAMFOUND=true
|
|
;;
|
|
macos)
|
|
REQUIRE_MACOS=true
|
|
PARAMFOUND=true
|
|
;;
|
|
web)
|
|
REQUIRE_WEB=true
|
|
PARAMFOUND=true
|
|
;;
|
|
kmc)
|
|
REQUIRE_KMC=true
|
|
PARAMFOUND=true
|
|
;;
|
|
pandoc)
|
|
REQUIRE_PANDOC=true
|
|
PARAMFOUND=true
|
|
;;
|
|
sentry-cli)
|
|
REQUIRE_SENTRYCLI=true
|
|
PARAMFOUND=true
|
|
;;
|
|
all)
|
|
REQUIRE_ANDROID=true
|
|
REQUIRE_IOS=true
|
|
REQUIRE_MACOS=true
|
|
REQUIRE_WEB=true
|
|
PARAMFOUND=true
|
|
;;
|
|
all-optional)
|
|
REQUIRE_ANDROID=true
|
|
REQUIRE_IOS=true
|
|
REQUIRE_MACOS=true
|
|
REQUIRE_WEB=true
|
|
REQUIRE_KMC=true
|
|
REQUIRE_PANDOC=true
|
|
REQUIRE_SENTRYCLI=true
|
|
PARAMFOUND=true
|
|
;;
|
|
*)
|
|
echo "Error: unrecognised parameter."
|
|
echo
|
|
print_help
|
|
exit 1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if ! $PARAMFOUND; then
|
|
echo "Error: must specify target parameter"
|
|
echo
|
|
print_help
|
|
exit 1
|
|
fi
|
|
|
|
# This script will configure your development environment from a bare metal mac install. It should be idempotent.
|
|
|
|
echo "This script will configure your macOS computer to build Keyman, installing build tools and prerequisites."
|
|
echo "You can also do this yourself following the notes in docs/build/macos.md."
|
|
echo
|
|
read -p "Press ENTER to start install"
|
|
|
|
if $REQUIRE_IOS || $REQUIRE_ANDROID; then
|
|
REQUIRE_WEB=true
|
|
fi
|
|
|
|
if $REQUIRE_IOS || $REQUIRE_MACOS || $REQUIRE_ANDROID; then
|
|
REQUIRE_PANDOC=true
|
|
fi
|
|
|
|
## These components are required by all development toolchains
|
|
|
|
# XCode command lines tools will be installed by Brew
|
|
# xcode-select --install
|
|
|
|
which brew || (
|
|
# Install Homebrew
|
|
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
|
|
) && (
|
|
brew update
|
|
)
|
|
|
|
## Install devchain components
|
|
|
|
BREW_ALL="bash jq python3 meson ninja coreutils pyenv"
|
|
BREW_WEB="node emscripten"
|
|
BREW_IOS="swiftlint carthage"
|
|
BREW_MACOS="carthage cocoapods"
|
|
BREW_ANDROID="openjdk@21 android-commandlinetools android-studio ant gradle maven"
|
|
|
|
# Turn on verbosity
|
|
set -x
|
|
|
|
brew install $BREW_ALL
|
|
$REQUIRE_ANDROID && brew install $BREW_ANDROID
|
|
$REQUIRE_IOS && brew install $BREW_IOS
|
|
$REQUIRE_WEB && brew install $BREW_WEB
|
|
$REQUIRE_MACOS && brew install $BREW_MACOS
|
|
|
|
$REQUIRE_PANDOC && brew install pandoc
|
|
$REQUIRE_SENTRYCLI && brew install getsentry/tools/sentry-cli
|
|
|
|
# Add python 2.7.18 from pyenv
|
|
pyenv install 2.7.18
|
|
pyenv global 2.7.18
|
|
|
|
source "$THIS_DIR/keyman.macos.env.sh"
|
|
|
|
$REQUIRE_ANDROID && (
|
|
mkdir -p ~/.android && touch ~/.android/repositories.cfg
|
|
SDK_ROOT=~/.android
|
|
|
|
# installed via android-commandlinetools
|
|
which sdkmanager || (
|
|
echo "Please run Android Studio to install the Android SDK tools."
|
|
read -p "Press ENTER to continue after installation"
|
|
PATH="$HOME/Library/Android/sdk/tools/bin:$PATH"
|
|
)
|
|
|
|
# android-commandlinetools default sdk_root location is elsewhere, as
|
|
# documented by https://formulae.brew.sh/cask/android-commandlinetools
|
|
sdkmanager --sdk_root=$SDK_ROOT "system-images;android-30;google_apis_playstore;x86_64"
|
|
sdkmanager --sdk_root=$SDK_ROOT --update
|
|
sdkmanager --sdk_root=$SDK_ROOT --licenses
|
|
)
|
|
|
|
# For now, we won't run this step automatically
|
|
# as it may interfere with other dev environments
|
|
#($REQUIRE_IOS || $REQUIRE_MACOS) && (
|
|
# # Assumes that xcode is installed into normal path
|
|
# # as otherwise we get only the command line tools which
|
|
# # won't build with xcode
|
|
# echo "Selecting default xcodebuild command line tools from /Applications/Xcode.app"
|
|
# sudo xcode-select -s /Applications/Xcode.app
|
|
#)
|
|
|
|
# Add keyman.macos.env.sh to ~/.bashrc
|
|
|
|
echo "Adding environment variables to ~/.bashrc..."
|
|
if [ -f ~/.bashrc ] && fgrep -q -s "keyman.macos.env.sh" ~/.bashrc; then
|
|
echo ~/.bashrc unchanged
|
|
else
|
|
echo "# added by keyman/macos.sh" >> ~/.bashrc
|
|
echo "source $THIS_DIR/keyman.macos.env.sh" >> ~/.bashrc
|
|
fi
|
|
|
|
echo "Configuration has completed successfully."
|
|
echo
|
|
|
|
if $REQUIRE_MACOS || $REQUIRE_IOS; then
|
|
echo "The following components must be installed manually:"
|
|
echo " * XCode"
|
|
echo
|
|
fi
|
|
|
|
if $REQUIRE_MACOS || $REQUIRE_IOS || $REQUIRE_ANDROID; then
|
|
echo "The following components should be started manually after this script completes, in order to install"
|
|
echo "additional components:"
|
|
if $REQUIRE_MACOS || $REQUIRE_IOS; then
|
|
echo " * XCode"
|
|
echo "You may need to run xcode-select to choose the correct version of XCode command line tools."
|
|
fi
|
|
if $REQUIRE_ANDROID; then
|
|
echo " * Android Studio"
|
|
fi
|
|
echo
|
|
fi
|