#!/bin/sh
#-----------------------------

. build/version
. build/functions


ALSA_VERSION="1.0"
FOX_VERSION="1.7.50"
PULSE_VERSION="0.9.21"
TAGLIB_VERSION="1.9.0"
SQLITE_VERSION="3.6.19"

# Settings
#---------------------------
DEBUG=0
HELP=0

MUSEPACK_PREFIX=/usr
FAAD_PREFIX=/usr
SMB_PREFIX=/usr
MAD_PREFIX=/usr

OPTION_GAP_MAD=1
OPTION_GAP_FORCE_MAD=0
OPTION_GAP_VORBIS=1
OPTION_GAP_TREMOR=0
OPTION_GAP_OPUS=1
OPTION_GAP_FLAC=1
OPTION_GAP_FAAD=1
OPTION_GAP_WAVPACK=0
OPTION_GAP_FORCE_FAAD=0
OPTION_GAP_MUSEPACK=0
OPTION_GAP_SAMPLERATE=0
OPTION_GAP_OGG=1
OPTION_GAP_ALSA=1
OPTION_GAP_OSS=1
OPTION_GAP_PULSE=1
OPTION_GAP_JACK=0
OPTION_GAP_RSOUND=0
OPTION_GAP_AVCODEC=0 # disabled for now
OPTION_GAP_CDDA=0
OPTION_GAP_MMS=0 # disabled for now
OPTION_GAP_SMB=0
#OPTION_GAP_PROXY=1

OPTION_GMM_DBUS=1
OPTION_GMM_NLS=1
OPTION_GMM_MD5=gcrypt
OPTION_GMM_LIRC=0
OPTION_GMM_OPENGL=1

# Default Compiler Settings
# Use environment variables to override
#--------------------------
CXX=${CXX:-g++}
LINK=${LINK:-g++}
INCFLAGS=${INCFLAGS:-}
LIBS=${LIBS:-}
LIBPREFIX=${LIBPREFIX:-lib}
LIBEXT=${LIBEXT:-.so}
LIB=${LIB:-lib}
OUTPUTOBJ=${OUTPUTOBJ:--o }
OUTPUTBIN=${OUTPUTBIN:--o }
OBJEXT=${OBJEXT:-.o}
PREFIX=${PREFIX:-/usr}

# For making plugins
# We always want these flags. If you want to override this, change config.make
SO_CFLAGS="-fPIC"
SO_LDFLAGS="-shared -fPIC"

# Default CFLAGS that generally should always be used.
GOGGLESMM_CFLAGS=${GOGGLESMM_CFLAGS:--fvisibility=hidden -std=c++11}

# Overriding Compiler Flags
# Either override GEN_CFLAGS, OPT_CFLAGS and DEBUG_CFLAGS individually
# or set CFLAGS which overrides all them
#-------------------------------------------------------
GEN_CFLAGS=${GEN_CFLAGS:--Wall -Wextra -Wformat=2 -pipe}
OPT_CFLAGS=${OPT_CFLAGS:--Os -march=native}
DEBUG_CFLAGS=${DEBUG_CFLAGS:--g -Og}

# Overriding Linker Flags
# Either override GEN_LDFLAGS, OPT_LDFLAGS and DEBUG_LDFLAGS individually
# or set LDFLAGS which overrides all them
#-------------------------------------------------------
GEN_LDFLAGS=${GEN_LDFLAGS:--Wl,--as-needed}
OPT_LDFLAGS=${OPT_LDFLAGS:--s}
DEBUG_LDFLAGS=${DEBUG_LDFLAGS:-}


# Setup libdir
LIBDIR="${PREFIX}/$LIB"


