#!/bin/sh

# Here are the default settings for compiling sendfile.
#
# You can change them by editing this file or put your variables in one of 
# these files:
# 	$SF_DEVELENV
# 	.develenv
#	$HOME/.develenv
# or simply call: makeconfig CC=gcc ...

# default compiling settings
CC=gcc
CFLAGS=-O2
LDFLAGS=-s

# default installation settings
SPOOL=/var/spool/sendfile
BINDIR=/usr/local/bin
MANDIR=/usr/local/man
CONFIG=/usr/local/etc
SERVERDIR=/usr/local/sbin
INETDCONF=/etc/inetd.conf
SERVICES=/etc/services

############################# OPTIONAL SETTINGS ##############################

# Normaly these programs will be called via $PATH, so define them ONLY, if you
# really need absolute paths.

#TAR=/usr/bin/tar
#GZIP=/usr/bin/gzip
#BZIP2=/usr/local/bin/bzip2
#PGP=/usr/local/bin/pgp
#RECODE=/usr/local/bin/recode
#METAMAIL=/usr/local/bin/metamail
#SENDMAIL=/usr/lib/sendmail
           
######################### END OF USER CONFIGURATION ##########################

export CC CFLAGS LINK LDFLAGS BINDIR SERVERDIR MANDIR CONFIG SPOOL FIFODIR
export INETDCONF SERVICES VERSION
export TAR GZIP BZIP2 PGP RECODE METAMAIL SENDMAIL

topmake() {
  sed "s/!SYSTEM/$SYSTEM/g
       s/!VERSION/$VERSION/g
      " develop/makefile.top > Makefile
}

# determine sendfile version and revision
eval `grep VERSION= develop/configure.in`

# only create new toplevel Makefile?
if [ "$1" = clean ]; then
  topmake
  exit
fi

# source in developer environment variables if found
if [ -f "$SF_DEVELENV" ]; then
  . $SF_DEVELENV
elif [ -f .develenv ]; then
  . .develenv
elif [ -f $HOME/.develenv ]; then
  . $HOME/.develenv  
fi

# check at last if there are env-settings in $*
case "$1" in 
  *=*) eval "$@";;
esac  

LINK=${LINK:-$CC}

cd develop
rm -f config.cache
./configure \
    --libexecdir=$SERVERDIR \
    --bindir=$BINDIR \
    --mandir=$MANDIR \
    --sysconfdir=$CONFIG \
  || exit $?

if [ -d /var/run ]; then FIFODIR=/var/run/sfm; fi

SYSTEM=`./config.guess`

case "$SYSTEM" in
  *linux*)	SYSTEM=LINUX;;
  *sunos4*)	SYSTEM=SOLARIS1
  		if [ -f /lib/lib44bsd.a -o -f /usr/lib/lib44bsd.a ]; then
		  LIBS="-l44bsd"
		fi;;
  *solaris2*)	SYSTEM=SOLARIS2;;
  *hp-ux*)	SYSTEM=HPUX;;
  *aix*)	SYSTEM=AIX;;
  *irix*)	SYSTEM=IRIX;;
  *next*)	SYSTEM=NEXT;;
  *convex*)	SYSTEM=CONVEXOS;;
  *osf*)	SYSTEM=OSF1;;
  *bsd*)	SYSTEM=BSD;;
  *)		SYSTEM=UNKNOWN;;
#  *)		SYSTEM=`uname -a | tr '[a-z]' '[A-Z]'`
#  		case "$SYSTEM" in
#		  *SUNOS*)  case `echo $SYSTEM | $AWK '{print $3}'` in
#			      4*) SYSTEM=SOLARIS1;;
#			    esac;;
#		  *)	    SYSTEM=UNKNOWN;;
#		esac;;
esac

cd ../src
echo now in `pwd`

for i in nsl socket readline; do
  if grep -i "have_lib$i 1" config.h >/dev/null; then LIBS="$LIBS -l$i"; fi
done
case "$LIBS" in
  *readline*) LIBS="$LIBS -ltermcap";;
esac

