mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-06 08:55:34 +00:00
When working on a new build script, I tripped over the `-?` question mark help parameter here, as it needs to be escaped. Opted to fix all the instances in our scripts, although AFAICT there would not have been current bugs arising from this, as there were no conflicting one character options lower in the case list.
137 lines
3.6 KiB
Bash
Executable file
137 lines
3.6 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
# set -e: Terminate script if a command returns an error
|
|
set -e
|
|
# set -u: Terminate script if an unset variable is used
|
|
set -u
|
|
# set -x: Debugging use, print each statement
|
|
# set -x
|
|
|
|
# Please note that this build script (understandably) assumes that it is running on Mac OS X.
|
|
if [[ "${OSTYPE}" == *"darwin" ]]; then
|
|
echo "This build script will only run in a Mac environment."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "$TARGET" ]; then
|
|
exit 1
|
|
fi
|
|
|
|
display_usage ( ) {
|
|
echo "build.sh [-no-update] | [-lib-build] | [-lib-ignore] | [-clean]"
|
|
echo
|
|
echo " -clean Removes all previously-existing build products for this project before building."
|
|
echo " -no-update If an in-place copy of KeymanEngine.xcframework exists, does not seek out an updated copy."
|
|
echo " -lib-build Actively rebuilds KMEI before copying its build products to project resources."
|
|
echo " -lib-nobuild Prevents the build script from building KeymanEngine under any circumstances."
|
|
echo " -no-codesign Performs the build without code signing."
|
|
echo " -debug Sets the configuration to debug mode instead of release."
|
|
echo
|
|
echo " If no settings are specified this script will grab a copy of the most recent build of KeymanEngine,"
|
|
echo " performing an initial build of it if necessary."
|
|
exit 1
|
|
}
|
|
|
|
assert ( ) {
|
|
if ! [ -f $1 ]; then
|
|
echo "Build failed: missing $1"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
verify_KMEI ( ) {
|
|
KMEI_BUILD_EXISTS=true
|
|
[ -d "$KEYMAN_ENGINE_FRAMEWORK_SRC" ] || KMEI_BUILD_EXISTS=false
|
|
}
|
|
|
|
KMEI_BUILD_DIR="../../"
|
|
|
|
BUILD_FOLDER=build
|
|
|
|
do_clean ( ) {
|
|
rm -rf $BUILD_FOLDER
|
|
}
|
|
|
|
### START OF THE BUILD ###
|
|
|
|
DO_UPDATE=true
|
|
FORCE_KMEI_BUILD=false
|
|
ALLOW_KMEI_BUILD=true
|
|
CODE_SIGN=true
|
|
CONFIG=Release
|
|
KMEI_FLAGS=
|
|
|
|
while [[ $# -gt 0 ]] ; do
|
|
key="$1"
|
|
case $key in
|
|
-no-update)
|
|
DO_UPDATE=false
|
|
ALLOW_KMEI_BUILD=false
|
|
;;
|
|
-lib-build)
|
|
FORCE_KMEI_BUILD=true
|
|
;;
|
|
-lib-nobuild)
|
|
ALLOW_KMEI_BUILD=false
|
|
;;
|
|
-no-codesign)
|
|
CODE_SIGN=false
|
|
KMEI_FLAGS="$KMEI_FLAGS -no-codesign"
|
|
;;
|
|
-h|-\?)
|
|
display_usage
|
|
;;
|
|
-clean)
|
|
do_clean
|
|
KMEI_FLAGS="$KMEI_FLAGS -clean"
|
|
FORCE_KMEI_BUILD=true
|
|
;;
|
|
-debug)
|
|
CONFIG=Debug
|
|
KMEI_FLAGS="$KMEI_FLAGS -debug"
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
KEYMAN_ENGINE_FRAMEWORK_SRC="../../build/Build/Products/$CONFIG/KeymanEngine.xcframework"
|
|
KEYMAN_ENGINE_FRAMEWORK_DST=./
|
|
|
|
if [ $DO_UPDATE = true ]; then
|
|
# Does a prior build of KMEI exist?
|
|
verify_KMEI
|
|
|
|
if [ $ALLOW_KMEI_BUILD = true ] && [ $FORCE_KMEI_BUILD = false ] && [ $KMEI_BUILD_EXISTS = false ]; then
|
|
echo "Previous KeymanEngine build information is unavailable."
|
|
FORCE_KMEI_BUILD=true
|
|
fi
|
|
|
|
if [ $FORCE_KMEI_BUILD = true ]; then
|
|
echo "Building KeymanEngine..."
|
|
base_dir="$(pwd)"
|
|
|
|
cd $KMEI_BUILD_DIR
|
|
./kmbuild.sh -only-framework $KMEI_FLAGS
|
|
cd $base_dir
|
|
fi
|
|
|
|
verify_KMEI
|
|
|
|
if ! [ $KMEI_BUILD_EXISTS ]; then
|
|
echo "Build failed: could not build required KeymanEngine resources."
|
|
exit 1
|
|
fi
|
|
|
|
# Copy resources.
|
|
cp -Rf "$KEYMAN_ENGINE_FRAMEWORK_SRC" "$KEYMAN_ENGINE_FRAMEWORK_DST"
|
|
fi
|
|
|
|
if [ $CODE_SIGN = true ]; then
|
|
xcodebuild -quiet -target "$TARGET" -config "$CONFIG"
|
|
else
|
|
xcodebuild -quiet CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED="NO" CODE_SIGNING_ENTITLEMENTS="" -target "$TARGET" -config "$CONFIG"
|
|
fi
|
|
|
|
if [ $? = 0 ]; then
|
|
echo "Build complete."
|
|
fi
|