3 $! Written By: Robert Byer
5 $! A-Com Computing, Inc.
6 $! byer@mail.all-net.net
8 $! Changes by Richard Levitte <richard@levitte.org>
10 $! This command files compiles and creates the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB"
11 $! library. The "xxx" denotes the machine architecture of AXP or VAX.
13 $! Specify one of the following to build just that part or "ALL" to
14 $! just build everything.
16 $! ALL To Just Build "Everything".
17 $! LIBRARY To Just Build The [.xxx.EXE.RSAREF]LIBRSAGLUE.OLB Library.
18 $! DHDEMO To Just Build The [.xxx.EXE.RSAREF]DHDEMO.EXE Program.
19 $! RDEMO To Just Build The [.xxx.EXE.RSAREF]RDEMO.EXE Program.
21 $! Specify DEBUG or NODEBUG as P2 to compile with or without debugging
24 $! Specify which compiler at P3 to try to compile under.
30 $! If you don't speficy a compiler, it will prompt you for one.
32 $! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up)
35 $! Check Which Architecture We Are Using.
37 $ IF (F$GETSYI("CPU").GE.128)
40 $! The Architecture Is AXP
48 $! The Architecture Is VAX.
52 $! End The Architecture Check.
56 $! Check To Make Sure We Have Valid Command Line Parameters.
60 $! Initialise logical names and such
64 $! Tell The User What Kind of Machine We Run On.
66 $ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine."
68 $! Define The OBJ Directory Name.
70 $ OBJ_DIR := SYS$DISK:[-.'ARCH'.OBJ.RSAREF]
72 $! Check To See If The Architecture Specific OBJ Directory Exists.
74 $ IF (F$PARSE(OBJ_DIR).EQS."")
77 $! It Dosen't Exist, So Create It.
79 $ CREATE/DIR 'OBJ_DIR'
81 $! End The Architecture Specific OBJ Directory Check.
85 $! Define The EXE Directory Name.
87 $ EXE_DIR := SYS$DISK:[-.'ARCH'.EXE.RSAREF]
89 $! Check To See If The Architecture Specific EXE Directory Exists.
91 $ IF (F$PARSE(EXE_DIR).EQS."")
94 $! It Dosen't Exist, So Create It.
96 $ CREATE/DIR 'EXE_DIR'
98 $! End The Architecture Specific EXE Directory Check.
102 $! Define The Library Name.
104 $ LIB_NAME := 'EXE_DIR'LIBRSAGLUE.OLB
106 $! Check To See What We Are To Do.
108 $ IF (BUILDALL.EQS."TRUE")
111 $! Since Nothing Special Was Specified, Do Everything.
121 $! Build Just What The User Wants Us To Build.
125 $! End The BUILDALL Check.
137 $! Tell The User That We Are Compiling.
139 $ WRITE SYS$OUTPUT "Compiling The ",LIB_NAME," Files."
141 $! Check To See If We Already Have A "LIBRSAGLUE.OLB" Library...
143 $ IF (F$SEARCH(LIB_NAME).EQS."")
146 $! Guess Not, Create The Library.
148 $ LIBRARY/CREATE/OBJECT 'LIB_NAME'
150 $! End The Library Exist Check.
154 $! Define The RSAREF Library Files.
156 $ LIB_RSAREF = "DESC,DIGIT,MD2C,MD5C,NN,PRIME,RSA,R_DH,R_ENCODE,R_ENHANC," + -
157 "R_KEYGEN,R_RANDOM,R_STDLIB"
159 $! Define A File Counter And Set It To "0".
163 $! Top Of The File Loop.
167 $! O.K, Extract The File Name From The File List.
169 $ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",LIB_RSAREF)
171 $! Check To See If We Are At The End Of The File List.
173 $ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE
175 $! Increment The Counter.
177 $ FILE_COUNTER = FILE_COUNTER + 1
179 $! Create The Source File Name.
181 $ SOURCE_FILE = "SYS$DISK:[.SOURCE]" + FILE_NAME + ".C"
183 $! Tell The User We Are Compiling The Source File.
185 $ WRITE SYS$OUTPUT " ",FILE_NAME,".C"
187 $! Create The Object File Name.
189 $ OBJECT_FILE = OBJ_DIR + FILE_NAME + ".OBJ"
190 $ ON WARNING THEN GOTO NEXT_FILE
192 $! Check To See If The File We Want To Compile Actually Exists.
194 $ IF (F$SEARCH(SOURCE_FILE).EQS."")
197 $! Tell The User That The File Dosen't Exist.
199 $ WRITE SYS$OUTPUT ""
200 $ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist."
201 $ WRITE SYS$OUTPUT ""
207 $! End The File Exist Check.
213 $ ON ERROR THEN GOTO NEXT_FILE
214 $ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE'
216 $! Add It To The Library.
218 $ LIBRARY/REPLACE/OBJECT 'LIB_NAME' 'OBJECT_FILE'
220 $! Time To Clean Up The Object File.
222 $ DELETE 'OBJECT_FILE';*
224 $! Go Back And Do It Again.
228 $! All Done With This Library Part.
232 $! Tell The User That We Are All Done.
234 $ WRITE SYS$OUTPUT "Library ",LIB_NAME," Built."
236 $! All Done, Time To Return.
240 $! Compile The [.xxx.EXE.RSAREF]DHDEMO Program.
244 $! Check To See If We Have The Proper Libraries.
248 $! Check To See If We Have A Linker Option File.
250 $ GOSUB CHECK_OPT_FILE
252 $! Check To See If The File We Want To Compile Actually Exists.
254 $ IF (F$SEARCH("SYS$DISK:[.RDEMO]DHDEMO.C").EQS."")
257 $! Tell The User That The File Dosen't Exist.
259 $ WRITE SYS$OUTPUT ""
260 $ WRITE SYS$OUTPUT "The File [.RDEMO]DHDEMO.C Dosen't Exist."
261 $ WRITE SYS$OUTPUT ""
267 $! End The [.RDEMO]DHDEMO.C File Check.
271 $! Tell The User What We Are Building.
273 $ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DHDEMO.EXE"
275 $! Compile The DHDEMO Program.
277 $ CC/OBJECT='OBJ_DIR'DHDEMO.OBJ SYS$DISK:[.RDEMO]DHDEMO.C
279 $! Link The DHDEMO Program.
281 $ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS -
282 /EXE='EXE_DIR'DHDEMO.EXE 'OBJ_DIR'DHDEMO.OBJ, -
283 'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
285 $! All Done, Time To Return.
289 $! Compile The RDEMO Program.
293 $! Check To See If We Have The Proper Libraries.
297 $! Check To See If We Have A Linker Option File.
299 $ GOSUB CHECK_OPT_FILE
301 $! Check To See If The File We Want To Compile Actually Exists.
303 $ IF (F$SEARCH("SYS$DISK:[.RDEMO]RDEMO.C").EQS."")
306 $! Tell The User That The File Dosen't Exist.
308 $ WRITE SYS$OUTPUT ""
309 $ WRITE SYS$OUTPUT "The File [.RDEMO]RDEMO.C Dosen't Exist."
310 $ WRITE SYS$OUTPUT ""
316 $! End The [.RDEMO]RDEMO.C File Check.
320 $! Tell The User What We Are Building.
322 $ WRITE SYS$OUTPUT "Building ",EXE_DIR,"RDEMO.EXE"
324 $! Compile The RDEMO Program.
326 $ CC/OBJECT='OBJ_DIR'RDEMO.OBJ SYS$DISK:[.RDEMO]RDEMO.C
328 $! Link The RDEMO Program.
330 $ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS -
331 /EXE='EXE_DIR'RDEMO.EXE 'OBJ_DIR'RDEMO.OBJ, -
332 'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION
334 $! All Done, Time To Return.
338 $! Check For The Link Option FIle.
342 $! Check To See If We Need To Make A VAX C Option File.
344 $ IF (COMPILER.EQS."VAXC")
347 $! Check To See If We Already Have A VAX C Linker Option File.
349 $ IF (F$SEARCH(OPT_FILE).EQS."")
352 $! We Need A VAX C Linker Option File.
357 ! Default System Options File To Link Agianst
358 ! The Sharable VAX C Runtime Library.
360 SYS$SHARE:VAXCRTL.EXE/SHARE
363 $! End The Option File Check.
367 $! End The VAXC Check.
371 $! Check To See If We Need A GNU C Option File.
373 $ IF (COMPILER.EQS."GNUC")
376 $! Check To See If We Already Have A GNU C Linker Option File.
378 $ IF (F$SEARCH(OPT_FILE).EQS."")
381 $! We Need A GNU C Linker Option File.
386 ! Default System Options File To Link Agianst
387 ! The Sharable C Runtime Library.
389 GNU_CC:[000000]GCCLIB/LIBRARY
390 SYS$SHARE:VAXCRTL/SHARE
393 $! End The Option File Check.
397 $! End The GNU C Check.
401 $! Check To See If We Need A DEC C Option File.
403 $ IF (COMPILER.EQS."DECC")
406 $! Check To See If We Already Have A DEC C Linker Option File.
408 $ IF (F$SEARCH(OPT_FILE).EQS."")
411 $! Figure Out If We Need An AXP Or A VAX Linker Option File.
413 $ IF (ARCH.EQS."VAX")
416 $! We Need A DEC C Linker Option File For VAX.
421 ! Default System Options File To Link Agianst
422 ! The Sharable DEC C Runtime Library.
424 SYS$SHARE:DECC$SHR.EXE/SHARE
431 $! Create The AXP Linker Option File.
436 ! Default System Options File For AXP To Link Agianst
437 ! The Sharable C Runtime Library.
439 SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE
440 SYS$SHARE:CMA$OPEN_RTL/SHARE
443 $! End The VAX/AXP DEC C Option File Check.
447 $! End The Option File Search.
451 $! End The DEC C Check.
455 $! Tell The User What Linker Option File We Are Using.
457 $ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"."
464 $! Look For The Library LIBRSAGLUE.OLB.
466 $ IF (F$SEARCH(LIB_NAME).EQS."")
469 $! Tell The User We Can't Find The [.xxx.EXE.RSAREF]LIBRSAGLUE.OLB Library.
471 $ WRITE SYS$OUTPUT ""
472 $ WRITE SYS$OUTPUT "Can't Find The Library ",LIB_NAME,"."
473 $ WRITE SYS$OUTPUT "We Can't Link Without It."
474 $ WRITE SYS$OUTPUT ""
476 $! And Ask If They Would Like To Build It.
478 $ INQUIRE YESNO "Would You Like To Build The Library Now (Y/N)?"
482 $ IF (YESNO.EQS."Y").OR.(YESNO.EQS."y")
485 $! Then Build The Library.
489 $! When Done With That, RETURN To Finish What Ever We Were Doing
490 $! That Needed The Library.
498 $! Since We Can't Link Without It, Exit.
502 $! End The Answer Check.
506 $! End The Library Check.
514 $! Check The User's Options.
518 $! Check To See If P1 Is Blank.
523 $! P1 Is Blank, So Build Everything.
531 $! Else, Check To See If P1 Has A Valid Arguement.
533 $ IF (P1.EQS."LIBRARY").OR.(P1.EQS."DHDEMO").OR.(P1.EQS."RDEMO")
536 $! A Valid Arguement.
544 $! Tell The User We Don't Know What They Want.
546 $ WRITE SYS$OUTPUT ""
547 $ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:"
548 $ WRITE SYS$OUTPUT ""
549 $ WRITE SYS$OUTPUT " ALL : To Just Build Everything."
550 $ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.RSAREF]LIBRSAGLUE.OLB Library."
551 $ WRITE SYS$OUTPUT " DHDEMO : To Compile Just The [.xxx.EXE.RSAREF]DHDEMO Program."
552 $ WRITE SYS$OUTPUT " RDEMO : To Compile Just The [.xxx.EXE.RSAREF]RDEMO Program.
553 $ WRITE SYS$OUTPUT ""
554 $ WRITE SYS$OUTPUT " Where 'xxx' Stands For:"
555 $ WRITE SYS$OUTPUT ""
556 $ WRITE SYS$OUTPUT " AXP : Alpha Architecture."
557 $ WRITE SYS$OUTPUT " VAX : VAX Architecture."
558 $ WRITE SYS$OUTPUT ""
564 $! End The Valid Arguement Check.
572 $! Check To See If P2 Is Blank.
574 $ IF (P2.EQS."NODEBUG")
577 $! P2 Is "NODEBUG" So Compile Without Debugger Information.
579 $ DEBUGGER = "NODEBUG"
580 $ TRACEBACK = "NOTRACEBACK"
581 $ GCC_OPTIMIZE = "OPTIMIZE"
582 $ CC_OPTIMIZE = "OPTIMIZE"
583 $ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile."
584 $ WRITE SYS$OUTPUT "Compiling With Compiler Optimization."
587 $! Check To See If We Are To Compile With Debugger Information.
589 $ IF (P2.EQS."DEBUG")
592 $! Compile With Debugger Information.
595 $ TRACEBACK = "TRACEBACK"
596 $ GCC_OPTIMIZE = "NOOPTIMIZE"
597 $ CC_OPTIMIZE = "NOOPTIMIZE"
598 $ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile."
599 $ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization."
602 $! Tell The User Entered An Invalid Option..
604 $ WRITE SYS$OUTPUT ""
605 $ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:"
606 $ WRITE SYS$OUTPUT ""
607 $ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information."
608 $ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information."
609 $ WRITE SYS$OUTPUT ""
615 $! End The Valid Arguement Check.
623 $! Special Threads For OpenVMS v7.1 Or Later.
625 $! Written By: Richard Levitte
626 $! richard@levitte.org
629 $! Check To See If We Have A Option For P4.
634 $! Get The Version Of VMS We Are Using.
637 $ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION")))
638 $ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP))
640 $! Check To See If The VMS Version Is v7.1 Or Later.
645 $! We Have OpenVMS v7.1 Or Later, So Use The Special Threads.
647 $ ISSEVEN := ,PTHREAD_USE_D4
649 $! End The VMS Version Check.
657 $! Check To See If P3 Is Blank.
662 $! O.K., The User Didn't Specify A Compiler, Let's Try To
663 $! Find Out Which One To Use.
665 $! Check To See If We Have GNU C.
667 $ IF (F$TRNLNM("GNU_CC").NES."")
670 $! Looks Like GNUC, Set To Use GNUC.
674 $! End The GNU C Compiler Check.
678 $! Check To See If We Have VAXC Or DECC.
680 $ IF (ARCH.EQS."ALPHA").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."")
683 $! Looks Like DECC, Set To Use DECC.
687 $! Tell The User We Are Using DECC.
689 $ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
695 $! Looks Like VAXC, Set To Use VAXC.
699 $! End The VAXC Compiler Check.
703 $! End The DECC & VAXC Compiler Check.
707 $! End The Compiler Check.
711 $! Set Up Initial CC Definitions, Possibly With User Ones
714 $ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = CCDEFS + "," + USER_CCDEFS
716 $ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS
717 $ CCDISABLEWARNINGS = ""
718 $ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN -
719 CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS
721 $! Check To See If The User Entered A Valid Paramter.
723 $ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC")
726 $! Check To See If The User Wanted DECC.
731 $! Looks Like DECC, Set To Use DECC.
735 $! Tell The User We Are Using DECC.
737 $ WRITE SYS$OUTPUT "Using DECC 'C' Compiler."
742 $ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" -
744 $ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + -
745 "/NOLIST/PREFIX=ALL" + -
746 "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[.SOURCE])" + CCEXTRAFLAGS
748 $! Define The Linker Options File Name.
750 $ OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT"
756 $! Check To See If We Are To Use VAXC.
761 $! Looks Like VAXC, Set To Use VAXC.
765 $! Tell The User We Are Using VAX C.
767 $ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler."
769 $! Compile Using VAXC.
774 $ WRITE SYS$OUTPUT "There is no VAX C on Alpha!"
777 $ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC"
778 $ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
779 "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[.SOURCE])" + CCEXTRAFLAGS
780 $ CCDEFS = CCDEFS + ",""VAXC"""
782 $! Define <sys> As SYS$COMMON:[SYSLIB]
784 $ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB]
786 $! Define The Linker Options File Name.
788 $ OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT"
794 $! Check To See If We Are To Use GNU C.
799 $! Looks Like GNUC, Set To Use GNUC.
803 $! Tell The User We Are Using GNUC.
805 $ WRITE SYS$OUTPUT "Using GNU 'C' Compiler."
809 $ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + -
810 "/INCLUDE=(SYS$DISK:[-.CRYPTO],SYS$DISK:[.SOURCE])" + CCEXTRAFLAGS
812 $! Define The Linker Options File Name.
814 $ OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT"
816 $! End The GNU C Check.
820 $! Set up default defines
822 $ CCDEFS = """FLAT_INC=1""," + CCDEFS
823 $ CCDEFS = CCDEFS + ",""RSAref=1"""
825 $! Finish up the definition of CC.
827 $ IF COMPILER .EQS. "DECC"
829 $ IF CCDISABLEWARNINGS .NES. ""
831 $ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))"
834 $ CCDISABLEWARNINGS = ""
836 $ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
838 $! Show user the result
840 $ WRITE SYS$OUTPUT "Main Compiling Command: ",CC
842 $! Else The User Entered An Invalid Arguement.
846 $! Tell The User We Don't Know What They Want.
848 $ WRITE SYS$OUTPUT ""
849 $ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:"
850 $ WRITE SYS$OUTPUT ""
851 $ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C."
852 $ WRITE SYS$OUTPUT " DECC : To Compile With DEC C."
853 $ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C."
854 $ WRITE SYS$OUTPUT ""
870 $! Save old value of the logical name OPENSSL
872 $ __SAVE_OPENSSL = F$TRNLNM("OPENSSL","LNM$PROCESS_TABLE")
874 $! Save directory information
876 $ __HERE = F$PARSE(F$PARSE("A.;",F$ENVIRONMENT("PROCEDURE"))-"A.;","[]A.;") - "A.;"
877 $ __TOP = __HERE - "RSAREF]"
878 $ __INCLUDE = __TOP + "INCLUDE.OPENSSL]"
880 $! Set up the logical name OPENSSL to point at the include directory
882 $ DEFINE OPENSSL/NOLOG '__INCLUDE'
890 $! Restore the logical name OPENSSL if it had a value
892 $ IF __SAVE_OPENSSL .EQS. ""
896 $ DEFINE/NOLOG OPENSSL '__SAVE_OPENSSL'