#!/bin/sh

#
# Detect machine, unless the choice has been made already.
#
if [ "$MACHINE" = "" ]; then
	MACHINE=`uname -m`
fi	

if echo $MACHINE | grep sun4u > /dev/null; then
    MACHINE_NAME=sparc
elif echo $MACHINE | grep i.86 > /dev/null; then
    MACHINE_NAME=i386
elif echo $MACHINE | grep alpha > /dev/null; then
    MACHINE_NAME=alpha
elif echo $MACHINE | grep powerpc > /dev/null; then
    MACHINE_NAME=powerpc
else
    echo "Unable to detect processor type ('uname -m' == '$MACHINE')"
    exit 1
fi

#
# Detect OS and host, unless the choice has been made already
#
if [ "$SYSTEM" = "" ]; then
    SYSTEM=`uname -s`
fi	
 

if echo $SYSTEM | grep -i sunos > /dev/null; then
    OS_NAME=sunos
    HOST_NAME=unix
elif echo $SYSTEM | grep -i linux > /dev/null; then
    OS_NAME=linux
    HOST_NAME=unix
    # More on linux version
    KERNEL_VER=`uname -r`
    if echo $KERNEL_VER | grep '^2\.4' > /dev/null; then
	LINUX_POLL=select
    elif echo $KERNEL_VER | grep '^2\.2' > /dev/null; then
	LINUX_POLL=select
    elif echo $KERNEL_VER | grep '^2\.0' > /dev/null; then
	LINUX_EPOLL=select
    else
#	LINUX_POLL=epoll
	LINUX_POLL=select
    fi
elif echo $SYSTEM | grep -i mingw > /dev/null; then
    OS_NAME=win32
    HOST_NAME=mingw
elif echo $SYSTEM | grep -i cygwin > /dev/null; then
    OS_NAME=win32
    HOST_NAME=mingw
elif echo $SYSTEM | grep -i darwin > /dev/null; then
    OS_NAME=darwinos
    HOST_NAME=unix
elif echo $SYSTEM | grep -i rtems > /dev/null; then
    OS_NAME=rtems
    HOST_NAME=unix
else
    echo "Unable to detect system type ('uname -s' == '$SYSTEM')"
    exit 1
fi

#
# Detect gcc, unless it has been chosen already
#
if [ "$CC_NAME" = "" ]; then
	if gcc --version 2>&1 > /dev/null; then
		CC_NAME=gcc
	else
		echo "Unable to find gcc"
		exit 1
	fi
fi	
 

#
# Specify TARGET_NAME, if not already choosen.
#
if [ "$TARGET_NAME" = "" ]; then
   TARGET_NAME=$MACHINE_NAME-$OS_NAME-$CC_NAME
fi


if test -f build.mak; then
  echo 'Saving build.mak --> build.mak.old'
  cp -f build.mak build.mak.old
fi

echo 'Writing build.mak as follows:'
echo " MACHINE_NAME = $MACHINE_NAME"
echo " OS_NAME      = $OS_NAME"
echo " HOST_NAME    = $HOST_NAME"
echo " CC_NAME      = $CC_NAME"
echo " TARGET_NAME  = $TARGET_NAME"
echo " CROSS_COMPILE= $CROSS_COMPILE"
echo " LINUX_POLL   = $LINUX_POLL"

echo "# Auto-generated build.mak" > build.mak
echo "export MACHINE_NAME := $MACHINE_NAME" >> build.mak
echo "export OS_NAME := $OS_NAME" >> build.mak
echo "export HOST_NAME := $HOST_NAME" >> build.mak
echo "export CC_NAME := $CC_NAME" >> build.mak
echo "export TARGET_NAME := $TARGET_NAME" >> build.mak
echo "export CROSS_COMPILE := $CROSS_COMPILE" >> build.mak
echo "export LINUX_POLL := $LINUX_POLL" >> build.mak

touch user.mak

echo
echo "The configuration for current host has been written to 'build.mak'."
echo "Customizations can be put in:"
echo "  - 'user.mak'"
echo "  - 'pjlib/include/pj/config_site.h'"
echo
echo "Next, run 'make dep && make clean && make'"

