# Microsoft Visual C++ Makefile for f2c, a Fortran 77 to C converter
# Invoke with "nmake -f makefile.vc" .
SRC = ../

CC = bcc32
CFLAGS = -O -nologo -DMSDOS -DNO_LONG_LONG

OBJECTS = main.obj init.obj gram.obj lex.obj proc.obj equiv.obj data.obj format.obj \
	  expr.obj exec.obj intr.obj io.obj misc.obj error.obj mem.obj names.obj \
	  output.obj p1output.obj pread.obj put.obj putpcc.obj vax.obj formatdata.obj \
	  parse_args.obj niceprintf.obj cds.obj sysdep.obj version.obj

%.obj: $(SRC)%.c
	$(CC) -c $(CFLAGS) -o$@ $<

all: f2c.exe

checkfirst: xsum.out

f2c.exe: $(OBJECTS)
	$(CC) -ef2c.exe $(OBJECTS)

$(OBJECTS): $(SRC)defs.h $(SRC)ftypes.h $(SRC)defines.h $(SRC)machdefs.h $(SRC)sysdep.h

cds.obj: $(SRC)cds.c $(SRC)sysdep.h
data.obj: $(SRC)data.c
equiv.obj: $(SRC)equiv.c
error.obj: $(SRC)error.c
exec.obj: $(SRC)exec.c $(SRC)p1defs.h $(SRC)names.h
expr.obj: $(SRC)expr.c $(SRC)output.h $(SRC)niceprintf.h $(SRC)names.h
format.obj: $(SRC)format.c $(SRC)p1defs.h $(SRC)format.h $(SRC)output.h $(SRC)niceprintf.h $(SRC)names.h $(SRC)iob.h
formatdata.obj: $(SRC)formatdata.c $(SRC)format.h $(SRC)output.h $(SRC)niceprintf.h $(SRC)names.h
gram.obj: $(SRC)gram.c $(SRC)p1defs.h
init.obj: $(SRC)init.c $(SRC)output.h $(SRC)niceprintf.h $(SRC)iob.h
intr.obj: $(SRC)intr.c $(SRC)names.h
io.obj: $(SRC)io.c $(SRC)names.h $(SRC)iob.h
lex.obj : $(SRC)lex.c $(SRC)tokdefs.h $(SRC)p1defs.h
main.obj: $(SRC)main.c $(SRC)parse.h $(SRC)usignal.h
mem.obj: $(SRC)mem.c $(SRC)iob.h
misc.obj: $(SRC)misc.c
names.obj: $(SRC)names.c $(SRC)iob.h $(SRC)names.h $(SRC)output.h $(SRC)niceprintf.h
niceprintf.obj: $(SRC)niceprintf.c $(SRC)defs.h $(SRC)names.h $(SRC)output.h $(SRC)niceprintf.h
output.obj: $(SRC)output.c $(SRC)output.h $(SRC)niceprintf.h $(SRC)names.h
p1output.obj: $(SRC)p1output.c $(SRC)p1defs.h $(SRC)output.h $(SRC)niceprintf.h $(SRC)names.h
parse_args.obj: $(SRC)parse_args.c $(SRC)parse.h
pread.obj: $(SRC)pread.c
proc.obj: $(SRC)proc.c $(SRC)tokdefs.h $(SRC)names.h $(SRC)niceprintf.h $(SRC)output.h $(SRC)p1defs.h
put.obj: $(SRC)put.c $(SRC)names.h $(SRC)pccdefs.h $(SRC)p1defs.h
putpcc.obj: $(SRC)putpcc.c $(SRC)names.h
vax.obj: $(SRC)vax.c $(SRC)defs.h $(SRC)output.h $(SRC)pccdefs.h
output.h: $(SRC)output.c $(SRC)niceprintf.h
sysdep.obj: $(SRC)sysdep.c
version.obj: $(SRC)version.c

clean:
	rm *.obj f2c.exe *.h *.tds

veryclean: clean
	deltree /Y xsum.exe

b = $(SRC)Notice $(SRC)README $(SRC)cds.c $(SRC)data.c $(SRC)defines.h $(SRC)defs.h $(SRC)equiv.c $(SRC)error.c \
	$(SRC)exec.c $(SRC)expr.c $(SRC)f2c.1 $(SRC)f2c.1t $(SRC)f2c.h $(SRC)format.c $(SRC)format.h $(SRC)formatdata.c \
	$(SRC)ftypes.h $(SRC)gram.c $(SRC)gram.dcl $(SRC)gram.exec $(SRC)gram.expr $(SRC)gram.head $(SRC)gram.io \
	$(SRC)init.c $(SRC)intr.c $(SRC)io.c $(SRC)iob.h $(SRC)lex.c $(SRC)machdefs.h $(SRC)main.c \
	$(SRC)malloc.c $(SRC)mem.c $(SRC)memset.c $(SRC)misc.c $(SRC)names.c $(SRC)names.h $(SRC)niceprintf.c \
	$(SRC)niceprintf.h $(SRC)output.c $(SRC)output.h $(SRC)p1defs.h $(SRC)p1output.c \
	$(SRC)parse.h $(SRC)parse_args.c $(SRC)pccdefs.h $(SRC)pread.c $(SRC)proc.c $(SRC)put.c $(SRC)putpcc.c \
	$(SRC)sysdep.c $(SRC)sysdep.h $(SRC)tokens $(SRC)usignal.h $(SRC)vax.c $(SRC)version.c $(SRC)xsum.c

xsum.exe: $(SRC)xsum.c
	$(CC) $(CFLAGS) -DMSDOS $(SRC)xsum.c

#Check validity of transmitted source...
# Unfortunately, conditional execution is hard here, since fc does not set a
# nonzero exit code when files differ.

xsum.out: xsum.exe $b
	xsum $(b) >xsum1.out
	fc $(SRC)xsum0.out xsum1.out
	@echo If fc showed no differences, manually rename xsum1.out xsum.out:
	@echo if xsum.out exists, first "del xsum.out"; then "ren xsum1.out xsum.out".
	@echo Once you are happy that your source is OK, "nmake -f makefile.vc f2c.exe".
