tizen 2.3.1 release
[external/curl.git] / packages / vms / compare_curl_source.com
1 $! Compare_curl_source.com
2 $!
3 $! $Id$
4 $!
5 $! This procedure compares the files in two directories and reports the
6 $! differences.  It is customized for the vmsports repository layout.
7 $!
8 $! It needs to be customized to the local site directories.
9 $!
10 $! This is used by me for these purposes:
11 $!     1. Compare the original source of a project with an existing
12 $!        VMS port.
13 $!     2. Compare the checked out repository of a project with the
14 $!        the local working copy to make sure they are in sync.
15 $!     3. Keep a copy directory up to date.  The third is needed by
16 $!        me because VMS Backup can create a saveset of files from a
17 $!        NFS mounted volume.
18 $!
19 $! First the files in the original source directory which is assumed to be
20 $! under source codde control are compared with the copy directory.
21 $!
22 $! Then the files are are only in the copy directory are listed.
23 $!
24 $! The result will five diagnostics about of files:
25 $!    1. Files that are not generation 1.
26 $!    2. Files missing in the copy directory.
27 $!    3. Files in the copy directory not in the source directory.
28 $!    4. Files different from the source directory.
29 $!    5. Files that VMS DIFF can not process.
30 $!
31 $! This needs to be run on an ODS-5 volume.
32 $!
33 $! If UPDATE is given as a second parameter, files missing or different in the
34 $! copy directory will be updated.
35 $!
36 $! By default:
37 $!    The directory src_root:[project_name] will be translated to something like
38 $!    DISK:[dir.dir.reference.project_name] and this will be used
39 $!    to calculate DISK:[dir.dir.vms_source.project_name] for the VMS specific
40 $!    source directory.
41 $!
42 $!    The copy directory is vms_root:[project_name]
43 $!    The UPDATE parameter is ignored.
44 $!
45 $!    This setting is used to make sure that the working vms directory
46 $!    and the repository checkout directory have the same contents.
47 $!
48 $! If P1 is "SRCBCK" then this
49 $!     The source directory tree is: src_root:[project_name]
50 $!     The copy directory is src_root1:[project_name]
51 $!
52 $!   src_root1:[project_name] is used by me to work around that VMS backup will
53 $!   not use NFS as a source directory so I need to make a copy.
54 $!
55 $!   This is to make sure that the backup save set for the unmodified
56 $!   source is up to date.
57 $!
58 $!   If your repository checkout is not on an NFS mounted volume, you do not
59 $!   need to use this option or have the logical name src_root1 defined.
60 $!
61 $! If P1 is "VMSBCK" then this changes the two directories:
62 $!    The source directory is vms_root:[project_name]
63 $!    The copy directory is vms_root1:[project_name]
64 $!
65 $!   vms_root:[project_name] is where I do the VMS specific edits.
66 $!   vms_root1:[project_name] is used by me to work around that VMS backup will
67 $!   not use NFS as a source directory so I need to make a copy.
68 $!
69 $!   This is to make sure that the backup save set for the unmodified
70 $!   source is up to date.
71 $!
72 $! Copyright 2011, John Malmberg
73 $!
74 $! Permission to use, copy, modify, and/or distribute this software for any
75 $! purpose with or without fee is hereby granted, provided that the above
76 $! copyright notice and this permission notice appear in all copies.
77 $!
78 $! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
79 $! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
80 $! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
81 $! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
82 $! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
83 $! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
84 $! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
85 $!
86 $! 18-Aug-2011  J. Malmberg
87 $!==========================================================================
88 $!
89 $! Update missing/changed files.
90 $ update_file = 0
91 $ if (p2 .eqs. "UPDATE")
92 $ then
93 $   update_file = 1
94 $ endif
95 $!
96 $ myproc = f$environment("PROCEDURE")
97 $ myprocdir = f$parse(myproc,,,"DIRECTORY") - "[" - "]" - "<" - ">"
98 $ myprocdir = f$edit(myprocdir, "LOWERCASE")
99 $ mydefault = f$environment("DEFAULT")
100 $ mydir = f$parse(mydefault,,,"DIRECTORY")
101 $ mydir = f$edit(mydir, "LOWERCASE")
102 $ odelim = f$extract(0, 1, mydir)
103 $ mydir = mydir - "[" - "]" - "<" - ">"
104 $ mydev = f$parse(mydefault,,,"DEVICE")
105 $!
106 $ ref = ""
107 $ if P1 .eqs. ""
108 $ then
109 $   ref_base_dir = myprocdir
110 $   wrk_base_dir = mydir
111 $   update_file = 0
112 $   resultd = f$parse("src_root:",,,,"NO_CONCEAL")
113 $   resultd = f$edit(resultd, "LOWERCASE")
114 $   resultd = resultd - "][" - "><" - ".;" - ".."
115 $   resultd_len = f$length(resultd) - 1
116 $   delim = f$extract(resultd_len, 1, resultd)
117 $   ref_root_base = mydir + delim
118 $   resultd = resultd - ref_root_base - "reference." + "vms_source."
119 $   ref = resultd + ref_base_dir
120 $   wrk = "VMS_ROOT:" + odelim + wrk_base_dir
121 $   resultd_len = f$length(resultd) - 1
122 $   resultd = f$extract(0, resultd_len, resultd) + delim
123 $   ref_root_dir = f$parse(resultd,,,"DIRECTORY")
124 $   ref_root_dir = f$edit(ref_root_dir, "LOWERCASE")
125 $   ref_root_dir = ref_root_dir - "[" - "]"
126 $   ref_base_dir = ref_root_dir + "." + ref_base_dir
127 $ endif
128 $!
129 $ if p1 .eqs. "SRCBCK"
130 $ then
131 $   ref_base_dir = "curl"
132 $   wrk_base_dir = "curl"
133 $   ref = "src_root:[" + ref_base_dir
134 $   wrk = "src_root1:[" + wrk_base_dir
135 $   if update_file
136 $   then
137 $       if f$search("src_root1:[000000]curl.dir") .eqs. ""
138 $       then
139 $           create/dir/prot=o:rwed src_root1:[curl]
140 $       endif
141 $   endif
142 $ endif
143 $!
144 $!
145 $ if p1 .eqs. "VMSBCK"
146 $ then
147 $   ref_base_dir = "curl"
148 $   wrk_base_dir = "curl"
149 $   ref = "vms_root:[" + ref_base_dir
150 $   wrk = "vms_root1:[" + wrk_base_dir
151 $   if update_file
152 $   then
153 $       if f$search("vms_root1:[000000]curl.dir") .eqs. ""
154 $       then
155 $           create/dir/prot=o:rwed vms_root1:[curl]
156 $       endif
157 $   endif
158 $ endif
159 $!
160 $!
161 $ if ref .eqs. ""
162 $ then
163 $   write sys$output "Unknown compare type specified!"
164 $   exit 44
165 $ endif
166 $!
167 $!
168 $! Future - check the device types involved for the
169 $! the syntax to check.
170 $ ODS2_SYNTAX = 0
171 $ NFS_MANGLE = 0
172 $ PWRK_MANGLE = 0
173 $!
174 $ vax = f$getsyi("HW_MODEL") .lt. 1024
175 $ if vax
176 $ then
177 $   ODS2_SYNTAX = 1
178 $ endif
179 $!
180 $ report_missing = 1
181 $!
182 $ if .not. ODS2_SYNTAX
183 $ then
184 $   set proc/parse=extended
185 $ endif
186 $!
187 $loop:
188 $   ref_spec = f$search("''ref'...]*.*;",1)
189 $   if ref_spec .eqs. "" then goto loop_end
190 $!
191 $   ref_dev = f$parse(ref_spec,,,"DEVICE")
192 $   ref_dir = f$parse(ref_spec,,,"DIRECTORY")
193 $   ref_dir = f$edit(ref_dir, "LOWERCASE")
194 $   ref_name = f$parse(ref_spec,,,"NAME")
195 $   ref_type = f$parse(ref_spec,,,"TYPE")
196 $!
197 $!
198 $   rel_path = ref_dir - "[" - ref_base_dir
199 $!  rel_path_len = f$length(rel_path) - 1
200 $!  delim = f$extract(rel_path_len, 1, rel_path)
201 $!  rel_path = rel_path - ".]" - ".>" - "]" - ">"
202 $!  rel_path = rel_path + delim
203 $!
204 $   if ODS2_SYNTAX
205 $   then
206 $!       if rel_path .eqs. ".examples.scripts^.noah]"
207 $!       then
208 $!           rel_path = ".examples.scripts_noah]"
209 $!       endif
210 $!       if rel_path .eqs. ".examples.scripts^.v2]"
211 $!       then
212 $!           rel_path = ".examples.scripts_v2]"
213 $!       endif
214 $   endif
215 $!
216 $   wrk_path = wrk + rel_path
217 $!
218 $   ref_name_type = ref_name + ref_type
219 $!
220 $   if ODS2_SYNTAX
221 $   then
222 $   endif
223 $!
224 $   wrk_spec = wrk_path + ref_name_type
225 $!
226 $!
227 $   wrk_chk = f$search(wrk_spec, 0)
228 $   if wrk_chk .eqs. ""
229 $   then
230 $       if report_missing
231 $       then
232 $           write sys$output "''wrk_spec' is missing"
233 $        endif
234 $        if update_file
235 $        then
236 $            copy/log 'ref_spec' 'wrk_spec'
237 $        endif
238 $        goto loop
239 $   endif
240 $!
241 $   wrk_name = f$parse(wrk_spec,,,"NAME")
242 $   wrk_type = f$parse(wrk_spec,,,"TYPE")
243 $   wrk_fname = wrk_name + wrk_type"
244 $   ref_fname = ref_name + ref_type
245 $!
246 $   if ref_fname .nes. wrk_fname
247 $   then
248 $       write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'"""
249 $   endif
250 $!
251 $   ref_type = f$edit(ref_type, "UPCASE")
252 $   if ref_type .eqs. ".DIR" then goto loop
253 $!
254 $   if ODS2_SYNTAX
255 $   then
256 $       ref_fname = f$edit(ref_fname, "LOWERCASE")
257 $   endif
258 $!
259 $!  These files are in the wrong format for VMS diff, and we don't change them.
260 $   ref_skip = 0
261 $   if ref_type .eqs. ".PDF" then ref_skip = 1
262 $   if ref_type .eqs. ".HTML" then ref_skip = 1
263 $   if ref_type .eqs. ".HQX" then ref_skip = 1
264 $   if ref_type .eqs. ".P12" then ref_skip = 1
265 $   if ref_type .eqs. "."
266 $   then
267 $       if f$locate("test", ref_fname) .eq. 0 then ref_skip = 1
268 $       if ref_fname .eqs. "configure." then ref_skip = 1
269 $   endif
270 $   if ref_fname .eqs. "MACINSTALL.TXT" then ref_skip = 1
271 $   if ref_fname .eqs. "$macinstall.txt" then ref_skip = 1
272 $   if ref_fname .eqs. "curl.mcp$5nxml$5nsit$5nhqx" then ref_skip = 1
273 $   if ref_fname .eqs. "curl_GUSIConfig.cpp" then ref_skip = 1
274 $   if ref_fname .eqs. "curl_$gusic$onfig.cpp" then ref_skip = 1
275 $   if ref_fname .eqs. "macos_main.cpp" then ref_skip = 1
276 $!
277 $!
278 $   if ref_skip .ne. 0
279 $   then
280 $      if report_missing
281 $      then
282 $          write sys$output "Skipping diff of ''ref_fname'"
283 $      endif
284 $      goto loop
285 $   endif
286 $!
287 $!
288 $   wrk_ver = f$parse(wrk_chk,,,"VERSION")
289 $   if wrk_ver .nes. ";1"
290 $   then
291 $       write sys$output "Version for ''wrk_spec' is not 1"
292 $   endif
293 $   set noon
294 $   diff/out=nl: 'wrk_spec' 'ref_spec'
295 $   if $severity .nes. "1"
296 $   then
297 $       write sys$output "''wrk_spec' is different from ''ref_spec'"
298 $       if update_file
299 $       then
300 $           delete 'wrk_spec';*
301 $           copy/log 'ref_spec' 'wrk_spec'
302 $       endif
303 $   endif
304 $   set on
305 $
306 $!
307 $   goto loop
308 $loop_end:
309 $!
310 $!
311 $missing_loop:
312 $!  For missing loop, check the latest generation.
313 $   ref_spec = f$search("''wrk'...]*.*;")
314 $   if ref_spec .eqs. "" then goto missing_loop_end
315 $!
316 $   ref_dev = f$parse(ref_spec,,,"DEVICE")
317 $   ref_dir = f$parse(ref_spec,,,"DIRECTORY")
318 $   ref_dir = f$edit(ref_dir, "LOWERCASE")
319 $   ref_name = f$parse(ref_spec,,,"NAME")
320 $   ref_type = f$parse(ref_spec,,,"TYPE")
321 $   ref_name_type = ref_name + ref_type
322 $!
323 $   rel_path = ref_dir - "[" - wrk_base_dir
324 $!
325 $!
326 $   wrk_path = ref + rel_path
327 $   wrk_spec = wrk_path + ref_name + ref_type
328 $   wrk_name = f$parse(wrk_spec,,,"NAME")
329 $   wrk_type = f$parse(wrk_spec,,,"TYPE")
330 $!
331 $   wrk_fname = wrk_name + wrk_type"
332 $   ref_fname = ref_name + ref_type
333 $!
334 $   wrk_skip = 0
335 $   ref_utype = f$edit(ref_type,"UPCASE")
336 $   ref_ufname = f$edit(ref_fname,"UPCASE")
337 $!
338 $   if wrk_skip .eq. 0
339 $   then
340 $       wrk_chk = f$search(wrk_spec, 0)
341 $       if wrk_chk .eqs. ""
342 $       then
343 $           if report_missing
344 $           then
345 $               write sys$output "''wrk_spec' is missing"
346 $           endif
347 $           goto missing_loop
348 $       endif
349 $   else
350 $       goto missing_loop
351 $   endif
352 $!
353 $   if ref_fname .nes. wrk_fname
354 $   then
355 $       write sys$output "''wrk_spc' wrong name, should be ""''ref_fname'"""
356 $   endif
357 $!
358 $   if ref_utype .eqs. ".DIR" then goto missing_loop
359 $!
360 $   wrk_ver = f$parse(wrk_chk,,,"VERSION")
361 $   if wrk_ver .nes. ";1"
362 $   then
363 $      write sys$output "Version for ''wrk_spec' is not 1"
364 $   endif
365 $!
366 $   goto missing_loop
367 $!
368 $!
369 $missing_loop_end:
370 $!
371 $exit