LEX= flex -v

VERSION=3
VARIETY=3.4 # this corresponds to the name chosen for some combination of os/compiler/debug flags
OPENWINHOME=/usr/openwin

DBG=

# Following are for when no fortran compiler is available
# FC=f2cf77
# F77LIBS=-lf2c -lm
# f2c fails for variable argument lists where the argument type 
#   varies from one call to another, and it also doesn't handle
#   names with underscores correctly.
# The following is used to eliminate fortran interfaces like dbquery
#   which require variable argument lists or variable types.
# F2CFAILS=#
#
# When fortran is available, use these:
F77VERSION=/opt/SUNWspro/SC4.2
F77LIBS=-L/opt/SUNWspro/lib -R/opt/SUNWspro/lib $(F77VERSION)/lib/libM77.a -lF77 -lsunmath -lm


DCFLAGS=-KPIC
DLDFLAGS=-h $@ -G -ztext
DLD=$(LD)
DSUFFIX=.so.$(VERSION)

LORDER=`lorder
TSORT=| tsort`

TCLLIB=/opt/dsap/tcl7.4tk4.0/lib
TCLINCLUDE=-I/opt/dsap/tcl7.4tk4.0/include
XINCLUDE=$(OPENWINHOME)/include
XLIB=$(OPENWINHOME)/lib
X11LIBS=-lX11

TKLIBS= -L$(TCLLIB) -R$(TCLLIB) -lBLT -litk2.0 -lexpectk -ltkx -ltk4.0 $(X11LIBS)
# TKLIBS= -L$(TCLLIB) -L$(TCLLIB)/itcl -R$(TCLLIB) -R$(TCLLIB)/itcl -lBLT -litk2.2 -ltkx4.2.0i -ltk4.2i $(X11LIBS)
SVR4LIBS = -lposix -lsocket -lnsl
DBLIBS=-lds -ltttaup -lresponse -lcoords -lstock -lposix -lm
TCLLIBS= -L$(TCLLIB) -R$(TCLLIB) -litcl2.0 -lexpect -ltclx -ltcl7.4
# TCLLIBS= -L$(TCLLIB) -L$(TCLLIB)/itcl -R$(TCLLIB) -R$(TCLLIB)/itcl -litcl2.2 -lexpect5.21 -ltclx7.6.0i -ltcl7.6i
GPLLIBS=-lgpl -lol -lxcom -ltks -lgrx $(X11LIBS) -lcoords -lposix -lstock -lm
GPL2LIBS=-lgpl2 -lol -lxcom -lgrx $(X11LIBS) -lcoords -lposix -lstock -lm
TRLIBS=-ltr $(GPL2LIBS) $(DBLIBS) 

YFLAGS = -v -d -l 
FFLAGS = $(DBG) -Nl400 $(fflags) $(FEXTRA) -I$(DSAP)/include -I$(XINCLUDE) $(DCFLAGS) -R/opt/SUNWspro/lib
CFLAGS = -D_REENTRANT $(DBG) $(cflags) $(CEXTRA) -I$(DSAP)/include -I$(XINCLUDE) $(DCFLAGS)
COFLAGS = -D_REENTRANT -fast $(cflags) $(CEXTRA) -I$(DSAP)/include -I$(XINCLUDE) $(DCFLAGS)
LDFLAGS = $(ldflags) -xildoff $(LDEXTRA) -L$(DSAP)/lib -R$(DSAP)/lib -L$(XLIB) -R$(XLIB) $(EXPORT) 
LDLIBS= $(ldlibs)
RANLIB=:
INSTALL=/usr/ucb/install 

# include .depends
# include .libs
.KEEP_STATE :


ALL_LIBS = $(LIB) $(DLIB)
.PRECIOUS:$(ALL_LIBS)

MAKE=make -e
DIRS=`find * -type d \( ! -name SCCS ! -name CVS ! -name \*- ! -name TC.Cache -print \) -prune`

all MAN clean depends pf purge relink Include install tags :: FORCED
	@-DIRS="$(DIRS)" ;\
	for i in $$DIRS ; do \
                ( cd $$i && $(MAKE) $@ ; ) \
        done

all:: localall

depends ::
	mkdepends

localall :  $(INCLUDE) $(ALL_LIBS) $(BIN) $(PF) $(DATA) \
	$(MAN1) $(MAN2) $(MAN3) \
	$(MAN4) $(MAN5) $(MAN6) \
	$(MAN7) $(MAN8) $(MAN9) \
	$(MANL)

