#############################################################################
#       $Id: GNUmakefile,v 1.11 1996/07/24 21:07:25 rich Exp $
# $Revision: 1.11 $
#     $Date: 1996/07/24 21:07:25 $
#   $Author: rich $
#    $State: Exp $
#   $Locker:  $
#
# PROJECT:	TCA
#
# FILE:		GNUmakefile
#		Based on Erebus prototypical Makefile
#		Makefile.proto,v 1.1 1992/06/16 22:50:21 jwest Exp 
#
# DESCRIPTION:
# Makes tca lisp code.
#
# EXPORTS:
#	The following targets are available as part of Makefile.std:
#		all bins libs privs objs
#		clean install
#		lint depend
#
# HISTORY:
#
# $Log: GNUmakefile,v $
# Revision 1.11  1996/07/24  21:07:25  rich
# Better compilation of clisp version.
# NEW allegro features need to be added to the clisp version.
#
# Revision 1.10  1996/05/07  16:54:12  rich
# dded macro files for clisp.
#
# Revision 1.9  1996/05/07  16:47:35  rich
# Changes for clisp.
#
# Revision 1.8  1996/02/11  21:34:39  rich
# Updated GNUmakefiles for faster complilation.  Use FAST_COMPILE=1 for
# routine recompiles.
#
# Revision 1.7  1995/10/07  19:05:34  rich
# Pre-alpha release of tca-8.2.
# Added PROJECT_DIR. Added tcaWillListen.
#
# Revision 1.6  1995/08/08  05:42:42  rich
# Fixed broadcast message interface in lisp.  Added test routines
# broadcast.lisp and listener.lisp.
#
# Revision 1.5  1995/07/10  16:15:58  rich
# Interm save.
#
# Revision 1.4  1995/07/08  18:24:04  rich
# Change all /afs/cs to /afs/cs.cmu.edu to get ride of conflict problems.
#
# Revision 1.3  1995/07/06  21:14:28  rich
# Solaris and Linux changes.
#
# Revision 1.2  1995/06/14  02:57:50  rich
# ???
#
# Revision 1.1  1995/04/17  16:33:15  rich
# Adding lisp as a subdirectory so it gets included in the tar file.
# Added GNUmakefile and README.
#
#
#############################################################################

#############################################################################
# Module Configuration Macros
#############################################################################

PROJECT_DIR	= /afs/cs/project/TCA/release/alpha

INSTALL_DIR	= ..
ifndef BASE_DIR
BASE_DIR	:= $(shell cd $(INSTALL_DIR);/bin/pwd)
endif
MODULE_DIR	= lisp
PROJECT		= tca
MODULE		= lisp
SUBDIRS		=
DEPEND_FILE	= GNUmakefile.$(THIS_MACHINE)
DEPEND_PREFIX	= $(LODIR)/

#############################################################################
# Where are the standard files?
#############################################################################

ifndef FAST_COMPILE
PWD 	:= $(shell /bin/pwd)
endif

ifndef STD_FILE
STD_FILE := $(shell ls $(BASE_DIR)/etc/GNUmakefile.std | grep -v "not found")
ifeq ($(STD_FILE),)
STD_FILE := $(PROJECT_DIR)/etc/GNUmakefile.std
endif
DEFS_FILE := $(shell ls $(BASE_DIR)/etc/GNUmakefile.defs | grep -v "not found")
ifeq ($(DEFS_FILE),)
DEFS_FILE := $(PROJECT_DIR)/etc/GNUmakefile.defs
endif
endif

##########
# Include standard definitions
##########

include $(DEFS_FILE)

##########
# Override defaults here.
##########

##########
# File Definition Macros.  Deletion of generated files assumed
#    to be o.k.  Source files will never be deleted.
##########

# Generated files - installed
PUBLIC_BINS		= 

PUBLIC_LIBS_LISP	= 
PUBLIC_LIBS_SunOS	= $(PUBLIC_LIBS_LISP)

PUBLIC_LIBS		= $(PUBLIC_LIBS_$(THIS_OS))
PUBLIC_LINTS		= 

MODULE_LIBS		= 
MODULE_LINTS		= 

# Source files - installed
PUBLIC_INCS		= 
PUBLIC_MANS		= 
PUBLIC_DOCS		= 

MODULE_INCS		= 
MODULE_DOCS		= 

INCS			= $(MODULE_INCS) $(PUBLIC_INCS)

# Generated files - not installed
PRIVS		= 

OBJS            = 

