# Makefile for OS/2 and DOS version of awk.                   10 Oct 97
# Portions adapted from GNU awk pc/Makefile.  See also src/makefile.

default:
	@echo "Enter $(MAK) target "
	@echo " where 'target' is chosen from                         " 
	@echo "  djgpp .. DOS 32-bit exe [GNU C, Delorie, v2]         "
	@echo "  emx .... OS/2 32-bit exe [emx/gcc; uses emxlibc.dll] "
	@echo "  emxnt .. NT exe [emx/gcc with RSXNT]                 "
	@echo "  emxbnd . OS/2 and DOS 32-bit exe [emx/gcc]           "
	@echo "  msc .... DOS exe [Microsoft C v6-8 16bit]            "
	@echo "  mscbnd . OS/2 and DOS exe [Microsoft C 6.00a]        "


#========================================================================
#========================== DJGPP =======================================
#========================================================================

LDJG = $(CC) $(LF) -o $@ $(AWKOBJS) $(LF2)

djgpp:
	$(MAKE) all \
	CC=gcc CFLAGS=-O O=.o \
	LNK=LDJG LF2=-s

djgpp-debug:
	$(MAKE) all \
	CC=gcc CFLAGS=-g O=.o \
	LNK=LDJG


#========================================================================
#========================== EMX =========================================
#========================================================================
# Link command for OS/2 versions.
LEMX = $(CC) $(LF) -o $@ $(AWKOBJS) awk.def $(LF2)

# Link and bind for DOS and OS/2 versions.
# emx-09 needs '-p' emx option here or in EMXOPT environ var.
LEMXBND = $(CC) $(LF) -o a.out $(AWKOBJS) awk.def $(LF2)
BEMX = emxbind -bs -o $@ a.out -p
#BEMX = emxbind -bs /emx/bin/emx.exe a.out $@ -p
BEMXD = emxbind -b -o $@ a.out -p

emx:
	$(MAK) all \
	"CC=gcc -Zomf" O=.obj "CFLAGS=-O -DOS2" \
	LNK=LEMX "LF=-s -Zcrtdll -Zstack 512"

emxnt:
	$(MAK) all \
	"CC=gcc -Zwin32 -Zcrtdll=crtrsxnt" O=.o "CFLAGS=-O -DOS2" \
	LNK=LEMX "LF=-s -Zstack 512"

emxbnd:
	$(MAK) all \
	CC=gcc O=.o "CFLAGS=-O -DOS2 -DMSDOS" OBJ=popen.o \
	LNK=LEMXBND BIND=BEMX


#========================================================================
#========================== MSC =========================================
#========================================================================

.SWAP: msc mscbnd

LMSC= $(CC) $(LF) -F 7800 -o $@ $(LNKOBJS) setargv/NOE $(LF2)
BMSC = bind $@ /n DOSMAKEPIPE DOSCWAIT

msc: 
	$(MAK) all \
	"CC=cl -AL" CFLAGS=-Ot O=.obj \
	OBJ=popen.obj LNK=LMSC

mscbnd:
	$(MAK) all \
	"CC=cl -AL" "CFLAGS=-Ot -DOS2" O=.obj \
	OBJ=popen.obj LNK=LMSC LF=-Lp LF2=awk.def \
	BIND=BMSC

#========================================================================

MAK = $(MAKE) $(MAKEFILE)
BIND = EMPTY
EMPTY=

all: awk.exe

YACC = bison -y
#YACC = yacc
YFLAGS = -d

OFILES = b$O main$O parse$O proctab$O tran$O lib$O run$O lex$O
AWKOBJS = ytab$O $(OFILES) $(OBJ)

# Truncate .obj for broken systems.
LNKOBJS = ytab b main parse proctab tran lib run lex $(OBJ)

.SUFFIXES: .exe .obj .c

.c$O: 
	$(CC) $(CFLAGS) -c $*.c

awk.exe: $(AWKOBJS)
	$($(LNK))
	$($(BIND))

$(OFILES):	awk.h ytab.h proto.h

ytab$O:	awk.h proto.h awkgram.y
#	$(YACC) $(YFLAGS) awkgram.y
#	mv y.tab.c ytab.c
#	mv y.tab.h ytab.h
	$(CC) $(CFLAGS) -c ytab.c

proctab.c:	maketab.exe
	maketab >proctab.c

maketab.exe:	ytab.h maketab.c
	$(CC) $(CFLAGS) $(LF) maketab.c -o $@
	$($(BIND))

clean:
	rm -f a.out *.o *.obj maketab.exe proctab.c
