#!/bin/sh
#
# BEGIN COPYRIGHT BLOCK
# This Program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; version 2 of the License.
# 
# This Program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License along with
# this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
# Place, Suite 330, Boston, MA 02111-1307 USA.
# 
# In addition, as a special exception, Red Hat, Inc. gives You the additional
# right to link the code of this Program with code not covered under the GNU
# General Public License ("Non-GPL Code") and to distribute linked combinations
# including the two, subject to the limitations in this paragraph. Non-GPL Code
# permitted under this exception must only link to the code of this Program
# through those well defined interfaces identified in the file named EXCEPTION
# found in the source code files (the "Approved Interfaces"). The files of
# Non-GPL Code may instantiate templates or use macros or inline functions from
# the Approved Interfaces without causing the resulting work to be covered by
# the GNU General Public License. Only Red Hat, Inc. may make changes or
# additions to the list of Approved Interfaces. You must obey the GNU General
# Public License in all respects for all of the Program code and other code used
# in conjunction with the Program except the Non-GPL Code covered by this
# exception. If you modify this file, you may extend this exception to your
# version of the file, but you are not obligated to do so. If you do not wish to
# provide this exception without modification, you must delete this exception
# statement from your version and license this file solely under the GPL without
# exception. 
# 
# 
# Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
# Copyright (C) 2005 Red Hat, Inc.
# All rights reserved.
# END COPYRIGHT BLOCK
#

UNAME=`../nsarch`
NSUNAME=`uname -s | sed -e 's%/%_%g'``uname -r`
DATE="`date +%d-%h`"

# OS tweaks

if [ "$UNAME" = "SUNOS4" ]; then
    PATH=/usr/local/sun4/bin:/usr/bin/X11:$PATH; export PATH
    GTAR=/share/builds/f/gtar/bin/sunos-gtar
    HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "SOLARIS" ]; then
    PATH=/usr/ccs/bin:/usr/openwin/bin:$PATH; export PATH
    OPENWINHOME=/usr/openwin; export OPENWINHOME
    GTAR=/share/builds/f/gtar/bin/solaris-gtar
    HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "SOLARISx86" ]; then
    PATH=/usr/ccs/bin:/usr/openwin/bin:$PATH; export PATH
    OPENWINHOME=/usr/openwin; export OPENWINHOME
    HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "HPUX" ]; then
  PATH=/usr/local/hpux/bin:/usr/bin/X11:$PATH; export PATH
  GTAR=/share/builds/f/gtar/bin/hpux-gtar
  ARCH=`uname -m`
  if [ "$ARCH" = "ia64" ]; then
    HTTPDLIB=libnshttpd.so
  else
    HTTPDLIB=libnshttpd.sl
  fi

elif [ "$UNAME" = "BSDI" ]; then
  PATH=/usr/local/bin:/usr/X11/bin:$PATH; export PATH
  GTAR=/share/builds/f/gtar/bin/bsdi-gtar

elif [ "$UNAME" = "OSF1" ]; then
#  NOJAVA=true
  PATH=/usr/local/dec/bin:/usr/bin/X11:$PATH; export PATH
  GTAR=/share/builds/f/gtar/bin/osf1-gtar
  HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "AIX" ]; then
  PATH=/usr/local/aix32/bin:/usr/bin/X11:$PATH; export PATH
  GTAR=/share/builds/f/gtar/bin/aix-gtar
  HTTPDLIB=ns-httpd.a

elif [ "$UNAME" = "IRIX" ]; then
  GTAR=/share/builds/f/gtar/bin/irix-gtar
  HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "SONY" ]; then
  PATH=/usr/bin/X11:$PATH; export PATH
  HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "NECSVR4" ]; then
  PATH=/u/malmer/nec/usr/local/bin:/usr/bin/X11:$PATH; export PATH
  HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "ReliantUNIX" ]; then
  PATH=/usr/local/bin:$PATH; export PATH
  GTAR=tar
  HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "SCO" ]; then
  PATH=/usr/local/bin:/usr/bin/X11:$PATH; export PATH
  GTAR=/usr/local/bin/gtar
  HTTPDLIB=ns-httpd.so

elif [ "$UNAME" = "UNIXWARE" ]; then
  PATH=/usr/local/bin:/usr/bin/X11:$PATH; export PATH
  GTAR=/usr/local/bin/gtar
  HTTPDLIB=ns-httpd.so

fi

set -- `getopt p: $*` || {
	echo "### `basename $0`:  ERROR:  unknown option" 1>&2
	exit 1
}