# Source files - not installed

SRCS            = a1.lisp a2.lisp a3.lisp a4.lisp b1.lisp b2.lisp b3.lisp \
		b4.lisp formatters.lisp load-tests.lisp map.lisp mt.lisp \
		primFmttrs.lisp sample.lisp tca-compile.lisp tca.lisp \
		tcaForeignCalls.lisp tcaTimings.lisp tcaTrace.lisp \
		timingReport.lisp broadcast.lisp listener.lisp \
		clispLoadMacros.lisp clispMacros.lisp

PRIVATE_INCS	= 

MISC		= GNUmakefile README README-clisp

##########
# Default Target
##########

all:: srcs libs bins privs

##########
# User Defined Targets
##########

# Define rules for all files listed in BINS, LIBS, and LINTS in this section.
# Example executable, object, library, and combined objects are shown below:
#
#  $(BDIR)/sample: file1.o file2.o $(LIBDEP)
#	$(LINK.c) -o $@ file1.o file2.o $(LIBRARIES)
#
#  $(ODIR)/alternateName.o: file1.c
#	$(COMPILE.c) -o $@ file1.c
#
#  $(LDIR)/libsample.a: file1.o file2.o
#	-$(RM) $@
#	$(AR) $(ARFLAGS) $@ file1.o file2.o
#	$(RANLIB) $@
#
#  $(ODIR)/combined.o: $(ODIR)/part1.o $(ODIR)/part2.o
#	$(LD) -r -o $@ $(ODIR)/part1.o $(ODIR)/part2.o; chmod a-x $@

CLISP_DIR = /afs/cs.cmu.edu/project/TCA/members/rich/clisp/clisp-1996-03-14
CLISP_INC_DIR = $(CLISP_DIR)/linkkit

#
# the lisp version of the code is special.
#

tcaForeignCalls.c: tcaForeignCalls.lisp
	$(CLISP_DIR)/base/lisp.run -M $(CLISP_DIR)/base/lispinit.mem -i clispMacros.lisp -c tcaForeignCalls.lisp

primFmttrs.c: primFmttrs.lisp
	$(CLISP_DIR)/base/lisp.run -M $(CLISP_DIR)/base/lispinit.mem -i clispMacros.lisp -c primFmttrs.lisp

formatters.c: formatters.lisp
	$(CLISP_DIR)/base/lisp.run -M $(CLISP_DIR)/base/lispinit.mem -i clispMacros.lisp -c formatters.lisp


$(LODIR)/%.o: %.c
	$(COMPILE.c) -I$(CLISP_INC_DIR) $(CFLAGS_LISP) -o $@ $<

$(LDIR)/libtca_clisp.a: $(LODIR)/tcaForeignCalls.o $(LODIR)/primFmttrs.o  $(LODIR)/formatters.o 
	$(RM) $@
	$(AR) $(ARFLAGS) $@ $(LODIR)/tcaForeignCalls.o $(LODIR)/primFmttrs.o $(LODIR)/formatters.o
	$(RANLIB) $@

$(PUBLIC_LIB_DIR)/libtca_clisp.a: $(LDIR)/libtca_clisp.a
	-mkdir $(PUBLIC_LIB_DIR)
	$(INSTALL) $(INS_LIB_FLAGS) $(LDIR)/$(@F) $(PUBLIC_LIB_DIR)
	$(RM) $(LDIR)/$(@F)
	chmod 444 $@

clisp : $(PUBLIC_LIB_DIR)/libtca_clisp.a
	-(cd $(CLISP_DIR);\
	  \rm -r -f tca;\
	  ./clisp-link create-module-set tca;\
	  cd tca; mv link.sh link.sh.bak;\
	  cat link.sh.bak | sed -e "s,make,#gmake," -e "s,file_list=\'\',file_list=\'libtca_clisp.a libtca_lisp.a\'," -e "s,mod_list=\'\',mod_list=\'tcaForeignCalls primFmttrs formatters\'," >link.sh; )
	(cd  $(CLISP_DIR);\
	 \rm -f tca/libtca* ;\
	 \cp $(BASE_DIR)/lib/libtca_*lisp.a tca;\
	 chmod u+w tca/* ; ranlib tca/libtca_*.a;\
	 \rm -r -f base+tca;\
	 \rm -r -f tca/*.o;\
	 ./clisp-link add-module-set tca base base+tca;\
	 )

##########
# Include standard target definitions and RCS rules
##########

include $(STD_FILE)
