# Makefile
# Bob Gray
# 29 June 1995
#
# This Makefile compiles the transportable agent system.
#
# Copyright 1995, Robert S. Gray, Department of Computer Science, Dartmouth College

AGENT_VERSION 	= 1.1

  # TCP/IP port for the server
  # name of the AGENT interpreter (Tcl-based)
  # name of the AGENT server

PORT		= 8192
TCL_INTERP_NAME	= agent
TK_INTERP_NAME  = agent-tk
SERVER_NAME	= agentd

  # symbolic names for Tcl and Tk

TCL_LANGUAGE_NAME	= STATE-TCL
TK_LANGUAGE_NAME	= STATE-TK

  # install directories

PREFIX 		= /usr/contrib

BIN_PREFIX	= ${PREFIX}/bin
INC_PREFIX	= ${PREFIX}/include
LIB_PREFIX	= ${PREFIX}/lib

LIB_INSTALL	= ${LIB_PREFIX}/agent
TCL_INSTALL 	= ${LIB_INSTALL}/scripts
TK_INSTALL	= ${LIB_INSTALL}/tkscripts
EXAMPLE_INSTALL	= ${LIB_INSTALL}/examples
STARTUP_INSTALL	= ${LIB_INSTALL}/startup
EXEC_INSTALL    = ${BIN_PREFIX}
INCLUDE_INSTALL = ${INC_PREFIX}/agent

  # directory where the Tcl interpreter will look for the Tcl scripts
  
TCL_LIBRARY	= ${TCL_INSTALL}
TK_LIBRARY	= ${TK_INSTALL}

  # include handlers for extension state if desired; don't uncomment
  # unless you know what they are and you want them

#OPTIONS 	= -DTCL_STATE_HANDLERS

  # switches -- uncomment the appropriate set of five
  # CC     = your C++ compilter
  # TCL_CC = your C compiler 
 
  # SunOs 5.4 (Solaris 2.x)

#BUILTIN_LIBS 	= -lsocket -lnsl
#CC		= gcc
#TCL_CC		= ${CC}
#RANLIB		= ranlib 
#CFLAGS		= -DSOLARIS -DSERVER_TCP_PORT=${PORT} -DAGENT_TOOLS \
#		  -DSYSV -Wall -Wconversion ${OPTIONS}

  # AIX 3.2.5

#BUILTIN_LIBS	= -lbsd
#CC		= gcc
#TCL_CC		= ${CC}
#RANLIB		= ranlib
#CFLAGS		= -DSERVER_TCP_PORT=${PORT} -DAGENT_TOOLS \
#		  -DAIX -Wall -Wconversion ${OPTIONS}

  # DEC OSF/1 V3.2
 
#BUILTIN_LIBS	= 
#CC		= gcc
#TCL_CC		= ${CC}
#RANLIB		= ranlib
#CFLAGS		= -DSERVER_TCP_PORT=${PORT} -DAGENT_TOOLS \
#		  -DALPHA -Wall -Wconversion ${OPTIONS}

  # FreeBsd 2.1, ULTRIX V4.3

#BUILTIN_LIBS	= 
#CC		= gcc
#TCL_CC		= ${CC}
#RANLIB		= ranlib
#CFLAGS		= -DSERVER_TCP_PORT=${PORT} -DAGENT_TOOLS \
#		  -DGENERIC_BSD -Wall -Wconversion ${OPTIONS}

  # Linux 1.2.8

#BUILTIN_LIBS	= 
#CC		= gcc
#TCL_CC		= ${CC}
#RANLIB		= ranlib
#CFLAGS		= -DSERVER_TCP_PORT=${PORT} -DAGENT_TOOLS \
#	  	  -DLINUX -Wall -Wconversion ${OPTIONS}  

  # Irix V.4 (CC or gcc)