# Parse Command Line Arguments
#-----------------------------
for arg in $@; do
  case $arg in
    --enable-debug*)
      DEBUG=1
      ;;
    --prefix=*)
      PREFIX=${arg#*=}
      ;;
    --lib32)
      LIB=lib32
      LIBDIR="${PREFIX}/$LIB"
      ;;
    --lib64)
      LIB=lib64
      LIBDIR="${PREFIX}/$LIB"
      ;;
    --libdir=*)
      LIBDIR="${arg#*=}"
      ;;
    --without-mad)
      OPTION_GAP_MAD=0
      ;;
    --without-vorbis)
      OPTION_GAP_VORBIS=0
      ;;
    --with-tremor)
      OPTION_GAP_TREMOR=1
      OPTION_GAP_VORBIS=0
      ;;
    --without-opus)
      OPTION_GAP_OPUS=0
      ;;
    --without-ogg)
      OPTION_GAP_OGG=0
      ;;
    --without-flac)
      OPTION_GAP_FLAC=0
      ;;
    --without-faad)
      OPTION_GAP_FAAD=0
      ;;
    --with-musepack)
      OPTION_GAP_MUSEPACK=1
      ;;
    --without-wavpack)
      OPTION_GAP_WAVPACK=0
      ;;
    --without-samplerate)
      OPTION_GAP_SAMPLERATE=0
      ;;
    --without-cdda)
      OPTION_GAP_CDDA=0
      ;;
    --without-smb)
      OPTION_GAP_SMB=0
      ;;
    --without-alsa)
      OPTION_GAP_ALSA=0
      ;;
    --without-oss)
      OPTION_GAP_OSS=0
      ;;
    --without-pulse)
      OPTION_GAP_PULSE=0
      ;;
    --without-rsound)
      OPTION_GAP_RSOUND=0
      ;;
    --without-jack)
      OPTION_GAP_JACK=0
      ;;
    --without-avcodec)
      OPTION_GAP_AVCODEC=0
      ;;
    --without-mms)
      OPTION_GAP_MMS=0
      ;;
    --with-mad)
      OPTION_GAP_FORCE_MAD=1
      ;;
    --with-faad)
      OPTION_GAP_FORCE_FAAD=1
      ;;
    --mad-prefix=*)
      MAD_PREFIX=${arg#*=}
      pkgconfig_add_path $MAD_PREFX
      ;;
    --musepack-prefix=*)
      MUSEPACK_PREFIX=${arg#*=}
      ;;
    --faad-prefix=*)
      FAAD_PREFIX=${arg#*=}
      ;;
    --smb-prefix=*)
      SMB_PREFIX=${arg#*=}
      ;;
    --fox-prefix=*)
      FOX_PREFIX=${arg#*=}
      pkgconfig_add_path $FOX_PREFIX
      ;;
    --with-md5=*)
      OPTION_GMM_MD5=${arg#*=}
      ;;
    --without-dbus)
      OPTION_GMM_DBUS=0
      ;;
    --without-nls)
      OPTION_GMM_NLS=0
      ;;
    --without-opengl)
      OPTION_GMM_OPENGL=0
      ;;
    --help|-h)
      echo "Options:"
      echo "   --enable-debug                  Compile with debug information"
      echo "   -h,--help                       Show Help"
      echo " "
      echo "Components: "
      echo "   --without-mad                   Compile without mad support"
      echo "   --without-vorbis                Compile without vorbis support"
      echo "   --without-opus                  Compile without opus support"
      echo "   --without-ogg                   Compile without ogg support"
      echo "   --without-flac                  Compile without flac support"
      echo "   --without-faad                  Compile without faad support"
      echo "   --without-wavepack              Compile without wavpack support"
      echo "   --without-samplerate            Compile without samplerate support"
      echo "   --without-cdda                  Compile without cdda support"
      echo "   --without-smb                   Compile without smb support"
      echo "   --without-alsa                  Compile without alsa support"
      echo "   --without-oss                   Compile without oss support"
      echo "   --without-pulse                 Compile without pulseaudio support"
      echo "   --without-jack                  Compile without jack support"
      echo "   --without-rsound                Compile without rsound support"
      echo "   --without-avcodec               Compile without avcodec support"
      echo " "
      echo "   --with-md5=gcrypt,internal      Select which md5 implementation to use. default: gcrypt"
      echo "   --without-dbus                  Compile without dbus support"
      echo "   --without-nls                   Compile without locale support"
      echo "   --without-opengl                Compile without OpenGL support"
      echo " "
      echo "   --with-musepack                 Compile with musepack (sv7) support. "
      echo " "
      echo "   --fox-prefix=<p>                FOX prefix path"
      echo "   --mad-prefix=<p>                mad prefix path"
      echo "   --musepack-prefix=<p>           musepack prefix path"
      echo "   --faad-prefix=<p>               faad prefix path"
      echo "   --smb-prefix=<p>                smb prefix path"
      echo " "
      echo "Install Directories: "
      echo "   --prefix=<p>                	   Install prefix (/usr)"
      echo "   --lib64                         Install in lib64 instead of lib"
      echo "   --lib32                         Install in lib32 instead of lib"
      echo " "
      exit 0
      ;;
  esac
done



# Debug / Release Mode
if [ $DEBUG -eq 1 ] ; then
  CFLAGS="${CFLAGS:-$GEN_CFLAGS $DEBUG_CFLAGS} $GOGGLESMM_CFLAGS"
  LDFLAGS=${LDFLAGS:-$GEN_LDFLAGS $DEBUG_LDFLAGS}
  DEFINES="$DEFINES -DDEBUG"
else
  CFLAGS="${CFLAGS:-$GEN_CFLAGS $OPT_CFLAGS} $GOGGLESMM_CFLAGS"
  LDFLAGS=${LDFLAGS:-$GEN_LDFLAGS $OPT_LDFLAGS}
  DEFINES="$DEFINES -DNDEBUG"
fi

# Build Config
echo "#Generated by configure utility"          > config.make

# Gap Config File
#------------------------------
PLUGIN_PATH="$LIBDIR/gogglesmm"
echo "/* Generated by configure utility */"     > src/gap/ap_config.h
echo "#define AP_PLUGIN_PATH \"$PLUGIN_PATH\""  >> src/gap/ap_config.h
echo "#define APPLICATION_MAJOR $MAJOR"         >> src/gap/ap_config.h
echo "#define APPLICATION_MINOR $MINOR"         >> src/gap/ap_config.h
echo "#define APPLICATION_LEVEL $LEVEL"         >> src/gap/ap_config.h

