# Install path: You need to have permission to write here.
# Otherwise, create this folder first owned by you.
INSTALL_PATH="/opt/cisstiOS"

# cisst Source code path
CISST_PATH="/Users/cisstmacbook/Code/cisst/source/trunk"

# Number of cores to use when compiling
NUM_CORES=2

# iOS SDK Version
SDK_VERSION=4.3

# yes if you want to start the script at compiling cisst
START_CISST=no

#####################################################
# Shouldn't need to change anything below this line #
#####################################################

# Path to iOS SDK for Simulator and Device
SIMULATOR_DEVROOT="/Developer/Platforms/iPhoneSimulator.platform/Developer"
SIMULATOR_SDKROOT=${SIMULATOR_DEVROOT}/SDKS/iPhoneSimulator${SDK_VERSION}.sdk
DEVICE_DEVROOT=/Developer/Platforms/iPhoneOS.platform/Developer
DEVICE_SDKROOT=${DEVICE_DEVROOT}/SDKS/iPhoneOS${SDK_VERSION}.sdk

# Path for log file
LOGFILE="`pwd`/log.txt"

############################################################
# Definitely don't need to change anything below this line #
############################################################

function check {
	if [ $1 -ne 0 ]; then
		printf "FAILED\nCheck log.txt for terminal output.\n"
		if [ -f ${CISST_PATH}/CMakeLists.txt.bak ]; then
			mv -f ${CISST_PATH}/CMakeLists.txt{.bak,} >> ${LOGFILE} 2>&1
		fi
		exit 1
	else
		printf "SUCCESS\n"
	fi
}

function checkPath {
	if [ -d $1 ]; then
		printf "SUCCESS\n"
	else
		printf "FAILED.\nCheck your paths locations.\n"
		exit 1
	fi
}

rm -f ${LOGFILE}
if [ ${START_CISST} != "yes" ]; then

printf "Checking install path permissions.."
mkdir -p ${INSTALL_PATH} >> ${LOGFILE} 2>&1
touch ${INSTALL_PATH}/test >> ${LOGFILE} 2>&1
check $?
rm -f ${INSTALL_PATH}/test >> ${LOGFILE} 2>&1

printf "Checking cisst source code path.."
checkPath ${CISST_PATH}

printf "Checking Simulator SDK path.."
checkPath ${SIMULATOR_SDKROOT}

printf "Checking Device SDK path.."
checkPath ${DEVICE_SDKROOT}

printf "\nConfiguring mcpp for Simulator.."
cd mcpp >> ${LOGFILE} 2>&1
rm -rf build >> ${LOGFILE} 2>&1
make clean >> ${LOGFILE} 2>&1
./configure --enable-mcpplib --disable-shared --prefix=`pwd`/build \
	CFLAGS="-03 -fno-common -arch i386" >> ${LOGFILE} 2>&1
check $?

printf "Compiling mcpp for Simulator.."
make -j${NUM_CORES} >> ${LOGFILE} 2>&1
check $?

printf "Installing mcpp for Simulator.."
make install >> ${LOGFILE} 2>&1
check $?

printf "\nConfiguring mcpp for Device.."
make clean >> ${LOGFILE} 2>&1
./configure --enable-mcpplib --disable-shared --host=arm-apple-darwin \
	CFLAGS="-03 -fno-common -arch armv7 -isysroot ${DEVICE_SDKROOT}" \
	CC=${DEVICE_DEVROOT}/usr/bin/gcc >> ${LOGFILE} 2>&1
check $?

printf "Compiling mcpp for Device.."
make -j${NUM_CORES} >> ${LOGFILE} 2>&1
check $?

printf "Installing mcpp for Device.."
lipo -create src/.libs/libmcpp.a build/lib/libmcpp.a -output build/lib/libmcpp.a >> ${LOGFILE} 2>&1
check $?

