#
# Makefile for /u/drspeech/src/tcltk/tclsh-readline
# 
# Build my own versions of tclsh and wish
# including the gnu readline interface
#
# 1996oct08 dpwe@icsi.berkeley.edu
# $Header: /u/drspeech/src/tcltk/tclsh-readline-0.2/RCS/Makefile,v 1.3 1997/01/17 23:40:37 dpwe Exp $

# Version number for this release of the package
RLI_VERSION = 0.2
# Rest of directory name
RLI_DIRNAME = tclsh-readline

# PREFIX points to the directory containing tcl?.?/ and tk?.?/
#PREFIX  = /ti/local/$(MACHTYPE)/src/tcl
#PREFIX = /usr/local/src/lib
#PREFIX  = /mas/potluck/iris
PREFIX  = ..

# Prefix for ${MACHTYPE}/lib shared library dir and ${MACHTYPE}/bin exec dir
INST_BASE=/u/drspeech

# Location of shared libraries (tcl, tk etc)
SHLIBDIR	= 	${INST_BASE}/${MACHTYPE}/lib

# Location into which executables are installed
EXECDIR		=	${INST_BASE}/${MACHTYPE}/bin

# Tcl source directory
TCL_VERSION     = 	7.6
TCL_VERS2	=	76
TCL_DIR		= 	${PREFIX}/tcl${TCL_VERSION}
TCL_INCLDIR	= 	${TCL_DIR}/generic
# solaris/generic version
TCL_LIB 	= 	${SHLIBDIR}/libtcl${TCL_VERSION}${SHLIB_SUFFIX}
# sunos41 version
#TCL_LIB 	= 	${SHLIBDIR}/libtcl${TCL_VERS2}${SHLIB_SUFFIX}

TK_VERSION	=	4.2
TK_VERS2	=	42
TK_DIR		= 	${PREFIX}/tk${TK_VERSION}
TK_INCLDIR	= 	${TK_DIR}/generic
# solaris/generic version
TK_LIB		= 	${SHLIBDIR}/libtk${TK_VERSION}${SHLIB_SUFFIX}
# sunos41 version
#TK_LIB  	= 	${SHLIBDIR}/libtk${TK_VERS2}${SHLIB_SUFFIX}

# Store object files according to CXX and MACHTYPE
OD = $(MACHTYPE)-$(CXX)

# dpwe mods - do we link in the readline command-line history stuff?
# (a) No, produce regular tclsh and libtcl.a that do not need libreadline.a
#READLINEINC = 
#READLINELIB = 
#READLINEOBJ = 
#TCLMAINFLAG = -DUSESTDIN
# (b) Yes, produce tclsh and libtcl.a that need to be linked with 
#     libreadline.a and libtermcap.a, but that have command-line editing
#GNUROOT = /usr/gnu
GNUROOT = /usr/local
# where to find <readline/readline.h>
READLINEINC = -I$(GNUROOT)/include
# where to find libreadline.a etc.
READLINELIB = -L$(GNUROOT)/lib -lreadline -ltermcap -liberty
# object file that includes links to readline
READLINEOBJ = $(OD)/forker.o
# Don't invoke the flag to avoid the readline code
TCLMAINFLAG = 

# RANLIB is not needed in SGI machines, but is on other platforms.
# Uncomment next line on Ultrix &c
RANLIB = -ranlib
# This is the alternative (for SGI) i.e. a no-op
#RANLIB = /bin/true
# Some versions of make, like SGI's, use the following variable to
# determine which shell to use for executing commands:
SHELL =		/bin/sh

## SGI IRIX cc/CC
#SHLIB_CFLAGS =
#SHLIB_CXXFLAGS =
#SHLIB_LD = $(CXX) -shared -rdata_shared
#SHLIB_VERSION = 
#SHLIB_LOADPATH_DEF =
#LIBS_SHLD = $(LIBS)
#SHLD_RANLIB = $(RANLIB)

