Embeddinator-4000/objcgen/system-dependencies.sh

322 строки
8.7 KiB
Bash
Исходник Обычный вид История

#!/bin/bash -e
set -o pipefail
FAIL=
PROVISION_DOWNLOAD_DIR=/tmp/x-provisioning
# parse command-line arguments
while ! test -z $1; do
case $1 in
--provision)
PROVISION_MONO=1
PROVISION_XI=1
PROVISION_XM=1
shift
;;
--provision-mono)
PROVISION_MONO=1
shift
;;
--provision-xamarin-ios)
PROVISION_XI=1
shift
;;
--provision-xamarin-mac)
PROVISION_XM=1
shift
;;
--provision-all)
PROVISION_MONO=1
PROVISION_XI=1
PROVISION_XM=1
shift
;;
--ignore-mono)
IGNORE_MONO=1
shift
;;
--ignore-xamarin-ios)
IGNORE_XI=1
shift
;;
--ignore-xamarin-mac)
IGNORE_XM=1
shift
;;
*)
echo "Unknown argument: $1"
exit 1
;;
esac
done
# reporting functions
function fail () {
tput setaf 1 2>/dev/null || true
echo " $1"
tput sgr0 2>/dev/null || true
FAIL=1
}
function warn () {
tput setaf 3 2>/dev/null || true
echo " $1"
tput sgr0 2>/dev/null || true
}
function ok () {
echo " $1"
}
function log () {
echo " $1"
}
# $1: the version to check
# $2: the minimum version to check against
function is_at_least_version () {
ACT_V=$1
MIN_V=$2
if [[ "$ACT_V" == "$MIN_V" ]]; then
return 0
fi
IFS=. read -a V_ACT <<< "$ACT_V"
IFS=. read -a V_MIN <<< "$MIN_V"
# get the minimum # of elements
AC=${#V_ACT[@]}
MC=${#V_MIN[@]}
COUNT=$(($AC>$MC?$MC:$AC))
C=0
while (( $C < $COUNT )); do
ACT=${V_ACT[$C]}
MIN=${V_MIN[$C]}
if (( $ACT > $MIN )); then
return 0
elif (( "$MIN" > "$ACT" )); then
return 1
fi
let C++
done
if (( $AC == $MC )); then
# identical?
return 0
fi
if (( $AC > $MC )); then
# more version fields in actual than min: OK
return 0
elif (( $AC == $MC )); then
# entire strings aren't equal (first check in function), but each individual field is?
return 0
else
# more version fields in min than actual (1.0 vs 1.0.1 for instance): not OK
return 1
fi
}
function install_mono () {
local MONO_URL=`grep MIN_MONO_URL= Make.config | sed 's/.*=//'`
local MIN_MONO_VERSION=`grep MIN_MONO_VERSION= Make.config | sed 's/.*=//'`
if test -z $MONO_URL; then
fail "No MIN_MONO_URL set in Make.config, cannot provision"
return
fi
mkdir -p $PROVISION_DOWNLOAD_DIR
log "Downloading Mono $MIN_MONO_VERSION from $MONO_URL to $PROVISION_DOWNLOAD_DIR..."
local MONO_NAME=`basename $MONO_URL`
local MONO_PKG=$PROVISION_DOWNLOAD_DIR/$MONO_NAME
curl -L $MONO_URL > $MONO_PKG
log "Installing Mono $MIN_MONO_VERSION from $MONO_URL..."
sudo installer -pkg $MONO_PKG -target /
rm -f $MONO_PKG
}
function check_mono () {
if ! test -z $IGNORE_MONO; then return; fi
PKG_CONFIG_PATH=/Library/Frameworks/Mono.framework/Versions/Current/bin/pkg-config
if ! /Library/Frameworks/Mono.framework/Commands/mono --version 2>/dev/null >/dev/null; then
if ! test -z $PROVISION_MONO; then
install_mono
else
fail "You must install the Mono MDK (http://www.mono-project.com/download/)"
return
fi
elif ! test -e $PKG_CONFIG_PATH; then
if ! test -z $PROVISION_MONO; then
install_mono
else
fail "Could not find pkg-config, you must install the Mono MDK (http://www.mono-project.com/download/)"
return
fi
fi
MIN_MONO_VERSION=`grep MIN_MONO_VERSION= Make.config | sed 's/.*=//'`
MAX_MONO_VERSION=`grep MAX_MONO_VERSION= Make.config | sed 's/.*=//'`
ACTUAL_MONO_VERSION=`$PKG_CONFIG_PATH --modversion mono`.`cat /Library/Frameworks/Mono.framework/Home/updateinfo | cut -d' ' -f2 | cut -c6- | awk '{print(int($0))}'`
if ! is_at_least_version $ACTUAL_MONO_VERSION $MIN_MONO_VERSION; then
if ! test -z $PROVISION_MONO; then
install_mono
ACTUAL_MONO_VERSION=`$PKG_CONFIG_PATH --modversion mono`
else
fail "You must have at least Mono $MIN_MONO_VERSION, found $ACTUAL_MONO_VERSION"
return
fi
elif [[ "$ACTUAL_MONO_VERSION" == "$MAX_MONO_VERSION" ]]; then
: # this is ok
elif is_at_least_version $ACTUAL_MONO_VERSION $MAX_MONO_VERSION; then
if ! test -z $PROVISION_MONO; then
install_mono
ACTUAL_MONO_VERSION=`$PKG_CONFIG_PATH --modversion mono`.`cat /Library/Frameworks/Mono.framework/Home/updateinfo | cut -d' ' -f2 | cut -c6- | awk '{print(int($0))}'`
else
fail "Your mono version is too new, max version is $MAX_MONO_VERSION, found $ACTUAL_MONO_VERSION."
fail "You may edit Make.config and change MAX_MONO_VERSION to your actual version to continue the"
fail "build (unless you're on a release branch). Once the build completes successfully, please"
fail "commit the new MAX_MONO_VERSION value."
return
fi
fi
ok "Found Mono $ACTUAL_MONO_VERSION (at least $MIN_MONO_VERSION and not more than $MAX_MONO_VERSION is required)"
}
function install_pkg () {
local PRODUCT=$1
local MIN_VERSION=$2
local URL=$3
if test -z $URL; then
fail "No url set for $PRODUCT in Make.config, cannot provision"
return
fi
mkdir -p $PROVISION_DOWNLOAD_DIR
log "Downloading $PRODUCT $MIN_VERSION from $URL to $PROVISION_DOWNLOAD_DIR..."
local NAME=`basename $URL`
local PKG=$PROVISION_DOWNLOAD_DIR/$NAME
curl -L $URL > $PKG
log "Installing $PRODUCT $MIN_VERSION from $URL..."
sudo installer -pkg $PKG -target /
rm -f $PKG
}
function install_xamarin_ios () {
local URL=`grep MIN_XI_URL= Make.config | sed 's/.*=//'`
local MIN_VERSION=`grep MIN_XI_VERSION= Make.config | sed 's/.*=//'`
install_pkg Xamarin.iOS "$MIN_VERSION" "$URL"
}
function install_xamarin_mac () {
local URL=`grep MIN_XM_URL= Make.config | sed 's/.*=//'`
local MIN_VERSION=`grep MIN_XM_VERSION= Make.config | sed 's/.*=//'`
install_pkg Xamarin.Mac "$MIN_VERSION" "$URL"
}
function check_xamarin_ios () {
if ! test -z $IGNORE_XI; then return; fi
local MIN_XI_VERSION=$(grep MIN_XI_VERSION= Make.config | sed 's/.*=//')
local MAX_XI_VERSION=$(grep MAX_XI_VERSION= Make.config | sed 's/.*=//')
if ! test -f /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/Version; then
if ! test -z $PROVISION_XI; then
install_xamarin_ios
else
fail "You must install Xamarin.iOS ($MIN_XI_VERSION)"
return
fi
else
local ACTUAL_XI_VERSION=$(cat /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/Version)
if ! is_at_least_version $ACTUAL_XI_VERSION $MIN_XI_VERSION; then
if ! test -z $PROVISION_XI; then
install_xamarin_ios
else
fail "You must have at least Xamarin.iOS $MIN_XI_VERSION, found $ACTUAL_XI_VERSION"
return
fi
elif [[ "$ACTUAL_XI_VERSION" == "$MAX_XI_VERSION" ]]; then
: # this is ok
elif is_at_least_version $ACTUAL_XI_VERSION $MAX_XI_VERSION; then
if ! test -z $PROVISION_XI; then
install_xamarin_ios
else
fail "Your Xamarin.iOS version is too new, max version is $MAX_XI_VERSION, found $ACTUAL_XI_VERSION."
fail "You may edit Make.config and change MAX_XI_VERSION to your actual version to continue the"
fail "build (unless you're on a release branch). Once the build completes successfully, please"
fail "commit the new MAX_XI_VERSION value."
fi
fi
fi
local ACTUAL_XI_VERSION=$(cat /Library/Frameworks/Xamarin.iOS.framework/Versions/Current/Version)
ok "Found Xamarin.iOS $ACTUAL_XI_VERSION (at least $MIN_XI_VERSION and not more than $MAX_XI_VERSION is required)"
}
function check_xamarin_mac () {
if ! test -z $IGNORE_XM; then return; fi
local MIN_XM_VERSION=$(grep MIN_XM_VERSION= Make.config | sed 's/.*=//')
local MAX_XM_VERSION=$(grep MAX_XM_VERSION= Make.config | sed 's/.*=//')
if ! test -f /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/Version; then
if ! test -z $PROVISION_XM; then
install_xamarin_mac
else
fail "You must install Xamarin.Mac ($MIN_XM_VERSION)"
return
fi
else
local ACTUAL_XM_VERSION=$(cat /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/Version)
if ! is_at_least_version $ACTUAL_XM_VERSION $MIN_XM_VERSION; then
if ! test -z $PROVISION_XM; then
install_xamarin_mac
else
fail "You must have at least Xamarin.Mac $MIN_XM_VERSION, found $ACTUAL_XM_VERSION"
return
fi
elif [[ "$ACTUAL_XM_VERSION" == "$MAX_XM_VERSION" ]]; then
: # this is ok
elif is_at_least_version $ACTUAL_XM_VERSION $MAX_XM_VERSION; then
if ! test -z $PROVISION_XM; then
install_xamarin_mac
else
fail "Your Xamarin.Mac version is too new, max version is $MAX_XM_VERSION, found $ACTUAL_XM_VERSION."
fail "You may edit Make.config and change MAX_XM_VERSION to your actual version to continue the"
fail "build (unless you're on a release branch). Once the build completes successfully, please"
fail "commit the new MAX_XM_VERSION value."
fi
fi
fi
local ACTUAL_XM_VERSION=$(cat /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/Version)
ok "Found Xamarin.Mac $ACTUAL_XM_VERSION (at least $MIN_XM_VERSION and not more than $MAX_XM_VERSION is required)"
}
echo "Checking system..."
check_mono
check_xamarin_ios
check_xamarin_mac
if test -z $FAIL; then
echo "System check succeeded"
else
echo "System check failed"
exit 1
fi