#/*
# * Revision Control Information
# *
# * $Source: /vol/opua/opua2/sis/sis-1.2/common/src/sis/RCS/Makefile,v $
# * $Author: sis $
# * $Revision: 1.4 $
# * $Date: 1994/07/15 22:56:20 $
# *
# */
CAD	= /projects/octtools/octtools/$(MACHINE)
CADROOT	= ~octtools
SIS	= /projects/sis/sis-1.2/$(MACHINE)/src/sis
UNPACK	= unpack
COPY = .
SHELL = /bin/sh
MAKE = make
REQUIRE = oh oct utility st errtrap mm port
LINTCREATEFLAG = -C
LINTEXTRAS = -DOCT -DUSE_MM -DSIS


# directories which make up the SIS archive
#  ... array, atpg, avl, list, and st should really be in a generic package
DIRS	= array astg atpg avl bdd clock command decomp delay enc error espresso\
	  extract factor gcd genlib graph graphics io latch linsolv list \
	  main map \
	  maxflow mincov minimize network node ntbdd octio order \
	  phase pld power resub retime seqbdd sim simplify \
	  sparse speed st stg test timing util var_set

TARGET	= sis
TARGETG = sis-g

TARLIB	= libsis.a
TARLIBG = libsis-g.a

TARLINT	= llib-lsis.ln

LIBS	= $(CAD)/lib/liboh.a \
	  $(CAD)/lib/liboct.a \
	  $(CAD)/lib/libst.a \
	  $(CAD)/lib/libtr.a \
	  $(CAD)/lib/libmm.a \
	  $(CAD)/lib/liberrtrap.a \
	  $(CAD)/lib/libuprintf.a \
	  $(CAD)/lib/libutility.a \
	  $(CAD)/lib/libport.a \
	  $(CAD)/lib/libpq.a \
	  $(CAD)/lib/libda.a

LIBSG	= $(CAD)/lib/liboh-g.a \
	  $(CAD)/lib/liboct-g.a \
	  $(CAD)/lib/libst-g.a \
	  $(CAD)/lib/libtr-g.a \
	  $(CAD)/lib/libmm-g.a \
	  $(CAD)/lib/liberrtrap-g.a \
	  $(CAD)/lib/libuprintf-g.a \
	  $(CAD)/lib/libutility-g.a \
	  $(CAD)/lib/libport-g.a \
	  $(CAD)/lib/libpq-g.a \
	  $(CAD)/lib/libda-g.a

CC	= cc
CFLAGS	= -DOCT -DUSE_MM -DSIS
CFLAGSG = -g -DOCT -DUSE_MM -DSIS
LDFLAGS = -lm

#---------------------------------------------------------------------------

$(TARGET): $(TARLIB) $(LIBS) do_link
$(TARGETG): cleansome $(TARLIBG) $(LIBSG) do_linkg

$(TARLIB): do_touch do_make do_repack
#	cp main/sis.o lib/sis.o
$(TARLIBG): do_touch do_makeg do_repack
	mv $(TARLIB) $(TARLIBG)
$(TARLINT): do_lintlib do_repack_lint

purify:
	purify $(CC) $(CFLAGS) -o $(TARGETG) lib/$(TARLIBG) $(LDFLAGS)

do_link:
	$(CC) -o $(TARGET) $(TARLIB) $(LIBS) $(LDFLAGS) 
	mv $(TARLIB) lib/$(TARLIB)
do_linkg:
	$(CC) -g -o $(TARGETG) $(TARLIBG) $(LIBSG) $(LDFLAGS)
	mv $(TARLIBG) lib/$(TARLIBG)

do_touch:
	touch main/version.c
do_make:
	@for dir in $(DIRS); do				\
	    (cd $$dir; 					\
	     echo Making $$dir ...; 			\
	     ${MAKE} CC=$(CC) 'CFLAGS=$(CFLAGS) $$(INCLUDE)' SIS=$(SIS) CADROOT=$(CADROOT) CAD=$(CAD) lib$$dir.a)\
	done

do_makeg:
	@for dir in $(DIRS); do 			\
	    (cd $$dir; 					\
	     echo Making $$dir ...; 			\
	     ${MAKE} CC=$(CC) 'CFLAGS=$(CFLAGSG) $$(INCLUDE)' SIS=$(SIS) CADROOT=$(CADROOT) CAD=$(CAD) lib$$dir.a)\
	done

do_lintlib:
	@-for dir in $(DIRS); do				\
	    (cd $$dir; 					\
	       echo Linting $$dir ...; 			\
	       ${MAKE} SIS=$(SIS) LINTCREATEFLAG=${LINTCREATEFLAG} LINTEXTRAS=${LINTEXTRAS} CADROOT=$(CADROOT) CAD=$(CAD) llib-l$$dir.ln);	\
	done