BuildInPhases=0

while [ "$1" != "--" ] ; do
	case "$1" in
		-p) BuildInPhases=1; shift; Phase=$1
			;;
	esac
	shift
done
shift


buildit() {

#  Initialize some variables

ADMINDIR=../built/$UNAME-$SECTYPE-admserv
if [ "$PRODUCT" = "personal" ]; then
  BINDIR=httpd
  TARNAME=nshttpd.tar
elif [ "$PRODUCT" = "catalog" ]; then
  BINDIR=catalog
  TARNAME=ns-catalog.tar
elif [ "$PRODUCT" = "rds" ]; then
  BINDIR=rds
  TARNAME=ns-rds.tar
elif [ "$PRODUCT" = "cms" ]; then
  BINDIR=https
  TARNAME=ns-cms.tar
else
  BINDIR=https
  TARNAME=nshttps.tar
fi
SOURCEDIR=../built/$UNAME-$SECTYPE-$BINDIR
TARGETDIR=$TYPE/$UNAME-$SECTYPE-$BINDIR
TARGETUNTAR=$TYPE/$UNAME-$SECTYPE-$BINDIR/untarred

TARGETHTBIN=$TYPE/$UNAME-$SECTYPE-$BINDIR/untarred/bin/$BINDIR
mkdir -p $TARGETUNTAR 2> /dev/null

if [ $BuildInPhases = 1 ]
then
	if [ "$Phase" = "server" ]
	then
		buildserver
	elif [ "$Phase" = "admin" ]
	then
		buildadmin
	elif [ "$Phase" = "batman" ]
	then
		buildbatman
	elif [ "$Phase" = "tar" ]
	then
		(cd $TARGETUNTAR; tar cvf ../$TARNAME *)
	else
		echo "`basename $0`:  ERROR:  unknown build phase"
		exit 1
	fi
else
	buildserver
	buildadmin
	buildbatman
	(cd $TARGETUNTAR; tar cvf ../$TARNAME *)
fi
}

