########################################################################
#                 copyright 2001, Amoco Production Company             #
#                             All Rights Reserved                      #
#                     an affiliate of BP America Inc.                  #
########################################################################

include ${DEPTROOT}/usp/etc/gmake.init

#	File	:	Makefile
#	Package	:	xlate
#	Author	:	Dean Kopesky
#	Company	:	Minnesota Supercomputer Center, Inc.

#
#       modified extensively by Joe M. Wade
#       (this whole tree is a bit of a hack at the moment. I took the old
#       Cray library structure developed by Dean and modified it for the
#       Intel architecture as well as a DEC alpha we tested on.
#

targets:	${Vendor}Targets

all:		libraries  translators  blockers remotes

all:		targets

intelTargets:	libieeeio.a

appleTargets:	no_build

sunTargets:	no_build

sgiTargets:	no_build

ibmTargets:	no_build

crayTargets:	libieeeio.a

no_build:
	@echo bypassing ${LIB} build in ieeeio-intel directory on ${Vendor} architecture

libraries:	libieeeio.a  libibmio.a
translators:	c2i  c2s  cs2i  i2c  i2cs  i2s  s2c  s2i
blockers:	delgreen  desb  devb  resb  revb  sissb

.PHONY:		all  libraries  translators  blockers
.PHONY:		libieeeio.a  libibmio.a
.PHONY:		c2i  c2s  cs2i  i2c  i2cs  i2s  s2c  s2i
.PHONY:		delgreen  desb  devb  resb  revb  sissb

# ARCH := $(shell tarch)

# OBJ	:= obj/$(ARCH)
OBJ	:= $(TArchDir)
LIB	:= ${LocalLib}
PRGM	:= ${LocalBin}

.SUFFIXES:
.SUFFIXES:  .o .c .f .h .s

VPATH := convdata:convert:filters:gencon:sisio

$(OBJ)/%.o:  %.s
	as -o $@ -l $(OBJ)/$*.l -L $(OBJ)/$*.L $<

$(OBJ)/%.o:  %.c
	${CompileC} $< ; mv $(*F).o $@

$(OBJ)/%.o:  %.f
#	f77 -c -node -O3 -Mvect -b $@ -l $(OBJ)/$*.l $<
# 	${CompileF} $@ -l $(OBJ)/$*.l $<
	${CompileF} $@ $< ; mv $(*F).o $@

#
#	miscellaneous
#
SafeFiles := Makefile 

remotes:	RemoteCopies RemoteMakes

RemoteCopies:	${SafeFiles}
	shadowcopy -v ${SafeFiles}
	(cd formats;	${MAKE} remotes);
	(cd gencon;	${MAKE} remotes);
	(cd filters;	${MAKE} remotes);
	(cd convert;	${MAKE} remotes);
	(cd convdata;	${MAKE} remotes);
	(cd sisio;	${MAKE} remotes);
	touch RemoteCopies

RemoteMakes:	RemoteCopies
	shadowexec -v ${MAKE} && touch RemoteMakes

.PHONY:  clean clobber