#BUILTIN_LIBS	= 
#CC		= CC
#TCL_CC		= cc
#RANLIB		= touch
#CFLAGS		= -DSERVER_TCP_PORT=${PORT} -DAGENT_TOOLS \
#		  -DSYSV -O ${OPTIONS}
#BUILTIN_LIBS	= 
#CC		= gcc
#TCL_CC		= ${CC}
#RANLIB		= ranlib
#CFLAGS		= -DSERVER_TCP_PORT=${PORT} -DAGENT_TOOLS \
#		  -DSYSV -Wall -Wconversion ${OPTIONS}

  # install programs

INSTALL		= ./install-sh -c
INSTALL_DATA_U	= ${INSTALL} -m 644
INSTALL_DATA_GU = ${INSTALL} -m 640
INSTALL_DATA_R  = ${INSTALL} -m 600
INSTALL_PROG_U  = ${INSTALL} -m 755
INSTALL_PROG_R  = ${INSTALL} -m 700
 
  # force the use of the Bourne shell on machines such as SGI's

SHELL		= /bin/sh

  # include directories

INCLUDE_DIR	= -I../tcl7.4_stack -I../utility -I../tcpip-tcl \
		  -I../error -I../agent-tcl -I../server -I../restrict \
		  -I../tk4.0

all: base tkbase

base: agent tcpip restriction server stack utilities

tkbase: tk_stack tk_agent

agent-tcl/Makefile: agent-tcl/Makefile.in
	echo "cd agent-tcl; \
	      CC=${CC}; \
	      export CC; \
	      ./configure" \
	| sh

agent: agent-tcl/Makefile tcpip restriction stack utilities force
	echo "cd agent-tcl; \
	      make all \"CC=${CC}\" \"RANLIB=${RANLIB}\" \
		       \"INTERP_NAME=${TCL_INTERP_NAME}\" \
		       \"LANGUAGE_NAME=${TCL_LANGUAGE_NAME}\" \
	               \"CFLAGS=${CFLAGS}\" \"INCLUDE_DIR=${INCLUDE_DIR}\" \
		       \"BUILTIN_LIBS=${BUILTIN_LIBS}\"" \
	| sh

agent-tk/Makefile: agent-tk/Makefile.in
	echo "cd agent-tk; \
	      CC=${CC}; \
	      export CC; \
	      ./configure" \
	| sh

tk_agent: agent-tk/Makefile tcpip restriction tk_stack utilities agent force
	echo "cd agent-tk; \
	      make all \"CC=${CC}\" \"RANLIB=${RANLIB}\" \
		       \"INTERP_NAME=${TK_INTERP_NAME}\" \
		       \"LANGUAGE_NAME=${TK_LANGUAGE_NAME}\" \
	               \"CFLAGS=${CFLAGS}\" \"INCLUDE_DIR=${INCLUDE_DIR}\" \
		       \"BUILTIN_LIBS=${BUILTIN_LIBS}\"" \
	| sh

tcpip: utilities force
	echo "cd tcpip-tcl; \
	      make all \"CC=${CC}\" \"RANLIB=${RANLIB}\" \
	               \"CFLAGS=${CFLAGS}\" \"INCLUDE_DIR=${INCLUDE_DIR}\" \
		       \"BUILTIN_LIBS=${BUILTIN_LIBS}\"" \
	| sh

restriction: stack utilities force
	echo "cd restrict; \
	      make all \"CC=${CC}\" \"RANLIB=${RANLIB}\" \
	               \"CFLAGS=${CFLAGS}\" \"INCLUDE_DIR=${INCLUDE_DIR}\" \
		       \"BUILTIN_LIBS=${BUILTIN_LIBS}\"" \
	| sh

utility/Makefile: utility/Makefile.in
	echo "cd utility; \
	      CC=${CC}; \
	      export CC; \
	      ./configure" \
	| sh

utilities: utility/Makefile force
	echo "cd utility; \
	      make all \"CC=${CC}\" \"RANLIB=${RANLIB}\" \
	               \"CFLAGS=${CFLAGS}\" \"INCLUDE_DIR=${INCLUDE_DIR}\" \
		       \"BUILTIN_LIBS=${BUILTIN_LIBS}\"" \
	| sh