$(OPTIMIZE:.c=.o) : $(OPTIMIZE)
	$(CC) $(COFLAGS) $(CPPFLAGS) -c $(OUTPUT_OPTION) $<
	
export :: all
	rm -f $(CLEAN)

Include :: localInclude 

localInclude :: $(INCLUDE:%=$(DSAP)/include/%) 

localpf :: $(PF) $(PF:%=$(DSAP)/data/pf/%) 

install :: localInclude localall localpf \
	$(BIN:%=$(DSAP)/bin/%) \
	$(ALL_LIBS:%=$(DSAP)/lib/%) \
	$(DATA:%=$(DSAP)/data/$(DATADIR)/%) \
	$(MAN1:%=$(DSAP)/man/man1/%) \
	$(MAN2:%=$(DSAP)/man/man2/%) \
	$(MAN3:%=$(DSAP)/man/man3/%) \
	$(MAN4:%=$(DSAP)/man/man4/%) \
	$(MAN5:%=$(DSAP)/man/man5/%) \
	$(MAN6:%=$(DSAP)/man/man6/%) \
	$(MAN7:%=$(DSAP)/man/man7/%) \
	$(MAN8:%=$(DSAP)/man/man8/%) \
	$(MAN9:%=$(DSAP)/man/man9/%) \
	$(MANL:%=$(DSAP)/man/manl/%)


MAN :: $(MAN1:%=$(DSAP)/man/man1/%) \
	$(MAN2:%=$(DSAP)/man/man2/%) \
	$(MAN3:%=$(DSAP)/man/man3/%) \
	$(MAN4:%=$(DSAP)/man/man4/%) \
	$(MAN5:%=$(DSAP)/man/man5/%) \
	$(MAN6:%=$(DSAP)/man/man6/%) \
	$(MAN7:%=$(DSAP)/man/man7/%) \
	$(MAN8:%=$(DSAP)/man/man8/%) \
	$(MAN9:%=$(DSAP)/man/man9/%) \
	$(MANL:%=$(DSAP)/man/manl/%)

FORCED :

clean ::
	rm -f .print .all *.o *.a *~ *- tags *.trace $(BIN) $(ALL_LIBS) $(CLEAN) .make.state

purge ::
	rm -f .make.state
	@-if [ -d SCCS ] ; then sccs clean ; fi

relink ::
	@rm $(BIN) ; $(MAKE) install

$(DSAP)/lib/%.a : %.a
	$(INSTALL) -m 664 $< $(DSAP)/lib
	$(RANLIB) $(DSAP)/lib/$<
 
$(DSAP)/lib/%.so.$(VERSION) : %.so.$(VERSION)
	$(INSTALL) -m 664 $< $(DSAP)/lib
	rm -f $(DSAP)/lib/$*.so ; ln -s $*.so.$(VERSION) $(DSAP)/lib/$*.so

$(DSAP)/bin/% : %
	$(INSTALL) -m 775 $< $(DSAP)/bin

$(DSAP)/data/pf/% : %
	/bin/rm -f $(DSAP)/data/pf/$<
	cp $< $(DSAP)/data/pf/$<
	chmod 444 $(DSAP)/data/pf/$<

$(DSAP)/include/% : %
	/bin/rm -f $(DSAP)/include/$<
	cp $< $(DSAP)/include/$<
	chmod 444 $(DSAP)/include/$<

$(DSAP)/data/$(DATADIR)/% : %
	if [ ! -h $< ] ; then \
	    if [ ! -d $(DSAP)/data/$(DATADIR) ] ; then \
		mkdir -p $(DSAP)/data/$(DATADIR) ; \
	    fi ; \
	    /bin/rm -f $(DSAP)/data/$(DATADIR)/$< ; \
	    cp $< $(DSAP)/data/$(DATADIR)/$< ; \
	    chmod 444 $(DSAP)/data/$(DATADIR)/$< ; \
	fi

$(DSAP)/man/man1/% : %
	/bin/rm -f $(DSAP)/man/man1/$<
	cp $< $(DSAP)/man/man1/$<
	chmod 444 $(DSAP)/man/man1/$<

$(DSAP)/man/man2/% : %
	/bin/rm -f $(DSAP)/man/man2/$<
	cp $< $(DSAP)/man/man2/$<
	chmod 444 $(DSAP)/man/man2/$<