# Gogglesmm Config File
#------------------------------
echo "/* Generated by configure utility */"     > $CFG
echo "#ifndef GMCONFIG_H"                       >> $CFG
echo "#define GMCONFIG_H"                       >> $CFG
echo ""                                         >> $CFG
echo "#define APPLICATION_MAJOR $MAJOR"         >> $CFG
echo "#define APPLICATION_MINOR $MINOR"         >> $CFG
echo "#define APPLICATION_LEVEL $LEVEL"         >> $CFG
echo "#define APPLICATION_TAG \"$VERSION_TAG\"" >> $CFG
echo "#define APPLICATION_BETA_DB $BETA_DB"     >> $CFG
echo "#define BUILD_DATE __DATE__"              >> $CFG
echo "#define BUILD_TIME __TIME__"              >> $CFG
if [ -n "$VERSION_TAG" ] ; then
echo "#define APPLICATION_VERSION_STRING \"$MAJOR.$MINOR.$LEVEL$VERSION_TAG\"" >> $CFG
else
echo "#define APPLICATION_VERSION_STRING \"$MAJOR.$MINOR.$LEVEL\"" >> $CFG
fi
echo "" >> $CFG



# Base Dependencies
#------------------------------
check_fox

# Gap Dependencies
#------------------------------
check_gap_plugins
check_gap_packages
check_gogglesmm
check_all

. build/byteorderdetect


# End of configuration
#-------------------------
echo ""       >> $CFG
echo "#endif" >> $CFG


# Write out Makefile configuration
#--------------------------------------
echo "LIBDIR=$LIBDIR" >> config.make
echo "CXX=$CXX"                        >> config.make
echo "LINK=$LINK"                      >> config.make
echo "CFLAGS=$CFLAGS"                  >> config.make
echo "CPPFLAGS=$DEFINES $INCFLAGS"     >> config.make
echo "LDFLAGS=$LDFLAGS"                >> config.make
echo "LIBS=$LIBS"                      >> config.make
echo "OUTPUTOBJ=$OUTPUTOBJ"            >> config.make
echo "OUTPUTBIN=$OUTPUTBIN"            >> config.make
echo "OBJEXT=$OBJEXT"                  >> config.make
echo "RESWRAP_CPP=$RESWRAP_CPP"        >> config.make
echo "RESWRAP_H=$RESWRAP_H"            >> config.make
echo "RESWRAP_TEXT=$RESWRAP_TEXT"      >> config.make
echo "PREFIX=$PREFIX"                  >> config.make
echo "OPTIONS=$OPTIONS"                >> config.make
if [ -n "$VERSION_TAG" ] ; then
echo "TARNAME=gogglesmm-$MAJOR.$MINOR.$LEVEL$VERSION_TAG" >> config.make
else
echo "TARNAME=gogglesmm-$MAJOR.$MINOR.$LEVEL" >> config.make
fi
echo "GAP_CFLAGS=$FOX_CFLAGS"          >> config.make
echo "GAP_CPPFLAGS=$FOX_CPPFLAGS"      >> config.make

echo "GAP_LIBS=$GAP_LIBS"              >> config.make
echo "GAP_PLUGINS=$PLUGINS"            >> config.make

echo "SO_CFLAGS=$SO_CFLAGS"            >> config.make
echo "SO_LDFLAGS=$SO_LDFLAGS"          >> config.make


# Summary
#-------------------------
echo "---------------------------------------------"
echo "Build Setup:"

echo "  Audio Plugins : "
for arg in $PLUGINS; do
  echo "                  $arg"
done


if [ "$MD5" != "internal" ] ; then
  echo "  MD5           : libgcrypt"
else
  echo "  MD5           : internal"
fi

if [ $OPTION_GMM_DBUS -eq 0 ] ; then
  echo "  DBUS Support  : no"
else
  echo "  DBUS Support  : yes"
fi

if [ $OPTION_GMM_OPENGL -eq 0 ] ; then
  echo "  OpenGL Support: no"
else
  echo "  OpenGL Support: yes"
fi


if [ $OPTION_GMM_LIRC -eq 0 ] ; then
  echo "  LIRC Support  : no"
else
  echo "  LIRC Support  : yes"
fi

if [ $OPTION_GMM_NLS -eq 0 ] ; then
  echo "  NLS Support   : no"
else
  echo "  NLS Support   : yes"
  echo "  Locale Path   : $PREFIX/share/locale"
fi
  echo "  Icon Path     : $PREFIX/share/icons"
  echo "  Man Path      : $PREFIX/share/man"
  echo "  Install Path  : $PREFIX"


# Success
#--------------------------------------
echo ""
echo "Done."
echo "Please run \"make\" and \"make install\" to compile and install GMM."
exit 0

