#!/bin/bash

# This implements steps 7 and 8 of the OSX compilation procedure described in Compile.rst
# If build-osx does not exist in the parent directory, it will be created.

LUA_PATCH=1
ME=$PWD/`basename $0`

usage() {
    echo "Usage: $0 [options] {DF_OSX_PATH}"
    echo -e "\told\t- use on pre-Snow Leopard OSX installations"
    echo -e "\tbrew\t- if GCC 4.5 was installed with homebrew"
    echo -e "\tport\t- if GCC 4.5 was insalled with macports"
    echo -e "\tclean\t- delete ../build-osx before compiling"
    echo "Example:"
    echo -e "\t$0 old brew ../../../personal/df_osx"
    echo -e "\t$0 port clean /Users/dfplayer/df_osx"
    exit $1
}

options() {
    case $1 in
        brew)
            echo "Using homebrew gcc."
            export CC=/usr/local/bin/gcc-4.5
            export CXX=/usr/local/bin/g++-4.5
            targetted=1
            ;;
        port)
            echo "Using macports gcc."
            export CC=/opt/local/bin/gcc-mp-4.5
            export CXX=/opt/local/bin/g++-mp-4.5
            targetted=1
            ;;
        old)
            LUA_PATCH=0
            ;;
        clean)
            echo "Deleting ../build-osx"
            rm -rf ../build-osx
            ;;
        *)
            ;;
    esac
}

# sanity checks
if [[ $# -lt 1 ]]
then
    echo "Not enough arguments."
    usage 0
fi
if [[ $# -gt 4 ]]
then
    echo "Too many arguments."
    usage 1
fi

# run through the arguments
for last
do
    options $last
done
# last keeps the last argument

if [[ $targetted -eq 0 ]]
then
    echo "You did not specify whether you intalled GCC 4.5 from brew or ports."
    echo "If you continue, your default compiler will be used."
    read -p "Are you sure you want to continue? [y/N] " -n 1 -r
    echo    # (optional) move to a new line
    if [[ ! $REPLY =~ ^[Yy]$ ]]
    then
        exit 0
    fi
fi

# check for build folder and start working there
if [[ ! -d ../build-osx ]]
then
    mkdir ../build-osx
fi
cd ../build-osx

# patch if necessary
if [[ $LUA_PATCH -ne 0 ]]
then
    cd ..
    echo "$PWD"
    sed -e '1,/'"PATCH""CODE"'/d' "$ME" | patch -p0
    cd -
fi

echo "Generate"
cmake .. -DCMAKE_BUILD_TYPE:string=Release -DCMAKE_INSTALL_PREFIX="$last"
echo "Build"
make
echo "Install"
make install

# unpatch if /libarary/luaTypes.cpp was patched
if [[ $LUA_PATCH -ne 0 ]]
then
    cd ..
    echo -n "un"
    sed -e '1,/'"PATCH""CODE"'/d' "$ME" | patch -p0 -R
    cd -
fi

exit 0

# PATCHCODE - everything below this line is fed into patch
--- library/LuaTypes.cpp    2014-08-20 00:13:17.000000000 -0700
+++ library/LuaTypes.cpp    2014-08-31 23:31:00.000000000 -0700
@@ -464,7 +464,7 @@
     {
         case struct_field_info::STATIC_STRING:
         {
-            int len = strnlen((char*)ptr, field->count);
+            int len = strlen((char*)ptr);
             lua_pushlstring(state, (char*)ptr, len);
             return;
         }