#!/bin/csh

# -----------------------------------------------------------------------------
# Build distribution versions of Sparky on Unix, Linux, and Mac OS X.
# Debugging versions are made with the make-sparky script.
#
# Invokes make in Sparky code directory with paths and compiler flags
# appropriate for specific machines.  
#

set HOST		= `hostname`

# -----------------------------------------------------------------------------
# Default paths and compiler options
#
set SPARKY		= /usr/local/src/sparky/code
set SPARKY_INSTALL_MAC	= 
set SPARKY_SCRIPT	= sparky
set PYTHON_PREFIX	= /usr/local
set PYTHON_VERSION	= 2.3
set TK_PREFIX		= /usr/local
set TCLTK_VERSION	= 8.4
set CXX			= g++
set CXXFLAGS		= "-Wall -O -ansi -pedantic -Wno-long-long"
set CC			= gcc
set CFLAGS		= -O
set LDFLAGS		=
set LDSHARED		= -shared
set EXTRALIBS		=
set CXX_RULE_PREFIX	= 
set EXTRA_DEFINES       =
set MAKE		= make
set INSTALL		= "rsync -avz"
set INSTALLDIR		= "rsync -avz"

# -----------------------------------------------------------------------------
# SGI IRIX 6.5, using SGI compilers
#
# Sometimes need to remove format.o, memalloc.o, ii_files/format.ii, and
# ii_files/memalloc.ii and make-sparky again to avoid linker problem
# "instantiation assigned to more than one file".
#
if ($HOST == spinoza.cgl.ucsf.edu || \
    $HOST == larson.cgl.ucsf.edu || $HOST == larson) then

    set PLATFORM	= /usr/local/src/sparky/platforms/sgi65
    set SPARKY_OBJ	= $PLATFORM/sparky-obj
    set SPARKY_INSTALL	= $PLATFORM/sparky-install
    set PYTHON_PREFIX	= $PLATFORM/python-2.3.3
    set TK_PREFIX	= $PLATFORM/tcltk-8.4.5
    set CXX		= CC
# Warnings to suppress.  1209 in sparky code.  The rest are in system headers
# 1209 = condition expression is constant
# 1424 = unused template argument
# 3201 = unused argument
# 1174 = variable declared but never referenced
# 1110 = statement not reachable
# 3625 = include within scope of extern "C"
# 3649 = all virtual functions inline, static virtual table generated
#    set NOWARN		= "-DEBUG:suppress=1209,1424,3201,1174,1110,3625,3649"
    set NOWARN		= "-DEBUG:suppress=1209,1424,3201,1174,1110"
    set CXXFLAGS	= "-n32 -LANG:std -O -DEBUG:fullwarn=ON $NOWARN"
    set CC		= cc
    set LDFLAGS		= "-n32 -LANG:std"
    set MAKE		= /usr/freeware/bin/gmake

# -----------------------------------------------------------------------------
# SGI IRIX 5.3, using old SGI compilers
#
else if ($HOST == unavailable) then

    set PREFIX		= /usr/local/src/sparky/platforms/sgi53
    set SPARKY_OBJ	= $PREFIX/sparky-obj
    set SPARKY_INSTALL	= $PREFIX/sparky-install
    set PYTHON_PREFIX	= $PREFIX/python-2.1.1
    set TK_PREFIX	= $PREFIX/tcltk-8.3.4
    set CXX		= CC
    set CC		= cc
    set BOOL_FIX	= '-Dbool=int -Dtrue=1 -Dfalse=0'
    set SCOPE_FIX       = '-Dfor="if(0);else for"'
    set CXXFLAGS	= "+w $BOOL_FIX $SCOPE_FIX"
    set CFLAGS		= $CXXFLAGS
    set LDFLAGS		= 
    set CXX_RULE_PREFIX	= $SPARKY/c++/

# -----------------------------------------------------------------------------
# Linux, Redhat 5.2, 6.0, 6.1, 6.2, or 7.x using g++
#
else if ($HOST == tolkien.cgl.ucsf.edu || \
         $HOST == bilbo.cgl.ucsf.edu || $HOST == bilbo) then

