#!/bin/sh
#
#
#  rhctl
#
#  Copyright (C) 2009-2013 Christian Pointner <equinox@helsinki.at>
#
#  This file is part of rhctl.
#
#  rhctl 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.
#
#  rhctl 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 rhctl. If not, see <http://www.gnu.org/licenses/>.
#

TARGET=`uname -s`

USE_CLANG=0

LUA_LDFLAGS='-lm'
LUA_DIR=''

print_usage() {
  echo "configure --help                    print this"
  echo "          --target=<TARGET>         build target i.e. Linux (default: autodetect)"
  echo "          --with-lua=<DIR>          use this lua tree instead of system default"
  echo "          --use-clang               use clang/llvm as compiler/linker"
}

for arg
do
  case $arg in
  --target=*)
    TARGET=${arg#--target=}
  ;;
  --use-clang)
    USE_CLANG=1
  ;;
  --with-lua=*)
    LUA_DIR=${arg#--with-lua=}
  ;;
  --help)
    print_usage
    exit 0
  ;;
  *)
    echo "Unknown argument: $arg"
    print_usage
    exit 1
  ;;
  esac
done

if [ $USE_CLANG -eq 0 ]; then
  CFLAGS='-g -Wall -O2'
  LDFLAGS='-g -Wall -O2'
  COMPILER='gcc'
else
  CFLAGS='-g -O2'
  LDFLAGS='-g -O2'
  COMPILER='clang'
fi

rm -f include.mk
case $TARGET in
  Linux)
    echo "Linux specific build options"
    LUA_LDFLAGS=$LUA_LDFLAGS' -ldl'
  ;;
  OpenBSD|FreeBSD|NetBSD)
    echo "BSD specific build options"
    CFLAGS=$CFLAGS' -I/usr/local/include'
    LDFLAGS=$LDFLAGS' -L/usr/local/lib'
  ;;
  *)
    echo "Plattform 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"
        LUA_LDFLAGS="$LUA_LDFLAGS -L$prefix/lib -llua"
        LUA_DIR=found
        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
              LUA_LDFLAGS="$LUA_LDFLAGS -L$prefix/lib -llua$LUA_VERSION"
              LUA_DIR=found
            elif [ -x "$prefix/bin/lua-$LUA_VERSION" ]; then
              LUA_LDFLAGS="$LUA_LDFLAGS -L$prefix/lib -llua-$LUA_VERSION"
              LUA_DIR=found
            else
              echo "ERROR: found lua.h at $dir/lua.h but no matching lua library"
              return 1
            fi
            break
          fi
        fi
      done
      if [ -n "$LUA_DIR" ]; then
        break
      fi
    fi
  done

  if [ -z "$LUA_DIR" ]; 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"
  LUA_LDFLAGS="$LUA_LDFLAGS $LUA_DIR/lib/liblua.a"
fi


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

TARGET := $TARGET
CC := $COMPILER
CFLAGS := $CFLAGS
LDFLAGS := $LDFLAGS
LUA_LDFLAGS := $LUA_LDFLAGS
EOF

exit 0