#!/bin/sh
#
#   rhnop
# 
#   Copyright (C) 2011 Christian Pointner <equinox@helsinki.at>
# 
#   This file is part of rhnop.
# 
#   rhnop is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   any later version.
# 
#   rhnop is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details.
# 
#   You should have received a copy of the GNU General Public License
#   along with rhnop. If not, see <http://www.gnu.org/licenses/>.
# 

TARGET=`uname -s`
EBUILD_COMPAT=0

CFLAGS='-g -O2'
LDFLAGS='-g -Wall -O2 -lpthread'

LUA_DIR=''
LUA=''

PREFIX='/usr/local'
BINDIR=''
ETCDIR=''

print_usage() {
  echo "configure --help                    print this"
  echo "          --target=<TARGET>         build target i.e. Linux (default: autodetect)"
  echo "          --prefix=<PREFIX>         the installation prefix (default: /usr/local)"
  echo "          --bindir=<DIR>            the path to the bin directory (default: $PREFIX/bin)"
  echo "          --sysconfdir=<DIR>        the path to the system configuration directory (default: $PREFIX/etc)"
  echo "          --with-lua=<DIR>          use this lua tree instead of system default"
}

for arg
do
  case $arg in
  --target=*)
    TARGET=${arg#--target=}
  ;;
  --prefix=*)
    PREFIX=${arg#--prefix=}
  ;;
  --bindir=*)
    BINDIR=${arg#--bindir=}
  ;;
  --sysconfdir=*)
    ETCDIR=${arg#--sysconfdir=}
  ;;
  --with-lua=*)
    LUA_DIR=${arg#--with-lua=}
  ;;
  --ebuild-compat)
    EBUILD_COMPAT=1
  ;;
  --help)
    print_usage
    exit 0
  ;;
  *)
    ERRORS="$ERRORS $arg"
  ;;
  esac
done

if [ -n "$ERRORS" ] && [ $EBUILD_COMPAT -ne 1 ]; then
  for error in $ERRORS; do
    echo "Unknown argument: $error"
  done

  print_usage
  exit 1
fi

rm -f include.mk
case $TARGET in
  Linux)
    LDFLAGS=$LDFLAGS' -ldl'
  ;;
  *)
    echo "platform not supported"
    exit 1;
  ;;
esac


test_lua_version()
{
  LUA_VERSION=`cat $1 | grep "#define LUA_VERSION[ 	]" | cut -f2- | tr -d '"' | sed -e 's/Lua \([0-9][0-9.]*\)/\1/'`
  LUA_VERSION_NUM=`cat $1 | grep "#define LUA_VERSION_NUM" | awk '{ print $3 }'`
  LUA_RELEASE=`cat $1 | grep "#define LUA_RELEASE[ 	]" | cut -f2-`

  if [ $LUA_VERSION_NUM -ge 501 ]; then
    return 1;
  else
    return 0;
  fi
}

if [ -z "$LUA_DIR" ]; then
  for prefix in /usr /usr/local; do
    if [ -e $prefix/include/lua.h ]; then
      test_lua_version $prefix/include/lua.h
      if [ $? -eq 1 ]; then
        echo "using Lua $LUA_VERSION ($LUA_RELEASE) found at $prefix/include"
        CFLAGS="$CFLAGS -I'$prefix/include'"
        LDFLAGS="$LDFLAGS -L'$prefix/lib' -llua"
        LUA=$prefix/lua
        LUAC=$prefix/luac
        break
      fi
    else
      for dir in `ls -d $prefix/include/lua* 2> /dev/null`; do
        if [ -e $dir/lua.h ]; then
          test_lua_version $dir/lua.h
          if [ $? -eq 1 ]; then
            echo "using Lua $LUA_VERSION ($LUA_RELEASE) found at $dir"
            CFLAGS="$CFLAGS -I$dir"
            if [ -x "$prefix/bin/lua$LUA_VERSION" ]; then
              LDFLAGS="$LDFLAGS -L'$prefix/lib' -llua$LUA_VERSION"
              LUA=$prefix/bin/lua$LUA_VERSION
              LUAC=$prefix/bin/luac$LUA_VERSION
            elif [ -x "$prefix/bin/lua-$LUA_VERSION" ]; then
              LDFLAGS="$LDFLAGS -L'$prefix/lib' -llua-$LUA_VERSION"
              LUA=$prefix/bin/lua-$LUA_VERSION
              LUAC=$prefix/bin/luac-$LUA_VERSION
            else
              echo "ERROR: found lua.h at $dir/lua.h but no matching lua and luac"
              return 1
            fi
            break
          fi
        fi
      done
      if [ -n "$LUAC" ]; then
        break
      fi
    fi
  done

  if [ -z "$LUAC" ]; then
    echo "ERROR: no suitable lua found .. please install lua 5.1 or higher or use --with-lua"
    return 1
  fi

else
  CFLAGS="$CFLAGS -I'$LUA_DIR/include'"
  LDFLAGS="$LDFLAGS '$LUA_DIR/lib/liblua.a'"
  LUA=$LUA_DIR/bin/lua
  LUAC=$LUA_DIR/bin/luac
fi

if [ -z "$BINDIR" ]; then
  BINDIR=$PREFIX/bin
fi

if [ -z "$ETCDIR" ]; then
  ETCDIR=$PREFIX/etc
fi

cat > include.mk <<EOF
# this file was created automatically
# do not edit this file directly
# use ./configure instead

TARGET := '$TARGET'
CC := gcc
CFLAGS := $CFLAGS
LDFLAGS := $LDFLAGS
LUA := '$LUA'
LUAC := '$LUAC'
STRIP := strip
INSTALL := install

PREFIX := '$PREFIX'
BINDIR := '$BINDIR'
ETCDIR := '$ETCDIR'
EOF

exit 0