| $! VMS build procedure for flex 2.5.x; |
| $ v = 'f$verify(0)' |
| $! |
| $! usage: |
| $! $ @[.MISC.VMS]BUILD.COM compiler parser [test] |
| $! where `compiler' is either "GNUC" or "DECC" or "VAXC" or empty |
| $! and `parser' is either "BISON" or "BYACC" or "YACC" or empty |
| $! and `[test]' is either "CHECK-ONLY" or "NO-CHECK" or empty |
| $! empty compiler defaults to VAX C (even under Alpha/VMS); |
| $! special "LINK" compiler value does link without compilation; |
| $! empty parser defaults to using supplied parse code in [.MISC]; |
| $! optional test is performed by default. |
| $! |
| $ |
| $! we start from [.MISC.VMS], then move to the main source directory |
| $ where = f$parse("_._;",f$environ("PROCEDURE")) - "_._;" |
| $ set default 'where' |
| $ brkt = f$extract(f$length(where)-1,1,where) |
| $ if f$locate(".MISC.VMS"+brkt,where).lt.f$length(where) then - |
| set default 'f$string(f$extract(0,1,f$dir()) + "-.-" + brkt)' |
| $ |
| $ p1 := 'p1' |
| $ p2 := 'p2' |
| $ p3 := 'p3' |
| $ if p1.eqs."LINK" then goto link |
| $ if p3.eqs."CHECK-ONLY" then goto check |
| $ p2 = p2 - "_PARSER" |
| $! |
| $ CDEFS = "/Define=(""VMS"")" ! =(""VMS"",""DEFAULT_CSIZE=256"") |
| $! |
| $ if p1.eqs."GNUC" |
| $ then CC = "gcc" |
| $ CFLAGS = "/noList/Opt=2/Debug/noVerbose" |
| $ LIBS = "gnu_cc:[000000]gcclib.olb/Library, sys$library:vaxcrtl.olb/Library" |
| $ else CC = "cc" |
| $ if p1.eqs."DECC" |
| $ then CFLAGS = "/noList/Prefix=All" |
| $ LIBS = "" |
| $ if f$trnlnm("DECC$CC_DEFAULT").nes."" then CC = CC + "/DECC" |
| $ else CFLAGS = "/noList/Optimize=noInline" |
| $ LIBS = "sys$share:vaxcrtl.exe/Shareable" |
| $ if f$trnlnm("DECC$CC_DEFAULT").nes."" then CC = CC + "/VAXC" |
| $ if p1.nes."" .and. p1.nes."VAXC" then exit %x002C |
| $ endif |
| $ endif |
| $! |
| $ no_parser = 0 |
| $ if p2.eqs."BISON" |
| $ then YACC = "bison" |
| $ YACCFLAGS = "/Defines/Fixed_Outfiles" |
| $ ALLOCA = ",[]alloca.obj" |
| $ else |
| $ YACCFLAGS = "-d" |
| $ ALLOCA = "" |
| $ if p2.eqs."BYACC" .or. p2.eqs."YACC" |
| $ then YACC = f$edit(p2,"LOWERCASE") |
| $ else YACC = "! yacc" |
| $ if p2.nes."" .and. p2.nes."NO" .and. p2.nes."NONE" then exit %x002C |
| $ no_parser = 1 |
| $ endif |
| $ endif |
| $! |
| $ ECHO = "write sys$output" |
| $ COPY = "copy_" |
| $ MOVE = "rename_/New_Vers" |
| $ MUNG = "search_/Exact/Match=NOR" |
| $ PURGE = "purge_/noConfirm/noLog" |
| $ REMOVE = "delete_/noConfirm/noLog" |
| $ TPU = "edit_/TPU/noJournal/noDisplay/noSection" |
| $! |
| $ if v then set verify |
| $! |
| $ 'COPY' [.misc.vms]vms-conf.h config.h |
| $ 'COPY' [.misc.vms]vms-code.c vms-code.c |
| $ 'COPY' [.misc]flex.man flex.doc |
| $ if ALLOCA.nes."" then 'COPY' [.MISC]alloca.c alloca.c |
| $ 'COPY' initscan.c scan.c !make.bootstrap |
| $! |
| $ if f$search("skel.c").nes."" then - |
| if f$cvtime(f$file_attr("skel.c","RDT")).gts. - |
| f$cvtime(f$file_attr("flex.skl","RDT")) then goto skip_mkskel |
| $ 'TPU' /Command=[.misc.vms]mkskel.tpu flex.skl /Output=skel.c |
| $skip_mkskel: |
| $! |
| $ if f$search("parse.c").nes."" .and. f$search("parse.h").nes."" then - |
| if f$cvtime(f$file_attr("parse.c","RDT")).gts. - |
| f$cvtime(f$file_attr("parse.y","RDT")) then goto skip_yacc |
| $ if f$search("y_tab.%").nes."" then 'REMOVE' y_tab.%;* |
| $ if no_parser |
| $ then 'COPY' [.misc]parse.% sys$disk:[]y_tab.* |
| $ else 'YACC' 'YACCFLAGS' parse.y |
| $ endif |
| $ 'MUNG' y_tab.c "#module","#line" /Output=parse.c |
| $ 'REMOVE' y_tab.c;* |
| $ 'MOVE' y_tab.h parse.h |
| $skip_yacc: |
| $! |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] ccl.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] dfa.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] ecs.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] gen.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] main.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] misc.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] nfa.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] parse.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] scan.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] skel.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] sym.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] tblcmp.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] yylex.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] vms-code.c |
| $ if ALLOCA.nes."" then - !bison |
| 'CC' 'CFLAGS' /Define=("STACK_DIRECTION=-1","xmalloc=yy_flex_xmalloc") alloca.c |
| $! |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] libmain.c |
| $ 'CC' 'CFLAGS' 'CDEFS' /Include=[] libyywrap.c |
| $ library/Obj flexlib.olb/Create libmain.obj,libyywrap.obj/Insert |
| $ if f$search("flexlib.olb;-1").nes."" then 'PURGE' flexlib.olb |
| $! |
| $ open/Write optfile sys$disk:[]crtl.opt |
| $ write optfile LIBS |
| $ close optfile |
| $ if f$search("crtl.opt;-1").nes."" then 'PURGE' crtl.opt |
| $! |
| $ version = "# flex ""2.5""" !default, overridden by version.h |
| $ open/Read/Error=v_h_2 hfile version.h |
| $ read/End=v_h_1 hfile version |
| $v_h_1: close/noLog hfile |
| $v_h_2: version = f$element(1,"""",version) |
| $ open/Write optfile sys$disk:[]ident.opt |
| $ write optfile "identification=""flex ''version'""" |
| $ close optfile |
| $ if f$search("ident.opt;-1").nes."" then 'PURGE' ident.opt |
| $! |
| $link: |
| $ link/noMap/Exe=flex.exe ccl.obj,dfa.obj,ecs.obj,gen.obj,main.obj,misc.obj,- |
| nfa.obj,parse.obj,scan.obj,skel.obj,sym.obj,tblcmp.obj,yylex.obj,- |
| vms-code.obj 'ALLOCA' ,flexlib.olb/Lib,- |
| sys$disk:[]crtl.opt/Opt,sys$disk:[]ident.opt/Opt |
| $! |
| $ if p3.eqs."NO-CHECK" .or. p3.eqs."NOCHECK" then goto done |
| $ |
| $check: |
| $ 'ECHO' "" |
| $ 'ECHO' " Checking with COMPRESSION=""""" |
| $ mcr sys$disk:[]flex.exe -t -p scan.l > scan.chk |
| $ diff_/Output=_NL:/Maximum_Diff=1 scan.c scan.chk |
| $ if $status |
| $ then 'ECHO' " Test passed." |
| $ 'REMOVE' scan.chk;* |
| $ else 'ECHO' "? Test failed!" |
| $ endif |
| $ |
| $done: |
| $ exit |