server: tcpip utilities force
	echo "cd server; \
	      make all \"CC=${CC}\" \"RANLIB=${RANLIB}\" \
		       \"SERVER_NAME=${SERVER_NAME}\" \
	               \"CFLAGS=${CFLAGS}\" \"INCLUDE_DIR=${INCLUDE_DIR}\" \
		       \"BUILTIN_LIBS=${BUILTIN_LIBS}\"" \
	| sh

stack: tcl7.4_stack/Makefile force
	echo "cd tcl7.4_stack; \
	      make all \"TCL_LIBRARY=${TCL_LIBRARY}\" \"OPTIONFLAGS=${OPTIONS}\"" \
	| sh

tcl7.4_stack/Makefile: tcl7.4_stack/Makefile.in
	echo "cd tcl7.4_stack; \
	      CC=${TCL_CC}; \
	      export CC; \
	      ./configure" \
	| sh

tk_stack: tk4.0/Makefile stack force
	echo "cd tk4.0; \
	      make all \"TK_LIBRARY=${TK_LIBRARY}\"" \
	| sh

tk4.0/Makefile: tk4.0/Makefile.in
	echo "cd tk4.0; \
	      CC=${TCL_CC}; \
	      export CC; \
	      ./configure" \
	| sh

count:
	echo "count.tcl" | sh

clean:
	echo "cd utility; make -f Makefile.in clean" | sh
	echo "cd tcpip-tcl; make clean" | sh
	echo "cd agent-tcl; make -f Makefile.in clean" | sh
	echo "cd tcl7.4_stack; make -f Makefile.in clean" | sh
	echo "cd server; make clean" | sh
	echo "cd restrict; make clean" | sh
	echo "cd tk4.0; make -f Makefile.in clean" | sh
	echo "cd agent-tk; make -f Makefile.in clean" | sh

superclean:
	echo "cd utility; make -f Makefile.in superclean" | sh
	echo "cd tcpip-tcl; make superclean" | sh
	echo "cd agent-tcl; make -f Makefile.in superclean \"INTERP_NAME=${TCL_INTERP_NAME}\"" | sh
	echo "cd tcl7.4_stack; make -f Makefile.in superclean" | sh
	echo "cd server; make superclean \"SERVER_NAME=${SERVER_NAME}\"" | sh
	echo "cd restrict; make superclean" | sh
	echo "cd tk4.0; make -f Makefile.in superclean" | sh
	echo "cd agent-tk; make -f Makefile.in superclean \"INTERP_NAME=${TK_INTERP_NAME}\"" | sh

directories:
	echo "for i in ${PREFIX} ${BIN_PREFIX} ${INC_PREFIX} ${LIB_PREFIX} \
			${LIB_INSTALL} ${TCL_INSTALL} ${TK_INSTALL} \
			${EXEC_INSTALL} ${INCLUDE_INSTALL} \
			${EXAMPLE_INSTALL}; \
		do \
		  if [ ! -d \$$i ] ; then \
		    mkdir \$$i; \
		    chmod 755 \$$i; \
		    else true; \
		  fi; \
		done;" \
	| sh

interpinstall:
	${INSTALL_PROG_R} agent-tcl/${TCL_INTERP_NAME} ${EXEC_INSTALL}/agent
	${INSTALL_PROG_R} agent-tk/${TK_INTERP_NAME} ${EXEC_INSTALL}/agent-tk
	${INSTALL_DATA_U} scripts/agent/tclIndex ${TCL_INSTALL}/tclIndex
	echo "cd scripts/agent; for i in *.tcl; \
	  do \
	  ../../${INSTALL_PROG_U} \$$i ${TCL_INSTALL}/\$$i; \
	  done;" \
	| sh
	${INSTALL_DATA_U} scripts/tk/tclIndex ${TK_INSTALL}/tclIndex
	echo "cd scripts/tk; for i in *.tcl; \
	  do \
	  ../../${INSTALL_PROG_U} \$$i ${TK_INSTALL}/\$$i; \
	  done;" \
	| sh

