#!/usr/bin/sh
#
# configure
# Copyright (C) 2005 Robin KAY. All rights reserved.
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License").  You may not use this file except in compliance
# with the License.
#

# Parse command line arguments
while test $# -gt 0; do
  case "$1" in
    --prefix=*)
      PREFIX=`echo "$1" | sed 's/^--prefix=//'`
      ;;
    --bindir=*)
      BINDIR=`echo "$1" | sed 's/^--bindir=//'`
      ;;
    --libdir=*)
      LIBDIR=`echo "$1" | sed 's/^--libdir=//'`
      ;;
    --mandir=*)
      MANDIR=`echo "$1" | sed 's/^--mandir=//'`
      ;;
    *)
      cat 1>&2 <<EOF
Usage: ./configure [options ...]

Options:
  --prefix=PATH    installation prefix [/opt/local]
  --bindir=PATH    user executables [PREFIX/bin]
  --libdir=PATH    object code libraries [PREFIX/lib]
  --mandir=PATH    man pages [PREFIX/man]

Environment varaibles:
  CC        C compiler
  CFLAGS    C compiler flags
  LDFLAGS   Linker flags
EOF
      exit 127
      ;;
  esac
  shift
done

DEFAULT_PREFIX=/opt/local
PREFIX=${PREFIX:-$DEFAULT_PREFIX}
BINDIR=${BINDIR:-$PREFIX/bin}
LIBDIR=${LIBDIR:-$PREFIX/lib}
MANDIR=${MANDIR:-$PREFIX/man}

# Find suitable compiler and determine type
if test "$CC" = ""; then
  if test -f "`which cc`" -a "`which cc`" != "/usr/ucb/cc"; then
    CC=cc
    CC_TYPE=cc
  elif test -f "`which gcc`"; then
    CC=gcc
    CC_TYPE=gcc
  else
    echo 1>&2 $0: Suitable compiler not found.
    exit 127
  fi
elif test -f "`which $CC`"; then
  if $CC -v 2>&1 | grep gcc >/dev/null; then
    CC_TYPE=gcc
  else
    CC_TYPE=cc
  fi
else
  echo 1>&2 $0: $CC: No such file or directory.
  exit 127
fi

# Set flag variables for approprate processor architecture and compiler
case `uname -p`-$CC_TYPE in
  sparc-cc)
    CFLAGS="-O -errwarn=%all $CFLAGS"
    CFLAGS_TOOL="-xarch=v8"
    CFLAGS_LIB32="-xarch=v8 -xcode=pic13"
    CFLAGS_LIB64="-xarch=v9 -xcode=pic13"
    LDFLAGS="$LDFLAGS"
    LDFLAGS_TOOL=""
    LDFLAGS_LIB32="-G -xarch=v8 -lc"
    LDFLAGS_LIB64="-G -xarch=v9 -lc"
    ARCH_64=sparcv9
    ;;
  sparc-gcc)
    CFLAGS="-O -Wall -Werror $CFLAGS"
    CFLAGS_TOOL="-mcpu=v8"
    CFLAGS_LIB32="-mcpu=v8 -m32 -fpic"
    CFLAGS_LIB64="-mcpu=v9 -m64 -fpic"
    LDFLAGS="$LDFLAGS"
    LDFLAGS_TOOL=""
    LDFLAGS_LIB32="-shared -static-libgcc -m32 -lc"
    LDFLAGS_LIB64="-shared -static-libgcc -m64 -lc"
    ARCH_64=sparcv9
    ;;
  i386-cc)
    CFLAGS="-O -errwarn=%all $CFLAGS"
    CFLAGS_TOOL="-xarch=386"
    CFLAGS_LIB32="-xarch=386 -Kpic"
    CFLAGS_LIB64="-xarch=amd64 -Kpic"
    LDFLAGS="$LDFLAGS"
    LDFLAGS_TOOL=""
    LDFLAGS_LIB32="-G -xarch=386 -lc"
    LDFLAGS_LIB64="-G -xarch=amd64 -lc"
    ARCH_64=amd64
    ;;
  i386-gcc)
    CFLAGS="-O -Wall -Werror $CFLAGS"
    CFLAGS_TOOL="-march=i486"
    CFLAGS_LIB32="-march=i486 -m32 -fpic"
    CFLAGS_LIB64="-marck=k8 -m64 -fpic"
    LDFLAGS="$LDFLAGS"
    LDFLAGS_TOOL=""
    LDFLAGS_LIB32="-shared -static-libgcc -m32 -lc"
    LDFLAGS_LIB64="-shared -static-libgcc -m64 -lc"
    ARCH_64=amd64
    ;;
esac

# Determine whether host platform supports 64-bit binaries
if isalist | grep $ARCH_64 >/dev/null; then
  ALL_DEPS="all32 all64"
  INSTALL_DEPS="install32 install64"
else
  ALL_DEPS="all32"
  INSTALL_DEPS="install32"
fi

MAKEFILE=Makefile

# Generate makefile
echo "# This file is generated."     >$MAKEFILE
echo ".PHONY: all install"          >>$MAKEFILE
echo "all: $ALL_DEPS"               >>$MAKEFILE
echo "install: $INSTALL_DEPS"       >>$MAKEFILE
echo "BINDIR=$BINDIR"               >>$MAKEFILE
echo "LIBDIR=$LIBDIR"               >>$MAKEFILE
echo "MANDIR=$MANDIR"               >>$MAKEFILE
echo "CC=$CC"                       >>$MAKEFILE
echo "CFLAGS=$CFLAGS"               >>$MAKEFILE
echo "CFLAGS_TOOL=$CFLAGS_TOOL"     >>$MAKEFILE
echo "CFLAGS_LIB32=$CFLAGS_LIB32"   >>$MAKEFILE
echo "CFLAGS_LIB64=$CFLAGS_LIB64"   >>$MAKEFILE
echo "LDFLAGS=$LDFLAGS"             >>$MAKEFILE
echo "LDFLAGS_TOOL=$LDFLAGS_TOOL"   >>$MAKEFILE
echo "LDFLAGS_LIB32=$LDFLAGS_LIB32" >>$MAKEFILE
echo "LDFLAGS_LIB64=$LDFLAGS_LIB64" >>$MAKEFILE
echo "ARCH_64=$ARCH_64"             >>$MAKEFILE
echo "MAKEFILE=$MAKEFILE"           >>$MAKEFILE
echo "include Makefile.logic"       >>$MAKEFILE

# Print status
echo 1>&2 $0: $MAKEFILE created.
