#!/usr/bin/env bash
#
# Copyright 2012-2014 Yorba Foundation
#
# This software is licensed under the GNU LGPL (version 2.1 or later).
# See the COPYING file in this distribution. 

srcdir=$(cd $(dirname $0) && pwd)

DEFAULT_PREFIX="/usr/local"

PREFIX=$DEFAULT_PREFIX

configure_help() {
    cat <<- EOT
	Usage:
	  ./configure [OPTIONS]...
	
	Options:
	  -h, --help            Print this help and exit.
	  --prefix=PREFIX       Prepend PREFIX to program installation paths.
	                        [$DEFAULT_PREFIX]
	  --debug               Build for debugging.
	
	  --disable-fatal-warnings
	                        Disable Vala fatal warnings when compiling.
	  --enable-ref-tracking
	                        Enable reference tracking which is dumped to stdout when the program exits.
	  --disable-schemas-compile
	                        Disable compiling the GSettings schema.
	  --disable-desktop-update
	                        Disable desktop database update.
	  --disable-desktop-validate
	                        Disable checking for errors in generated desktop file.
	  --disable-icon-update
	                        Disable icon cache update.

	Some influential environment variables:
	  PKG_CONFIG_PATH       Adds directories to pkg-config's search path.
	  PKG_CONFIG_LIBDIR     Overrides pkg-config's built-in search path.

	  VALAC                 Name of the vala compiler to use, e.g. "valac-0.18".

EOT
}

abort() {
    printf "%s: Invalid argument %s\n" $0 $1
    configure_help
    exit 1
}

while [ $# != 0 ]
do
    if [[ "$1" = *=* ]]
    then
        option=${1%%=*}
        value=${1#*=}
    else
        option=$1
        value=
    fi

    case $option in
        -h | --help)        configure_help
                            exit 0
                            ;;
        
        --prefix)           [ ! $value ] && abort $1
                            CMDLINE="${CMDLINE} -DCMAKE_INSTALL_PREFIX=${value}"
                            ;;
        
# ignored for autotools compatibility
        --bindir | --libdir | --sbindir |--datadir | --localstatedir | --includedir) ;;
        --infodir | --sysconfdir |  --mandir | --libexecdir) ;;
        --build | --host | --target) ;;
        --disable-silent-rules | --disable-static ) ;;
        
        --debug)
                            CMDLINE="${CMDLINE} -DDEBUG=ON"
                            ;;
        
        --disable-fatal-warnings)
                            CMDLINE="${CMDLINE} -DNO_FATAL_WARNINGS=ON"
                            ;;
        
        --enable-ref-tracking)
                            CMDLINE="${CMDLINE} -DREF_TRACKING=ON"
                            ;;
        
        --disable-schemas-compile)
                            CMDLINE="${CMDLINE} -DGSETTINGS_COMPILE=OFF"
                            CMDLINE="${CMDLINE} -DGSETTINGS_COMPILE_IN_PLACE=OFF"
                            ;;
        
        --disable-icon-update)
                            CMDLINE="${CMDLINE} -DICON_UPDATE=OFF"
                            ;;
        
        --disable-desktop-update)
                            CMDLINE="${CMDLINE} -DDESKTOP_UPDATE=OFF"
                            ;;

        --disable-desktop-validate)
                            CMDLINE="${CMDLINE} -DDESKTOP_VALIDATE=OFF"
                            ;;
        
        VALAC)              [ ! $value ] && abort $1
                            VALAC=$value
                            ;;
        
        *)                  abort $option
                            ;;
    esac
    
    shift
done

# Verify use supplied vala executable
if [ -n "$VALAC" ]
then
    VALA_EXECUTABLE=`type -p "$VALAC"`

    if [ -z "$VALA_EXECUTABLE" ]
    then
        printf "$VALAC is not an executable program.\n"
        exit 1
    fi

    CMDLINE="${CMDLINE} -DVALA_EXECUTABLE='$VALA_EXECUTABLE'"
fi

# Verify cmake is installed
# TODO: Check for minimum version number
if ! cmake --version
then
    printf "cmake must be installed to configure and build.\n"
    exit 1
fi

using_srcdir_ne_builddir=false
# Simple check to verify this script is running in the root of the source tree
if [ -e Makefile.in ]
then
    using_srcdir_ne_builddir=true
    # Remove existing Makefile so it's not left around if configure fails
    rm -f Makefile

    # Remove the build folder to force Cmake to update its cache.
    rm -fr build

     if ! mkdir -p build
     then
         printf "Unable to create build directory.\n"
         exit 1
     fi

     cd build
fi

if ! (cmake $CMDLINE ${srcdir})
then
    printf "Unable to prepare build directory.\n"
    exit 1
fi

if ${using_srcdir_ne_builddir}
then
    cd ..

    if ! cp -f ${srcdir}/Makefile.in Makefile
    then
        printf "Unable to prepare Makefile.\n"
        exit 1
    fi
fi

printf "Configured.  Type 'make' to build, 'make install' to install.\n"
