/Modules/zlib/make_vms.com

http://unladen-swallow.googlecode.com/ · Unknown · 461 lines · 452 code · 9 blank · 0 comment · 0 complexity · c364b6c0a3fcafa15c4c985bbece9d6e MD5 · raw file

  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. $!------------------------------------------------------------------------------