## solaris cc/CC
SHLIB_CFLAGS = -K PIC
SHLIB_CXXFLAGS = -pic
SHLIB_LD = $(CXX) -G -z text
SHLIB_VERSION = 
SHLIB_LOADPATH_DEF = -R${SHLIBDIR}
# Solaris wants to see all the libs when making the shared link
LIBS_SHLD = $(LIBS)
# Use regular ranlib on shared objects under solaris
SHLD_RANLIB = $(RANLIB)

## sun4 gcc/G++
#SHLIB_CFLAGS = -fPIC
#SHLIB_CXXFLAGS = -fPIC
## sun4
#SHLIB_LD = ld
### solaris gcc
##SHLIB_LD = $(CXX) -G -z text
#SHLIB_VERSION = .1.0
##SHLIB_LOADPATH_DEF = -R${SHLIBDIR}
## sunos41 doesn't want to see other libs when linking the shlib version
#LIBS_SHLD = -L/usr/local/lib/gcc/$(MACHTYPE)/latest -lstdc++ -lgcc -lg++ $(READLINELIB)
# don't need to ranlib shared objects on sunos41
#SHLD_RANLIB = :

## common
SHLIB_SUFFIX = .so${SHLIB_VERSION}

## solaris / IRIX
DFLAGS =
## sun4 
#DFLAGS = -DSUNOS41
# -DDEBUG

# general C/C++ flags
OFLAGS = -g
CFLAGS = ${OFLAGS} ${DFLAGS} ${MDBGFLAGS} $(SHLIB_CFLAGS) 
CXXFLAGS = ${OFLAGS} ${DFLAGS} ${MDBGFLAGS} ${SHLIB_CXXFLAGS}

TCLINCS = -I${TCL_INCLDIR} -I${TK_INCLDIR}

TCLSH_OBJS  = $(OD)/tclAppInit.o $(OD)/tclMain.o
WISH_OBJS   = $(OD)/tkAppInit.o $(OD)/tkMain.o $(READLINEOBJ)

# Sun
LIBS        = -ldl -lnsl ${MDBGLIB} ${READLINELIB} -lm -lc
# SGI
#LIBS        = -ldl ${MDBGLIB} ${READLINELIB} -lm -lc
# wish needs libX11 - in odd places on our system
#XLIBS       =    -L/usr/openwin/include/X11 -lX11
XLIBS	    =	-L/usr/openwin/lib -lX11

# [incr tcl] additions
ITCL_VERSION   = 2.2
ITCL_BASE   = ../itcl$(ITCL_VERSION)
ITCL_ITCL_BIN = $(ITCL_BASE)/itcl/unix
ITCL_TCL_BIN  = $(ITCL_BASE)/tcl$(TCL_VERSION)/unix
ITCL_ITK_BIN = $(ITCL_BASE)/itk/unix
ITCL_TK_BIN  = $(ITCL_BASE)/tk$(TK_VERSION)/unix
ITCL_RUNTIME = -R/u/drspeech/sun4-sunos5/lib/itcl

all: tclsh wish itclsh itkwish

tclsh: ${TCLSH_OBJS} ${TCL_LIB}
	${CXX} $(CXXFLAGS) ${TCLSH_OBJS} ${TCL_LIB} \
		$(LIBS_SHLD)	${SHLIB_LOADPATH_DEF} -o tclsh

wish: $(WISH_OBJS) $(TK_LIB)
	$(CXX)  $(WISH_OBJS) ${TCL_LIB} ${TK_LIB} ${XLIBS} ${LIBS} \
		${SHLIBD_LOADPATH_DEF} -o wish

itclsh: $(ITCL_ITCL_BIN)/libitcl$(ITCL_VERSION).so
	$(CXX) $(CXXFLAGS) $(ITCL_ITCL_BIN)/tclAppInit.o $(OD)/tclMain.o \
		-L$(ITCL_ITCL_BIN) -litcl$(ITCL_VERSION) \
		-L$(ITCL_TCL_BIN) -ltcl$(TCL_VERSION)i \
		$(LIBS_SHLD) $(SHLID_LOADPATH_DEF) $(ITCL_RUNTIME) \
		-o itclsh