clean:
	-rm $(OBJ)/* RemoteCopies RemoteMakes
	(cd formats;	${MAKE} clean);
	(cd gencon;	${MAKE} clean);
	(cd filters;	${MAKE} clean);
	(cd convert;	${MAKE} clean);
	(cd convdata;	${MAKE} clean);
	(cd sisio;	${MAKE} clean);
# 
#clobber:
	-rm $(OBJ)/* $(PRGM)/* \
		$(PRGM)/c2i \
		$(PRGM)/c2s \
		$(PRGM)/cs2i \
		$(PRGM)/i2c \
		$(PRGM)/i2cs \
		$(PRGM)/i2s \
		$(PRGM)/s2c \
		$(PRGM)/s2i \
		$(PRGM)/delgreen \
		$(PRGM)/desb \
		$(PRGM)/resb \
		$(PRGM)/devb \
		$(PRGM)/revb \
		$(PRGM)/sissb \
		$(PRGM)/gencon

#
#	convdata/
#

CONVBOTH = \
$(OBJ)/hlhc2i.o \
$(OBJ)/hlhc2s.o \
$(OBJ)/hlhi2c.o \
$(OBJ)/hlhs2c.o \
$(OBJ)/vftc2i.o \
$(OBJ)/vftc2s.o \
$(OBJ)/vfti2c.o \
$(OBJ)/vfts2c.o \
$(OBJ)/packbytes.o \
$(OBJ)/unpackbytes.o \
$(OBJ)/readpipe.o

ifeq	(cray2,$(ARCH))
CONVDATA = \
$(CONVBOTH) \
$(OBJ)/uscctc.sc.o \
$(OBJ)/usccti.sc.o
endif

ifeq	(crayxea,$(ARCH))
CONVDATA = \
$(CONVBOTH) \
$(OBJ)/convieee.o \
$(OBJ)/iesctc.sf.o \
$(OBJ)/iescti.sf.o
endif

ifeq	(crayyel,$(ARCH))
CONVDATA = \
$(CONVBOTH) \
$(OBJ)/convieee.o \
$(OBJ)/iesctc.sf.o \
$(OBJ)/iescti.sf.o
endif

ifeq (${BYTE_ORDER},${LITTLE_ENDIAN})
CONVDATA = \
$(OBJ)/hlhin2s.o \
$(OBJ)/hlhs2in.o \
$(OBJ)/intelieee.o
endif

debug:
	@echo BYTE_ORDER = ${BYTE_ORDER}
	@echo LITTLE_ENDIAN = ${LITTLE_ENDIAN}
	@echo CONVDATA  = ${CONVDATA}


$(OBJ)/hlhc2i.o:  convdata/hlhc2is.c
	${CompileC} -DIBM $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/hlhc2s.o:  convdata/hlhc2is.c
	${CompileC} -DIEEE $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/hlhi2c.o:  convdata/hlhis2c.c
	${CompileC} -DIBM $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/hlhs2c.o:  convdata/hlhis2c.c
	${CompileC} -DIEEE $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/hlhin2s.o:  convdata/hlhc2is.c
	${CompileC} -DIEEE $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/hlhs2in.o:  convdata/hlhs2in.c
	${CompileC} -DIEEE $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/vftc2i.o:  convdata/vftc2is.c
	${CompileC} -DIBM $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/vftc2s.o:  convdata/vftc2is.c
	${CompileC} -DIEEE $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/vfti2c.o:  convdata/vftis2c.c
	${CompileC} -DIBM $< ; mv $(subst .c,.o,$(<F)) $@

$(OBJ)/vfts2c.o:  convdata/vftis2c.c
	${CompileC} -DIEEE $< ; mv $(subst .c,.o,$(<F)) $@

#
#	convert/
#

CONVERT = \
$(OBJ)/siinslh.o \
$(OBJ)/siinslh5.o \
$(OBJ)/siinst1.o \
$(OBJ)/siinst3.o \
$(OBJ)/siinst5.o \
$(OBJ)/siinsth.o \
$(OBJ)/sisinlh.o \
$(OBJ)/sisinlh5.o \
$(OBJ)/sisint1.o \
$(OBJ)/sisint3.o \
$(OBJ)/sisint5.o \
$(OBJ)/sisinth.o \
$(OBJ)/vainsah.o \
$(OBJ)/vainscr.o \
$(OBJ)/vainscv.o \
$(OBJ)/vasinah.o \
$(OBJ)/vasincr.o \
$(OBJ)/vasincv.o

#
#	Intel to Sun IEEE
#

convert/siinslh.c:  $(PRGM)/gencon formats/sis.lh
	$(PRGM)/gencon siinslh in2s formats/sis.lh > convert/siinslh.c

convert/siinslh5.c:  $(PRGM)/gencon formats/sis.lh5
	$(PRGM)/gencon siinslh5 in2s formats/sis.lh5 > convert/siinslh5.c

convert/siinst1.c:  $(PRGM)/gencon formats/sis.t1
	$(PRGM)/gencon siinst1 in2s formats/sis.t1 > convert/siinst1.c

convert/siinst3.c:  $(PRGM)/gencon formats/sis.t3
	$(PRGM)/gencon siinst3 in2s formats/sis.t3 > convert/siinst3.c

convert/siinst5.c:  $(PRGM)/gencon formats/sis.t5
	$(PRGM)/gencon siinst5 in2s formats/sis.t5 > convert/siinst5.c

convert/siinsth.c:  $(PRGM)/gencon formats/sis.th
	$(PRGM)/gencon siinsth in2s formats/sis.th > convert/siinsth.c

convert/vainsah.c:  $(PRGM)/gencon formats/vanl.ah
	$(PRGM)/gencon vainsah in2s formats/vanl.ah > convert/vainsah.c

convert/vainscr.c:  $(PRGM)/gencon formats/vanl.cr
	$(PRGM)/gencon vainscr in2s formats/vanl.cr > convert/vainscr.c

convert/vainscv.c:  $(PRGM)/gencon formats/vanl.cv
	$(PRGM)/gencon vainscv in2s formats/vanl.cv > convert/vainscv.c


#
#	Sun IEEE to Intel
#

convert/sisinlh.c:  $(PRGM)/gencon formats/sis.lh
	$(PRGM)/gencon sisinlh s2in formats/sis.lh > convert/sisinlh.c

convert/sisinlh5.c:  $(PRGM)/gencon formats/sis.lh5
	$(PRGM)/gencon sisinlh5 s2in formats/sis.lh5 > convert/sisinlh5.c

convert/sisint1.c:  $(PRGM)/gencon formats/sis.t1
	$(PRGM)/gencon sisint1 s2in formats/sis.t1 > convert/sisint1.c

convert/sisint3.c:  $(PRGM)/gencon formats/sis.t3
	$(PRGM)/gencon sisint3 s2in formats/sis.t3 > convert/sisint3.c

convert/sisint5.c:  $(PRGM)/gencon formats/sis.t5
	$(PRGM)/gencon sisint5 s2in formats/sis.t5 > convert/sisint5.c

convert/sisinth.c:  $(PRGM)/gencon formats/sis.th
	$(PRGM)/gencon sisinth s2in formats/sis.th > convert/sisinth.c

convert/vasinah.c:  $(PRGM)/gencon formats/vanl.ah
	$(PRGM)/gencon vasinah s2in formats/vanl.ah > convert/vasinah.c

convert/vasincr.c:  $(PRGM)/gencon formats/vanl.cr
	$(PRGM)/gencon vasincr s2in formats/vanl.cr > convert/vasincr.c

convert/vasincv.c:  $(PRGM)/gencon formats/vanl.cv
	$(PRGM)/gencon vasincv s2in formats/vanl.cv > convert/vasincv.c


#
#	filters/
#

c2i:  $(PRGM)/c2i
$(PRGM)/c2i:  $(OBJ)/c2si.o $(LIB)/libibmio.a
# 	${LinkC} -o $@ $^
	${LinkF} -o $@ $^

c2s:  $(PRGM)/c2s
$(PRGM)/c2s:  $(OBJ)/c2si.o $(LIB)/libieeeio.a
	${LinkF} -o $@ $^

cs2i:  $(PRGM)/cs2i
$(PRGM)/cs2i:  $(OBJ)/cs2i.o $(OBJ)/wrtape.i.o $(LIB)/libieeeio.a
	${LinkF} -o $@ $^

i2c:  $(PRGM)/i2c
$(PRGM)/i2c:  $(OBJ)/si2c.o $(LIB)/libibmio.a
	${LinkF} -o $@ $^

i2cs:  $(PRGM)/i2cs
$(PRGM)/i2cs:  $(OBJ)/i2cs.o $(OBJ)/rtape.i.o $(LIB)/libieeeio.a
	${LinkF} -o $@ $^

i2s:  $(PRGM)/i2s
$(PRGM)/i2s:  $(OBJ)/i2s.o $(OBJ)/rtape.i.o $(LIB)/libieeeio.a
	${LinkF} -o $@ $^

s2c:  $(PRGM)/s2c
$(PRGM)/s2c:  $(OBJ)/si2c.o $(LIB)/libieeeio.a
	${LinkF} -o $@ $^

s2i:  $(PRGM)/s2i
$(PRGM)/s2i:  $(OBJ)/s2i.o $(OBJ)/wrtape.i.o $(LIB)/libieeeio.a
	${LinkF} -o $@ $^

delgreen:  $(PRGM)/delgreen
$(PRGM)/delgreen:  $(OBJ)/delgreen.o $(CONVDATA)
	${LinkF} -o $@ $^

desb:  $(PRGM)/desb
$(PRGM)/desb:  $(OBJ)/desb.o $(CONVDATA)
	${LinkF} -o $@ $^

resb:  $(PRGM)/resb
$(PRGM)/resb:  $(OBJ)/resb.o $(CONVDATA)
	${LinkF} -o $@ $^

devb:  $(PRGM)/devb
$(PRGM)/devb:  $(OBJ)/devb.o $(CONVDATA)
	${LinkF} -o $@ $^

revb:  $(PRGM)/revb
$(PRGM)/revb:  $(OBJ)/revb.o $(CONVDATA) $(CONVBOTH)
	${LinkF} -o $@ $^

sissb:  $(PRGM)/sissb
$(PRGM)/sissb:  $(OBJ)/sissb.o
	${LinkF} -o $@ $^

#
#	gencon
#

GENCONH = gencon/gencon.h
GENCONO = \
$(OBJ)/gencon.o \
$(OBJ)/getargs.o \
$(OBJ)/prfmtH.o \
$(OBJ)/prfmtb.o \
$(OBJ)/prfmtc.o \
$(OBJ)/prfmti.o \
$(OBJ)/prfmtr.o \
$(OBJ)/prfmtt.o \
$(OBJ)/prfmtv.o \
$(OBJ)/prfmtw.o \
$(OBJ)/prfooter.o \
$(OBJ)/prheader.o
#
# build routine to generate conversion routines
#

gencon:  $(PRGM)/gencon

$(PRGM)/gencon:  $(GENCONO)
	${LinkC} -o $@ $^

$(GENCONO):  $(GENCONH)

#
#	sisio
#

# SISIOH = \
# sisio/sisio.h
SISIOH = \
 ${LocalRoot}/include/sisio.h

SISIEEEO = \
$(OBJ)/rtape.s.o \
$(OBJ)/sisver.s.o \
$(OBJ)/wrtape.s.o

SISIBMO = \
$(OBJ)/rtape.i.o \
$(OBJ)/sisver.i.o \
$(OBJ)/wrtape.i.o

SISIOO = \
$(OBJ)/_error.o \
$(OBJ)/_fitinit.o \
$(OBJ)/_flushit.o \
$(OBJ)/_initial.o \
$(OBJ)/_isdisk.o \
$(OBJ)/_readit.o \
$(OBJ)/_readpipe.o \
$(OBJ)/_readsb.o \
$(OBJ)/_sisfit.o \
$(OBJ)/_strf2c.o \
$(OBJ)/_strlower.o \
$(OBJ)/_writeit.o \
$(OBJ)/bkspt.o \
$(OBJ)/lbclos.o \
$(OBJ)/lbopen.o \
$(OBJ)/rtape4.o \
$(OBJ)/rwd.o \
$(OBJ)/seekt.o \
$(OBJ)/sisabort.o \
$(OBJ)/sisb4msg.o \
$(OBJ)/siserror.o \
$(OBJ)/sisfdfit.o \
$(OBJ)/sisfmt.o \
$(OBJ)/sisinfo.o \
$(OBJ)/sislgbuf.o \
$(OBJ)/sisprt.o \
$(OBJ)/sisseek.o \
$(OBJ)/sistrace.o \
$(OBJ)/siswhen.o \
$(OBJ)/skipt.o

libieeeio.a:  $(LIB)/libieeeio.a

$(LIB)/libieeeio.a:  $(SISIEEEO) $(SISIOO) $(CONVERT) $(CONVDATA)
	-rm $@
	ar rv $@ $^

libibmio.a:  $(LIB)/libibmio.a

$(LIB)/libibmio.a:  $(SISIBMO) $(SISIOO) $(CONVERT) $(CONVDATA)
	-rm $@
	ar rv $@ $^

$(SISIEEEO) $(SISIBMO) $(SISIOO):  $(SISIOH)

$(OBJ)/rtape.s.o:  sisio/rtape.c
	${CompileC} -DIEEE sisio/rtape.c ; mv rtape.o $@

$(OBJ)/sisver.s.o:  sisio/sisver.c
	${CompileC} -DIEEE sisio/sisver.c ; mv sisver.o $@

$(OBJ)/wrtape.s.o:  sisio/wrtape.c
	${CompileC} -DIEEE sisio/wrtape.c ; mv wrtape.o $@

$(OBJ)/rtape.i.o:  sisio/rtape.c
	${CompileC} -DIBM sisio/rtape.c ; mv rtape.o $@

$(OBJ)/sisver.i.o:  sisio/sisver.c
	${CompileC} -DIBM sisio/sisver.c ; mv sisver.o $@

$(OBJ)/wrtape.i.o:  sisio/wrtape.c
	${CompileC} -DIBM sisio/wrtape.c ; mv wrtape.o $@

include ${TArchDir}/included.files

#
# This blew up the flex scanner on one box, so I added the "-" to ignore errors
#
${TArchDir}/included.files: ${TArchDir} ${wildcard *.c */*.c *.h */*.h}
	-${FindIncludes}

# test for ${TArchDir} and make the directory if needed

${TArchDir}:
	test -d ${TArchDir} || mkdir -p  ${TArchDir}
#
# - I cobbled this target up just so we could get FreeUSP out the door
#   this needs to be done better
#
safe:	.safe.${jdate}.Z

.safe.${jdate}.Z:	${SafeFiles}
	${MakeSafe}
	(cd formats;	${MAKE} safe);
	(cd gencon;	${MAKE} safe);
	(cd filters;	${MAKE} safe);
	(cd convert;	${MAKE} safe);
	(cd convdata;	${MAKE} safe);
	(cd sisio;	${MAKE} safe);

joe:
	@echo SafeFiles = ${SafeFiles}
