FreeRDP/scripts/OpenSSL-DownloadAndBuild.command
2013-12-04 11:44:22 +01:00

150 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
#
# Copyright 2013 Thincast Technologies GmbH
#
# This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
# If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This script will download and build openssl for iOS (armv7, armv7s) and simulator (i386)
# Settings and definitions
USER_OS_SDK=""
USER_SIM_SDK=""
OPENSSLVERSION="1.0.0e"
MD5SUM="7040b89c4c58c7a1016c0dfa6e821c86"
OPENSSLPATCH="OpenSSL-iFreeRDP.diff"
INSTALLDIR="external"
MAKEOPTS="-j $CORES"
# disable parallell builds since openssl build
# fails sometimes
MAKEOPTS=""
CORES=`sysctl hw.ncpu | awk '{print $2}'`
SCRIPTDIR=$(dirname `cd ${0%/*} && echo $PWD/${0##*/}`)
OS_SDK=""
SIM_SDK=""
OS_SDK_PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs"
SIM_SDK_PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs"
# Functions
function buildArch(){
ARCH=$1
LOGFILE="BuildLog.darwin-${ARCH}.txt"
echo "Building architecture ${ARCH}. Please wait ..."
./Configure darwin-${ARCH}-cc > ${LOGFILE}
make ${MAKEOPTS} >> ${LOGFILE} 2>&1
echo "Done. Build log saved in ${LOGFILE}"
cp libcrypto.a ../../lib/libcrypto_${ARCH}.a
cp libssl.a ../../lib/libssl_${ARCH}.a
make clean >/dev/null 2>&1
echo
}
# main
if [ $# -gt 0 ];then
INSTALLDIR=$1
if [ ! -d $INSTALLDIR ];then
echo "Install directory \"$INSTALLDIR\" does not exist"
exit 1
fi
fi
echo "Detecting SDKs..."
if [ "x${USER_OS_SDK}" == "x" ];then
OS_SDK=`ls -1 ${OS_SDK_PATH} | sort -n | head -1`
if [ "x${OS_SDK}" == "x" ];then
echo "No iPhoneOS SDK found"
exit 1;
fi
else
OS_SDK=${USER_OS_SDK}
if [ ! -d "${OS_SDK_PATH}/${OS_SDK}" ];then
echo "User specified iPhoneOS SDK not found"
exit 1
fi
fi
echo "Using iPhoneOS SDK: ${OS_SDK}"
if [ "x${USER_SIM_SDK}" == "x" ];then
SIM_SDK=`ls -1 ${SIM_SDK_PATH} | sort -n | head -1`
if [ "x${SIM_SDK}" == "x" ];then
echo "No iPhoneSimulator SDK found"
exit 1;
fi
else
SIM_SDK=${USER_SIM_SDK}
if [ ! -d "${SIM_SDK_PATH}/${SIM_SDK}" ];then
echo "User specified iPhoneSimulator SDK not found"
exit 1
fi
fi
echo "Using iPhoneSimulator SDK: ${SIM_SDK}"
echo
cd $INSTALLDIR
if [ ! -d openssl ];then
mkdir openssl
fi
cd openssl
CS=`md5 -q "openssl-$OPENSSLVERSION.tar.gz" 2>/dev/null`
if [ ! "$CS" = "$MD5SUM" ]; then
echo "Downloading OpenSSL Version $OPENSSLVERSION ..."
rm -f "openssl-$OPENSSLVERSION.tar.gz"
curl -o "openssl-$OPENSSLVERSION.tar.gz" http://www.openssl.org/source/openssl-$OPENSSLVERSION.tar.gz
CS=`md5 -q "openssl-$OPENSSLVERSION.tar.gz" 2>/dev/null`
if [ ! "$CS" = "$MD5SUM" ]; then
echo "Download failed or invalid checksum. Have a nice day."
exit 1
fi
fi
# remove old build dir
rm -rf openssltmp
mkdir openssltmp
cd openssltmp
echo "Unpacking OpenSSL ..."
tar xfz "../openssl-$OPENSSLVERSION.tar.gz"
if [ ! $? = 0 ]; then
echo "Unpacking failed."
exit 1
fi
echo
echo "Applying iFreeRDP patch ..."
cd "openssl-$OPENSSLVERSION"
cp ${SCRIPTDIR}/${OPENSSLPATCH} .
sed -ie "s#__ISIMSDK__#${SIM_SDK}#" ${OPENSSLPATCH}
sed -ie "s#__IOSSDK__#${OS_SDK}#" ${OPENSSLPATCH}
patch -p1 < $OPENSSLPATCH
if [ ! $? = 0 ]; then
echo "Patch failed."
exit 1
fi
echo
# Cleanup old build artifacts
mkdir -p ../../include/openssl
rm -f ../../include/openssl/*.h
mkdir -p ../../lib
rm -f ../../lib/*.a
echo "Copying header hiles ..."
cp include/openssl/*.h ../../include/openssl/
echo
buildArch i386
buildArch armv7
buildArch armv7s
echo "Combining to unversal binary"
lipo -create ../../lib/libcrypto_*.a -o ../../lib/libcrypto.a
lipo -create ../../lib/libssl_*.a -o ../../lib/libssl.a
echo "Finished. Please verify the contens of the openssl folder in \"$INSTALLDIR\""