diff options
Diffstat (limited to 'pc/Makefile')
-rw-r--r-- | pc/Makefile | 299 |
1 files changed, 299 insertions, 0 deletions
diff --git a/pc/Makefile b/pc/Makefile new file mode 100644 index 00000000..cefd9c3d --- /dev/null +++ b/pc/Makefile @@ -0,0 +1,299 @@ +# Makefile for gawk (GNU awk) 1 Sep 1995 +# +# - for GNU C (djgpp) [executable for DOS (32-bit)] +# - for GNU C (emx) [executable for OS/2 2.x or DOS (32-bit)] +# - for Microsoft C 7 [ececutable for DOS (16-bit)] +# - for Microsoft C 6.00A [executable for OS/2 or DOS (16-bit)] +# - for Microsoft C 5.1 [executable for OS/2 or DOS (16-bit)] + +# Tested with ndmake and dmake-3.8 under DOS and dmake and +# GNU make under OS/2. Compiling with dmake under DOS may require +# the DOS-only version of dmake (so that swapping works). + +default: + @echo "Enter $(MAK) target " + @echo " where 'target' is chosen from " + @echo " djgpp ... DOS 32-bit exe [GNU C, Delorie, v1 or v2] " + @echo " emx ..... OS/2 32-bit exe [emx/gcc; uses emxlibc.dll] " + @echo " emxbnd .. OS/2 and DOS 32-bit exe [emx/gcc] " + @echo " msc ..... DOS exe [Microsoft C 7] " + @echo " msc6 .... DOS exe [Microsoft C 6.00a] " + @echo " msc6os2 . OS/2 exe [Microsoft C 6.00a] " + @echo " msc6bnd . OS/2 and DOS exe [Microsoft C 6.00a] " + @echo " ----------------------------------------------------- " + @echo " test .... Perform tests (see README_d/README.pc) " + @echo " install . Install gawk under $(prefix)/ " + +# Support dropped in 3.0 +# @echo " msc51 DOS exe [Microsoft C 5.1] " +# @echo " msc51bnd OS/2 and DOS exe [Microsoft C 5.1] " + +#======================= Configuration ================================== +RSPFILE = gawk.rsp +# +# Choose method for passing arguments to the linker. +# +# If compiling under OS/2 or if make can pass long lines +#LDRSP = $(GAWKOBJS) +#LINKRSP = $(LDRSP) +# +# else if make == dmake +# Response files for linker: dmake allows the macro expansion +# $(macro_name:modifier_list:modifier_list:...) +# The macro mktmp creates a temporary file for the linker. +# The 't' modifier is for tokenization. +#LDRSP = @$(mktmp $(<:t"\n")) +#LINKRSP = @$(mktmp $(<:t"+\n") ) # Space before final paren req +# +# else use brain-dead approach (emxbnd will need 'tr'). +RSP = $(RSPFILE) +LDRSP = @$(RSP) +LINKRSP = $(LDRSP) +#------------------------------------------------------------------------ +# Some makes do not define MAKE (and ndmake does not allow a define). +# Define MAK to be your make command. +#MAK = $(MAKE) $(MAKEFILE) +MAK = $(MAKE) +#MAKEFILE = -f Makefile +#MAK = make45 $(MAKEFILE) +#------------------------------------------------------------------------ +# Define the base directory for the install. "make install" will install +# in bin, lib/awk, man, and info under $(prefix)/. Most likely, you should +# edit config.h so that $(prefix)/lib/awk appears as part of DEFPATH. +#prefix = +prefix = c:/gnu +# +# Define the install method. Method 1 is Unix-like (and requires cat, +# cp, mkdir, sed, and sh); method 2 uses gawk and batch files. +install = 1 +#======================================================================== +# End of general configuration. Some platform-specific configuration +# notes appear below. + + +#======================================================================== +#========================== DJGPP ======================================= +#======================================================================== + +LDJG = $(CC) $(LF) -o gawk $(LDRSP) $(LF2) +#BDJG = coff2exe -s /djgpp/bin/go32.exe gawk +BDJG = coff2exe gawk + +djgpp: + $(MAK) all \ + CC=gcc O=.o CF=-O \ + LINK=LDJG LF=-s LF2=-lm \ + BIND=BDJG + +djgpp-debug: + $(MAK) all \ + CC=gcc O=.o CF=-g \ + LINK=LDJG LF2=-lm \ + BIND=BDJG + +#======================================================================== +#========================== EMX ========================================= +#======================================================================== + +# Link command for OS/2 versions. +LEMX = $(CC) $(LF) -o $@ $(GAWKOBJS) gawk.def -lbsd $(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 $(LDRSP) gawk.def -lbsd $(LF2) +BEMX = emxbind -b /emx/bin/emxl.exe a.out $@ -p +#BEMX = emxbind -b /emx/bin/emx.exe a.out $@ -p + +emx: + $(MAK) all \ + "CC=gcc -Zomf" O=.obj "CF=-O -DOS2" \ + LINK=LEMX "LF=-s -Zcrtdll -Zstack 512" RSP= + +emxbnd: + $(MAK) all \ + CC=gcc O=.o "CF=-O -DOS2 -DMSDOS" OBJ=popen.o \ + LINK=LEMXBND LF=-s \ + BIND=BEMX "P=|tr \" \" \"\n\"" + +emxbnd-debug: + $(MAK) all \ + CC=gcc O=.o CF="-g -DOS2 -DMSDOS" OBJ=popen.o \ + LINK=LEMXBND \ + BIND=BEMX "P=|tr \" \" \"\n\"" + +#======================================================================== +#========================== MSC ========================================= +#======================================================================== + +# stdargv, glob, and director are from Stewartson's sh. These provide +# globbing and enhanced argument-passing. MSC setargv.obj is a +# more limited alternative (and it will permit a bound version). +#STDARGV = stdargv.obj glob.obj director.obj +STDARGV = setargv.obj + +# Optimization and library options: +# Os == optimize for size, Ot == optimize for speed, G2 == 286 or better +#MSCOPT = -Os -G2 +MSCOPT = -Ot # -G2 +# Alternate lib, does not use math coprocessor. +#MSCLIB = llibca +#MSCCL = -FPa +# Emulator lib, uses math coprocessor if present. +MSCLIB = llibce +MSCCL = -FPi +#MSCCL = -FPc + +LMSC = link $(LF) $(LINKRSP) $(STDARGV)/NOE,$@,,/NOD:llibce $(MSCLIB)$(LF2)/STACK:0x6f00; + +# CLMSC-linking works when building under OS/2 +CLMSC = $(CC) -o $@ $(LF) $(GAWKOBJS) $(STDARGV) $(LF2) -link /NOE/NOI/STACK:0x6f00 + +BMSC = bind $@ /n DOSMAKEPIPE DOSCWAIT + +# Ugly hack: config.h defines __STDC__ if not defined on command-line. +# OS/2 versions can't use -Za in getid.c. MSC7 uses stub headers in pc/ +# due to ANSI conflicts. MSC 5.1 defines __STDC__=0 regardless of ANSI flag. + +# dmake-3.8 runs out of memory under DOS. Request that dmake +# swap itself out on these targets. Note that this won't have +# any affect on the bound OS/2 and DOS version of dmake-3.8. + +.SWAP: msc msc-debug msc6 msc6os2 msc6bnd msc51 check + +msc: + $(MAK) all \ + "CC=cl -nologo $(MSCCL)" O=.obj "CF=-AL -Ze -Ipc/include $(MSCOPT)" \ + OBJ=popen.obj \ + LINK=LMSC P=+ + +msc-debug: + $(MAK) all \ + "CC=cl $(MSCCL)" O=.obj "CF=-AL -Ze -Ipc/include -W2 -Zi -Od" \ + OBJ=popen.obj \ + LINK=LMSC LF2=/CO P=+ + +msc6: + $(MAK) all \ + "CC=cl -nologo $(MSCCL)" O=.obj "CF=-AL -Za $(MSCOPT)" \ + OBJ=popen.obj \ + LINK=LMSC P=+ + +msc6os2: + $(MAK) all \ + "CC=cl $(MSCCL)" O=.obj "CF=-AL -DOS2 -UMSDOS $(MSCOPT)" \ + LINK=LMSC "LF2=p,gawk.def" P=+ + +msc6bnd: + $(MAK) all \ + "CC=cl $(MSCCL)" O=.obj "CF=-AL -DOS2 $(MSCOPT)" \ + OBJ=popen.obj \ + LINK=LMSC "LF2=p,gawk.def" P=+ \ + BIND=BMSC + +# Support dropped in 3.0 +#msc51: +# $(MAK) all \ +# "CC=cl $(MSCCL)" O=.obj "CF=-AL -Za -D_MSC_VER=510 $(MSCOPT)" \ +# OBJ=popen.obj \ +# LINK=LMSC P=+ +# +#msc51bnd: +# $(MAK) all \ +# "CC=cl -AL ($MSCCL)" O=.obj "CF=-DOS2 -D_MSC_VER=510 $(MSCOPT)" \ +# OBJ=popen.obj \ +# LINK=CLMSC "LF=-Lp -Fb" "LF2=gawk.def" + +#======================================================================== + +# Define BIND for BINDless compiles, otherwise $($(BIND)) may break. +BIND = EMPTY +EMPTY= + +CFLAGS = $(CF) -DGAWK -I. -DHAVE_CONFIG_H + +# object files +AWKOBJS1 = array$O builtin$O eval$O field$O gawkmisc$O io$O main$O +AWKOBJS2 = missing$O msg$O node$O re$O version$O +AWKOBJS = $(AWKOBJS1) $(AWKOBJS2) + +ALLOBJS = $(AWKOBJS) awktab$O getid$O $(OBJ) + +# GNUOBJS +# GNU stuff that gawk uses as library routines. +GNUOBJS= getopt$O getopt1$O regex$O dfa$O + +GAWKOBJS = $(ALLOBJS) $(GNUOBJS) + +# clear out suffixes list +# .SUFFIXES: +.SUFFIXES: .c $O + +.c$O: + $(CC) -c $(CFLAGS) $< + +# rules to build gawk +all : gawk.exe + +gawk.exe:: $(ALLOBJS) $(GNUOBJS) $(RSP) + $($(LINK)) + $($(BIND)) + +$(RSPFILE) : $(GAWKOBJS) + echo $(AWKOBJS1)$P > $@ + echo $(AWKOBJS2)$P >> $@ + echo awktab$O getid$O $(OBJ) $(GNUOBJS)$P >> $@ + +$(ALLOBJS): awk.h dfa.h regex.h config.h + +gawkmisc$O: pc/gawkmisc.pc + +getopt$O: getopt.h + +getopt1$O: getopt.h + +main$O: patchlevel.h + +# A bug in ndmake requires the following rule +awktab$O: awk.h awktab.c + $(CC) -c $(CFLAGS) awktab.c + +awktab.c: awk.y + bison -o $@ awk.y + +alloca$O: alloca.c + +#.PRECIOUS: install +#.PHONY: install + +install: install$(install) + +install1: + echo extproc sh $(prefix)/bin/igawk.cmd > igawk.cmd + echo shift >> igawk.cmd + cat pc/awklib/igawk >> igawk.cmd + sed "s;igawk;$(prefix)/bin/igawk;" pc/awklib/igawk.bat > igawk.bat + sh mkinstal.sh $(prefix)/bin + sh mkinstal.sh $(prefix)/lib/awk $(prefix)/man/man1 $(prefix)/info + cp gawk.exe igawk.bat igawk.cmd pc/awklib/igawk $(prefix)/bin + cp awklib/eg/lib/* pc/awklib/igawk.awk $(prefix)/lib/awk + cp doc/*.1 $(prefix)/man/man1 + cp doc/gawk.info $(prefix)/info + +# install2 is equivalent to install1, but doesn't require cp, sed, etc. +install2: + gawk -v prefix=$(prefix) -f install.awk + +clean: + rm -rf gawk gawk.exe *.o *.obj core a.out $(RSPFILE) +# cd doc && $(MAKE) clean +# cd test && $(MAKE) clean +# cd awklib && $(MAKE) clean + +awklib/eg: doc/gawk.texi + rm -fr awklib/eg + sh -c "cd awklib && ../gawk -f extract.awk ../doc/gawk.texi" + +check: + cd test && $(MAK) -k AWK=../gawk.exe + +test: check |