#!/bin/bash

MAC_SDK=""
MAC_ARCH="x86"
MAC_GCC_VERSION=4.2.1
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
    ;;
  esac
  shift
done

case "$PLATFORM" in
  "LINUX")
    GCC_PREFIX=
    CFLAGS="-funroll-all-loops -O3 -fPIC"
  ;;
  "MINGW")
    GCC_PREFIX="i686-mingw32-"
    CFLAGS="-funroll-all-loops -O3 "
  ;;
  "MAC")
    case "$MAC_ARCH" in
      "x86")
        MAC_ARCH=i386
        GCC_PREFIX="i686-apple-darwin9"
      ;;
      "ppc")
        GCC_PREFIX="powerpc-apple-darwin9"
      ;;
    esac
    if echo "$MAC_SDK" | grep -q "10.4u"; then
      MACOSX_DEPLOYMENT_TARGET=10.4
      ISYSTEM="-isystem /usr/lib/gcc/${GCC_PREFIX}/${MAC_GCC_VERSION}/include"
    else
      MACOSX_DEPLOYMENT_TARGET=
      ISYSTEM=
    fi
    GCC_PREFIX=
    CFLAGS="-arch ${MAC_ARCH} -isysroot ${MAC_SDK} $ISYSTEM -fPIC -funroll-all-loops -O3"
    LDFLAGS="-isysroot ${MAC_SDK} -Wl,-syslibroot,${MAC_SDK}"
  ;;
esac

#if [ "$PLATFORM" = "MINGW" ]; then

  # No sys/times.h available under MINGW for libclapack.a
  #echo > src/SRC/second.c
  #echo > src/SRC/dsecnd.c

  # Problem inside F2C embedded in CLAPACK
  #cat src/F2CLIBS/libF77/makefile | \
  #sed "s/\$[(]I77[)] \$[(]TIME[)]/ \$(I77)/g" > tmp
  #mv tmp src/F2CLIBS/libF77/makefile
#fi

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

first: $DEST_PREFIX/lib/libblas.a $DEST_PREFIX/lib/libclapack.a
$DEST_PREFIX/lib/libblas.a: Makefile
	make clean
	rm -f src/blas_LINUX.a
	make -C src f2clib
	make -C src blaslib
	mv src/blas_LINUX.a $DEST_PREFIX/lib/libblas.a
	\$(GCC_PREFIX)ranlib $DEST_PREFIX/lib/libblas.a
$DEST_PREFIX/lib/libclapack.a: Makefile
	make clean
	rm -f src/lapack_LINUX.a
	make -C src/SRC
	mv src/lapack_LINUX.a $DEST_PREFIX/lib/libclapack.a
	\$(GCC_PREFIX)ranlib $DEST_PREFIX/lib/libclapack.a
release: first
debug: first
clean:
	make -C src clean
install:
END
) > new_Makefile
if ! diff new_Makefile Makefile > /dev/null; then
  mv new_Makefile Makefile
else
  rm new_Makefile
fi