do_repack:
	@rm -rf $(UNPACK) $(TARLIB)
	@mkdir $(UNPACK)
	@for i in $(DIRS); do 				\
	    echo Unpacking $$i ...;			\
	    (cd $$i; make SIS=$(SIS) CC=$(CC) unpack);	\
	done
	@(cd $(UNPACK);	ar cql ../$(TARLIB) *.o)
	@rm -rf $(UNPACK)
	ranlib $(TARLIB)

do_repack_lint:
	@rm -f _temp;
	@for dir in $(DIRS); do 			\
	    cat $$dir/llib-l$$dir.ln >>_temp;		\
	done
	@mv _temp $(TARLINT)

test: nothing
	(cd octio; ${MAKE} test)

help:
	cd ../../lib/help; ${MAKE} build

clean: cleansome
	rm -f lib/$(TARLIBG) $(TARGETG)

cleansome:
	rm -f lib/$(TARLIB) $(TARLINT) $(TARGET) lib/sis.o tags malloc.out gmon.out
	@rm -rf $(UNPACK)
	@for dir in $(DIRS); do				\
	    (cd $$dir; 					\
	     echo Cleaning $$dir ...; 			\
	     ${MAKE} -i CAD=$(CAD) SIS=$(SIS) strip_depend >/dev/null;	\
	     ${MAKE} -i CAD=$(CAD) SIS=$(SIS) clean >/dev/null)	\
	done

ci_rcs:
	ci $(CI_FLAGS) RCS/*
	for dir in $(DIRS); do				\
	    (cd $$dir;					\
	      ci $(CI_FLAGS) RCS/*)			\
	done
	(cd doc; ci $(CI_FLAGS) RCS/*)
	(cd include; ci $(CI_FLAGS) RCS/*)
	-(cd sis_lib; ci $(CI_FLAGS) RCS/*)
	(cd sis_lib/help; ci $(CI_FLAGS) RCS/*)
	(cd lsort; ci $(CI_FLAGS) RCS/*)

rm_rcs:
	rm -rf RCS
	for dir in $(DIRS); do				\
	    (cd $$dir;					\
	      rm -rf RCS)				\
	done
	rm -rf doc/RCS include/RCS sis_lib/RCS sis_lib/help/RCS
	rm -rf lsort/RCS

rlog_all:
	rm -rf rlog_temp
	rlog RCS/* >> rlog_temp
	for dir in $(DIRS) doc lsort sis_lib; do		\
	    (cd $$dir;						\
	     echo $$dir;					\
	     echo $$dir >> ../rlog_temp;			\
	     rlog RCS/* >> ../rlog_temp)			\
	done
	for dir in sis_lib/help; do				\
	    (cd $$dir;						\
	     echo $$dir;					\
	     echo $$dir >> ../../rlog_temp;			\
	     rlog RCS/* >> ../../rlog_temp)			\
	done

depend:
	@for dir in $(DIRS); do 			\
	    (cd $$dir; 					\
	     ${MAKE} -i CAD=$(CAD) depend)			\
	done

strip_depend strip-depend:
	@for dir in $(DIRS); do 			\
	    (cd $$dir; 					\
	     ${MAKE} -i CAD=$(CAD) strip_depend)		\
	done

lint: $(TARLINT) do_lint

do_lint:
	@for dir in $(DIRS); do				\
	    (cd $$dir; 					\
	     echo; echo "lint $$dir ...";		\
	     ${MAKE} SIS=$(SIS) 'CFLAGS=$(CFLAGSG) $$(INCLUDE)' LINTCREATEFLAG=${LINTCREATEFLAG} LINTEXTRAS=${LINTEXTRAS} CADROOT=${CADROOT} CAD=$(CAD) lint)		\
	done

wc:
	wc */*.[cly] | tail -1
	grep ';' */*.[cly] | wc | tail -1

tags: _force
	rm -f tags
	touch tags
	for dir in $(DIRS); do				\
	    cwd=`pwd`;					\
	    (cd $$dir; 					\
	     rm -f tags; 				\
	     ln -s $$cwd/tags tags)			\
	done
	for dir in $(DIRS); do				\
	    (cd $$dir; 					\
	     sleep 1;					\
	     echo $$dir;				\
	     ${MAKE} CAD=$(CAD) tags)			\
	done
	sort -o tags tags

compile:
	rm -f io/read_eqn.c io/eqnlex.c 
	rm -f genlib/readlib.c genlib/readliblex.c
	date; ${MAKE} $(TARGETG)
	date; ${MAKE} cleansome $(TARGET) 
	date; ${MAKE} $(TARLINT)
	date; ${MAKE} do_lint | grep -v '\.c:$$' | grep -v '^lint -I' >.lint.out 2>&1
	date; ${MAKE} tags
# hack -- adjust filenames for nfs access
#	sed 's!/users/awang!/net/beeblebrox/users/saldanha!g' tags >tags1
#	mv tags1 tags
#	${MAKE} depend
	${MAKE} help

require:
	@echo $(REQUIRE)

#-------------------------------------------------------------


# dummy targets
nothing:;

build header print uninstall debug debug-g debug-pg install.lint: nothing
	@echo no rule

_force:
