#!/bin/sh
# Shell script 'configure2' for dyncall/Makefile.generic
# Copyright (C) 2011 Daniel Adler

BUILD=`uname`
HOST="${BUILD}"

BLDTOP="$PWD"
SRCTOP=`dirname $PWD/$0`

PrintUsage()
{
head -n 3 $0 | grep "^# "
  cat <<EOF
usage: $0 [options]
  -h         --help
  -p         --prefix=<install-path>
             --host=<os>
  -o <os>    --os=<os>
  -a <arch>  --arch=<arch>
             
  os   := Linux, (Open|Free|Net|DragonFly)BSD, Windows, Darwin, iOS, MacOSX, Sun, Haiku, BeOS
  arch := x86, x64, arm, ppc, mips or ""

EOF
  exit 2
}

ProcessArgs()
{
  while [ 0 -lt $# ]; do
    X=$1
    shift 1
# Shell common:
    case $X in
      --help|-h)
        PrintUsage
        ;;
# GNU Compatibility:
      --prefix=*)
        PREFIX=`echo $X | cut -c 10-`
        addVar PREFIX $PREFIX
        ;;
      --host=*)
        HOST=`echo $X | cut -c 8-`
        ;;
# Generic Compatibility:
      --os=*)
        OS=`echo $X | cut -c 6-`
        ;;
      --arch=*)
        ARCH=`echo $X | cut -c 8-`
        ;;
# Concrete Support:
      --with-iphonesdk=*)
        IOSSDK_VERSION=`echo $X | cut -c 18-`
        TARGET_MACH="-arch armv6"
        ;;
      --with-macosxsdk=*)
        MACOSXSDK_VERSION=`echo $X | cut -c 18-`
        ;;
      --target-universal)
        TARGET_UNIVERSAL=1
        ;;
      *=*)
        ;;
    esac
  done
}

access()
{
  $*
}

new_makefile()
{
  FILE=$1
  echo "# auto-generated by $0" >$FILE
}

append_makefile()
{
  echo $* >>$FILE
}

#vars=""

addVar()
{
  NAME=$1
  shift 1
  VALUE=$*

  append_makefile "$NAME+=$*"
#  vars="$NAME='$*' $var"

}

ConfigureByHost()
{
  case ${HOST} in
    Linux)
      addVar CFLAGS "-fPIC"
      addVar LDFLAGS "-lm -ldl"
      ;;
    *BSD|DragonFly*)
      addVar CFLAGS "-fPIC"
      addVar LDFLAGS "-lm"
      ;;
    Minix)
      addVar CFLAGS ""
      targets="dyncall dyncallback"
      ;;
    Darwin|MacOSX)
      addVar CFLAGS "-fPIC"
      addVar TARGET_ARCH "-arch i386 -arch x86_64 -arch ppc"
      addVar TARGET_MACH "-arch i386 -arch x86_64 -arch ppc"
      addVar MKLIB "libtool -static -o"
      ;;
    IOS|iPhoneOS|iOS)
      addVar CFLAGS "-fPIC"
      addVar TARGET_ARCH "-arch armv6"
      addVar TARGET_MACH "-arch armv6"
      ;;
  esac
}

ConfigureByArch()
{
  case ${ARCH} in
    x64)
      addVar CFLAGS "-fPIC"
      ;;
    sparc64)
      addVar CFLAGS "-m64"
      addVar ASFLAGS "-m64"
      addVar CXXFLAGS "-m64"
      addVar CCFLAGS "-m64"
      ;;
  esac
}


DumpVars()
{
  echo '#!/bin/sh' >./make.sh
  echo "$vars make -f Makefile.generic \$*" >>./make.sh
  chmod +x ./make.sh
  echo "# run ./make.sh to build"
}

make_dir()
{
  access mkdir -p $1
}

MakeBuildTree()
{
  FILES=`( cd $SRCTOP ; find . -name "Makefile.generic" )`
  for FILE in $FILES ; do
    SRCFILE="$SRCTOP/$FILE"
    BLDFILE="$BLDTOP/$FILE"
    SRCDIR=`dirname $SRCFILE`
    BLDDIR=`dirname $BLDFILE`
    make_dir "$BLDDIR"
    new_makefile $BLDDIR/Makefile
    append_makefile "SRCTOP = $SRCTOP"
    append_makefile "BLDTOP = $BLDTOP"
    append_makefile "SRCDIR = $SRCDIR"
    append_makefile "BLDDIR = $BLDDIR"
    append_makefile "VPATH = $SRCDIR"
    append_makefile "include $BLDTOP/Makefile.config"
    append_makefile "include $SRCDIR/Makefile.generic"
  done
}

WriteConfig()
{
  new_makefile $BLDTOP/Makefile.config
}

ProcessArgs $*
MakeBuildTree
WriteConfig
ConfigureByHost

