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

. build/version
. build/functions

# Settings
#---------------------------
DEBUG=0
DBUS=1
FOX17=0
HELP=0
NLS=1
MD5=gcrypt
PREFIX=${PREFIX:-/usr}

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

# 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:--O3 -march=native -fstack-protector}
DEBUG_CFLAGS=${DEBUG_CFLAGS:--g -fstack-protector-all}

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

# Parse Command Line Arguments
#-----------------------------
for arg in $@; do
  case $arg in
    --enable-debug)
      DEBUG=1
      ;;
    --with-md5=*)
      MD5=${arg#*=}
      ;;
    --disable-nls)
      NLS=0
      ;;
    --without-dbus)
      DBUS=0
      ;;
    --prefix=*)
      PREFIX=${arg#*=}
      ;;
    --fox-prefix=*)
      FOX_PREFIX=${arg#*=}
      add_package_path $FOX_PREFIX
      ;;
    --xine-prefix=*)
      XINE_PREFIX=${arg#*=}
      add_package_path $XINE_PREFIX
      ;;
    --sqlite-prefix=*)
      SQLITE_PREFIX=${arg#*=}
      add_package_path $SQLITE_PREFIX
      ;;
    --taglib-prefix=*)
      TAGLIB_PREFIX=${arg#*=}
      add_package_path $TAGLIB_PREFIX
      ;;
    --dbus-prefix=*)
      DBUS_PREFIX=${arg#*=}
      add_package_path $DBUS_PREFIX
      ;;
    --localedir=*)
      NLSDIR=${arg#*=}
      ;;
    --mandir=*)
      MANDIR=${arg#*=}
      ;;
    --with-fox17)
      FOX17=1
      ;;
    --help)
      HELP=1
      ;;
    -h)
      HELP=1
      ;;
  esac
done


# Print Command Line Options
#---------------------------
if [ $HELP -eq 1 ] ; then
  echo "Available options:"
  echo "   --enable-debug                  Compile with debug information"
  echo "   --with-md5=gcrypt,internal      Select which md5 implementation to use. (gcrypt)"
  echo "   --without-dbus                  Turn off DBus Support"
  echo "   --without-new-remote            Disable new remote and use old mini player."
  echo "   --with-fox17                	   Compile with FOX 1.7.x."
  echo "   --prefix=<p>                	   Installation prefix (/usr)"
  echo "   --fox-prefix=<p>                fox prefix path"
  echo "   --xine-prefix=<p>               xinelib prefix path"
  echo "   --taglib-prefix=<p>             tagLib prefix path"
  echo "   --sqlite-prefix=<p>             sqlite prefix path"
  echo "   --dbus-prefix=<p>               dbus prefix path"
  echo "   --localedir=<dir>               locale-dependent data (<prefix>/share/locale)"
  echo "   --mandir=<dir>                  man pages (<prefix>/share/man)"
  echo "   -h,--help                       Show Help"
  exit 0
fi

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

# Init 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_BETA $BETA_APP"       >> $CFG
echo "#define APPLICATION_BETA_DB $BETA_DB"     >> $CFG
echo "#define BUILD_DATE __DATE__"              >> $CFG
echo "#define BUILD_TIME __TIME__"              >> $CFG
echo "" >> $CFG

if [ $BETA_APP -eq 0 ] ; then
echo "#define APPLICATION_VERSION_STRING \"$MAJOR.$MINOR.$LEVEL\"" >> $CFG
else
echo "#define APPLICATION_VERSION_STRING \"$MAJOR.$MINOR.$LEVEL-rc$BETA_APP\"" >> $CFG
fi
echo "" >> $CFG

echo ""
echo "Goggles Music Manager:"


# Libraries
#------------------------
if [ $FOX17 -eq 1 ] ; then
  add_required_package "fox17 >= 1.7" "fox"
else
  add_required_package "fox >= 1.6" "fox"
fi
check_reswrap
check_foxversion

add_required_package "sqlite3 >= 3.6.3" "sqlite"
add_required_package "taglib >= ${TAGLIB_VERSION:-1.6.3}" "taglib"

# DBus is optional
if [ $DBUS -eq 1 ] ; then
  add_package "dbus-1 >= 1.0" "dbus"
  DBUS=$?