exampleinstall:
	echo "cd examples; for i in *.tcl; \
	  do \
	  ../${INSTALL_PROG_U} \$$i ${EXAMPLE_INSTALL}/\$$i; \
	  done;" \
	| sh

install: directories interpinstall exampleinstall
	${INSTALL_PROG_R} server/${SERVER_NAME} ${EXEC_INSTALL}/agentd
	${INSTALL_PROG_U} examples/machine.tcl ${EXEC_INSTALL}/machine.tcl
	${INSTALL_DATA_U} tcl7.4_stack/libtcl.a ${LIB_INSTALL}/libtcl.a
	${INSTALL_DATA_U} tcpip-tcl/libtcpip.a ${LIB_INSTALL}/libtcpip.a
	${INSTALL_DATA_U} agent-tcl/libagent.a ${LIB_INSTALL}/libagent.a
	${INSTALL_DATA_U} utility/libutility.a ${LIB_INSTALL}/libutility.a
	${INSTALL_DATA_U} restrict/librestrict.a ${LIB_INSTALL}/librestrict.a
	${INSTALL_DATA_U} tk4.0/libtk.a ${LIB_INSTALL}/libtk.a
	${INSTALL_DATA_U} agent-tk/libagtk.a ${LIB_INSTALL}/libagtk.a
	${INSTALL_DATA_U} tcl7.4_stack/tcl.h ${INCLUDE_INSTALL}/tcl.h
	${INSTALL_DATA_U} agent-tcl/tclAgent.h ${INCLUDE_INSTALL}/tclAgent.h
	${INSTALL_DATA_U} tcpip-tcl/tclTcpip.h ${INCLUDE_INSTALL}/tclTcpip.h
	${INSTALL_DATA_U} utility/agentId.h ${INCLUDE_INSTALL}/agentId.h
	${INSTALL_DATA_U} restrict/tclRestrict.h ${INCLUDE_INSTALL}/tclRestrict.h
	${INSTALL_DATA_U} utility/my_sizes.h ${INCLUDE_INSTALL}/my_sizes.h
	${INSTALL_DATA_U} tk4.0/tk.h ${INCLUDE_INSTALL}/tk.h
	${INSTALL_DATA_U} agent-tk/tkAgent.h ${INCLUDE_INSTALL}/tkAgent.h

depend: tcl7.4_stack/Makefile tk4.0/Makefile
	echo "cd utility; \
	      make depend \"CFLAGS=${CFLAGS}\" \
			  \"INCLUDE_DIR=${INCLUDE_DIR}\"" \
	| sh
	echo "cd tcl7.4_stack; \
	      make depend" \
	| sh
	echo "cd tcpip-tcl; \
	      make depend \"CFLAGS=${CFLAGS}\" \
			  \"INCLUDE_DIR=${INCLUDE_DIR}\"" \
	| sh
	echo "cd agent-tcl; \
	      make depend \"CFLAGS=${CFLAGS}\" \
			  \"INCLUDE_DIR=${INCLUDE_DIR}\"" \
	| sh
	echo "cd server; \
	      make depend \"CFLAGS=${CFLAGS}\" \
			  \"INCLUDE_DIR=${INCLUDE_DIR}\"" \
	| sh
	echo "cd restrict; \
	      make depend \"CFLAGS=${CFLAGS}\" \
			  \"INCLUDE_DIR=${INCLUDE_DIR}\"" \
	| sh
	echo "cd tk4.0; \
	      make depend \"CFLAGS=${CFLAGS}\" \
			  \"INCLUDE_DIR=${INCLUDE_DIR}\"" \
	| sh
	echo "cd agent-tk; \
	      make depend \"CFLAGS=${CFLAGS}\" \
			  \"INCLUDE_DIR=${INCLUDE_DIR}\"" \
	| sh

force:
