1$! VMS build procedure for flex 2.5.x;
2$ v = 'f$verify(0)' 
3$!
4$! usage:
5$!  $ @[.MISC.VMS]BUILD.COM compiler parser [test]
6$!	where `compiler' is either "GNUC" or "DECC" or "VAXC" or empty
7$!	  and `parser' is either "BISON" or "BYACC" or "YACC" or empty
8$!	  and `[test]' is either "CHECK-ONLY" or "NO-CHECK" or empty
9$!	empty compiler defaults to VAX C (even under Alpha/VMS);
10$!	special "LINK" compiler value does link without compilation;
11$!	empty parser defaults to using supplied parse code in [.MISC];
12$!	optional test is performed by default.
13$!
14$
15$! we start from [.MISC.VMS], then move to the main source directory
16$ where = f$parse("_._;",f$environ("PROCEDURE")) - "_._;"
17$ set default 'where'
18$ brkt = f$extract(f$length(where)-1,1,where)
19$ if f$locate(".MISC.VMS"+brkt,where).lt.f$length(where) then -
20	set default 'f$string(f$extract(0,1,f$dir()) + "-.-" + brkt)'
21$
22$ p1 := 'p1'
23$ p2 := 'p2'
24$ p3 := 'p3'
25$ if p1.eqs."LINK" then goto link
26$ if p3.eqs."CHECK-ONLY" then goto check
27$ p2 = p2 - "_PARSER"
28$!
29$ CDEFS = "/Define=(""VMS"")"		! =(""VMS"",""DEFAULT_CSIZE=256"")
30$!
31$ if p1.eqs."GNUC"
32$ then	CC	= "gcc"
33$	CFLAGS	= "/noList/Opt=2/Debug/noVerbose"
34$	LIBS	= "gnu_cc:[000000]gcclib.olb/Library, sys$library:vaxcrtl.olb/Library"
35$ else	CC	= "cc"
36$  if p1.eqs."DECC"
37$  then CFLAGS	= "/noList/Prefix=All"
38$	LIBS	= ""
39$	if f$trnlnm("DECC$CC_DEFAULT").nes."" then CC = CC + "/DECC"
40$  else CFLAGS	= "/noList/Optimize=noInline"
41$	LIBS	= "sys$share:vaxcrtl.exe/Shareable"
42$	if f$trnlnm("DECC$CC_DEFAULT").nes."" then CC = CC + "/VAXC"
43$	if p1.nes."" .and. p1.nes."VAXC" then  exit %x002C
44$  endif
45$ endif
46$!
47$	no_parser = 0
48$ if p2.eqs."BISON"
49$ then	YACC	  = "bison"
50$	YACCFLAGS = "/Defines/Fixed_Outfiles"
51$	ALLOCA	  = ",[]alloca.obj"
52$ else
53$	YACCFLAGS = "-d"
54$	ALLOCA	  = ""
55$  if p2.eqs."BYACC" .or. p2.eqs."YACC"
56$  then	YACC	  = f$edit(p2,"LOWERCASE")
57$  else	YACC	  = "! yacc"
58$	if p2.nes."" .and. p2.nes."NO" .and. p2.nes."NONE" then	exit %x002C
59$	no_parser = 1
60$  endif
61$ endif
62$!
63$ ECHO	 = "write sys$output"
64$ COPY	 = "copy_"
65$ MOVE	 = "rename_/New_Vers"
66$ MUNG	 = "search_/Exact/Match=NOR"
67$ PURGE	 = "purge_/noConfirm/noLog"
68$ REMOVE = "delete_/noConfirm/noLog"
69$ TPU	 = "edit_/TPU/noJournal/noDisplay/noSection"
70$!
71$ if v then set verify
72$!
73$ 'COPY' [.misc.vms]vms-conf.h config.h
74$ 'COPY' [.misc.vms]vms-code.c vms-code.c
75$ 'COPY' [.misc]flex.man flex.doc
76$ if ALLOCA.nes."" then 'COPY' [.MISC]alloca.c alloca.c
77$ 'COPY' initscan.c scan.c	!make.bootstrap
78$!
79$ if f$search("skel.c").nes."" then -
80     if f$cvtime(f$file_attr("skel.c","RDT")).gts. -
81	f$cvtime(f$file_attr("flex.skl","RDT")) then goto skip_mkskel
82$ 'TPU' /Command=[.misc.vms]mkskel.tpu flex.skl /Output=skel.c
83$skip_mkskel:
84$!
85$ if f$search("parse.c").nes."" .and. f$search("parse.h").nes."" then -
86     if f$cvtime(f$file_attr("parse.c","RDT")).gts. -
87	f$cvtime(f$file_attr("parse.y","RDT")) then goto skip_yacc
88$ if f$search("y_tab.%").nes."" then 'REMOVE' y_tab.%;*
89$ if no_parser
90$ then	'COPY' [.misc]parse.% sys$disk:[]y_tab.*
91$ else	'YACC' 'YACCFLAGS' parse.y
92$ endif
93$ 'MUNG' y_tab.c "#module","#line" /Output=parse.c
94$ 'REMOVE' y_tab.c;*
95$ 'MOVE' y_tab.h parse.h
96$skip_yacc:
97$!
98$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] ccl.c
99$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] dfa.c
100$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] ecs.c
101$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] gen.c
102$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] main.c
103$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] misc.c
104$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] nfa.c
105$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] parse.c
106$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] scan.c
107$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] skel.c
108$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] sym.c
109$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] tblcmp.c
110$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] yylex.c
111$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] vms-code.c
112$ if ALLOCA.nes."" then -	!bison
113  'CC' 'CFLAGS' /Define=("STACK_DIRECTION=-1","xmalloc=yy_flex_xmalloc") alloca.c
114$!
115$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] libmain.c
116$ 'CC' 'CFLAGS' 'CDEFS' /Include=[] libyywrap.c
117$ library/Obj flexlib.olb/Create libmain.obj,libyywrap.obj/Insert
118$ if f$search("flexlib.olb;-1").nes."" then 'PURGE' flexlib.olb
119$!
120$ open/Write optfile sys$disk:[]crtl.opt
121$ write optfile LIBS
122$ close optfile
123$ if f$search("crtl.opt;-1").nes."" then 'PURGE' crtl.opt
124$!
125$ version = "# flex ""2.5"""	!default, overridden by version.h
126$ open/Read/Error=v_h_2 hfile version.h
127$ read/End=v_h_1 hfile version
128$v_h_1: close/noLog hfile
129$v_h_2: version = f$element(1,"""",version)
130$ open/Write optfile sys$disk:[]ident.opt
131$ write optfile "identification=""flex ''version'"""
132$ close optfile
133$ if f$search("ident.opt;-1").nes."" then 'PURGE' ident.opt
134$!
135$link:
136$ link/noMap/Exe=flex.exe ccl.obj,dfa.obj,ecs.obj,gen.obj,main.obj,misc.obj,-
137	nfa.obj,parse.obj,scan.obj,skel.obj,sym.obj,tblcmp.obj,yylex.obj,-
138	vms-code.obj 'ALLOCA' ,flexlib.olb/Lib,-
139	sys$disk:[]crtl.opt/Opt,sys$disk:[]ident.opt/Opt
140$!
141$ if p3.eqs."NO-CHECK" .or. p3.eqs."NOCHECK" then goto done
142$
143$check:
144$ 'ECHO' ""
145$ 'ECHO' "  Checking with COMPRESSION="""""
146$ mcr sys$disk:[]flex.exe -t -p  scan.l > scan.chk
147$ diff_/Output=_NL:/Maximum_Diff=1 scan.c scan.chk
148$ if $status
149$ then	'ECHO' "  Test passed."
150$	'REMOVE' scan.chk;*
151$ else	'ECHO' "? Test failed!"
152$ endif
153$
154$done:
155$ exit
156