mirror of
				https://github.com/libssh2/libssh2.git
				synced 2025-11-03 22:13:11 +03:00 
			
		
		
		
	There are a few non-whitespace changes, see them here: https://github.com/libssh2/libssh2/pull/885/files?w=1
		
			
				
	
	
		
			346 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			346 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
$!
 | 
						|
$!
 | 
						|
$ olddir = f$environment("default")
 | 
						|
$ on control_y then goto YExit
 | 
						|
$!
 | 
						|
$ gosub Init
 | 
						|
$ if .not. init_status then goto YExit
 | 
						|
$!
 | 
						|
$ call CompileAll
 | 
						|
$ call BuildTransferVectors
 | 
						|
$ call LinkShared
 | 
						|
$!
 | 
						|
$ call Cleanup
 | 
						|
$!
 | 
						|
$YExit:
 | 
						|
$ set noon
 | 
						|
$!
 | 
						|
$ deassign srcdir
 | 
						|
$ if f$search("objdir:*.*;*") .nes. "" then delete objdir:*.*;*
 | 
						|
$ deassign objdir
 | 
						|
$ delete library_objects.dir;*
 | 
						|
$!
 | 
						|
$ set default 'olddir'
 | 
						|
$exit
 | 
						|
$!
 | 
						|
$!---------------------------------------------------------------------
 | 
						|
$!
 | 
						|
$Init:
 | 
						|
$!
 | 
						|
$!
 | 
						|
$ init_status = 1
 | 
						|
$ thisid = f$integer( %x'f$getjpi(0,"pid")')
 | 
						|
$ mdir   = f$environment("procedure")
 | 
						|
$ mdir   = mdir - f$parse(mdir,,,"name") - f$parse(mdir,,,"type") - f$parse(mdir,,,"version")
 | 
						|
$ set default 'mdir'
 | 
						|
$!
 | 
						|
$ objdir = "[.library_objects]"
 | 
						|
$ srcdir = "[-.src]"
 | 
						|
$!
 | 
						|
$ objdirfile = objdir - "[." - "]" + ".dir"
 | 
						|
$ if f$search( objdirfile ) .eqs. ""
 | 
						|
$ then
 | 
						|
$   create/directory 'objdir'
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ define objdir 'objdir'
 | 
						|
$ define srcdir 'srcdir'
 | 
						|
$!
 | 
						|
$ cc_include = "/include=([],[-.include],""/gnv$zlib_include"")"
 | 
						|
$ cc_define = "/DEFINE=(_USE_STD_STAT=1)"
 | 
						|
$ link_opts  = "objdir:libssh2_''thisid'.opt"
 | 
						|
$!
 | 
						|
$ pipe search [-.include]libssh2.h libssh2_version_major/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; -
 | 
						|
       define/job majorv &l )
 | 
						|
$ pipe search [-.include]libssh2.h libssh2_version_minor/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; -
 | 
						|
       define/job minorv &l )
 | 
						|
$ pipe search [-.include]libssh2.h libssh2_version_patch/nohead | (read sys$input l ; l = f$element(2," ",f$edit(l,"trim,compress")) ; -
 | 
						|
       define/job patchv &l )
 | 
						|
$!
 | 
						|
$ majorv   = f$trnlnm("majorv")
 | 
						|
$ minorv   = f$integer(f$trnlnm("minorv"))
 | 
						|
$ patchv   = f$integer( f$trnlnm("patchv"))
 | 
						|
$!
 | 
						|
$ OLBONLY = "FALSE"
 | 
						|
$ if p1 .eqs. "OLBONLY"
 | 
						|
$ then
 | 
						|
$   OLBONLY = "TRUE"
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ deassign/job majorv
 | 
						|
$ deassign/job minorv
 | 
						|
$ deassign/job patchv
 | 
						|
$!
 | 
						|
$return
 | 
						|
$!
 | 
						|
$!---------------------------------------------------------------------
 | 
						|
$!
 | 
						|
$Cleanup: subroutine
 | 
						|
$!
 | 
						|
$ set noon
 | 
						|
$ purge *.opt
 | 
						|
$ purge *.olb
 | 
						|