#
# GNU make decides to check out source code from RCS instead of using the
# existing checked out file.  To avoid that behaviour I use a copy of the
# source code extracted into my home directory.  There should be a way to
# tell make not to use the RCS check out rule but I have not figured out
# how.
#
    set SPARKY		= /home/goddard/sparky
    set SPARKY_OBJ	= $SPARKY/obj
    set SPARKY_INSTALL	= $SPARKY/install
    set PYTHON_PREFIX	= /home/goddard/python-2.1.1
    set TK_PREFIX	= /home/goddard/tcltk-8.3.4
#
# Need _POSIX_SOURCE to get fileno() and fdopen()
# Need _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED to get readlink()
#
    set STANDARDS       = "-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED"
    set CXXFLAGS        = "-Wall -O -ansi -pedantic -Wno-long-long $STANDARDS"
    set LDFLAGS		= -L/usr/X11R6/lib
    set EXTRALIBS	= -ldl
# For avoiding linking against gcc libstdc++ and libgcc shared libraries.
#    set LDFLAGS	= "-L/usr/X11R6/lib -nodefaultlibs -static-libgcc"
#    set EXTRALIBS	= "/usr/local/lib/libstdc++.a -lgcc -lgcc_eh -ldl -lc"

# -----------------------------------------------------------------------------
# Linux, Redhat 8.0 using gcc 3.2
#
else if ($HOST == feyerabend.cgl.ucsf.edu) then

    set PLATFORM	= /usr/local/src/sparky/platforms/linux2.4
    set SPARKY_OBJ	= $PLATFORM/sparky-obj
    set SPARKY_INSTALL	= $PLATFORM/sparky-install
    set PYTHON_PREFIX	= $PLATFORM/python-2.3.3
    set TK_PREFIX	= $PLATFORM/tcltk-8.4.5
#
# Need _POSIX_SOURCE to get fileno() and fdopen()
# Need _XOPEN_SOURCE and _XOPEN_SOURCE_EXTENDED to get readlink()
# Need _FILE_OFFSET_BITS=64 to get 64 bit off_t file offsets for fseeko().
#
    set STANDARDS       = "-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED -D_FILE_OFFSET_BITS=64"
    set CXXFLAGS        = "-Wall -O -ansi -pedantic -Wno-long-long $STANDARDS"
    set LDFLAGS		= -L/usr/X11R6/lib
    set EXTRALIBS	= -ldl
# For avoiding linking against gcc libstdc++ and libgcc shared libraries.
#    set LDFLAGS	= "-L/usr/X11R6/lib -nodefaultlibs -static-libgcc"
#    set EXTRALIBS	= "/usr/lib/gcc-lib/i386-redhat-linux/3.2/libstdc++.a -lgcc -lgcc_eh -ldl -lc"

# -----------------------------------------------------------------------------
# Mac OS 10.1 with XFree86.
#
else if ($HOST == essex.cgl.ucsf.edu) then

    set SPARKY          = /Users/goddard/sparky
    set SPARKY_OBJ      = $SPARKY/obj
    set SPARKY_INSTALL  = $SPARKY/install
    set PYTHON_PREFIX   = /Users/goddard/python-2.1.1
    set TK_PREFIX       = /Users/goddard/tcltk-8.3.4
    set CXX             = c++
    set CC              = cc
    set LDSHARED        = "-bundle -flat_namespace -undefined warning"
#
# Link directly against my Tcl/Tk so compiler doesn't find /usr/lib versions.
# Also give path to XFree86.
#
    set TCLTK_SHLIB_SUFFIX      = .dylib
    set TCLLIB          = $TK_PREFIX/lib/libtcl$TCLTK_VERSION$TCLTK_SHLIB_SUFFIX
    set TKLIB           = $TK_PREFIX/lib/libtk$TCLTK_VERSION$TCLTK_SHLIB_SUFFIX
    set TKLIBS          = "$TCLLIB $TKLIB -L/usr/X11R6/lib -lX11"
    set TKFLAGS         = "-I$TK_PREFIX/include -I/usr/X11R6/include"
    set EXTRA_DEFINES   = ("TKLIBS=$TKLIBS" \
                           "TKFLAGS=$TKFLAGS" \
                           "TCLTK_SHLIB_SUFFIX=$TCLTK_SHLIB_SUFFIX")