echo creating globals.h

cat <<EOD>globals.h
/*
 * Do not edit this file!
 * It is autogenerated by "makeconfig" and will be overwritten next time!
 * If you want to change some values, so do it in "makeconfig".
 */

#define BINDIR		"$BINDIR"
#define MANDIR		"$MANDIR"
#define SERVERDIR	"$SERVERDIR"

#define CONFIG		"$CONFIG/sendfile.cf"
#define ALIASES		"$CONFIG/sendfile.aliases"
#define ALLOW		"$CONFIG/sendfile.allow"
#define DENY		"$CONFIG/sendfile.deny"

#define SPOOL    	"$SPOOL"
#define OUTGOING	"$SPOOL/OUTGOING"
#define INLOG		"$SPOOL/LOG/in"
#define OUTLOG		"$SPOOL/LOG/out"

#define RECEIVE	 	"$BINDIR/receive"
#define TAR	 	"${TAR:-tar}"
#define GZIP	 	"${GZIP:-gzip}"
#define BZIP2	 	"${BZIP2:-bzip2}"
#define PGP	 	"${PGP:-pgp}"
#define RECODE	 	"${RECODE:-recode}"
#define METAMAIL 	"${METAMAIL:-metamail}"
#define SENDMAIL 	"${SENDMAIL:-/usr/lib/sendmail}"
#define FIFODIR  	"${FIFODIR:-/tmp/sfm}"	

#define DBF		 "/var/log/sendfiled.dbg"

#define DATEFORMAT	"%d-%b-%Y %H:%M:%S"	/* see strftime(3) */
#define CHARSET		"ISO_8859-1:1987"	/* this is ISO Latin 1 */
#define PROTOCOL 	"SAFT"
#define SAFT	  	487	/* SAFT tcp port */
#define DAYSEC 		86400	/* seconds per day */
#define OVERSIZE  	32768	/* string oversize length */
#define MAXLEN	  	4096	/* max length of various strings */
#define FLEN	  	256	/* file name length */
#define DLEN	  	30	/* date string length */
#define PACKET	  	512	/* data size per packet */
#define DEBUG			/* more debugging output */
#undef  DEBUG
#define ALT_MESSAGES		/* alternative user message format */
#undef  ALT_MESSAGES
#define RESPECT_MAIL_ALIASES	/* look for elm aliases, too */
#undef  RESPECT_MAIL_ALIASES
EOD

cat <<EOD>>config.h

#ifdef NEXT
  #define _POSIX_SOURCE
  #define S_IRUSR _S_IRUSR
  #define S_IWUSR _S_IWUSR
  #define S_IWGRP 0000020
  #define S_IXUSR _S_IXUSR
  #define S_IRWXG 0000070
  #define S_IRWXO 0000007
  #define S_IRWXU 0000700
  #define S_ISDIR(mode)   (((mode) & (_S_IFMT)) == (_S_IFDIR))
  #define S_ISREG(mode)   (((mode) & (_S_IFMT)) == (_S_IFREG))
#endif

#if defined(SOLARIS2)
  #define __EXTENSIONS__
#endif

#if defined(LINUX)
  #ifndef _POSIX_SOURCE
    #define _POSIX_SOURCE
  #endif
  #ifndef __USE_BSD
    #define __USE_BSD
  #endif
#endif

#ifndef _GNU_SOURCE
  #define _GNU_SOURCE
#endif
EOD

case $CC in
  gcc*)  CFLAGS="$CFLAGS -Wall"
esac

case `uname -a 2>/dev/null` in
  *\ moep\ *|*\ bofh.*|*\ juhu\ *) CFLAGS="-Wall -ansi -pedantic -DBETA";;
esac

echo creating Makefile
sed "s:!CC:$CC:g
     s:!CFLAGS:$CFLAGS:g
     s:!SYSTEM:$SYSTEM:g
     s:!LINK:$LINK:g
     s:!LDFLAGS:$LDFLAGS:g
     s:!LIBS:$LIBS:g
   " ../develop/makefile.src > Makefile

cd ..
topmake