$(DSAP)/man/man3/% : %
	/bin/rm -f $(DSAP)/man/man3/$<
	cp $< $(DSAP)/man/man3/$<
	chmod 444 $(DSAP)/man/man3/$<

$(DSAP)/man/man4/% : %
	/bin/rm -f $(DSAP)/man/man4/$<
	cp $< $(DSAP)/man/man4/$<
	chmod 444 $(DSAP)/man/man4/$<

$(DSAP)/man/man5/% : %
	/bin/rm -f $(DSAP)/man/man5/$<
	cp $< $(DSAP)/man/man5/$<
	chmod 444 $(DSAP)/man/man5/$<

$(DSAP)/man/man6/% : %
	/bin/rm -f $(DSAP)/man/man6/$<
	cp $< $(DSAP)/man/man6/$<
	chmod 444 $(DSAP)/man/man6/$<

$(DSAP)/man/man7/% : %
	/bin/rm -f $(DSAP)/man/man7/$<
	cp $< $(DSAP)/man/man7/$<
	chmod 444 $(DSAP)/man/man7/$<

$(DSAP)/man/man8/% : %
	/bin/rm -f $(DSAP)/man/man8/$<
	cp $< $(DSAP)/man/man8/$<
	chmod 444 $(DSAP)/man/man8/$<

$(DSAP)/man/man9/% : %
	/bin/rm -f $(DSAP)/man/man9/$<
	cp $< $(DSAP)/man/man9/$<
	chmod 444 $(DSAP)/man/man9/$<

tags :: FORCED
	ctags *.c *.f *.h *.l *.y


# The following lines would normally be in the
# default makefile rules, but Sun bungles the debuggers/compilation
# when a preprocessor is used on Fortran code.  However, 
# it's very useful to use the .F suffix for Fortran in order
# to include include files from a central location, rather than 
# embedding absolute paths into the include line, as the
# fortran include statement (as implemented by Sun)
# forces you to do.  The following rules always generate
# .f files from the .F files, and remove the # line# lines
# which cpp inserts (even with the -P flag, which it isn't supposed to).
# This will all work ok, if you're using .KEEP_STATE, however, 
# it can get confusing.

FPP=/usr/ccs/lib/cpp
COMPILE.F=$(FC) $(FFLAGS) $(FPPFLAGS) $(TARGET_ARCH) -c
LINK.F=$(FC) $(FFLAGS) $(FPPFLAGS) $(LDFLAGS) $(TARGET_ARCH)

# Cppflags is required in order to screen out compiler flags
# other than -I from FFLAGS, so that cpp will shut up about them.
# This is a hack, of course, and requires that options be
# mentioned separately, not all together, but I hope it will
# work most of the time.
Cppflags=`echo $(FFLAGS) $(FPPFLAGS) | sed 's/-[^I][^ ]*//g'`

.F.f :
	$(FPP) -e $(Cppflags) $*.F | sed '/^#/d' > $*.f"
.F:
	$(FPP) -e $(Cppflags) $*.F | sed '/^#/d' > $*.f"
	$(LINK.f) -o $@ $*.f $(LDLIBS)
.F.o:
	$(FPP) -e $(Cppflags) $*.F | sed '/^#/d' > $*.f"
	$(COMPILE.f) $(OUTPUT_OPTION) $*.f
.F.a:
	$(FPP) -e $(Cppflags) $*.F | sed '/^#/d' > $*.f"
	$(COMPILE.f) -o $% $*.f
	$(AR) $(ARFLAGS) $@ $%
	$(RM) $%

.SUFFIXES: .xpl .xtcl .xwish .xvwish .xwish8

.xpl:
	$(RM) $@
	cat $(DSAP)/data/templates/xpl > $@
	cat $< >> $@
	chmod +x $@
	

.xtcl:
	$(RM) $@
	cat $(DSAP)/data/templates/xtcl > $@
	cat $< >> $@
	chmod +x $@


.xwish:
	$(RM) $@
	cat $(DSAP)/data/templates/xtcl > $@
	cat $< >> $@
	chmod +x $@


.xvwish:
	$(RM) $@
	cat $(DSAP)/data/templates/xtcl > $@
	cat $< >> $@
	chmod +x $@


.xwish8:
	$(RM) $@
	cat $(DSAP)/data/templates/xtcl > $@
	cat $< >> $@
	chmod +x $@