buildserver() {

(cd ..; ./config $BOMB $PRODUCT $SECCONFIG $OPTIMIZE)
gmake

if [ $? -ne 0 ]; then
  exit 2
fi

(cd ../mc-icons; gmake)
if [ $? -ne 0 ]; then
  exit 2
fi

(cd ../include; gmake)
if [ $? -ne 0 ]; then
  exit 2
fi

(cd nsapi; gmake)
if [ $? -ne 0 ]; then
  exit 2
fi

(cd extras; gmake)
if [ $? -ne 0 ]; then
  exit 2
fi

if [ "$NOJAVA" != "true" ]; then
  (cd ../lib/sjava; gmake)
  if [ $? -ne 0 ]; then
    exit 2
  fi
fi

# generate DBMs in admin/bin directory
(cd $SOURCEDIR/admin/bin; ./mkdbm)

# Each product has different manuals
if [ "$BINDIR" = "catalog" -o "$BINDIR" = "rds" ]; then
	# Batman
	ADMINMANUALS="html/manual/ag html/manual/design html/manual/beta2"
else
	# Enterprise and FastTrack
	ADMINMANUALS="html/manual/ag html/manual/pg html/manual/javascript"
fi
for i in icons html html/info html/manual $ADMINMANUALS bin; do
  mkdir -p $TARGETUNTAR/bin/$BINDIR/admin/$i
  cp $SOURCEDIR/admin/$i/* $TARGETHTBIN/admin/$i
done

/bin/rm -f $TARGETHTBIN/admin/bin/*.o
$STRIP $TARGETHTBIN/admin/bin/*

for i in misc icons html bin; do
  mkdir -p $TARGETHTBIN/install/$i
  cp $SOURCEDIR/install/$i/* $TARGETHTBIN/install/$i
done
$STRIP $TARGETHTBIN/install/bin/*
mv $TARGETHTBIN/install/bin/ns-setup $TARGETDIR
mv $TARGETHTBIN/install/bin/ns-config $TARGETHTBIN/ns-config


mkdir -p $TARGETUNTAR/ns-icons
cp $SOURCEDIR/mc-icons/* $TARGETUNTAR/ns-icons

if [ -d $SOURCEDIR/nsapi -a "$UNAME" != "BSDI" ]; then
    mkdir -p $TARGETUNTAR/nsapi
    cp -r $SOURCEDIR/nsapi/* $TARGETUNTAR/nsapi
fi

mkdir -p $TARGETUNTAR/extras
cp -r $SOURCEDIR/extras/* $TARGETUNTAR/extras
$STRIP $TARGETUNTAR/extras/*/*

cp $SOURCEDIR/ns-httpd $TARGETHTBIN/ns-httpd
if [ "$HTTPDLIB" != "" ]; then
  cp $SOURCEDIR/$HTTPDLIB $TARGETHTBIN/$HTTPDLIB
fi
$STRIP $TARGETHTBIN/ns-httpd
if [ "$UNAME" != "IRIX" -a "$UNAME" != "SUNOS4" ]; then
  $STRIP $TARGETHTBIN/$HTTPDLIB
fi

if [ "$UNAME" = "AIX" ]; then
  cp /usr/lib/libsvld.a $TARGETHTBIN/libsvld.a
fi


cp README $TARGETDIR
cp newinst/misc/license.txt $TARGETDIR

mkdir -p $TARGETUNTAR/userdb
mkdir -p $TARGETUNTAR/httpacl
mkdir -p $TARGETUNTAR/authdb
mkdir -p $TARGETUNTAR/authdb/default

if [ "$PRODUCT" = "enterprise" ]; then
mkdir -p $TARGETUNTAR/plugins/search/admin
mkdir -p $TARGETUNTAR/plugins/search/tmp
chmod a+w $TARGETUNTAR/plugins/search/tmp
mkdir -p $TARGETUNTAR/plugins/search/collections
chmod a+w $TARGETUNTAR/plugins/search/collections
cp -r plugins/search $TARGETUNTAR/plugins
(cd $TARGETUNTAR/plugins/search; rm -r `find . -name CVS -print`)
cp $SOURCEDIR/lib/vsearch $TARGETUNTAR/plugins/search/vsearch
cp $SOURCEDIR/admin/bin/ia* $TARGETUNTAR/plugins/search/vsearch
$STRIP $TARGETUNTAR/plugins/search/vsearch/ia*
cp ../lib/libsearch/searching/query.err $TARGETUNTAR/plugins/search/vsearch
mkdir -p $TARGETUNTAR/plugins/search/ui/icons
mkdir -p $TARGETUNTAR/plugins/search/ui/usa
cp ../lib/libsearch/searching/ui/icons/* $TARGETUNTAR/plugins/search/ui/icons
cp ../lib/libsearch/searching/ui/usa/* $TARGETUNTAR/plugins/search/ui/usa

mkdir -p $TARGETUNTAR/plugins/snmp
mkdir -p $TARGETUNTAR/plugins/snmp/magt
mkdir -p $TARGETUNTAR/plugins/snmp/sagt
if [ -d $SOURCEDIR/plugin/snmp -a -f $SOURCEDIR/plugin/snmp/httpagt ]; then
  cp $SOURCEDIR/plugin/snmp/httpagt $TARGETUNTAR/plugins/snmp/httpagt
fi
cp plugins/snmp/netscape.pub $TARGETUNTAR/plugins/snmp/netscape.mib

mkdir -p $TARGETUNTAR/plugins/mks/bin
	cp $SOURCEDIR/plugins/mks/bin/*.so $TARGETUNTAR/plugins/mks/bin

if [ "$UNAME" = "SUNOS4" ]; then
  cp ../../../peer/sunos/magt/* $TARGETUNTAR/plugins/snmp/magt
  cp ../../../peer/sunos/sagt/* $TARGETUNTAR/plugins/snmp/sagt
elif [ "$UNAME" = "SOLARIS" ]; then
  cp ../../../peer/solaris/magt/* $TARGETUNTAR/plugins/snmp/magt
  cp ../../../peer/solaris/sagt/* $TARGETUNTAR/plugins/snmp/sagt
elif [ "$UNAME" = "HPUX" ]; then
  cp ../../../peer/hp/magt/* $TARGETUNTAR/plugins/snmp/magt
  cp ../../../peer/hp/sagt/* $TARGETUNTAR/plugins/snmp/sagt
elif [ "$UNAME" = "OSF1" ]; then
  cp ../../../peer/osf/magt/* $TARGETUNTAR/plugins/snmp/magt
  cp ../../../peer/osf/sagt/* $TARGETUNTAR/plugins/snmp/sagt
elif [ "$UNAME" = "AIX" ]; then
  cp ../../../peer/aix/magt/* $TARGETUNTAR/plugins/snmp/magt
  cp ../../../peer/aix/sagt/* $TARGETUNTAR/plugins/snmp/sgat
elif [ "$UNAME" = "IRIX" ]; then
  cp ../../../peer/irix/magt/* $TARGETUNTAR/plugins/snmp/magt
  cp ../../../peer/irix/sagt/* $TARGETUNTAR/plugins/snmp/sagt
fi
fi	#  PRODUCT = enterprise


if [ "$NOJAVA" != "true" ]; then
  mkdir -p $TARGETUNTAR/plugins/java/bin
  cp $SOURCEDIR/lib/libsjava.so $TARGETUNTAR/plugins/java/bin

  mkdir -p $TARGETUNTAR/plugins/java/classes
  cp ../../sun-java/classsrc/serv2_0.zip $TARGETUNTAR/plugins/java/classes

  cp plugins/java/javac $TARGETUNTAR/plugins/java
  cp plugins/java/README $TARGETUNTAR/plugins/java

  mkdir -p $TARGETUNTAR/plugins/java/applets
  cp plugins/java/applets/* $TARGETUNTAR/plugins/java/applets

#  mkdir -p $TARGETUNTAR/plugins/java/local-classes
#  cp plugins/java/local-classes/* $TARGETUNTAR/plugins/java/local-classes

# XXXrobm these docs assume that we have Sun's HTML and images
#  mkdir -p $TARGETUNTAR/plugins/java/docs/images
#  cp plugins/java/docs/*.html $TARGETUNTAR/plugins/java/docs
#  cp ../../sun-java/javadoc/*.gif $TARGETUNTAR/plugins/java/docs/images
fi

mkdir $TARGETUNTAR/install
cp ./newinst/src/upgrade $TARGETUNTAR/install
cp ./newinst/src/ObjConf.pm $TARGETUNTAR/install
cp ./newinst/src/Magnus.pm $TARGETUNTAR/install
cp ./newinst/src/start $TARGETUNTAR/install
cp ./newinst/src/stop $TARGETUNTAR/install
cp ./newinst/src/restart $TARGETUNTAR/install
cp ./newinst/src/rotate $TARGETUNTAR/install
cp ./newinst/perl5/$UNAME-perl5/perl $TARGETUNTAR/install
cp ./newinst/perl5/artistic $TARGETUNTAR/install
if [ "$UNAME" = "IRIX" ] || [ "$UNAME" = "SOLARIS" ] || [ "$UNAME" = "OSF1" ] ; then
  cp ./newinst/src/kernelThreads.pl $TARGETUNTAR/install/threads.pl
fi
cp $SOURCEDIR/extras/database/mkuser $TARGETUNTAR/install
cp $SOURCEDIR/extras/database/ndbmdump $TARGETUNTAR/install
cp $SOURCEDIR/extras/database/rcert11 $TARGETUNTAR/install
cp $SOURCEDIR/extras/database/rkey11 $TARGETUNTAR/install
$STRIP $TARGETUNTAR/install/*

if [ "$DO_LIVEWIRE" = "yes" ]; then
	if [ "$UNAME" = "IRIX" ] ; then
		PLATSFX=sgi
	elif [ "$UNAME" = "SOLARIS" ] ; then
		PLATSFX=sol
	elif [ "$UNAME" = "HPUX" ] ; then
		PLATSFX=hpx
	fi
	LIVEWIRETAR=livewire_$PLATSFX.tar
	if [ -d $TARGETUNTAR/LiveWire ]; then
		rm -rf $TARGETUNTAR/LiveWire
	fi
	mkdir $TARGETUNTAR/LiveWire
	cp ./newinst/src/$LIVEWIRETAR.gz $TARGETUNTAR/LiveWire
	gunzip $TARGETUNTAR/LiveWire/$LIVEWIRETAR
	(cd $TARGETUNTAR/LiveWire; tar xf livewire*.tar)
	cp $TARGETUNTAR/LiveWire/server/* $TARGETUNTAR/bin/$BINDIR
	cp $TARGETUNTAR/LiveWire/bin/* $TARGETUNTAR/bin/$BINDIR
	rm -rf $TARGETUNTAR/LiveWire/server $TARGETUNTAR/LiveWire/bin
	rm $TARGETUNTAR/LiveWire/livewire*.tar
fi


(cd $TARGETUNTAR; find . -name \*.o -print | xargs rm -f)

}

buildadmin() {

# BONEHEAD
(cd ..; ./config $BOMB admin $SECCONFIG $OPTIMIZE)
(cd ../admserv; gmake)
if [ $? -ne 0 ]; then
  exit 2
fi

mkdir -p $TARGETUNTAR/admserv
cp $ADMINDIR/ns-admin $TARGETUNTAR/admserv
$STRIP $TARGETUNTAR/admserv/ns-admin

for i in icons html html/info bin cfgstuff; do
  mkdir -p $TARGETUNTAR/bin/admserv/$i
  cp $ADMINDIR/cgi/$i/* $TARGETUNTAR/bin/admserv/$i
done
$STRIP $TARGETUNTAR/bin/admserv/bin/*

}

buildbatman() {

# For AutoCatalog from Batman -Darren
if [ "$DO_AUTOCATALOG" = "yes" ]; then
	# We need to re-run config to get our own library versions, etc.
	(cd ..; ./config $BOMB batman $SECCONFIG $OPTIMIZE)

	#  This ugly hack is needed because nspr.a must be rebuilt on
	#  SOLARIS for batman.  There are symbols required by the gcc
	#  generated code that SparcWorks doesn't provide - nothing links.

	if [ "$UNAME" = "SOLARIS" ]; then
		NSPRDIR=../../nspr/src/${NSUNAME}_${NSTAG}.OBJ
		mv $NSPRDIR/nspr.a $NSPRDIR/GCCnspr.a
		if [ -f $NSPRDIR/SPARCWKnspr.a ] ; then
			mv $NSPRDIR/SPARCWKnspr.a $NSPRDIR/nspr.a
		else
			rm -f $NSPRDIR/*.o
		fi
	fi
	(NS_USE_NATIVE=1; export NS_USE_NATIVE; cd ../batman; gmake MINIRDS_INSTALLDIR="../../httpd/$TARGETUNTAR/plugins" NSAPIDIR="$TARGETUNTAR/nsapi" minirds)
	if [ $? -ne 0 ]; then
  		exit 2
	fi
	$STRIP $TARGETUNTAR/plugins/autocatalog/bin/*
	$STRIP $TARGETUNTAR/plugins/autocatalog/*
	if [ "$UNAME" = "SOLARIS" ] ; then
		mv $NSPRDIR/nspr.a $NSPRDIR/SPARCWKnspr.a
		mv $NSPRDIR/GCCnspr.a $NSPRDIR/nspr.a
	fi
fi

}

if [ "`echo $* | grep final`" != "" ]; then
  TYPE=final
  BOMB=nobomb

elif [ "`echo $* | grep beta`" != "" ]; then
  TYPE=beta
  BOMB=bomb

else
  echo "You must choose to build either a beta or final version."
  exit 2
fi


if [ "$NOJAVA" = "" -a "`echo $* | grep java`" != "" ]; then
  NOJAVA=false
else
  NOJAVA=true
fi

if [ "$DO_AUTOCATALOG" = "" -a "`echo $* | grep autocatalog`" != "" ]; then
  DO_AUTOCATALOG=yes
else
  DO_AUTOCATALOG=no
fi
# need to export DO_AUTOCATALOG so that it's passed down through all gmakes
export DO_AUTOCATALOG

if [ "$DO_LIVEWIRE" = "" ]; then
	if [ "`echo $* | grep livewire`" != "" ]; then
	  DO_LIVEWIRE=yes
	else
	  DO_LIVEWIRE=no
	fi
fi
export DO_LIVEWIRE

OPTIMIZE=optimize
NSTAG=OPT
STRIP=strip
if [ "`echo $* | grep debug`" != "" ]; then
  OPTIMIZE=debug
  NSTAG=DBG
  STRIP=echo
fi

NSDISTDIR=../../dist/${NSUNAME}_${NSTAG}.OBJ

if [ "`echo $* | grep personal`" != "" ]; then
  PRODUCT=personal
elif [ "`echo $* | grep ns_catalog`" != "" ]; then
  PRODUCT=catalog
elif [ "`echo $* | grep ns_rds`" != "" ]; then
  PRODUCT=rds
elif [ "`echo $* | grep cms`" != "" ]; then
  PRODUCT=cms
else
  PRODUCT=enterprise
fi


if [ "`echo $* | grep unsecure`" != "" -o "`echo $* | grep all`" != "" ]; then
  SECTYPE=none
  SECCONFIG=unsecure
  buildit
fi

if [ "`echo $* | grep export`" != "" -o "`echo $* | grep all`" != "" ]; then
  SECTYPE=export
  SECCONFIG=export
  buildit
fi

if [ "`echo $* | grep domestic`" != "" -o "`echo $* | grep all`" != "" ]; then
  SECTYPE=domestic
  SECCONFIG=domestic
  buildit
fi