# -----------------------------------------------------------------------------
# Mac OS 10.3 using gcc 3.3
#
else if ($HOST == mach.cgl.ucsf.edu) then
    set PLATFORM	= /usr/local/src/sparky/platforms/mac10.3
    set SPARKY_OBJ	= $PLATFORM/sparky-obj
    set SPARKY_INSTALL	= $PLATFORM/sparky-install
    set SPARKY_INSTALL_MAC = $PLATFORM/Sparky.app
    set PYTHON_PREFIX	= $PLATFORM/python-2.3.3
    set TK_PREFIX	= $PLATFORM/tcltk-8.4.5
    set CXX             = c++
    set CC              = cc
# fseeko() is declared incorrectly with fpos_t argument instead of off_t
# in Mac OS 10.2.3 stdio.h header file.
    set CXXFLAGS	= "-Wall -O -ansi -pedantic -Wno-long-long -DSPARKY_NO_FSEEKO"

#    set LDSHARED        = "-bundle -flat_namespace -undefined warning"
    set LDSHARED        = "-bundle -bundle_loader $PYTHON_PREFIX/bin/python"
#
# Link directly against my Tcl/Tk so compiler doesn't find /usr/lib versions.
# Also give path to XFree86.
#
    set TCLTK_SHLIB_SUFFIX      = .dylib
    set TCLLIB          = $TK_PREFIX/lib/libtcl$TCLTK_VERSION$TCLTK_SHLIB_SUFFIX
    set TKLIB           = $TK_PREFIX/lib/libtk$TCLTK_VERSION$TCLTK_SHLIB_SUFFIX
    set TKLIBS          = "$TCLLIB $TKLIB -L/usr/X11R6/lib -lX11"
    set TKFLAGS         = "-I$TK_PREFIX/include -I/usr/X11R6/include"
    set EXTRA_DEFINES   = ("TKLIBS=$TKLIBS" \
                           "TKFLAGS=$TKFLAGS" \
                           "TCLTK_SHLIB_SUFFIX=$TCLTK_SHLIB_SUFFIX")

# -----------------------------------------------------------------------------
# Mac OS 10.2 using gcc 3.2
#
else if ($HOST == twain.compbio.ucsf.edu) then
    set SPARKY		= /Users/goddard/sparky/sparky
    set PLATFORM	= /Users/goddard/sparky
    set SPARKY_OBJ	= $PLATFORM/sparky-obj
    set SPARKY_INSTALL	= $PLATFORM/sparky-install
    set SPARKY_INSTALL_MAC = $PLATFORM/Sparky.app
    set PYTHON_PREFIX	= $PLATFORM/python-2.3.3
    set TK_PREFIX	= $PLATFORM/tcltk-8.4.5
    set CXX             = c++
    set CC              = cc
# fseeko() is declared incorrectly with fpos_t argument instead of off_t
# in Mac OS 10.2.3 stdio.h header file.
    set CXXFLAGS	= "-Wall -O -ansi -pedantic -Wno-long-long -DSPARKY_NO_FSEEKO"

#    set LDSHARED        = "-bundle -flat_namespace -undefined warning"
    set LDSHARED        = "-bundle -bundle_loader $PYTHON_PREFIX/bin/python"
#
# Link directly against my Tcl/Tk so compiler doesn't find /usr/lib versions.
# Also give path to XFree86.
#
    set TCLTK_SHLIB_SUFFIX      = .dylib
    set TCLLIB          = $TK_PREFIX/lib/libtcl$TCLTK_VERSION$TCLTK_SHLIB_SUFFIX
    set TKLIB           = $TK_PREFIX/lib/libtk$TCLTK_VERSION$TCLTK_SHLIB_SUFFIX
    set TKLIBS          = "$TCLLIB $TKLIB -L/usr/X11R6/lib -lX11"
    set TKFLAGS         = "-I$TK_PREFIX/include -I/usr/X11R6/include"
    set EXTRA_DEFINES   = ("TKLIBS=$TKLIBS" \
                           "TKFLAGS=$TKFLAGS" \
                           "TCLTK_SHLIB_SUFFIX=$TCLTK_SHLIB_SUFFIX")