$ purge *.exe
 | 
						|
$!
 | 
						|
$exit 1
 | 
						|
$endsubroutine
 | 
						|
$!
 | 
						|
$!---------------------------------------------------------------------
 | 
						|
$!
 | 
						|
$LinkShared: subroutine
 | 
						|
$!
 | 
						|
$!
 | 
						|
$!
 | 
						|
$ cversion = f$fao("!3ZL",minorv)  + f$fao("!3ZL",patchv)
 | 
						|
$!
 | 
						|
$! General linking options in link_libssh2_version...opt
 | 
						|
$! Vectors in link_libssh2_vectors...opt
 | 
						|
$!
 | 
						|
$ open/write uitv link_libssh2_version_'majorv'_'minorv'_'patchv'.opt
 | 
						|
$ write uitv "GSMATCH=LEQUAL,''majorv',''cversion'"
 | 
						|
$ write uitv "IDENTIFICATION=""LIBSSH2 ''majorv'.''minorv'.''patchv'"""
 | 
						|
$ write uitv "sys$share:ssl$libcrypto_shr32.exe/share"
 | 
						|
$ write uitv "sys$share:ssl$libssl_shr32.exe/share"
 | 
						|
$ write uitv "gnv$libzshr/share"
 | 
						|
$ close uitv
 | 
						|
$!
 | 
						|
$ link/shared/exe=libssh2_'majorv'_'minorv'_'patchv'.exe -
 | 
						|
    libssh2.olb/lib, -
 | 
						|
    link_libssh2_version_'majorv'_'minorv'_'patchv'.opt/opt, -
 | 
						|
    link_libssh2_vectors_'majorv'_'minorv'_'patchv'.opt/opt
 | 
						|
$!
 | 
						|
$exit
 | 
						|
$endsubroutine
 | 
						|
$!
 | 
						|
$!---------------------------------------------------------------------
 | 
						|
$!
 | 
						|
$CompileAll: subroutine
 | 
						|
$!
 | 
						|
$ set noon
 | 
						|
$!
 | 
						|
$ if f$search("objdir:*.obj;*") .nes ""
 | 
						|
$ then
 | 
						|
$   delete objdir:*.obj;*
 | 
						|
$ endif
 | 
						|
$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes ""
 | 
						|
$ then
 | 
						|
$   delete [.cxx_repository]cxx$demangler_db.;*
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$! Compile all .c files in [-.src], first as_is
 | 
						|
$! and then as default all uppercase names
 | 
						|
$! and add the resulting object to object libraries
 | 
						|
$! libssh2_up.olb and libssh2_as_is.olb.
 | 
						|
$!
 | 
						|
$ case = 0
 | 
						|
$ if OLBONLY then case = 1
 | 
						|
$CaseLoop:
 | 
						|
$!
 | 
						|
$ if case .eq. 0
 | 
						|
$ then!camel case names
 | 
						|
$   cc_flags = "/names=(shortened,as_is)''cc_define'"
 | 
						|
$   objlib = "libssh2_asis.olb"
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ if case .eq. 1
 | 
						|
$ then!uppercase names
 | 
						|
$   if f$search("[.cxx_repository]cxx$demangler_db.;") .nes ""
 | 
						|
$   then
 | 
						|
$      rename [.cxx_repository]cxx$demangler_db.; *.lowercase
 | 
						|
$      purge  [.cxx_repository]cxx$demangler_db.lowercase
 | 
						|
$   endif
 | 
						|
$!
 | 
						|
$   cc_flags = "/names=(shortened)''cc_define'"
 | 
						|
$   objlib = "libssh2_up.olb"
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ if f$search("''objlib';*") .nes. "" then delete 'objlib';*
 | 
						|
$ library/create 'objlib'
 | 
						|
$!
 | 
						|
$Loop:
 | 
						|
$ this = f$search("srcdir:*.c;0")
 | 
						|
$ if this .eqs. "" then goto EndLoop
 | 
						|
$!
 | 
						|
$ what = f$parse( this,,,"name")
 | 
						|
$!
 | 
						|
$ call CompileAndAdd
 | 
						|
$!
 | 
						|
$ goto Loop
 | 
						|
