#!/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 Mac > /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'"

