1$ save_verify='f$verify(0)
2$! set ver
3$!
4$!      Compile and link for xrubik
5$!
6$! USAGE:
7$! @make [debug clobber clean]
8$!       debug : compile with degugger switch
9$!       clean : clean all except executable
10$!       clobber : clean all
11$!
12$! If you have
13$!              XVMSUTILS library (VMS6.2 or lower) <NOT TESTED>
14$! insert the correct directory instead of X11:
15$ xvmsutilsf="X11:XVMSUTILS.OLB"
16$!
17$! Already assumes DEC C on Alpha.
18$! Assume VAX C on VAX.
19$ decc=0
20$! Assume DEC C on VAX.
21$! decc=1
22$!
23$ QUOTE = """""""""
24$ QUOTE = QUOTE + QUOTE + QUOTE
25$ score = "SCOREFILE=" + QUOTE + "[]rubik.scores" + QUOTE
26$ data = "DATAFILE=" + QUOTE + "[]rubik.data" + QUOTE
27$ defscore==''score'
28$ defdata==''data'
29$!
30$! NOTHING SHOULD BE MODIFIED BELOW
31$!
32$ if p1 .eqs. "CLEAN" then goto Clean
33$ if p1 .eqs. "CLOBBER" then goto Clobber
34$!
35$ axp=f$getsyi("HW_MODEL") .ge. 1024
36$ sys_ver=f$edit(f$getsyi("version"),"compress")
37$ if f$extract(0,1,sys_ver) .nes. "V"
38$ then
39$   type sys$input
40This script will assume that the operating system version is at least V7.0.
41$!
42$   sys_ver="V7.0"
43$ endif
44$ sys_maj=0+f$extract(1,1,sys_ver)
45$ if sys_maj .lt. 7
46$ then
47$   xvmsutils=f$search("''xvmsutilsf'") .nes. ""
48$ endif
49$!
50$!
51$! Create .opt file
52$ close/nolog optf
53$ open/write optf xrubik.opt
54$!
55$ defs=="VMS"
56$ if sys_maj .lt. 7
57$ then
58$   if xvmsutils then defs=="''defs',USE_XVMSUTILS"
59$ else
60$   defs=="''defs',SRAND=srand48,LRAND=lrand48,MAXRAND=2147483648.0"
61$ endif
62$ defs=="''defscore',''defdata',''defs'"
63$!
64$!
65$! Establish the Compiling Environment
66$!
67$! Set compiler command
68$ if axp
69$ then
70$   cc=="cc/standar=vaxc/define=(''defs')"
71$ else
72$   if decc
73$   then
74$     cc=="cc/decc/standard=vaxc/define=(''defs')"
75$   else ! VAX C
76$     cc=="cc/define=(''defs')"
77$   endif
78$ endif
79$ if p1 .eqs. "DEBUG" .or. p2 .eqs. "DEBUG" .or. p3 .eqs. "DEBUG"
80$ then
81$   if axp
82$   then
83$     cc=="cc/deb/noopt/standar=vaxc/define=(''defs')/list"
84$   else
85$     if decc
86$     then
87$       cc=="cc/deb/noopt/decc/standar=vaxc/define=(''defs')/list"
88$     else ! VAX C
89$       cc=="cc/deb/noopt/define=(''defs')/list"
90$     endif
91$   endif
92$   link=="link/deb"
93$ endif
94$!
95$ if axp .or. .not. decc
96$ then
97$   define/nolog sys sys$library
98$ endif
99$!
100$ write sys$output "Compiling XRubik with ''defs'"
101$ call make Rubik.obj   "cc Rubik.c"   Rubik.c RubikP.h Rubik.h
102$ call make Rubik2d.obj "cc Rubik2d.c" Rubik2d.c RubikP.h Rubik.h Rubik2dP.h Rubik2d.h
103$ call make Rubik3d.obj "cc Rubik3d.c" Rubik3d.c RubikP.h Rubik.h Rubik3dP.h Rubik3d.h
104$ call make RubikS.obj  "cc RubikS.c"  RubikS.c RubikP.h Rubik.h
105$ call make RubikU.obj  "cc RubikU.c"  RubikU.c RubikP.h Rubik.h
106$ call make rngs.obj    "cc rngs.c"    rngs.c
107$ call make xrubik.obj  "cc xrubik.c"  xrubik.c Rubik.h
108$!
109$! Get libraries
110$ if sys_maj .lt. 7
111$ then
112$   if xvmsutils then write optf "''xvmsutilsf'/lib"
113$ endif
114$! if .not. axp then write optf "sys$library:vaxcrtl/lib"
115$ write optf "sys$library:vaxcrtl/lib"
116$ if axp then write optf "sys$library:ucx$ipc_shr/share"
117$ if axp then write optf "sys$share:decw$xextlibshr/share"
118$ if axp then write optf "sys$share:decw$xtlibshrr5/share"
119$ if .not. axp then write optf "sys$library:ucx$ipc/lib"
120$! write optf "sys$share:decw$dxmlibshr/share"
121$ write optf "sys$share:decw$xmlibshr12/share"
122$ write optf "sys$share:decw$xlibshr/share"
123$ close optf
124$!
125$! LINK
126$ write sys$output "Linking XRubik"
127$ link/map xrubik/opt
128$!
129$! Create .opt file
130$ open/write optf xmrubik.opt
131$ write sys$output "Compiling XmRubik with ''defs'"
132$ call make Rubik.obj   "cc Rubik.c"   Rubik.c RubikP.h Rubik.h
133$ call make Rubik2d.obj "cc Rubik2d.c" Rubik2d.c RubikP.h Rubik.h Rubik2dP.h Rubik2d.h
134$ call make Rubik3d.obj "cc Rubik3d.c" Rubik3d.c RubikP.h Rubik.h Rubik3dP.h Rubik3d.h
135$ call make RubikS.obj  "cc RubikS.c"  RubikS.c RubikP.h Rubik.h
136$ call make RubikU.obj  "cc RubikU.c"  RubikU.c RubikP.h Rubik.h
137$ call make rngs.obj    "cc rngs.c"    rngs.c
138$ call make xmrubik.obj "cc xmrubik.c" xmrubik.c Rubik.h
139$! Get libraries
140$! if .not. axp then write optf "sys$library:vaxcrtl/lib"
141$ write optf "sys$library:vaxcrtl/lib"
142$ if axp then write optf "sys$library:ucx$ipc_shr/share"
143$ if axp then write optf "sys$share:decw$xextlibshr/share"
144$ if axp then write optf "sys$share:decw$xtlibshrr5/share"
145$ if .not. axp then write optf "sys$library:ucx$ipc/lib"
146$! write optf "sys$share:decw$dxmlibshr/share"
147$ write optf "sys$share:decw$xmlibshr12/share"
148$ write optf "sys$share:decw$xlibshr/share"
149$ close optf
150$!
151$! LINK
152$ write sys$output "Linking XmRubik"
153$ link/map xmrubik/opt
154$!
155$ set noverify
156$ exit
157$!
158$Clobber:      ! Delete executables, Purge directory and clean up object files
159$!                and listings
160$ delete/noconfirm/log xrubik.exe;*
161$ delete/noconfirm/log xmrubik.exe;*
162$!
163$Clean:        ! Purge directory, clean up object files and listings
164$ close/nolog optf
165$ purge
166$ delete/noconfirm/log *.lis;*
167$ delete/noconfirm/log *.obj;*
168$ delete/noconfirm/log *.opt;*
169$ delete/noconfirm/log *.map;*
170$!
171$ exit
172$!
173! SUBROUTINE TO CHECK DEPENDENCIES
174$ make: subroutine
175$   v='f$verify(0)
176$!   p1       What we are trying to make
177$!   p2       Command to make it
178$!   p3 - p8  What it depends on
179$
180$   if (f$extract(0,3,p2) .eqs. "cc ") then write optf "''p1'"
181$   if (f$extract(0,3,p2) .eqs. "CC ") then write optf "''p1'"
182$
183$   if f$search(p1) .eqs. "" then goto MakeIt
184$   time=f$cvtime(f$file(p1,"RDT"))
185$   arg=3
186$Loop:
187$   argument=p'arg
188$   if argument .eqs. "" then goto Exit
189$   el=0
190$Loop2:
191$   file=f$element(el," ",argument)
192$   if file .eqs. " " then goto Endl
193$   afile=""
194$Loop3:
195$   ofile=afile
196$   afile=f$search(file)
197$   if afile .eqs. "" .or. afile .eqs. ofile then goto NextEl
198$   if f$cvtime(f$file(afile,"RDT")) .gts. time then goto MakeIt
199$   goto Loop3
200$NextEL:
201$   el=el+1
202$   goto Loop2
203$EndL:
204$   arg=arg+1
205$   if arg .le. 8 then goto Loop
206$   goto Exit
207$
208$MakeIt:
209$   set verify
210$   'p2
211$   vv='f$verify(0)
212$Exit:
213$   if v then set verify
214$ endsubroutine
215