$EndLoop:
 | 
						|
$ case = case + 1
 | 
						|
$ delete objdir:*.obj;*
 | 
						|
$ if case .lt 2 then goto CaseLoop
 | 
						|
$!
 | 
						|
$ rename libssh2_up.olb libssh2.olb
 | 
						|
$ if f$search("[.cxx_repository]cxx$demangler_db.;") .nes ""
 | 
						|
$ then
 | 
						|
$    rename [.cxx_repository]cxx$demangler_db.; *.uppercase
 | 
						|
$    purge  [.cxx_repository]cxx$demangler_db.uppercase
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ if OLBONLY then exit 4
 | 
						|
$!
 | 
						|
$! For each function that is too long, create a global symbol
 | 
						|
$! low$'shortened-uppercase-name' with as value lowercase shortened
 | 
						|
$! name in it, so we can add the proper lower or mixed case
 | 
						|
$! shortened name later when building the transfer vectors
 | 
						|
$! for the shared image.
 | 
						|
$! This is to prevent two very long similar function names
 | 
						|
$! that are shortened getting mixed up when sorted alphabetically.
 | 
						|
$!
 | 
						|
$ inputfile = "[.cxx_repository]cxx$demangler_db.lowercase"
 | 
						|
$ gosub GetShortened
 | 
						|
$!
 | 
						|
$ inputfile =  "[.cxx_repository]cxx$demangler_db.uppercase"
 | 
						|
$ gosub GetShortened
 | 
						|
$!
 | 
						|
$exit
 | 
						|
$!
 | 
						|
$GetShortened:
 | 
						|
$!
 | 
						|
$ open/read s 'inputfile'
 | 
						|
$ namecount = 0
 | 
						|
$ReadLoop:
 | 
						|
$!
 | 
						|
$ read/end=endreadloop s regel
 | 
						|
$!
 | 
						|
$ shortname = f$element(0,"$",regel) + "$"
 | 
						|
$ longname  = f$element(1,"$",regel)
 | 
						|
$!
 | 
						|
$ symvalue = ""
 | 
						|
$!
 | 
						|
$ if shortname .eqs. f$edit(shortname,"upcase")
 | 
						|
$ then
 | 
						|
$!  this is an uppercase shortname, add it
 | 
						|
$   symname  = "u$''longname'"
 | 
						|
$   symvalue = "''shortname'"
 | 
						|
$   low$'shortname' == l$'longname'
 | 
						|
$!
 | 
						|
$   delete/symbol l$'longname'
 | 
						|
$!
 | 
						|
$ else
 | 
						|
$!  this is an lowercase shortname
 | 
						|
$   symname  = "l$''longname'"
 | 
						|
$   symvalue = "''shortname'"
 | 
						|
$   'symname' = "''symvalue'"
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ namecount = namecount + 1
 | 
						|
$!
 | 
						|
$ goto ReadLoop
 | 
						|
$EndReadLoop:
 | 
						|
$!
 | 
						|
$close s
 | 
						|
$return
 | 
						|
$!
 | 
						|
$endsubroutine
 | 
						|
$!
 | 
						|
$!---------------------------------------------------------------------
 | 
						|
$!
 | 
						|
$CompileAndAdd: subroutine
 | 
						|
$!
 | 
						|
$ on error then goto End
 | 
						|
$!
 | 
						|
$ cc /warn=disable=longextern/lis=objdir:/show=all 'cc_include' 'cc_flags'/object=objdir:'what'.obj srcdir:'what'.c
 | 
						|
$ library/insert 'objlib' objdir:'what'.obj
 | 
						|
$!
 | 
						|
$End:
 | 
						|
$exit
 | 
						|
$endsubroutine
 | 
						|
$!
 | 
						|
$!---------------------------------------------------------------------
 | 
						|
$!
 | 
						|
$BuildTransferVectors: subroutine
 | 
						|
$!
 | 
						|
$! Do a balanced read of the uppercase library names
 | 
						|
$! and the mixed case library names, and build the
 | 
						|
$! transfer vectors with uppercase entry points
 | 
						|
$! with an alternative in mixed case.
 | 
						|
