3
$ olddir = f$environment("default")
4
$ on control_y then goto YExit
7
$ if .not. init_status then goto YExit
10
$ call BuildTransferVectors
19
$ if f$search("objdir:*.*;*") .nes. "" then delete objdir:*.*;*
21
$ delete library_objects.dir;*
26
$!---------------------------------------------------------------------
32
$ thisid = f$integer( %x'f$getjpi(0,"pid")')
33
$ mdir = f$environment("procedure")
34
$ mdir = mdir - f$parse(mdir,,,"name") - f$parse(mdir,,,"type") - f$parse(mdir,,,"version")
37
$ objdir = "[.library_objects]"
40
$ objdirfile = objdir - "[." - "]" + ".dir"
41
$ if f$search( objdirfile ) .eqs. ""
43
$ create/directory 'objdir'
46
$ define objdir 'objdir'
47
$ define srcdir 'srcdir'
49
$ cc_include = "/include=([],[-.include],""/gnv$zlib_include"")"
50
$ cc_define = "/DEFINE=(_USE_STD_STAT=1)"
51
$ link_opts = "objdir:libssh2_''thisid'.opt"
53
$ pipe search [-.include]libssh2.h libssh2_version_major/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; -
54
define/job majorv &l )
55
$ pipe search [-.include]libssh2.h libssh2_version_minor/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; -
56
define/job minorv &l )
57
$ pipe search [-.include]libssh2.h libssh2_version_patch/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; -
58
define/job patchv &l )
60
$ majorv = f$trnlnm("majorv")
61
$ minorv = f$integer(f$trnlnm("minorv"))
62
$ patchv = f$integer( f$trnlnm("patchv"))
65
$ if p1 .eqs. "OLBONLY"
76
$!---------------------------------------------------------------------
88
$!---------------------------------------------------------------------
90
$LinkShared: subroutine
94
$ cversion = f$fao("!3ZL",minorv) + f$fao("!3ZL",patchv)
96
$! General linking options in link_libssh2_version...opt
97
$! Vectors in link_libssh2_vectors...opt
99
$ open/write uitv link_libssh2_version_'majorv'_'minorv'_'patchv'.opt
100
$ write uitv "GSMATCH=LEQUAL,''majorv',''cversion'"
101
$ write uitv "IDENTIFICATION=""LIBSSH2 ''majorv'.''minorv'.''patchv'"""
102
$ write uitv "sys$share:ssl$libcrypto_shr32.exe/share"
103
$ write uitv "sys$share:ssl$libssl_shr32.exe/share"
104
$ write uitv "gnv$libzshr/share"
107
$ link/shared/exe=libssh2_'majorv'_'minorv'_'patchv'.exe -
109
link_libssh2_version_'majorv'_'minorv'_'patchv'.opt/opt, -
110
link_libssh2_vectors_'majorv'_'minorv'_'patchv'.opt/opt
115
$!---------------------------------------------------------------------
117
$CompileAll: subroutine
121
$ if f$search("objdir:*.obj;*") .nes ""
123
$ delete objdir:*.obj;*
125
$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes ""
127
$ delete [.cxx_repository]cxx$demangler_db.;*
130
$! Compile all .c files in [-.src], first as_is
131
$! and then as default all uppercase names
132
$! and add the resulting object to object libraries
133
$! libssh2_up.olb and libssh2_as_is.olb.
136
$ if OLBONLY then case = 1
140
$ then!camel case names
141
$ cc_flags = "/names=(shortened,as_is)''cc_define'"
142
$ objlib = "libssh2_asis.olb"
146
$ then!uppercase names
147
$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes ""
149
$ rename [.cxx_repository]cxx$demangler_db.; *.lowercase
150
$ purge [.cxx_repository]cxx$demangler_db.lowercase
153
$ cc_flags = "/names=(shortened)''cc_define'"
154
$ objlib = "libssh2_up.olb"
157
$ if f$search("''objlib';*") .nes. "" then delete 'objlib';*
158
$ library/create 'objlib'
161
$ this = f$search("srcdir:*.c;0")
162
$ if this .eqs. "" then goto EndLoop
164
$ what = f$parse( this,,,"name")
171
$ delete objdir:*.obj;*
172
$ if case .lt 2 then goto CaseLoop
174
$ rename libssh2_up.olb libssh2.olb
175
$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes ""
177
$ rename [.cxx_repository]cxx$demangler_db.; *.uppercase
178
$ purge [.cxx_repository]cxx$demangler_db.uppercase
181
$ if OLBONLY then exit 4
183
$! For each function that is too long, create a global symbol
184
$! low$'shortened-uppercase-name' with as value lowercase shortened
185
$! name in it, so we can add the proper lower or mixed case
186
$! shortened name later when building the transfer vectors
187
$! for the shared image.
188
$! This is to prevent two very long similar function names
189
$! that are shortened getting mixed up when sorted alphabetically.
191
$ inputfile = "[.cxx_repository]cxx$demangler_db.lowercase"
194
$ inputfile = "[.cxx_repository]cxx$demangler_db.uppercase"
201
$ open/read s 'inputfile'
205
$ read/end=endreadloop s regel
207
$ shortname = f$element(0,"$",regel) + "$"
208
$ longname = f$element(1,"$",regel)
212
$ if shortname .eqs. f$edit(shortname,"upcase")
214
$! this is an uppercase shortname, add it
215
$ symname = "u$''longname'"
216
$ symvalue = "''shortname'"
217
$ low$'shortname' == l$'longname'
219
$ delete/symbol l$'longname'
222
$! this is an lowercase shortname
223
$ symname = "l$''longname'"
224
$ symvalue = "''shortname'"
225
$ 'symname' = "''symvalue'"
228
$ namecount = namecount + 1
238
$!---------------------------------------------------------------------
240
$CompileAndAdd: subroutine
242
$ on error then goto End
244
$ cc /warn=disable=longextern/lis=objdir:/show=all 'cc_include' 'cc_flags'/object=objdir:'what'.obj srcdir:'what'.c
245
$ library/insert 'objlib' objdir:'what'.obj
251
$!---------------------------------------------------------------------
253
$BuildTransferVectors: subroutine
255
$! Do a balanced read of the uppercase library names
256
$! and the mixed case library names, and build the
257
$! transfer vectors with uppercase entry points
258
$! with an alternative in mixed case.
259
$! For shortened names, use the low$* symbols
260
$! to avoid being fooled by the sort.
262
$ thislib = "libssh2.olb"
263
$ library/lis=libu.'thisid'/names libssh2.olb
264
$ library/lis=lib_asisu.'thisid'/names libssh2_asis.olb
266
$! case blind sort of all modules in both the uppercase
267
$! as the case sensitive object library.
269
$ sort libu.'thisid' lib.'thisid'/spec=sys$input
270
/COLLATING_SEQUENCE=(SEQUENCE= ("A" - "Z","0"-"9","_"), FOLD)
271
$ sort lib_asisu.'thisid' lib_asis.'thisid'/spec=sys$input
272
/COLLATING_SEQUENCE=(SEQUENCE= ("A" - "Z","0"-"9","_"), FOLD)
274
$ open/read in lib.'thisid'
275
$ open/read inasis lib_asis.'thisid'
276
$ open/write uit link_libssh2_vectors_'majorv'_'minorv'_'patchv'.opt
278
$ write uit "CASE_SENSITIVE=YES"
279
$ write uit "SYMBOL_VECTOR= ( -"
286
$ read/end=ReadAsis in regel
288
$ read/end=EndReadLoop inasis asisregel
290
$ regel = f$edit( regel, "trim,compress" )
291
$ asisregel = f$edit( asisregel, "trim,compress" )
293
$ if f$element(0," ",regel) .eqs. "Module" .or. -
294
f$extract(0,1,regel) .eqs. "_" .or. -
295
f$element(1," ",regel) .nes. " " .or. -
301
$ if uitregel .nes. "" .and. mode .eq. 1
303
$ write uit "''uitregel'=PROCEDURE, -"
304
$ write uit "''uitasis'/''uitregel'=PROCEDURE, -"
311
$ if f$type( low$'uitregel' ) .nes. ""
313
$ uitasis = low$'uitregel'
314
$ delete/symbol/global low$'uitregel'
324
$! To get the closing brace after the last procedure
327
$ if uitregel .nes. ""
329
$ write uit "''uitregel'=PROCEDURE, -"
330
$ write uit "''uitasis'/''uitregel'=PROCEDURE)"
333
$ write uit "CASE_SENSITIVE=NO"
339
$ delete lib*.'thisid';*
344
$!---------------------------------------------------------------------