fi

# We need both X11 and GLU
# For systems without pkg-config for x11 and glu we'll just hardwire it.
add_package "x11" "x11"
if [ $? -eq 0 ] ; then
  EXTRALIBS="$EXTRALIBS -lX11"
fi

add_package "glu" "glu"
if [ $? -eq 0 ] ; then
  EXTRALIBS="$EXTRALIBS -lGL -lGLU"
fi

# xine >= 1.2.0 use pkg-config
add_package "libxine" "libxine"
if [ $? -eq 0 ] ; then

  # Old xine is still supported...
  XINE_MAJOR=${XINE_MAJOR:-1}
  XINE_MINOR=${XINE_MINOR:-1}
  XINE_LEVEL=${XINE_LEVEL:-16}
  if [ -n "$XINE_PREFIX" ] ; then
    check_in_prefix "XINE" $XINE_PREFIX "xine-config" $XINE_MAJOR $XINE_MINOR $XINE_LEVEL
    if [ $? -eq 0 ] ; then
      echo " Unable to find a compatible XINE library installation. Please make"
      echo " sure the correct version is installed including the header files."
      echo " You can use the \"--xine-prefix\" option to search in an"
      echo " alternative installation directory."
      exit -1
    fi
  else
    check_in_prefix "XINE" "/usr" "xine-config" $XINE_MAJOR $XINE_MINOR $XINE_LEVEL
    if [ $? -eq 0 ] ; then
      check_in_prefix "XINE" "/usr/local" "xine-config" $XINE_MAJOR $XINE_MINOR $XINE_LEVEL
      if [ $? -eq 0 ] ; then
          echo " Unable to find a compatible XINE library installation. Please make"
          echo " sure the correct version is installed including the header files."
          echo " You can use the \"--xine-prefix\" option to search in an"
          echo " alternative installation directory."
          exit -1
      fi
    fi
  fi
  add_config "libxine"
fi


PKG_LDFLAGS=$(pkg-config --libs-only-L $PACKAGES)
PKG_LIBS=$(pkg-config --libs-only-l --libs-only-other $PACKAGES)
PKG_CFLAGS=$(pkg-config --cflags-only-other $PACKAGES)
PKG_CPPFLAGS=$(pkg-config --cflags-only-I $PACKAGES)

if [ -n "$PKG_LDFLAGS"  ] ; then LIBS="$LIBS $PKG_LDFLAGS"; fi
if [ -n "$PKG_LIBS"     ] ; then LIBS="$LIBS $PKG_LIBS"; fi
if [ -n "$PKG_CFLAGS"   ] ; then GEN_CFLAGS="$GEN_CFLAGS $PKG_CFLAGS"; fi
if [ -n "$PKG_CPPFLAGS" ] ; then INCFLAGS="$INCFLAGS $PKG_CPPFLAGS"; fi



. build/byteorderdetect

if [ $NLS -eq 1 ] ; then
  NLSDIR=${NLSDIR:-$PREFIX/share/locale}
  add_config "nls"
  add_config_string "LOCALEDIR" ${NLSDIR}
fi

if [ "$MD5" != "internal" ] ; then
  add_config "gcrypt"
  GCRYPT_LIBS=$(libgcrypt-config --libs)
  LIBS="$LIBS $GCRYPT_LIBS"
else
  add_config "md5"
fi

#Set MANDIR
MANDIR=${MANDIR:-$PREFIX/share/man}

# expat (for now hardwired)
#------------------------
LIBS="$LIBS $EXTRALIBS -lexpat"


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


# Write out Makefile configuration
#--------------------------------------
echo "#Generated by configure utility"  > 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
echo "LOCALEDIR=$NLSDIR"               >> config.make
echo "MANDIR=$MANDIR"                  >> config.make


# Summary
#-------------------------
echo "Features:"
if [ "$MD5" != "internal" ] ; then
  echo "    MD5           => libgcrypt"
else
  echo "    MD5           => internal"
fi

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

if [ $NLS -eq 0 ] ; then
  echo "    NLS Support   => no"
else
  echo "    NLS Support   => yes"
  echo "    Locale Path   => $NLSDIR"
fi
  echo "    Man Path      => $MANDIR"
  echo "    Install Path  => $PREFIX"


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