# -----------------------------------------------------------------------------
# Sun Sparc, Solaris 8 (aka SunOS 5.8) using gcc 3.3
#
# It is difficult to make Tcl/Tk and Python compile against static versions
# of libgcc and libstdc++.  Also libstdc++.a on Solaris seems to be built
# with non-relocatable symbols.  So I need to compile by own libstdc++ to
# link it statically in the Sparky shared library.
#
# To avoid the complications I just include (by hand) the needed gcc and g++
# shared libraries in the Sparky distribution.
#
else if ($HOST == picasso.nmr.ucsf.edu || \
         $HOST == picasso || \
	 $HOST == ge500a.nmr.ucsf.edu) then

    set PREFIX		= /data/pablo/goddard
    set SPARKY		= $PREFIX/sparky
    set SPARKY_OBJ	= $SPARKY/obj
    set SPARKY_INSTALL	= $SPARKY/install
    set PYTHON_PREFIX	= $PREFIX/python-2.3.3
    set TK_PREFIX	= $PREFIX/tcltk-8.4.5
#
# The -fPIC option makes symbols relocatable. Necessary for shared objects
# The openwin directory contains X11 headers.
#
    set CXXFLAGS	= "-O -fPIC -ansi -I/usr/openwin/include"
    set CFLAGS		= "-O -fPIC -I/usr/openwin/include"
    set LDFLAGS		= "-L/usr/openwin/lib"
    set LDSHARED	= "-shared -fPIC"
#
# g++ on Solaris has libstdc++.a with non-relocatable symbols
# that cannot be linked into the Sparky shared library.
# So I compiled by own libstdc++.a with -fPIC.
#
# The -nodefaultlibs option is to avoid linking against the libstdc++.so.
# It then requires explicitly putting -lgcc and -lc in the EXTRALIBS variable.
#    set EXTRALIBS	= $PREFIX/libstdc++/libstdc++-2.8.1.1-relocatable.a
#    set EXTRALIBS	= "$PREFIX/libstdc++/libstdc++-relocatable.a.2.10.0 -lgcc -lc"
    set SPARKY_SCRIPT	= sparky-solaris
    set MAKE		= /usr/local/bin/make

# -----------------------------------------------------------------------------
# Sun Sparc, Solaris 2.5, using old Sun compilers
#
else if ($HOST == duke.ucsf.edu) then

    set PREFIX		= /home/hurricane/goddard
    set SPARKY          = $PREFIX/sparky
    set SPARKY_OBJ	= $SPARKY/obj
    set SPARKY_INSTALL	= $SPARKY/install
    set PYTHON_PREFIX	= $PREFIX/python-2.1.1
    set TK_PREFIX	= $PREFIX/tcltk-8.3.4
    set CXX		= CC
    set BOOL_FIX	= '-Dbool=int -Dtrue=1 -Dfalse=0'
    set SCOPE_FIX	= '-Dfor="if(0);else for"'
    set CXXFLAGS	= "-w -KPIC -I/usr/openwin/include $BOOL_FIX $SCOPE_FIX"
    set CC              = cc
    set CFLAGS		= $CXXFLAGS
    set LDFLAGS		= -L/usr/openwin/lib
    set LDSHARED	= -G
    set EXTRALIBS	= -lC

# -----------------------------------------------------------------------------
# DEC Alpha, Digital Unix 5.0, using DEC compilers
#
else if ($HOST == plato.cgl.ucsf.edu || \
         $HOST == adenine.cgl.ucsf.edu) then

    set PLATFORM	= /usr/local/src/sparky/platforms/dec5
    set SPARKY_OBJ	= $PLATFORM/sparky-obj-cxx
    set SPARKY_INSTALL	= $PLATFORM/sparky-install-cxx
    set PYTHON_PREFIX	= $PLATFORM/python-2.3.3
    set TK_PREFIX	= $PLATFORM/tcltk-8.4.5
    set CXX		= cxx
    set NOWARN		= "-msg_disable nostdlonglong,boolexprconst"
