spiegel-keyman/ios/samples/build_common.sh
Marc Durdin 6c5b27365a chore(mac): use mac cp for -R ops
Because we don't know if mac BSD cp or GNU cp will be first on the path,
where there is ambiguity (e.g. with -R flag), we will use the macOS cp
command in /bin to ensure that we have consistent results. The
alternative would be to fixup each instance of the cp parameters so that
they work consistently with either cp command, but given these scripts
can run only on macOS, that seems unnecessary.

This replaces the earlier change in 97c6331b5.
2023-04-09 07:05:44 +07:00

143 lines
3.9 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
## START STANDARD BUILD SCRIPT INCLUDE
# adjust relative paths as necessary
THIS_SCRIPT="$(readlink -f "${BASH_SOURCE[0]}")"
. "${THIS_SCRIPT%/*}/../../resources/build/build-utils.sh"
## END STANDARD BUILD SCRIPT INCLUDE
# 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.
/bin/cp -Rf "$KEYMAN_ENGINE_FRAMEWORK_SRC" "$KEYMAN_ENGINE_FRAMEWORK_DST"
fi
if [ $CODE_SIGN = true ]; then
run_xcodebuild -quiet -target "$TARGET" -config "$CONFIG"
else
run_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