itkwish: $(ITCL_ITK_BIN)/libitk$(ITCL_VERSION).so
	$(CXX) $(CXXFLAGS) $(ITCL_ITK_BIN)/tkAppInit.o $(OD)/tkMain.o \
		$(READLINEOBJ) \
		-L$(ITCL_ITK_BIN) -litk$(ITCL_VERSION) \
		-L$(ITCL_TK_BIN) -ltk$(TK_VERSION)i \
		$(XLIBS) \
		-L$(ITCL_ITCL_BIN) -litcl$(ITCL_VERSION) \
		-L$(ITCL_TCL_BIN) -ltcl$(TCL_VERSION)i \
		$(LIBS_SHLD) $(SHLID_LOADPATH_DEF) $(ITCL_RUNTIME) \
		-o itkwish

clean:
	rm -f $(OD)/*.a $(OD)/*.o $(OD)/*${SHLIB_SUFFIX} core errs *~ \#* \
		TAGS *.E a.out errors config.info \
		tclsh wish itclsh itkwish

# Compile with the C++ compiler to increase likelihood that C++ shared 
# libraries will load successfully.

$(OD)/tclMain.o: tclMain.C
	$(CXX) -c $(CXXFLAGS) $(TCLINCS) $(TCLMAINFLAG) $(READLINEINC) \
		tclMain.C -o $@

#$(OD)/tclMain.o: tclMain.c
#	$(CC) -c $(CFLAGS) $(TCLINCS) $(TCLMAINFLAG) $(READLINEINC) \
#		tclMain.c -o $@

$(OD)/tkMain.o: tkMain.C
	$(CXX) -c $(CXXFLAGS) $(TCLINCS) $(TCLMAINFLAG) $(READLINEINC) \
		tkMain.C -o $@

#$(OD)/tkMain.o: tkMain.c
#	$(CC) -c $(CFLAGS) $(TCLINCS) $(TCLMAINFLAG) $(READLINEINC) \
#		tkMain.c -o $@

$(OD)/tclAppInit.o: tclAppInit.C
	$(CXX) $(CXXFLAGS) $(TCLINCS) -c tclAppInit.C -o $@

$(OD)/tkAppInit.o: tkAppInit.C
	$(CXX) $(CXXFLAGS) $(TCLINCS) -c tkAppInit.C -o $@

$(OD)/forker.o: forker.c
	$(CC) -c $(CFLAGS) $(READLINEINC) forker.c -o $@

install: install-tcl install-itcl

install-tcl: tclsh wish
	install tclsh ${EXECDIR}/tclsh${TCL_VERSION}-readline
	install wish ${EXECDIR}/wish${TK_VERSION}-readline
	(cd ${EXECDIR}; rm -f wish tclsh; ln -s wish${TK_VERSION}-readline wish; ln -s tclsh${TCL_VERSION}-readline tclsh)

install-itcl: itclsh itkwish
	install itclsh ${EXECDIR}/itclsh${ITCL_VERSION}-readline
	install itkwish ${EXECDIR}/itkwish${ITCL_VERSION}-readline
	(cd ${EXECDIR}; rm -f itclsh itkwish; ln -s itclsh${ITCL_VERSION}-readline itclsh; ln -s itkwish${ITCL_VERSION}-readline itkwish)

# Package up a release
distrib: clean
	echo "(cd ..; tar cf - ${RLI_DIRNAME}-${RLI_VERSION}/{README,Makefile,*.[cC]*} | gzip -c >! ${RLI_DIRNAME}-${RLI_VERSION}.tgz; mv ${RLI_DIRNAME}-${RLI_VERSION}.tgz ${RLI_DIRNAME}-${RLI_VERSION})" | tcsh

.SUFFIXES:	.cc .C .c .o

.c.o:
	${CC} $(CFLAGS) -c $< -o $@

.cc.o:
	${CXX} $(CXXFLAGS) -c $< -o $@

.C.o:
	${CXX} $(CXXFLAGS) -c $< -o $@

