2017-04-05 18:02:10 +02:00
# Constants
2017-04-07 21:05:14 +02:00
MINIMUM_MONO_VERSION = "5.0.0" # This is Mono version required for both compilation + usage, bump as needed
2017-04-05 18:02:10 +02:00
MINIMUM_NET_FRAMEWORK = "4.6.1" # This should be equal to <TargetFrameworkVersion> in ArchiSteamFarm.csproj, bump as needed
MONO_DEBUG_ADD_IF_AVAILABLE( ) {
echo " INFO: Adding $1 to MONO_DEBUG... "
2017-01-16 03:03:19 +01:00
2016-08-27 09:34:08 +02:00
local PREVIOUS_MONO_DEBUG = " $MONO_DEBUG "
# Add change if needed
2016-09-02 18:57:13 +02:00
if [ -z " $PREVIOUS_MONO_DEBUG " ] ; then
2016-08-27 09:34:08 +02:00
export MONO_DEBUG = " $1 "
2017-04-05 18:04:31 +02:00
elif echo " $PREVIOUS_MONO_DEBUG " | grep -Fq -- " $1 " ; then
2017-04-05 18:02:10 +02:00
echo " INFO: $1 in MONO_DEBUG was set already "
2016-08-27 09:34:08 +02:00
return 0
else
export MONO_DEBUG = " ${ PREVIOUS_MONO_DEBUG } , ${ 1 } "
fi
# If we did a change, check if Mono supports that option
# If not, it will be listed as invalid option on line 1
if mono "" 2>& 1 | head -n 1 | grep -Fq " $1 " ; then
2017-01-16 03:03:19 +01:00
echo " FAILED: $1 "
2016-08-27 09:34:08 +02:00
export MONO_DEBUG = " $PREVIOUS_MONO_DEBUG "
return 1
fi
2017-04-05 18:02:10 +02:00
echo " INFO: Added $1 to MONO_DEBUG "
return 0
}
MONO_ENV_OPTIONS_ADD( ) {
echo " INFO: Adding $1 to MONO_ENV_OPTIONS... "
# Add change if needed
if [ -z " $MONO_ENV_OPTIONS " ] ; then
export MONO_ENV_OPTIONS = " $1 "
2017-04-05 18:04:31 +02:00
elif echo " $MONO_ENV_OPTIONS " | grep -Fq -- " $1 " ; then
2017-04-05 18:02:10 +02:00
echo " INFO: $1 in MONO_ENV_OPTIONS was set already "
return 0
else
2017-04-05 18:04:31 +02:00
export MONO_ENV_OPTIONS = " ${ MONO_ENV_OPTIONS } ${ 1 } "
2017-04-05 18:02:10 +02:00
fi
echo " INFO: Added $1 to MONO_ENV_OPTIONS "
2016-08-27 09:34:08 +02:00
return 0
}
2017-01-16 03:03:19 +01:00
VERSION_GREATER_THAN( ) {
2016-09-02 18:57:13 +02:00
if [ " $1 " = " $2 " ] ; then
2016-08-27 09:34:08 +02:00
return 1
fi
2017-01-16 03:03:19 +01:00
! VERSION_LESS_EQUAL_THAN " $1 " " $2 "
2016-08-27 09:34:08 +02:00
}
2017-01-16 03:03:19 +01:00
VERSION_GREATER_EQUAL_THAN( ) {
! VERSION_LESS_THAN " $1 " " $2 "
2016-08-27 09:34:08 +02:00
}
2017-01-16 03:03:19 +01:00
VERSION_LESS_THAN( ) {
2016-09-02 18:57:13 +02:00
if [ " $1 " = " $2 " ] ; then
2016-08-27 09:34:08 +02:00
return 1
fi
2017-01-16 03:03:19 +01:00
VERSION_LESS_EQUAL_THAN " $1 " " $2 "
2016-08-27 09:34:08 +02:00
}
2017-01-16 03:03:19 +01:00
VERSION_LESS_EQUAL_THAN( ) {
2017-04-06 00:23:48 +02:00
[ " $1 " = " $( echo -e " $1 \n $2 " | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n | head -n 1) " ]
2016-08-27 09:34:08 +02:00
}
2017-04-05 18:02:10 +02:00
# Main
2017-01-16 03:03:19 +01:00
echo "INFO: Mono environment setup executed!"
2017-05-28 13:09:15 +02:00
CURRENT_MONO_VERSION = " $( mono -V | head -n 1 | cut -d ' ' -f 5 | cut -d '.' -f '1-3' ) " # We take only first three version numbers, this is needed for API path in OS X
2016-08-27 09:34:08 +02:00
2017-01-16 03:03:19 +01:00
echo " INFO: Mono version: $CURRENT_MONO_VERSION | Required: ${ MINIMUM_MONO_VERSION } + "
2016-08-27 09:45:55 +02:00
2017-01-16 03:03:19 +01:00
if VERSION_LESS_THAN " $CURRENT_MONO_VERSION " " $MINIMUM_MONO_VERSION " ; then
echo "ERROR: You've attempted to build ASF with unsupported Mono version!"
return 1
2016-08-27 09:34:08 +02:00
fi
2016-08-27 09:45:55 +02:00
2017-04-05 18:02:10 +02:00
MONO_DEBUG_ADD_IF_AVAILABLE "no-compact-seq-points"
MONO_DEBUG_ADD_IF_AVAILABLE "no-gdb-backtrace"
2017-01-16 03:03:19 +01:00
2017-04-05 18:02:10 +02:00
MONO_ENV_OPTIONS_ADD "-O=all"
MONO_ENV_OPTIONS_ADD "--server"
2016-09-12 20:52:30 +02:00
2017-05-28 13:09:15 +02:00
if [ -n " $MONO_API_PATH " ] ; then
echo " INFO: Mono API path was already set to: $MONO_API_PATH "
2017-02-07 21:09:08 +01:00
else
2017-04-05 18:08:26 +02:00
for MONO_LOCATION in "/opt/mono" "/usr" " /Library/Frameworks/Mono.framework/Versions/ ${ CURRENT_MONO_VERSION } " ; do
2017-05-28 13:09:15 +02:00
for API in " ${ MINIMUM_NET_FRAMEWORK } -api " "4.5" ; do # 4.5 is fallback path that existed before Mono decided to split libraries on per-API basis - still available
if [ -d " ${ MONO_LOCATION } /lib/mono/ ${ API } " ] ; then
export MONO_API_PATH = " ${ MONO_LOCATION } /lib/mono/ ${ API } "
2017-04-05 18:02:10 +02:00
break 2
fi
done
done
2017-05-28 13:09:15 +02:00
if [ -n " $MONO_API_PATH " ] ; then
echo " INFO: Mono API path resolved to: $MONO_API_PATH "
2017-04-05 18:02:10 +02:00
else
2017-05-28 13:09:15 +02:00
echo "WARN: Could not find Mono API path!"
2017-04-05 18:02:10 +02:00
fi
2017-02-07 21:09:08 +01:00
fi
2017-01-16 03:03:19 +01:00
echo "INFO: Mono environment setup finished!"