#!/usr/bin/env bash

set -e
set -o pipefail

CONFIG_FILE=${1:-config.gypi}

if [ `uname -s` = 'Darwin' ]; then
    MASON_PLATFORM=${MASON_PLATFORM:-osx}
fi

function finish {
    >&2 echo -en "\033[0m";
}
trap finish EXIT

# Install mason
. ./scripts/local_mason.sh

case ${MASON_PLATFORM} in
    'ios')
        SQLITE_VERSION=system
        LIBUV_VERSION=0.10.28
        ZLIB_VERSION=system
        BOOST_VERSION=system
        ;;
    'android')
        SQLITE_VERSION=3.8.6
        LIBPNG_VERSION=1.6.13
        OPENSSL_VERSION=1.0.1i
        LIBCURL_VERSION=7.38.0
        LIBUV_VERSION=0.11.29
        ZLIB_VERSION=system
        BOOST_VERSION=1.57.0
        NUNICODE_VERSION=1.4
        ;;
    *)
	GLFW_VERSION=a21f2377
	SQLITE_VERSION=system
	LIBPNG_VERSION=1.6.13
	LIBCURL_VERSION=system
	LIBUV_VERSION=0.10.28
	ZLIB_VERSION=system
	BOOST_VERSION=system
	NUNICODE_VERSION=1.4
	;;
esac

function abort { >&2 echo -e "\033[1m\033[31m$1\033[0m"; exit 1; }

PYTHON=`which python || abort 'Cannot find python'`

>&2 echo -en "\033[1m\033[32m* Using "
>&2 ${PYTHON} --version
>&2 echo -en "\033[0m";

function quote_flags {
    ${PYTHON} -c "import sys, re; print filter(None, re.split('(?<!-framework)\s+', ' '.join(sys.argv[1:])))" "$@"
}

LN=$'\n'

CONFIG="# Do not edit. Generated by the configure script.
{
  'target_defaults': {
    'cflags': [],
    'default_configuration': 'Release',
    'defines': [],
    'include_dirs': [],
    'libraries': []
  },
  'variables': {
    'python': '${PYTHON}',
"

if [ ! -z ${BOOST_VERSION} ]; then
    mason install boost ${BOOST_VERSION}
    CONFIG+="    'boost_root': '$(mason prefix boost ${BOOST_VERSION})',"$LN
fi

if [ ! -z ${OPENSSL_VERSION} ]; then
    mason install openssl ${OPENSSL_VERSION}
    CONFIG+="    'openssl_static_libs': $(quote_flags $(mason static_libs openssl ${OPENSSL_VERSION})),"$LN
    CONFIG+="    'openssl_cflags': $(quote_flags $(mason cflags openssl ${OPENSSL_VERSION})),"$LN
    CONFIG+="    'openssl_ldflags': $(quote_flags $(mason ldflags openssl ${OPENSSL_VERSION})),"$LN
fi

if [ ! -z ${LIBCURL_VERSION} ]; then
    mason install libcurl ${LIBCURL_VERSION}
    CONFIG+="    'curl_static_libs': $(quote_flags $(mason static_libs libcurl ${LIBCURL_VERSION})),"$LN
    CONFIG+="    'curl_cflags': $(quote_flags $(mason cflags libcurl ${LIBCURL_VERSION})),"$LN
    CONFIG+="    'curl_ldflags': $(quote_flags $(mason ldflags libcurl ${LIBCURL_VERSION})),"$LN
else
    CONFIG+="    'curl_static_libs': [],"$LN
fi

if [ ! -z ${GLFW_VERSION} ]; then
    mason install glfw ${GLFW_VERSION}
    CONFIG+="    'glfw3_static_libs': $(quote_flags $(mason static_libs glfw ${GLFW_VERSION})),"$LN
    CONFIG+="    'glfw3_cflags': $(quote_flags $(mason cflags glfw ${GLFW_VERSION})),"$LN
    CONFIG+="    'glfw3_ldflags': $(quote_flags $(mason ldflags glfw ${GLFW_VERSION})),"$LN
fi

if [ ! -z ${LIBPNG_VERSION} ]; then
    mason install libpng ${LIBPNG_VERSION}
    CONFIG+="    'png_static_libs': $(quote_flags $(mason static_libs libpng ${LIBPNG_VERSION})),"$LN
    CONFIG+="    'png_cflags': $(quote_flags $(mason cflags libpng ${LIBPNG_VERSION})),"$LN
    CONFIG+="    'png_ldflags': $(quote_flags $(mason ldflags libpng ${LIBPNG_VERSION})),"$LN
fi

if [ ! -z ${SQLITE_VERSION} ]; then
    mason install sqlite ${SQLITE_VERSION}
    CONFIG+="    'sqlite3_static_libs': $(quote_flags $(mason static_libs sqlite ${SQLITE_VERSION})),"$LN
    CONFIG+="    'sqlite3_cflags': $(quote_flags $(mason cflags sqlite ${SQLITE_VERSION})),"$LN
    CONFIG+="    'sqlite3_ldflags': $(quote_flags $(mason ldflags sqlite ${SQLITE_VERSION})),"$LN
fi

if [ ! -z ${LIBUV_VERSION} ]; then
    mason install libuv ${LIBUV_VERSION}
    CONFIG+="    'uv_static_libs': $(quote_flags $(mason static_libs libuv ${LIBUV_VERSION})),"$LN
    CONFIG+="    'uv_cflags': $(quote_flags $(mason cflags libuv ${LIBUV_VERSION})),"$LN
    CONFIG+="    'uv_ldflags': $(quote_flags $(mason ldflags libuv ${LIBUV_VERSION})),"$LN
fi

if [ ! -z ${ZLIB_VERSION} ]; then
    mason install zlib ${ZLIB_VERSION}
    CONFIG+="    'zlib_static_libs': $(quote_flags $(mason static_libs zlib ${ZLIB_VERSION})),"$LN
    CONFIG+="    'zlib_cflags': $(quote_flags $(mason cflags zlib ${ZLIB_VERSION})),"$LN
    CONFIG+="    'zlib_ldflags': $(quote_flags $(mason ldflags zlib ${ZLIB_VERSION})),"$LN
fi

if [ ! -z ${NUNICODE_VERSION} ]; then
    mason install nunicode ${NUNICODE_VERSION}
    CONFIG+="    'nu_static_libs': $(quote_flags $(mason static_libs nunicode ${NUNICODE_VERSION})),"$LN
    CONFIG+="    'nu_cflags': $(quote_flags $(mason cflags nunicode ${NUNICODE_VERSION})),"$LN
    CONFIG+="    'nu_ldflags': $(quote_flags $(mason ldflags nunicode ${NUNICODE_VERSION})),"$LN
fi


CONFIG+="  }
}
"

echo "${CONFIG}" > ${CONFIG_FILE}

cat ${CONFIG_FILE}