$! For shortened names, use the low$* symbols
 | 
						|
$! to avoid being fooled by the sort.
 | 
						|
$!
 | 
						|
$ thislib = "libssh2.olb"
 | 
						|
$ library/lis=libu.'thisid'/names libssh2.olb
 | 
						|
$ library/lis=lib_asisu.'thisid'/names libssh2_asis.olb
 | 
						|
$!
 | 
						|
$! case blind sort of all modules in both the uppercase
 | 
						|
$! as the case sensitive object library.
 | 
						|
$!
 | 
						|
$ sort libu.'thisid' lib.'thisid'/spec=sys$input
 | 
						|
/COLLATING_SEQUENCE=(SEQUENCE= ("A" - "Z","0"-"9","_"), FOLD)
 | 
						|
$ sort lib_asisu.'thisid' lib_asis.'thisid'/spec=sys$input
 | 
						|
/COLLATING_SEQUENCE=(SEQUENCE= ("A" - "Z","0"-"9","_"), FOLD)
 | 
						|
$!
 | 
						|
$ open/read  in  lib.'thisid'
 | 
						|
$ open/read  inasis  lib_asis.'thisid'
 | 
						|
$ open/write uit link_libssh2_vectors_'majorv'_'minorv'_'patchv'.opt
 | 
						|
$!
 | 
						|
$ write uit "CASE_SENSITIVE=YES"
 | 
						|
$ write uit "SYMBOL_VECTOR= ( -"
 | 
						|
$!
 | 
						|
$ mode = 0
 | 
						|
$ uitregel = ""
 | 
						|
$!
 | 
						|
$ReadLoop:
 | 
						|
$!
 | 
						|
$ read/end=ReadAsis in regel
 | 
						|
$ReadAsis:
 | 
						|
$ read/end=EndReadLoop inasis asisregel
 | 
						|
$!
 | 
						|
$ regel     = f$edit( regel, "trim,compress" )
 | 
						|
$ asisregel = f$edit( asisregel, "trim,compress" )
 | 
						|
$!
 | 
						|
$ if f$element(0," ",regel) .eqs. "Module" .or. -
 | 
						|
     f$extract(0,1,regel)   .eqs. "_" .or. -
 | 
						|
     f$element(1," ",regel) .nes. " " .or. -
 | 
						|
     regel .eqs. ""
 | 
						|
$ then
 | 
						|
$   goto ReadLoop
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ if uitregel .nes. "" .and. mode .eq. 1
 | 
						|
$ then
 | 
						|
$   write uit "''uitregel'=PROCEDURE, -"
 | 
						|
$   write uit "''uitasis'/''uitregel'=PROCEDURE, -"
 | 
						|
$!
 | 
						|
$   uitregel = ""
 | 
						|
$   uitasis  = ""
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ uitregel = regel
 | 
						|
$ if f$type( low$'uitregel' ) .nes. ""
 | 
						|
$ then
 | 
						|
$   uitasis = low$'uitregel'
 | 
						|
$   delete/symbol/global low$'uitregel'
 | 
						|
$ else
 | 
						|
$   uitasis  = asisregel
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ mode = 1
 | 
						|
$!
 | 
						|
$ goto ReadLoop
 | 
						|
$EndreadLoop:
 | 
						|
$!
 | 
						|
$! To get the closing brace after the last procedure
 | 
						|
$! keyword.
 | 
						|
$!
 | 
						|
$ if uitregel .nes. ""
 | 
						|
$ then
 | 
						|
$   write uit "''uitregel'=PROCEDURE, -"
 | 
						|
$   write uit "''uitasis'/''uitregel'=PROCEDURE)"
 | 
						|
$ endif
 | 
						|
$!
 | 
						|
$ write uit "CASE_SENSITIVE=NO"
 | 
						|
$!
 | 
						|
$ close in
 | 
						|
$ close inasis
 | 
						|
$ close uit
 | 
						|
$!
 | 
						|
$ delete lib*.'thisid';*
 | 
						|
$!
 | 
						|
$exit
 | 
						|
$endsubroutine
 | 
						|
$!
 | 
						|
$!---------------------------------------------------------------------
 | 
						|
$!
 |