# Descrip.MMS -- Makefile for building GNU awk on VMS. # # usage: # $ MMS /Description=[.vms]Descrip.MMS gawk # possibly add `/Macro=("GNUC=1")' to compile with GNU C, # or add `/Macro=("GNUC=1","DO_GNUC_SETUP=1")' to compile with GNU C # on a system where GCC is not installed as a defined command, # or add `/Macro=("VAXC=1")' to compile with VAX C, # or add `/Macro=("VAXC=1","CC=cc/VAXC")' to compile with VAX C on # a system which has DEC C installed as the default compiler. # # gawk.exe : # This is the default target. DEC C has become the default compiler. # # awkgram.c : # If you don't have bison but do have VMS POSIX or DEC/Shell, # change the PARSER and PASERINIT macros to use yacc. If you don't # have either yacc or bison, you'll have to make sure that the # distributed version of "awkgram.c" has its modification date later # than the date of "awkgram.y", so that MMS won't try to build that # target. If you use bison and it is already defined system-wide, # comment out the PARSERINIT definition. # # command.c : # Similar to awkgram.c; built from command.y with yacc or bison. # # install.help : # You can make the target 'install.help' to load the VMS help text # into a help library. Modify the HELPLIB macro if you don't want # to put entry into the regular VMS library. (If you use an alternate # help library, it must already exist; this target won't create it.) # # gawk.dvi : # If you have TeX, you can make the target 'gawk.dvi' to process # _The_GAWK_Manual_ from gawk.texi. You'll need to use a device # specific post-processor on gawk.dvi in order to get printable data. # The full output is approximately 325 pages. # # location of various source files, relative to the 'main' directory SUPPORT = [.support] VMSDIR = [.vms] DOCDIR = [.doc] MISSNGD = [.missing_d] MAKEFILE = $(VMSDIR)Descrip.MMS # debugging &c !'ccflags' is an escape to allow external compile flags #CCFLAGS = /noOpt/Debug # a comma separated list of macros to define # Do not specify _POSIX_EXIT here, other tricks are used for this. CDEFS = "GAWK","HAVE_CONFIG_H" .ifdef GNUC # assumes VAX CC = gcc CFLAGS = /Incl=([],$(VMSDIR))/Obj=[]/Def=($(CDEFS)) $(CCFLAGS) LIBS = gnu_cc:[000000]gcclib.olb/Library,sys$library:vaxcrtl.olb/Library .ifdef DO_GNUC_SETUP # in case GCC command verb needs to be manually defined .first set command gnu_cc:[000000]gcc .endif !DO_GNUC_SETUP .else !!GNUC .ifdef VAXC # always VAX; versions of VAX C older than V3.2 won't work CC = cc CFLAGS = /Incl=[]/Obj=[]/Opt=noInline/Def=($(CDEFS)) $(CCFLAGS) LIBS = sys$share:vaxcrtl.exe/Shareable .else !!VAXC # neither GNUC nor VAXC, assume DECC (same for either VAX or Alpha) .ifdef __VAX__ CFLOAT = .else CFLOAT = /float=ieee/ieee_mode=denorm_results .endif CNAME = /NAME=(AS_IS,SHORT) CC = cc/DECC/Prefix=All/NESTED_INCLUDE=NONE$(CFLOAT) CINC1 = [],[.VMS],$(SUPPORT) CFLAGS = /Incl=($(CINC1))/Obj=[]/Def=($(CDEFS))$(CNAME) $(CCFLAGS) CEFLAGS = /Incl=($(CINC1),[.missing_d],[.extension])$(CNAME) $(CCFLAGS) LIBS = # DECC$SHR instead of VAXCRTL, no special link option needed .endif !VAXC .endif !GNUC PARSER = bison PARSERINIT = set command gnu_bison:[000000]bison #PARSER = yacc #PARSERINIT = yacc := posix/run/path=posix """/bin/yacc" #PARSERINIT = yacc := $shell$exe:yacc # this is used for optional target 'install.help' HELPLIB = sys$help:helplib.hlb #HELPLIB = sys$help:local.hlb # ######## nothing below this line should need to be changed ######## # ECHO = write sys$output NOOP = continue # object files GAWKOBJ = eval.obj,profile.obj AWKOBJ1 = array.obj,awkgram.obj,builtin.obj,cint_array.obj,\ command.obj,debug.obj,dfa.obj,ext.obj,field.obj,\ floatcomp.obj,gawkapi.obj,gawkmisc.obj,getopt.obj,getopt1.obj AWKOBJ2 = int_array.obj,io.obj,localeinfo.obj,main.obj,mpfr.obj,msg.obj,\ node.obj,random.obj,re.obj,regex.obj,replace.obj,\ str_array.obj,symbol.obj,version.obj AWKOBJS = $(AWKOBJ1),$(AWKOBJ2) # VMSOBJS # VMS specific stuff VMSCODE = vms_misc.obj,vms_popen.obj,vms_fwrite.obj,vms_args.obj,\ vms_gawk.obj,vms_cli.obj,vms_crtl_init.obj VMSCMD = gawk_cmd.obj # built from .cld file VMSOBJS = $(VMSCODE),$(VMSCMD) DOCS= $(DOCDIR)gawk.1,$(DOCDIR)gawk.texi,$(DOCDIR)texinfo.tex # generic target all : gawk gawk_debug @ $(NOOP) # dummy target to allow building "gawk" in addition to explicit "gawk.exe" gawk : gawk.exe @ $(ECHO) "$< is upto date" gawk_debug : gawk_debug.exe @ $(ECHO) "$< is upto date" # rules to build gawk gawk.exe : $(GAWKOBJ) $(AWKOBJS) $(VMSOBJS) gawk.opt $(LINK) $(LINKFLAGS)/EXE=$(MMS$TARGET) gawk.opt/options gawk_debug.exe : $(GAWKOBJ) $(AWKOBJS) $(VMSOBJS) gawk.opt $(LINK) $(LINKFLAGS)/DEBUG/EXE=$(MMS$TARGET) gawk.opt/options gawk.opt : $(MAKEFILE) config.h # create linker options file @ open/write opt sys$disk:[]gawk.opt ! ~ 'cat <gawk.opt' @ write opt "! GAWK -- GNU awk" @ write opt "$(GAWKOBJ)" @ write opt "$(AWKOBJ1)" @ write opt "$(AWKOBJ2)" @ write opt "$(VMSOBJS)" @ write opt "psect_attr=environ,noshr !extern [noshare] char **" @ write opt "stack=48 !preallocate more pages (default is 20)" @ write opt "iosegment=128 !ditto (default is 32)" @ write opt "$(LIBS)" @ close opt $ @$(VMSDIR)gawk_ident.com $(VMSCODE) : awk.h config.h $(VMSDIR)redirect.h $(VMSDIR)vms.h $(AWKOBJS) : awk.h gettext.h mbsupport.h $(SUPPORT)regex.h \ $(SUPPORT)dfa.h config.h $(VMSDIR)redirect.h $(GAWKOBJ) : awk.h config.h $(VMSDIR)redirect.h #----------------------------------------------------------------------------- # Older versions of MMS have problems handling lower case file names typically # found on ODS-5 disks. Fix this by adding explicit dependencies. #_____________________________________________________________________________ array.obj : array.c awkgram.obj : awkgram.c awk.h builtin.obj : builtin.c floatmagic.h $(SUPPORT)random.h cint_array.obj : cint_array.c command.obj : command.c cmd.h debug.obj : debug.c cmd.h dfa.obj : $(SUPPORT)dfa.c $(SUPPORT)dfa.h ext.obj : ext.c eval.obj : eval.c field.obj : field.c floatcomp.obj : floatcomp.c gawkaoi.obj : gawkapi.c gawkmisc.obj : gawkmisc.c $(VMSDIR)gawkmisc.vms getopt.obj : $(SUPPORT)getopt.c getopt1.obj : $(SUPPORT)getopt1.c int_array.obj : int_array.c io.obj : io.c localeinfo.obj : $(SUPPORT)localeinfo.c main.obj : main.c msg.obj : msg.c mpfr.obj : mpfr.c node.obj : node.c profile.obj : profile.c random.obj : $(SUPPORT)random.c $(SUPPORT)random.h re.obj : re.c regex.obj : $(SUPPORT)regex.c $(SUPPORT)regcomp.c \ $(SUPPORT)regex_internal.c $(SUPPORT)regexec.c \ $(SUPPORT)regex.h $(SUPPORT)regex_internal.h str_array.obj : str_array.c symbol.obj : symbol.c version.obj : version.c vms_misc.obj : $(VMSDIR)vms_misc.c vms_popen.obj : $(VMSDIR)vms_popen.c vms_fwrite.obj : $(VMSDIR)vms_fwrite.c vms_args.obj : $(VMSDIR)vms_args.c vms_gawk.obj : $(VMSDIR)vms_gawk.c vms_cli.obj : $(VMSDIR)vms_cli.c vms_crtl_init.obj : $(VMSDIR)vms_crtl_init.c replace.obj : replace.c $(MISSNGD)system.c $(MISSNGD)memcmp.c \ $(MISSNGD)memcpy.c $(MISSNGD)memset.c $(MISSNGD)memmove.c \ $(MISSNGD)strncasecmp.c $(MISSNGD)strerror.c \ $(MISSNGD)strftime.c $(MISSNGD)strchr.c $(MISSNGD)strtod.c \ $(MISSNGD)strtoul.c $(MISSNGD)tzset.c $(MISSNGD)mktime.c \ $(MISSNGD)snprintf.c $(MISSNGD)getaddrinfo.c \ $(MISSNGD)usleep.c \ $(MISSNGD)setenv.c $(MISSNGD)strcoll.c $(MISSNGD)wcmisc.c # bison or yacc have not been ported to current VMS versions # When that changes, this can be restored. # bison or yacc required # awkgram.c : awkgram.y # foo.y :: yacc => y[_]tab.c, bison => foo_tab.c # @- if f$search("ytab.c") .nes."" then delete ytab.c;* !POSIX yacc # @- if f$search("y_tab.c") .nes."" then delete y_tab.c;* !DEC/Shell yacc # @- if f$search("awkgram_tab.c").nes."" then delete awkgram_tab.c;* !bison # - $(PARSERINIT) # $(PARSER) $(YFLAGS) $< # @- if f$search("ytab.c") .nes."" then rename/new_vers ytab.c $@ # @- if f$search("y_tab.c") .nes."" then rename/new_vers y_tab.c $@ # @- if f$search("awkgram_tab.c").nes."" then \ # rename/new_vers awkgram_tab.c $@ # command.c : command.y # @- if f$search("ytab.c") .nes."" then delete ytab.c;* # @- if f$search("y_tab.c") .nes."" then delete y_tab.c;* # @- if f$search("command_tab.c").nes."" then delete command_tab.c;* # - $(PARSERINIT) # $(PARSER) $(YFLAGS) $< # @- if f$search("ytab.c") .nes."" then rename/new_vers ytab.c $@ # @- if f$search("y_tab.c") .nes."" then rename/new_vers y_tab.c $@ # @- if f$search("command_tab.c").nes."" then \ # rename/new_vers command_tab.c $@ config_vms.h : $(VMSDIR)generate_config_vms_h_gawk.com $ @$(VMSDIR)generate_config_vms_h_gawk.com config.h : configh.in config_vms.h $(VMSDIR)config_h.com $ @$(VMSDIR)config_h.com $(VMSCMD) : $(VMSDIR)gawk.cld set command $(CLDFLAGS)/object=$@ $< # special target for loading the help text into a VMS help library install.help : $(VMSDIR)gawk.hlp library/help $(HELPLIB) $< /log # Build dynamic extensions - Alpha/Itanium only. .ifdef __VAX__ # VAX not complete yet. plug_opt = [.VMS.VAX]gawk_plugin_xfer.opt .else plug_opt = [.vms]gawk_plugin.opt .endif ext_gawkdirfd_h = [.extension]gawkdirfd.h config.h nonposix.h extensions : filefuncs.exe fnmatch.exe inplace.exe ordchr.exe readdir.exe \ revoutput.exe revtwoway.exe rwarray.exe testext.exe time.exe filefuncs.exe : filefuncs.obj stack.obj gawkfts.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), stack.obj, gawkfts.obj, \ $(plug_opt)/opt fnmatch.exe : fnmatch.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt inplace.exe : inplace.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt ordchr.exe : ordchr.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt readdir.exe : readdir.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt revoutput.exe : revoutput.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt revtwoway.exe : revtwoway.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt rwarray.exe : rwarray.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt testext.exe : testext.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt time.exe : time.obj $(plug_opt) link/share=$(MMS$TARGET) $(MMS$SOURCE), $(plug_opt)/opt stack.obj : [.extension]stack.c config.h gawkapi.h \ [.extension]gawkfts.h, [.extension]stack.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) gawkfts.obj : [.extension]gawkfts.c config.h [.extension]gawkfts.h \ $(ext_gawkdirfd_h) $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H, ZOS_USS, "fchdir(x)=(-1)") \ /object=$(MMS$TARGET) $(MMS$SOURCE) filefuncs.obj : [.extension]filefuncs.c config.h gawkapi.h \ [.extension]gawkfts.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) fnmatch.obj : [.extension]fnmatch.c config.h gawkapi.h \ [.missing_d]fnmatch.h [.missing_d]fnmatch.c $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) inplace.obj : [.extension]inplace.c config.h gawkapi.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) ordchr.obj : [.extension]ordchr.c config.h gawkapi.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) readdir.obj : [.extension]readdir.c config.h gawkapi.h \ $(ext_gawkdirfd_h) $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H, HAVE_DIRENT_H) \ /object=$(MMS$TARGET) $(MMS$SOURCE) revoutput.obj : [.extension]revoutput.c config.h gawkapi.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) revtwoway.obj : [.extension]revtwoway.c config.h gawkapi.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H, HAVE_GETDTABLESIZE) \ /object=$(MMS$TARGET) $(MMS$SOURCE) rwarray.obj : [.extension]rwarray.c config.h gawkapi.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) testext.obj : [.extension]testext.c config.h gawkapi.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) time.obj : [.extension]time.c config.h gawkapi.h $(CC)$(CEFLAGS)/define=(HAVE_CONFIG_H)/object=$(MMS$TARGET) $(MMS$SOURCE) # miscellaneous other targets tidy : - if f$search("*.*;-1").nes."" then purge - if f$search("[.*]*.*;-1").nes."" then purge [.*] clean : - if f$search ("*.obj") .nes. "" then delete *.obj;* - if f$search ("*.lis") .nes. "" then delete *.lis;* - if f$search ("gawk.opt") .nes. "" then delete gawk.opt;* spotless : clean tidy - if f$search("config.h").nes."" then delete config.h;* - if f$search("config_vms.h").nes."" then delete config_vms.h;* - if f$search("gawk.exe").nes."" then delete gawk.exe;* - if f$search("*.dsf").nes."" then delete *.dsf;* - if f$search("*.map").nes."" then delete *.map;* - if f$search("*.pcsi$desc").nes."" then delete *.pcsi$desc;* - if f$search("*.pcsi$text").nes."" then delete *.pcsi$text;* - if f$search("gawk*_src.bck").nes."" then delete gawk*_src.bck;* - if f$search("*.release_notes").nes."" then delete *.release_notes;* - if f$search("filefuncs.exe").nes."" then delete filefuncs.exe;* - if f$search("fnmatch.exe").nes."" then delete fnmatch.exe;* - if f$search("inplace.exe").nes."" then delete inplace.exe;* - if f$search("ordchr.exe").nes."" then delete ordchr.exe;* - if f$search("readdir.exe").nes."" then delete readdir.exe;* - if f$search("revoutput.exe").nes."" then delete revoutput.exe;* - if f$search("revtwoway.exe").nes."" then delete revtwoway.exe;* - if f$search("rwarray.exe").nes."" then delete rwarray.exe;* - if f$search("testext.exe").nes."" then delete testext.exe;* - if f$search("time.exe").nes."" then delete time.exe;* - if f$search("gawk_verb.cld").nes."" then delete gawk_verb.cld;* - if f$search("gawk.dvi").nes."" then delete gawk.dvi;* - if f$search("[.doc]texindex.exe").nes."" then \ delete [.doc]texindex.exe;* - if f$search("[.cxx_repository]*.*;").nes."" then \ delete [.cxx_repository]*.*;* # # Note: this only works if you kept a copy of [.support]texindex.c # from a gawk 2.x distribution and put it into [.doc]texindex.c. # Also, depending on the fonts available with the version of TeX # you have, you might need to edit [.doc]texinfo.tex and change # the reference to "lcircle10" to be "circle10". # # build gawk.dvi from within the 'doc' subdirectory # gawk.dvi : [.doc]texindex.exe [.doc]gawk.texi @ set default [.doc] @ write sys$output " Warnings from TeX are expected during the first pass" TeX gawk.texi mcr []texindex gawk.cp gawk.fn gawk.ky gawk.pg gawk.tp gawk.vr @ write sys$output " Second pass" TeX gawk.texi mcr []texindex gawk.cp gawk.fn gawk.ky gawk.pg gawk.tp gawk.vr @ write sys$output " Third (final) pass" TeX gawk.texi -@ purge -@ delete \ gawk.lis;,.aux;,gawk.%%;,.cps;,.fns;,.kys;,.pgs;,.toc;,.tps;,.vrs; @ rename/new_vers gawk.dvi [-]*.* @ set default [-] # Note: [.doc]texindex.c is not included with the gawk 3.x distribution. # Expect lots of "implicitly declared function" diagnostics from DEC C. # [.doc]texindex.exe : [.doc]texindex.c @ set default [.doc] $(CC) /noOpt/noList/Define=("lines=tlines") texindex.c @ open/Write opt texindex.opt @ write opt "texindex.obj" @ write opt "$(LIBS)" @ close opt $(LINK) /noMap/Exe=texindex.exe texindex.opt/Options -@ delete texindex.obj;*,texindex.opt;* @ set default [-] #eof