# cxx 6.5-014 compiler crashes while compiling uiview.cc with no -O.
# Need -nopure_cname to get posix routines needed in system-unix.cc.
# On Tru64 fseeko() is available in C but not C++.
    set CXXFLAGS	= "-std strict_ansi -nopure_cname -O -w0 $NOWARN -DSPARKY_NO_FSEEKO"
    set CC		= cc

# -----------------------------------------------------------------------------
# DEC Alpha, Digital Unix 5.0, using g++ (2.95.2)
#
else if ($HOST == bonzo.cgl.ucsf.edu || \
         $HOST == heidegger.cgl.ucsf.edu) then

    set PLATFORM	= /usr/local/src/sparky/platforms/dec5
    set SPARKY_OBJ	= $PLATFORM/sparky-obj-gcc
    set SPARKY_INSTALL	= $PLATFORM/sparky-install-gcc
    set PYTHON_PREFIX	= $PLATFORM/python-2.1.1
    set TK_PREFIX	= $PLATFORM/tcltk-8.3.4
    set CXX		= /usr/local/src/sparky/platforms/dec4/gcc-2.95.2/bin/g++
    set CC		= /usr/local/src/sparky/platforms/dec4/gcc-2.95.2/bin/gcc
    set CXX_RULE_PREFIX	= $SPARKY/c++/

# -----------------------------------------------------------------------------
# DEC Alpha, Digital Unix 4.0d, using g++
#
else if ($HOST == orwell.cgl.ucsf.edu) then

    set PLATFORM	= /usr/local/src/sparky/platforms/dec4
    set SPARKY_OBJ	= $PLATFORM/sparky-obj
    set SPARKY_INSTALL	= $PLATFORM/sparky-install
    set PYTHON_PREFIX	= $PLATFORM/python-2.1.1
    set TK_PREFIX	= $PLATFORM/tcltk-8.3.4
#
# The following makes the linker not use /usr/local/lib which contains an
# old libstdc++.2.7.1 on orwell.
#
    set LDFLAGS		= -Wl,-L,-L/usr/shlib,-L/usr/ccs/lib,-L/usr/lib/cmplrs/cc,-L/usr/lib
    set CXX_RULE_PREFIX	= $SPARKY/c++/

else

    echo You need to set paths and compiler options for host $HOST
    echo in the make-sparky script.
    exit 1

endif

# -----------------------------------------------------------------------------
# Now invoke make.
#

# turn on command echo
set echo		= 1

$MAKE -f $SPARKY/Makefile \
	"SPARKY=$SPARKY" \
	"SPARKY_OBJ=$SPARKY_OBJ" \
	"SPARKY_INSTALL=$SPARKY_INSTALL" \
	"SPARKY_INSTALL_MAC=$SPARKY_INSTALL_MAC" \
	"SPARKY_SCRIPT=$SPARKY_SCRIPT" \
	"PYTHON_PREFIX=$PYTHON_PREFIX" \
	"PYTHON_DIR=$PYTHON_PREFIX" \
        "PYTHON_VERSION=$PYTHON_VERSION" \
        "TK_PREFIX=$TK_PREFIX" \
        "TCLTK_VERSION=$TCLTK_VERSION" \
	"CXX=$CXX" \
	"CXXFLAGS=$CXXFLAGS" \
	"CC=$CC" \
	"CFLAGS=$CFLAGS" \
	"LDFLAGS=$LDFLAGS" \
        "LDSHARED=$LDSHARED" \
	"EXTRALIBS=$EXTRALIBS" \
	"CXX_RULE_PREFIX=$CXX_RULE_PREFIX" \
	"INSTALL=$INSTALL" \
	"INSTALLDIR=$INSTALLDIR" \
        $EXTRA_DEFINES:q \
	$*