printf "\nCompiling ICE for Simulator.."
cd ../Ice-3.4.1/cpp/config >> ${LOGFILE} 2>&1
echo "prefix ?= ${INSTALL_PATH}" > Make.rules.iOS 2>> ${LOGFILE}
echo "CXXARCHFLAGS = -arch i386" >> Make.rules.iOS 2>> ${LOGFILE}
echo "CXX = ${SIMULATOR_DEVROOT}/usr/bin/c++" >> Make.rules.iOS 2>> ${LOGFILE}
echo "CXXFLAGS = -Wall -D_REENTRANT -isysroot ${SIMULATOR_SDKROOT}" >> Make.rules.iOS 2>> ${LOGFILE}
echo "BUILD_SLICE2CPP = yes" >> Make.rules.iOS 2>> ${LOGFILE}
cd ../ >> ${LOGFILE} 2>&1
make clean >> ${LOGFILE} 2>&1
rm -f lib/* >> ${LOGFILE} 2>&1
make -j${NUM_CORES} >> ${LOGFILE} 2>&1
check $?

printf "Installing ICE for Simulator.."
make install >> ${LOGFILE} 2>&1
check $?

printf "\nCompiling ICE for Device.."
cd config >> ${LOGFILE} 2>&1
echo "CXXARCHFLAGS = -arch armv7" > Make.rules.iOS 2>> ${LOGFILE}
echo "CXX = ${DEVICE_DEVROOT}/usr/bin/c++" >> Make.rules.iOS 2>> ${LOGFILE}
echo "CXXFLAGS = -Wall -D_REENTRANT -isysroot ${DEVICE_SDKROOT}" >> Make.rules.iOS 2>> ${LOGFILE}
echo "BUILD_SLICE2CPP = no" >> Make.rules.iOS 2>> ${LOGFILE}
cd ../ >> ${LOGFILE} 2>&1
make clean >> ${LOGFILE} 2>&1
make -j${NUM_CORES} >> ${LOGFILE} 2>&1
check $?

printf "Installing ICE for Device.."
lipo -create ${INSTALL_PATH}/lib/libIce.a lib/libIce.a -output ${INSTALL_PATH}/lib/libIce.a >> ${LOGFILE} 2>&1
lipo -create ${INSTALL_PATH}/lib/libIceUtil.a lib/libIceUtil.a -output ${INSTALL_PATH}/lib/libIceUtil.a >> ${LOGFILE} 2>&1
check $?

printf "Copying ICE config files.."
mkdir -p ${INSTALL_PATH}/etc >> ${LOGFILE} 2>&1
cp -fp ${CISST_PATH}/libs/etc/cisstMultiTask/Ice/config.* ${INSTALL_PATH}/etc >> ${LOGFILE} 2>&1
check $?
cd ../.. >> ${LOGFILE} 2>&1

fi

printf "\nConfiguring CMake files for Simulator.."
cd cisst-cmake >> ${LOGFILE} 2>&1
sed -e "s;SET_SDKVER;${SDK_VERSION};g" -e "s;SET_ICE_HOME;${INSTALL_PATH};g" iphone-simulator.cmake > ${CISST_PATH}/iphone-simulator.cmake 2>> ${LOGFILE}
check $?

printf "Configuring CMakeList.txt for Simulator.."
if [ -f ${CISST_PATH}/CMakeLists.txt.bak ]; then
	mv -f ${CISST_PATH}/CMakeLists.txt{.bak,} >> ${LOGFILE} 2>&1
fi
cp -fp ${CISST_PATH}/CMakeLists.txt{,.bak} >> ${LOGFILE} 2>&1
printf "\nINCLUDE(iphone-simulator.cmake)\n" >> ${CISST_PATH}/CMakeLists.txt 2>> ${LOGFILE}
check $?

printf "Creating build folder for compiling cisst for Simulator.."
cd ../build >> ${LOGFILE} 2>&1
rm -rf * >> ${LOGFILE} 2>&1
check $?

echo ""
read -p "***Press Enter to configure CMake for the Simulator."
ccmake ${CISST_PATH}
mv -f ${CISST_PATH}/CMakeLists.txt{.bak,} >> ${LOGFILE} 2>&1

printf "Compiling cisst library for Simulator.."
make -j${NUM_CORES} >> ${LOGFILE} 2>&1
check $?

printf "Installing cisst library for Simulator.."
make install >> ${LOGFILE} 2>&1
check $?

printf "\nConfiguring CMake files for Device.."
cd ../cisst-cmake >> ${LOGFILE} 2>&1
sed -e "s;SET_SDKVER;${SDK_VERSION};g" -e "s;SET_ICE_HOME;${INSTALL_PATH};g" iphone.cmake > ${CISST_PATH}/iphone.cmake 2>> ${LOGFILE}
check $?

printf "Configuring CMakeList.txt for Device.."
cp -fp ${CISST_PATH}/CMakeLists.txt{,.bak} >> ${LOGFILE} 2>&1
printf "\nINCLUDE(iphone.cmake)\n" >> ${CISST_PATH}/CMakeLists.txt 2>> ${LOGFILE}
check $?

printf "Creating build folder for compiling cisst for Device.."
cd ../build  >> ${LOGFILE} 2>&1
rm -rf * >> ${LOGFILE} 2>&1
check $?

echo ""
read -p "***Press Enter to configure CMake for the Device."
ccmake ${CISST_PATH}
mv -f ${CISST_PATH}/CMakeLists.txt{.bak,} >> ${LOGFILE} 2>&1

printf "Compiling cisst library for Device.."
make -j${NUM_CORES} >> ${LOGFILE} 2>&1
check $?

printf "Installing cisst library for Device.."
cd libs/lib >> ${LOGFILE} 2>&1
for k in $(ls libcisst*.a); do
	lipo -create ${k} ${INSTALL_PATH}/lib/${k} -output ${INSTALL_PATH}/lib/${k} >> ${LOGFILE} 2>&1
done
check $?

printf "\ncisst library with ICE successfully installed to "
echo "${INSTALL_PATH}"

exit 0