mirror of
				https://github.com/libssh2/libssh2.git
				synced 2025-10-30 12:05:34 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			345 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			345 lines
		
	
	
		
			8.2 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])"
 | |
| $ 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)"
 | |
| $   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)"
 | |
| $   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
 | |
| $!
 | |
| $!---------------------------------------------------------------------
 | |
| $!
 |