#!/bin/bash

MAC_SDK=""
MAC_ARCH=""
DEST_PREFIX="$(pwd)"
GCC_PREFIX=""

#Platform options
case "$(uname)" in
  Linux) PLATFORM=LINUX ;;
  SunOS) PLATFORM=LINUX ;;
  Darwin) PLATFORM=MAC ;;
  MINGW*) PLATFORM=MINGW ;;
  *)
    echo "Unknown platform $(uname)"
    exit 2
  ;;
esac

while [ "$1" ]; do
  case "$1" in
    "-dest-prefix" | "--dest-prefix")
      shift
      DEST_PREFIX="$1"
    ;;
    "-win32" | "--win32")
      PLATFORM="MINGW"
    ;;
    "-mac-sdk" | "--mac-sdk")
      shift
      PLATFORM="MAC"
      MAC_SDK=$1
    ;;
    "-mac-arch" | "--mac-arch")
      shift
      PLATFORM="MAC"
      MAC_ARCH=$1
    ;;
    "-h" | "-help" | "--help")
      echo
      echo "Usage: configure [options]"
      echo
      echo "Options:"
      echo
      echo " -dest-prefix <DIR>  Destination prefix for all binaries"
      echo "                       (default $DEST_PREFIX)"
      echo " -win32              Turn on cross compilation with i686-mingw32"
      echo "                       (under Linux only)"
      echo " -mac-sdk <SDK>       Switch to SDK, e.g. /Developer/SDKs/MacOSX10.4u.sdk"
      echo "                       (under Mac only)"
      echo " -mac-arch <ARCH>     Switch to ARCH, e.g. x86 or ppc"
      echo "                       (under Mac only)"
      echo
      exit
    ;;
  esac
  shift
done

case "$PLATFORM" in
  "LINUX")
    GCC_PREFIX=
    CFLAGS="-fPIC -O2 -funroll-loops -fexpensive-optimizations"
  ;;
  "MINGW")
    GCC_PREFIX="i686-w64-mingw32-"
    CFLAGS="-O2 -funroll-loops -fexpensive-optimizations"
  ;;
  "MAC")
    DARWIN_VERSION=$(uname -r | awk 'BEGIN{FS="."}{print $1}')
    case "$MAC_ARCH" in
      "x86_64")
        MAC_ARCH="-arch x86_64"
        GCC_PREFIX="i686-apple-darwin${DARWIN_VERSION}"
      ;;
      "x86")
        MAC_ARCH="-arch i386"
        GCC_PREFIX="i686-apple-darwin${DARWIN_VERSION}"
      ;;
      "ppc")
        MAC_ARCH="-arch ppc"
        GCC_PREFIX="powerpc-apple-darwin${DARWIN_VERSION}"
      ;;
      *)
        echo "Bad arch for Mac OS X, see -h for details."
        exit 2
      ;;
    esac
    if echo "$MAC_SDK" | grep -q "10.5"; then
      MACOSX_DEPLOYMENT_TARGET=10.5
      MAC_GCC_VERSION=4.2.1
      ISYSTEM="-isystem /usr/lib/gcc/${GCC_PREFIX}/${MAC_GCC_VERSION}/include"
    else
      MACOSX_DEPLOYMENT_TARGET=
      ISYSTEM=
    fi
    GCC_PREFIX=
    CFLAGS="${MAC_ARCH} -isysroot ${MAC_SDK} $ISYSTEM -fPIC -O2 -funroll-loops -fexpensive-optimizations"
    LDFLAGS="-isysroot ${MAC_SDK} -Wl,-syslibroot,${MAC_SDK}"
  ;;
esac

# Create a wrapper Makefile
(
cat << END
export GCC_PREFIX=$GCC_PREFIX
export CFLAGS=$CFLAGS
export FFLAGS=$CFLAGS
export LDFLAGS=$LDFLAGS
export MACOSX_DEPLOYMENT_TARGET=$MACOSX_DEPLOYMENT_TARGET

first: $DEST_PREFIX/lib/libdfftpack.a
$DEST_PREFIX/lib/libdfftpack.a: Makefile
	make clean
	make -C src
	[ -d $DEST_PREFIX/lib ] || mkdir -p $DEST_PREFIX/lib
	cp src/libdfftpack.a $DEST_PREFIX/lib
	\$(GCC_PREFIX)ranlib $DEST_PREFIX/lib/libdfftpack.a
release: first
debug: first
clean:
	make -C src clean
install: first
END
) > new_Makefile
if [ ! -e Makefile ] || ! diff new_Makefile Makefile; then
  mv new_Makefile Makefile
else
  rm new_Makefile
fi

