1$! $Id: vmsbuild.com,v 1.2 2014/04/06 19:08:57 tom Exp $
2$! VMS build-script for BYACC.  Requires installed C compiler
3$!
4$! Screen Configurations
5$! ---------------------
6$! To build BYACC, type:
7$!        $ @vmsbuild [BYACC [<compiler> [bld_target]]]
8$!
9$! where:
10$!        <compiler> :== { decc | vaxc }
11$!
12$! The default compiler on VAX hosts is vaxc, else decc (Alpha hosts).
13$!
14$! -----------------------------------------------------------
15$ hlp = f$edit("''p1'", "UPCASE")
16$ if "''hlp'" .eqs. "HELP" .or. -
17        "''hlp'" .eqs. "-H" .or. -
18                "''hlp'" .eqs. "-?" .or. -
19                        "''hlp'" .eqs. "?" then gosub usage
20$ goto start
21$!
22$ vaxc_config:
23$    comp       = "__vaxc__=1"
24$    CFLAGS     = "/VAXC"
25$    DEFS       = ",HAVE_STRERROR"
26$    using_vaxc = 1
27$    return
28$!
29$ decc_config:
30$    comp   = "__decc__=1"
31$    CFLAGS = "/DECC/prefix=all"
32$    DEFS   = ",HAVE_ALARM,HAVE_STRERROR"
33$    return
34$!
35$ usage:
36$    write sys$output "usage: "
37$    write sys$output "      $ @vmsbuild [BYACC [{decc | vaxc} [<bldtarget>]]]"
38$    exit 2
39$!
40$ start:
41$! -----------------------------------------------------------
42$! pickup user's compiler choice, if any
43$! -----------------------------------------------------------
44$!
45$ comp = ""
46$ using_vaxc = 0
47$ if "''p2'" .nes. "" 
48$ then
49$    comp = f$edit(p2, "UPCASE")
50$    if "''comp'" .eqs. "VAXC"
51$    then
52$        gosub vaxc_config
53$    else
54$        if "''comp'" .eqs. "DECC"
55$        then
56$            gosub decc_config
57$        else
58$            gosub usage
59$        endif
60$    endif
61$ endif
62$! -----------------------------------------------------------
63$!      Build the option-file
64$!
65$ open/write optf vms_link.opt
66$ write optf "closure.obj"
67$ write optf "error.obj"
68$ write optf "lalr.obj"
69$ write optf "lr0.obj"
70$ write optf "mkpar.obj"
71$ write optf "output.obj"
72$ write optf "reader.obj"
73$ write optf "yaccpar.obj"
74$ write optf "symtab.obj"
75$ write optf "verbose.obj"
76$ write optf "warshall.obj"
77$! ----------------------------------
78$! Look for the compiler used and specify architecture.
79$!
80$ CC = "CC"
81$ if f$getsyi("HW_MODEL").ge.1024
82$ then
83$  arch = "__alpha__=1"
84$  if "''comp'" .eqs. "" then gosub decc_config
85$ else
86$  arch = "__vax__=1"
87$  if "''comp'" .nes. "" then goto screen_config
88$  if f$search("SYS$SYSTEM:VAXC.EXE").nes.""
89$  then
90$   gosub vaxc_config
91$  else
92$   if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes.""
93$   then
94$    gosub decc_config
95$   else
96$    DEFS = ",HAVE_STRERROR"
97$    if f$trnlnm("GNU_CC").eqs.""
98$    then
99$     write sys$output "C compiler required to rebuild BYACC"
100$     close optf
101$     exit
102$    else
103$     write optf "gnu_cc:[000000]gcclib.olb/lib"
104$     comp = "__gcc__=1"
105$     CC = "GCC"
106$    endif
107$   endif
108$  endif
109$ endif
110$!
111$ screen_config:
112$!
113$ if using_vaxc .eq. 1 then write optf "sys$library:vaxcrtl.exe/share"
114$ close optf
115$! -------------- vms_link.opt is created -------------
116$ if f$edit("''p1'", "UPCASE") .eqs. "VMS_LINK.OPT"
117$ then
118$!  mms called this script to build vms_link.opt.  all done
119$   exit
120$ endif
121$!
122$ if f$search("SYS$SYSTEM:MMS.EXE").eqs.""
123$ then
124$!  can also use /Debug /Listing, /Show=All
125$
126$   CFLAGS := 'CFLAGS/Diagnostics /Define=("''DEFS'") /Include=([])
127$
128$  	if "''p3'" .nes. "" then goto 'p3
129$!
130$!
131$ all :
132$!
133$	call make closure
134$	call make error
135$	call make lalr
136$	call make lr0
137$	call make main
138$	call make mkpar
139$	call make output
140$	call make reader
141$	call make yaccpar
142$	call make symtab
143$	call make verbose
144$	call make warshall
145$!
146$	link /exec='target/map/cross main.obj, vms_link/opt
147$	goto build_last
148$!
149$ install :
150$	WRITE SYS$ERROR "** no rule for install"
151$	goto build_last
152$!
153$ clobber :
154$	if f$search("BYACC.com") .nes. "" then delete BYACC.com;*
155$	if f$search("*.exe") .nes. "" then delete *.exe;*
156$! fallthru
157$!
158$ clean :
159$	if f$search("*.obj") .nes. "" then delete *.obj;*
160$	if f$search("*.bak") .nes. "" then delete *.bak;*
161$	if f$search("*.lis") .nes. "" then delete *.lis;*
162$	if f$search("*.log") .nes. "" then delete *.log;*
163$	if f$search("*.map") .nes. "" then delete *.map;*
164$	if f$search("*.opt") .nes. "" then delete *.opt;*
165$! fallthru
166$!
167$ build_last :
168$	if f$search("*.dia") .nes. "" then delete *.dia;*
169$	if f$search("*.lis") .nes. "" then purge *.lis
170$	if f$search("*.obj") .nes. "" then purge *.obj
171$	if f$search("*.map") .nes. "" then purge *.map
172$	if f$search("*.opt") .nes. "" then purge *.opt
173$	if f$search("*.exe") .nes. "" then purge *.exe
174$	if f$search("*.log") .nes. "" then purge *.log
175$! fallthru
176$!
177$ vms_link_opt :
178$	exit 1
179$!
180$! Runs BYACC from the current directory (used for testing)
181$ byacc_com :
182$	if "''f$search("BYACC.com")'" .nes. "" then delete BYACC.com;*
183$	copy nl: BYACC.com
184$	open/append  test_script BYACC.com
185$	write test_script "$ temp = f$environment(""procedure"")"
186$	write test_script "$ temp = temp -"
187$	write test_script "		- f$parse(temp,,,""version"",""syntax_only"") -"
188$	write test_script "		- f$parse(temp,,,""type"",""syntax_only"")"
189$	write test_script "$ BYACC :== $ 'temp'.exe"
190$	write test_script "$ define/user_mode sys$input  sys$command"
191$	write test_script "$ define/user_mode sys$output sys$command"
192$	write test_script "$ BYACC 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8"
193$	close test_script
194$	write sys$output "** made BYACC.com"
195$	exit
196$!
197$  else
198$   mms/ignore=warning/macro=('comp','mmstar','arch') 'p3
199$  endif
200$ exit
201$ make: subroutine
202$	if f$search("''p1'.obj") .eqs. ""
203$	then
204$		write sys$output "compiling ''p1'"
205$		'CC 'CFLAGS 'p1.c
206$		if f$search("''p1'.dia") .nes. "" then delete 'p1.dia;*
207$	endif
208$exit
209$	return
210$ endsubroutine
211