#!/bin/sh
# $Id: configure,v 1.35 2004/11/06 11:36:54 paulus Exp $

# Where to install stuff by default
DESTDIR=/usr/local
SYSCONF=/etc

#  if [ -d /NextApps ]; then
#    system="NeXTStep"
#  else
  system=`uname -s`
  release=`uname -r`
  arch=`uname -m`
#  fi
state="unknown"

case $system in
  Linux)
    makext="linux";
    ksrc="linux";
    state="known";;
  SunOS)
    case $release in
#      [0-3]*)	state="ancient";;
#      4*)	state="known"; ksrc="sunos4"; makext="sunos4";;
      5.[7-9]*|5.[1-9][0-9])	state="known"; ksrc="solaris"; makext="sol2";
              case "`/usr/bin/isainfo -k`" in
		sparcv9)	archvariant='-64';;
		*)	;;
	      esac;;
      5.[1-6]*)	state="known"; ksrc="solaris"; makext="sol2";;
    esac
    if [ -x /opt/SUNWspro/bin/cc -a "$1" != "gcc" ] &&
       /opt/SUNWspro/bin/cc -flags >/dev/null 2>&1; then
      : # use Sun WorkShop compiler
    elif gcc --version >/dev/null 2>&1; then
      archvariant=gcc$archvariant
      compiletype=.gcc
      if [ "$archvariant" = "gcc-64" ]; then
        ( cd /tmp; touch ppp$$.c
	  gcc -c -m64 ppp$$.c >/dev/null 2>&1 || (
	    echo "gcc is unable to make 64 bit modules, and your $arch system needs them."
	    echo "consider upgrading gcc on this machine, or switching to Sun WorkShop."
	    rm -f ppp$$.c
	    exit 1
	  ) || exit 1
	  rm -f ppp$$.c ppp$$.o
        ) || exit 1
      fi
    else
      echo "C compiler not found; hoping for the best."
    fi;;
  NetBSD|FreeBSD|ULTRIX|OSF1|NeXTStep|SINIX-?|UNIX_SV|UNIX_System_V)
    state="notincluded";;
#    NetBSD)
#      makext="bsd";
#      case $release in
#        0.*)	state="ancient";;
#        1.0*)	state="ancient";;
#        1.1*)	state="known"; ksrc="netbsd-1.1";;
#        1.2*)	state="known"; ksrc="netbsd-1.2"; makext="netbsd-1.2";;
#        1.[3-9]*|[2-9]*)
#  		state="late"; ksrc="netbsd-1.2";;
#      esac;;
#    ULTRIX)
#      makext="ultrix";
#      case $release in
#        [0-3]*)	state="ancient";;
#        4.[01]*)	state="early"; ksrc="ultrix";;
#        4.[234])	state="known"; ksrc="ultrix";;
#      esac;;
#    OSF1)
#      makext="osf";
#      case $release in
#        V1.*)   state="neolithic"; ksrc="osf1";;
#        V[23].*)	state="neolithic"; ksrc="osf1";;
#        V4.*)	state="known"; ksrc="osf1";;
#        V[5-9]*) state="late"; ksrc="osf1";;
#      esac;;
#    FreeBSD)
#      makext="bsd";
#      case $release in
#        1.*)	state="known"; ksrc="freebsd-old";;
#        2.[01]*)	state="known"; ksrc="freebsd-2.0";;
#        2.2.[2-7]*) state="late"; ksrc="freebsd-2.0";;
#        2.2.8*)   state="known"; ksrc="freebsd-2.2.8";;
#        3.[0-1]*)	state="known"; ksrc="freebsd-3.0";;
#      esac;;
#    NeXTStep)
#      makext="NeXT";
#      ksrc="NeXT";
#      state="known";;
#    SINIX-?)
#      case $release in
#        5.4[01]) state=known; ksrc=svr4; makext=svr4;;
#        5.4[2-9]) state=late; ksrc=svr4; makext=svr4;;
#      esac;;
#    # Intel SVR4 systems come with a bug in the uname program.  Unless
#    # your provider fixed the bug, or you get a fix for it, uname -S will
#    # overwrite the system name with the node name!
#    UNIX_SV|UNIX_System_V|`uname -n`)
#      case $release in
#        4.0) state=known; ksrc=svr4; makext=svr4;;
#        4.2) state=late; ksrc=svr4; makext=svr4;;
#      esac;;
esac

if [ -d "$ksrc" ]; then :; else
  state="notincluded"
  unset ksrc
fi

case $state in
  neolithic) 
    echo "This is a newer release on an outdated OS ($system)."
    echo " This software may or may not work on this OS."
    echo " You may want to download an older version of PPP for this OS.";;
  ancient)
    echo "This is an old release of a supported OS ($system)."
    echo "This software cannot be used as-is on this system,"
    echo "but you may be able to port it.  Good luck!"
    exit;;
  early)
    echo "This is an old release of a supported OS ($system)."
    echo "This software should install and run on this system,"
    echo "but it hasn't been tested.";;
  late)
    echo "This is a newer release of $system than is supported by"
    echo "this software.  It may or may not work.";;
  unknown)
    echo "This software has not been ported to $system.  Sorry.";;
  notincluded)
    echo "Support for $system has not been included"
    echo "in this distribution.  Sorry.";;
  known)
    echo "Configuring for $system";;
esac

# Parse arguments
while [ $# -gt 0 ]; do
    arg=$1
    val=
    shift
    case $arg in
	*=*)
	    val=`expr "x$arg" : 'x[^=]*=\(.*\)'`
	    arg=`expr "x$arg" : 'x\([^=]*\)=.*'`
	    ;;
	--prefix|--sysconf)
	    if [ $# -eq 0 ]; then
		echo "error: the $arg argument requires a value" 1>&2
		exit 1
	    fi
	    val=$1
	    shift
	    ;;
    esac
    case $arg in
	--prefix)	DESTDIR=$val ;;
	--sysconfdir)	SYSCONF=$val ;;
    esac
done

mkmkf() {
    rm -f $2
    if [ -f $1 ]; then
	echo "  $2 <= $1"
	sed -e "s,@DESTDIR@,$DESTDIR,g" -e "s,@SYSCONF@,$SYSCONF,g" $1 >$2
    fi
}

if [ -d "$ksrc" ]; then
    echo "Creating Makefiles."
    mkmkf $ksrc/Makefile.top Makefile
    mkmkf $ksrc/Makedefs$compiletype Makedefs.com
    for dir in pppd pppstats chat pppdump pppd/plugins pppd/plugins/rp-pppoe \
	       pppd/plugins/radius pppd/plugins/pppoatm; do
	mkmkf $dir/Makefile.$makext $dir/Makefile
    done
    if [ "$archvariant" ]; then
	mkmkf $ksrc/Makefile.$makext$archvariant $ksrc/Makefile
    fi
else
  echo "Unable to locate kernel source $ksrc"
  exit 1
fi
