make_vms.com
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:13k
源码类别:

通讯编程

开发平台:

Visual C++

  1. $! make libz under VMS written by
  2. $! Martin P.J. Zinser
  3. $! <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com>
  4. $!
  5. $ on error then goto err_exit
  6. $!
  7. $!
  8. $! Just some general constants...
  9. $!
  10. $ true  = 1
  11. $ false = 0
  12. $ tmpnam = "temp_" + f$getjpi("","pid")
  13. $ SAY = "WRITE SYS$OUTPUT"
  14. $!
  15. $! Setup variables holding "config" information
  16. $!
  17. $ Make     = ""
  18. $ name     = "Zlib"
  19. $ version  = "?.?.?"
  20. $ v_string = "ZLIB_VERSION"
  21. $ v_file   = "zlib.h"
  22. $ ccopt    = ""
  23. $ lopts    = ""
  24. $ linkonly = false
  25. $ optfile  = name + ".opt"
  26. $ its_decc = false
  27. $ its_vaxc = false
  28. $ its_gnuc = false
  29. $ axp      = f$getsyi("HW_MODEL").ge.1024
  30. $ s_case   = false
  31. $! Check for MMK/MMS
  32. $!
  33. $ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS"
  34. $ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK"
  35. $!
  36. $!
  37. $ gosub find_version
  38. $!
  39. $ gosub check_opts
  40. $!
  41. $! Look for the compiler used
  42. $!
  43. $ gosub check_compiler
  44. $ if its_decc
  45. $ then
  46. $   ccopt = "/prefix=all" + ccopt
  47. $   if f$trnlnm("SYS") .eqs. ""
  48. $   then
  49. $     if axp
  50. $     then
  51. $       define sys sys$library:
  52. $     else
  53. $       ccopt = "/decc" + ccopt
  54. $       define sys decc$library_include:
  55. $     endif
  56. $   endif
  57. $ endif
  58. $ if its_vaxc .or. its_gnuc
  59. $ then
  60. $    if f$trnlnm("SYS").eqs."" then define sys sys$library:
  61. $ endif
  62. $!
  63. $! Build the thing plain or with mms
  64. $!
  65. $ write sys$output "Compiling Zlib sources ..."
  66. $ if make.eqs.""
  67. $  then
  68. $   dele example.obj;*,minigzip.obj;*
  69. $   CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" -
  70.                 adler32.c zlib.h zconf.h
  71. $   CALL MAKE compress.OBJ "CC ''CCOPT' compress" -
  72.                 compress.c zlib.h zconf.h
  73. $   CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" -
  74.                 crc32.c zlib.h zconf.h
  75. $   CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" -
  76.                 deflate.c deflate.h zutil.h zlib.h zconf.h
  77. $   CALL MAKE gzio.OBJ "CC ''CCOPT' gzio" -
  78.                 gzio.c zutil.h zlib.h zconf.h
  79. $   CALL MAKE infback.OBJ "CC ''CCOPT' infback" -
  80.                 infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h
  81. $   CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" -
  82.                 inffast.c zutil.h zlib.h zconf.h inffast.h
  83. $   CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" -
  84.                 inflate.c zutil.h zlib.h zconf.h infblock.h
  85. $   CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" -
  86.                 inftrees.c zutil.h zlib.h zconf.h inftrees.h
  87. $   CALL MAKE trees.OBJ "CC ''CCOPT' trees" -
  88.                 trees.c deflate.h zutil.h zlib.h zconf.h
  89. $   CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" -
  90.                 uncompr.c zlib.h zconf.h
  91. $   CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" -
  92.                 zutil.c zutil.h zlib.h zconf.h
  93. $   write sys$output "Building Zlib ..."
  94. $   CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ
  95. $   write sys$output "Building example..."
  96. $   CALL MAKE example.OBJ "CC ''CCOPT' example" -
  97.                 example.c zlib.h zconf.h
  98. $   call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb
  99. $   if f$search("x11vms:xvmsutils.olb") .nes. ""
  100. $   then
  101. $     write sys$output "Building minigzip..."
  102. $     CALL MAKE minigzip.OBJ "CC ''CCOPT' minigzip" -
  103.                 minigzip.c zlib.h zconf.h
  104. $     call make minigzip.exe -
  105.                 "LINK minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib" -
  106.                 minigzip.obj libz.olb
  107. $   endif
  108. $  else
  109. $   gosub crea_mms
  110. $   SAY "Make ''name' ''version' with ''Make' "
  111. $   'make'
  112. $  endif
  113. $!
  114. $! Alpha gets a shareable image
  115. $!
  116. $ If axp
  117. $ Then
  118. $   gosub crea_olist
  119. $   write sys$output "Creating libzshr.exe"
  120. $   call anal_obj_axp modules.opt _link.opt
  121. $   if s_case
  122. $   then
  123. $      open/append optf modules.opt
  124. $      write optf "case_sensitive=YES"
  125. $      close optf
  126. $   endif
  127. $   LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,_link.opt/opt
  128. $ endif
  129. $ write sys$output "Zlib build completed"
  130. $ exit
  131. $CC_ERR:
  132. $ write sys$output "C compiler required to build ''name'"
  133. $ goto err_exit
  134. $ERR_EXIT:
  135. $ set message/facil/ident/sever/text
  136. $ write sys$output "Exiting..."
  137. $ exit 2
  138. $!
  139. $!
  140. $MAKE: SUBROUTINE   !SUBROUTINE TO CHECK DEPENDENCIES
  141. $ V = 'F$Verify(0)
  142. $! P1 = What we are trying to make
  143. $! P2 = Command to make it
  144. $! P3 - P8  What it depends on
  145. $
  146. $ If F$Search(P1) .Eqs. "" Then Goto Makeit
  147. $ Time = F$CvTime(F$File(P1,"RDT"))
  148. $arg=3
  149. $Loop:
  150. $       Argument = P'arg
  151. $       If Argument .Eqs. "" Then Goto Exit
  152. $       El=0
  153. $Loop2:
  154. $       File = F$Element(El," ",Argument)
  155. $       If File .Eqs. " " Then Goto Endl
  156. $       AFile = ""
  157. $Loop3:
  158. $       OFile = AFile
  159. $       AFile = F$Search(File)
  160. $       If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
  161. $       If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
  162. $       Goto Loop3
  163. $NextEL:
  164. $       El = El + 1
  165. $       Goto Loop2
  166. $EndL:
  167. $ arg=arg+1
  168. $ If arg .Le. 8 Then Goto Loop
  169. $ Goto Exit
  170. $
  171. $Makeit:
  172. $ VV=F$VERIFY(0)
  173. $ write sys$output P2
  174. $ 'P2
  175. $ VV='F$Verify(VV)
  176. $Exit:
  177. $ If V Then Set Verify
  178. $ENDSUBROUTINE
  179. $!------------------------------------------------------------------------------
  180. $!
  181. $! Check command line options and set symbols accordingly
  182. $!
  183. $ CHECK_OPTS:
  184. $ i = 1
  185. $ OPT_LOOP:
  186. $ if i .lt. 9
  187. $ then
  188. $   cparm = f$edit(p'i',"upcase")
  189. $   if cparm .eqs. "DEBUG"
  190. $   then
  191. $     ccopt = ccopt + "/noopt/deb"
  192. $     lopts = lopts + "/deb"
  193. $   endif
  194. $   if f$locate("CCOPT=",cparm) .lt. f$length(cparm)
  195. $   then
  196. $     start = f$locate("=",cparm) + 1
  197. $     len   = f$length(cparm) - start
  198. $     ccopt = ccopt + f$extract(start,len,cparm)
  199. $     if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) -
  200.          then s_case = true
  201. $   endif
  202. $   if cparm .eqs. "LINK" then linkonly = true
  203. $   if f$locate("LOPTS=",cparm) .lt. f$length(cparm)
  204. $   then
  205. $     start = f$locate("=",cparm) + 1
  206. $     len   = f$length(cparm) - start
  207. $     lopts = lopts + f$extract(start,len,cparm)
  208. $   endif
  209. $   if f$locate("CC=",cparm) .lt. f$length(cparm)
  210. $   then
  211. $     start  = f$locate("=",cparm) + 1
  212. $     len    = f$length(cparm) - start
  213. $     cc_com = f$extract(start,len,cparm)
  214.       if (cc_com .nes. "DECC") .and. -
  215.          (cc_com .nes. "VAXC") .and. -
  216.  (cc_com .nes. "GNUC")
  217. $     then
  218. $       write sys$output "Unsupported compiler choice ''cc_com' ignored"
  219. $       write sys$output "Use DECC, VAXC, or GNUC instead"
  220. $     else
  221. $      if cc_com .eqs. "DECC" then its_decc = true
  222. $      if cc_com .eqs. "VAXC" then its_vaxc = true
  223. $      if cc_com .eqs. "GNUC" then its_gnuc = true
  224. $     endif
  225. $   endif
  226. $   if f$locate("MAKE=",cparm) .lt. f$length(cparm)
  227. $   then
  228. $     start  = f$locate("=",cparm) + 1
  229. $     len    = f$length(cparm) - start
  230. $     mmks = f$extract(start,len,cparm)
  231. $     if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS")
  232. $     then
  233. $       make = mmks
  234. $     else
  235. $       write sys$output "Unsupported make choice ''mmks' ignored"
  236. $       write sys$output "Use MMK or MMS instead"
  237. $     endif
  238. $   endif
  239. $   i = i + 1
  240. $   goto opt_loop
  241. $ endif
  242. $ return
  243. $!------------------------------------------------------------------------------
  244. $!
  245. $! Look for the compiler used
  246. $!
  247. $CHECK_COMPILER:
  248. $ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))
  249. $ then
  250. $   its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "")
  251. $   its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "")
  252. $   its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "")
  253. $ endif
  254. $!
  255. $! Exit if no compiler available
  256. $!
  257. $ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))
  258. $ then goto CC_ERR
  259. $ else
  260. $   if its_decc then write sys$output "CC compiler check ... Compaq C"
  261. $   if its_vaxc then write sys$output "CC compiler check ... VAX C"
  262. $   if its_gnuc then write sys$output "CC compiler check ... GNU C"
  263. $ endif
  264. $ return
  265. $!------------------------------------------------------------------------------
  266. $!
  267. $! If MMS/MMK are available dump out the descrip.mms if required
  268. $!
  269. $CREA_MMS:
  270. $ write sys$output "Creating descrip.mms..."
  271. $ create descrip.mms
  272. $ open/append out descrip.mms
  273. $ copy sys$input: out
  274. $ deck
  275. # descrip.mms: MMS description file for building zlib on VMS
  276. # written by Martin P.J. Zinser
  277. # <zinser@zinser.no-ip.info or zinser@sysdev.deutsche-boerse.com>
  278. OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj, infback.obj
  279.        deflate.obj, trees.obj, zutil.obj, inflate.obj, 
  280.        inftrees.obj, inffast.obj
  281. $ eod
  282. $ write out "CFLAGS=", ccopt
  283. $ write out "LOPTS=", lopts
  284. $ copy sys$input: out
  285. $ deck
  286. all : example.exe minigzip.exe libz.olb
  287.         @ write sys$output " Example applications available"
  288. libz.olb : libz.olb($(OBJS))
  289. @ write sys$output " libz available"
  290. example.exe : example.obj libz.olb
  291.               link $(LOPTS) example,libz.olb/lib
  292. minigzip.exe : minigzip.obj libz.olb
  293.               link $(LOPTS) minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib
  294. clean :
  295. delete *.obj;*,libz.olb;*,*.opt;*,*.exe;*
  296. # Other dependencies.
  297. adler32.obj  : adler32.c zutil.h zlib.h zconf.h
  298. compress.obj : compress.c zlib.h zconf.h
  299. crc32.obj    : crc32.c zutil.h zlib.h zconf.h
  300. deflate.obj  : deflate.c deflate.h zutil.h zlib.h zconf.h
  301. example.obj  : example.c zlib.h zconf.h
  302. gzio.obj     : gzio.c zutil.h zlib.h zconf.h
  303. inffast.obj  : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h
  304. inflate.obj  : inflate.c zutil.h zlib.h zconf.h
  305. inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h
  306. minigzip.obj : minigzip.c zlib.h zconf.h
  307. trees.obj    : trees.c deflate.h zutil.h zlib.h zconf.h
  308. uncompr.obj  : uncompr.c zlib.h zconf.h
  309. zutil.obj    : zutil.c zutil.h zlib.h zconf.h
  310. infback.obj  : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h
  311. $ eod
  312. $ close out
  313. $ return
  314. $!------------------------------------------------------------------------------
  315. $!
  316. $! Read list of core library sources from makefile.in and create options
  317. $! needed to build shareable image
  318. $!
  319. $CREA_OLIST:
  320. $ open/read min makefile.in
  321. $ open/write mod modules.opt
  322. $ src_check = "OBJS ="
  323. $MRLOOP:
  324. $ read/end=mrdone min rec
  325. $ if (f$extract(0,6,rec) .nes. src_check) then goto mrloop
  326. $ rec = rec - src_check
  327. $ gosub extra_filnam
  328. $ if (f$element(1,"",rec) .eqs. "") then goto mrdone
  329. $MRSLOOP:
  330. $ read/end=mrdone min rec
  331. $ gosub extra_filnam
  332. $ if (f$element(1,"",rec) .nes. "") then goto mrsloop
  333. $MRDONE:
  334. $ close min
  335. $ close mod
  336. $ return
  337. $!------------------------------------------------------------------------------
  338. $!
  339. $! Take record extracted in crea_olist and split it into single filenames
  340. $!
  341. $EXTRA_FILNAM:
  342. $ myrec = f$edit(rec - "", "trim,compress")
  343. $ i = 0
  344. $FELOOP:
  345. $ srcfil = f$element(i," ", myrec)
  346. $ if (srcfil .nes. " ")
  347. $ then
  348. $   write mod f$parse(srcfil,,,"NAME"), ".obj"
  349. $   i = i + 1
  350. $   goto feloop
  351. $ endif
  352. $ return
  353. $!------------------------------------------------------------------------------
  354. $!
  355. $! Find current Zlib version number
  356. $!
  357. $FIND_VERSION:
  358. $ open/read h_in 'v_file'
  359. $hloop:
  360. $ read/end=hdone h_in rec
  361. $ rec = f$edit(rec,"TRIM")
  362. $ if (f$extract(0,1,rec) .nes. "#") then goto hloop
  363. $ rec = f$edit(rec - "#", "TRIM")
  364. $ if f$element(0," ",rec) .nes. "define" then goto hloop
  365. $ if f$element(1," ",rec) .eqs. v_string
  366. $ then
  367. $   version = 'f$element(2," ",rec)'
  368. $   goto hdone
  369. $ endif
  370. $ goto hloop
  371. $hdone:
  372. $ close h_in
  373. $ return
  374. $!------------------------------------------------------------------------------
  375. $!
  376. $! Analyze Object files for OpenVMS AXP to extract Procedure and Data
  377. $! information to build a symbol vector for a shareable image
  378. $! All the "brains" of this logic was suggested by Hartmut Becker
  379. $! (Hartmut.Becker@compaq.com). All the bugs were introduced by me
  380. $! (zinser@decus.de), so if you do have problem reports please do not
  381. $! bother Hartmut/HP, but get in touch with me
  382. $!
  383. $ ANAL_OBJ_AXP: Subroutine
  384. $ V = 'F$Verify(0)
  385. $ SAY := "WRITE_ SYS$OUTPUT"
  386. $
  387. $ IF F$SEARCH("''P1'") .EQS. ""
  388. $ THEN
  389. $    SAY "ANAL_OBJ_AXP-E-NOSUCHFILE:  Error, inputfile ''p1' not available"
  390. $    goto exit_aa
  391. $ ENDIF
  392. $ IF "''P2'" .EQS. ""
  393. $ THEN
  394. $    SAY "ANAL_OBJ_AXP:  Error, no output file provided"
  395. $    goto exit_aa
  396. $ ENDIF
  397. $
  398. $ open/read in 'p1
  399. $ create a.tmp
  400. $ open/append atmp a.tmp
  401. $ loop:
  402. $ read/end=end_loop in line
  403. $ f= f$search(line)
  404. $ if f .eqs. ""
  405. $ then
  406. $ write sys$output "ANAL_OBJ_AXP-w-nosuchfile, ''line'"
  407. $ goto loop
  408. $ endif
  409. $ define/user sys$output nl:
  410. $ define/user sys$error nl:
  411. $ anal/obj/gsd 'f /out=x.tmp
  412. $ open/read xtmp x.tmp
  413. $ XLOOP:
  414. $ read/end=end_xloop xtmp xline
  415. $ xline = f$edit(xline,"compress")
  416. $ write atmp xline
  417. $ goto xloop
  418. $ END_XLOOP:
  419. $ close xtmp
  420. $ goto loop
  421. $ end_loop:
  422. $ close in
  423. $ close atmp
  424. $ if f$search("a.tmp") .eqs. "" -
  425. then $ exit
  426. $ ! all global definitions
  427. $ search a.tmp "symbol:","EGSY$V_DEF 1","EGSY$V_NORM 1"/out=b.tmp
  428. $ ! all procedures
  429. $ search b.tmp "EGSY$V_NORM 1"/wind=(0,1) /out=c.tmp
  430. $ search c.tmp "symbol:"/out=d.tmp
  431. $ define/user sys$output nl:
  432. $ edito/edt/command=sys$input d.tmp
  433. sub/symbol: "/symbol_vector=(/whole
  434. sub/"/=PROCEDURE)/whole
  435. exit
  436. $ ! all data
  437. $ search b.tmp "EGSY$V_DEF 1"/wind=(0,1) /out=e.tmp
  438. $ search e.tmp "symbol:"/out=f.tmp
  439. $ define/user sys$output nl:
  440. $ edito/edt/command=sys$input f.tmp
  441. sub/symbol: "/symbol_vector=(/whole
  442. sub/"/=DATA)/whole
  443. exit
  444. $ sort/nodupl d.tmp,f.tmp 'p2'
  445. $ delete a.tmp;*,b.tmp;*,c.tmp;*,d.tmp;*,e.tmp;*,f.tmp;*
  446. $ if f$search("x.tmp") .nes. "" -
  447. then $ delete x.tmp;*
  448. $!
  449. $ EXIT_AA:
  450. $ if V then set verify
  451. $ endsubroutine
  452. $!------------------------------------------------------------------------------