#! /bin/bash

#
# Copyright (c) 2019, Centre de Morphologie Mathematique
# All rights reserved.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 
# THE POSSIBILITY OF SUCH DAMAGE.
#
# Description :
#   This script helps Smil configuration with some default usual options
#
# History :
#   - 05/05/2019 - by José-Marcio Martins da Cruz
#     Just created it
#   - 15/11/2019 - by Jose-Marcio Martins da Cruz
#     Update for release 0.10.3
#

OPT=
SRCDIR=
PREFIX=/usr/local
ADDONS="Color Filters HoughTransform Chabardes StochasticWS FFT Parsimonious "
OTHER=
Arch=auto

CXX_FLAGS="-std=c++11"
#GCC8=NO

TEST=OFF
PACKAGE=OFF
DOC=OFF
DEVDOC=OFF

verbose=false

Fatal()
{
  echo "$*"
  exit 1
}

Message()
{
  echo "$*"
}

Help()
{
  app=$(basename $0)
  HStr="
  
  $app
  
  Usage : 
    $app [ options ] SourceDirectory
    
  Options :
    --help 
      This message

    --prefix=prefix
      This option defines the prefix where Smil will be installed.
      Default value is /usr/local.

    --addon=name,name,name,...
      A comma separated list of Addons to enable
      Default enabled Addons : $ADDONS 

    --generic
      Compile for a generic architecture. Default is to optimize for the 
      processor in the computer Smil is being compiled.

    --auto
      Optimize Smil generated code for the processor at this computer.
      This is the default option.

    --doc
    --devdoc

    --test

    --package

  Example :
    $app --addon=GraphCuts --prefix=/usr/local/Smil-27 /home/sources/smil

  Author :
    Jose-Marcio Martins da Cruz
  
  See also :
    Full Smil documentation at : http://smil.mines-paristech.fr

"
  printf "%s\n" "$HStr"
  exit 0
}

FindSourceDir()
{
  CF=$0
  Dir=

  while [ "$CF" != "/" -a "$CF" != ".." ]
  do
    CF=$(dirname $CF)
    b=$(basename $CF)
    if [ "$b" == "smil" ]
    then
      if [ -f $CF/SmilVersion.txt ]
      then
        Dir=$CF
        break;
      fi
    fi
  done
  echo $Dir
}

#
#
#
for arg in $*
do
  case $arg in
    --help)
      Help
      exit 0
      ;;
    --prefix=*)
      PREFIX=$(echo $arg | awk -F= '{print $2}')
      ;;
    --addon=*)
      addon=$(echo $arg | awk -F= '{print $2}' | sed -e "s/,/ /g")
      ADDONS="$ADDONS $addon"
      ;;
    --gcc8|--gcc9)
      GCC8=YES
      ;;

    --generic)
      Arch=generic
      ;;
    --auto)
      Arch=auto
      ;;

    --doc)
      DOC=ON
      ;;
    --devdoc)
      DEVDOC=ON
      DOC=ON
      ;;
    --test)
      TEST=ON
      ;;
    --package)
      PACKAGE=ON
      ;;

    -D*)
      OTHER="$OTHER $arg"
      ;;

    -v)
      verbose=yes
      ;;

    -*)
      Fatal "  ERROR : Unknown or mispelled option : $arg"
      ;;
    *)
      if [ -f $arg/SmilVersion.txt ]
      then
        SRCDIR=$arg
      else
        Fatal "  ERROR : Unknown or mispelled option : $arg"
      fi
      ;;
  esac
done

if [ -z $SRCDIR ]
then
  Dir=$(FindSourceDir $0)
  [ -z $Dir ] && Fatal "  ERROR : Smil source directory undefined"
  SRCDIR=$Dir
  Message "-- Configuring source directory : $Dir"
fi

OPT_ADDONS=
for addon in $ADDONS
do
  if [ -f $SRCDIR/Addons/$addon/CMakeLists.txt ]
  then
    echo "-- Enabling Addon $addon"
    addon=$(echo $addon | tr [:lower:] [:upper:])
    OPT_ADDONS+=" -DADDON_${addon}:BOOL=ON"
  else
    Fatal "  ERROR : Unknown Addon $addon"
  fi
done
echo "-- Addons : $OPT_ADDONS"

if [ -n "$CONDA_PREFIX" ]
then
  echo ""
  echo "* Configuring Smil for Anaconda at : $CONDA_PREFIX"
  OPT+=" -DADDITIONAL_SEARCH_PATHS:STRING=$CONDA_PREFIX \
         -DCONDA_PREFIX:STRING=$CONDA_PREFIX"
fi
echo ""


echo "* Options : $OPT"

OPT="$OPT
  -Wno-dev
  -DCMAKE_INSTALL_PREFIX:STRING=$PREFIX
  -DBUILD_TEST:BOOL=$TEST
  -DBUILD_PACKAGE:BOOL=$PACKAGE
  -DTARGET_ARCHITECTURE:STRING=$Arch
  -DUSE_64BIT_IDS:BOOL=ON
  -DUSE_CURL:BOOL=ON
  -DUSE_FREETYPE:BOOL=ON
  -DUSE_JPEG:BOOL=ON
  -DUSE_NUMPY:BOOL=ON
  -DUSE_OPEN_MP:BOOL=ON
  -DUSE_OPTIMIZATION:BOOL=ON
  -DUSE_PNG:BOOL=ON
  -DUSE_QT:BOOL=ON
  -DUSE_TIFF:BOOL=ON
  -DBUILD_DOC:BOOL=$DOC
  -DVERBOSE_OPTIMIZATION:BOOL=OFF
  -DWRAP_PYTHON:BOOL=ON
  -DCMAKE_CXX_FLAGS:STRING=$CXX_FLAGS
"
if [ "$DOC" == "ON" ]
then 
  OPT+="
  -DDOXYGEN_GENERATE_HTML:BOOL=$DOC
  -DDOXYGEN_GENERATE_LATEX:BOOL=$DOC
"
fi

if [ "$DEVDOC" == "ON" ]
then 
  OPT+="
  -DDOXYGEN_DEVEL_DOC:BOOL=$DEVDOC
"
fi

#  -DCMAKE_CXX_FLAGS:STRING=\"$CXX_FLAGS\"

cmake -version

[ "$verbose" = "yes" ] && echo cmake $OPT $OPT_ADDONS $OTHER $SRCDIR
cmake $OPT $OPT_ADDONS $OTHER $SRCDIR


