1 $! Id: vmsbuild.com,v 1.2 2014/04/06 19:08:57 tom Exp 2 $! VMS build-script for BYACC. Requires installed C compiler 3 $! 4 $! Screen Configurations 5 $! --------------------- 6 $! To build BYACC, type: 7 $! $ @vmsbuild [BYACC [<compiler> [bld_target]]] 8 $! 9 $! where: 10 $! <compiler> :== { decc | vaxc } 11 $! 12 $! The default compiler on VAX hosts is vaxc, else decc (Alpha hosts). 13 $! 14 $! ----------------------------------------------------------- 15 $ hlp = f$edit("''p1'", "UPCASE") 16 $ if "''hlp'" .eqs. "HELP" .or. - 17 "''hlp'" .eqs. "-H" .or. - 18 "''hlp'" .eqs. "-?" .or. - 19 "''hlp'" .eqs. "?" then gosub usage 20 $ goto start 21 $! 22 $ vaxc_config: 23 $ comp = "__vaxc__=1" 24 $ CFLAGS = "/VAXC" 25 $ DEFS = ",HAVE_STRERROR" 26 $ using_vaxc = 1 27 $ return 28 $! 29 $ decc_config: 30 $ comp = "__decc__=1" 31 $ CFLAGS = "/DECC/prefix=all" 32 $ DEFS = ",HAVE_ALARM,HAVE_STRERROR" 33 $ return 34 $! 35 $ usage: 36 $ write sys$output "usage: " 37 $ write sys$output " $ @vmsbuild [BYACC [{decc | vaxc} [<bldtarget>]]]" 38 $ exit 2 39 $! 40 $ start: 41 $! ----------------------------------------------------------- 42 $! pickup user's compiler choice, if any 43 $! ----------------------------------------------------------- 44 $! 45 $ comp = "" 46 $ using_vaxc = 0 47 $ if "''p2'" .nes. "" 48 $ then 49 $ comp = f$edit(p2, "UPCASE") 50 $ if "''comp'" .eqs. "VAXC" 51 $ then 52 $ gosub vaxc_config 53 $ else 54 $ if "''comp'" .eqs. "DECC" 55 $ then 56 $ gosub decc_config 57 $ else 58 $ gosub usage 59 $ endif 60 $ endif 61 $ endif 62 $! ----------------------------------------------------------- 63 $! Build the option-file 64 $! 65 $ open/write optf vms_link.opt 66 $ write optf "closure.obj" 67 $ write optf "error.obj" 68 $ write optf "lalr.obj" 69 $ write optf "lr0.obj" 70 $ write optf "mkpar.obj" 71 $ write optf "output.obj" 72 $ write optf "reader.obj" 73 $ write optf "yaccpar.obj" 74 $ write optf "symtab.obj" 75 $ write optf "verbose.obj" 76 $ write optf "warshall.obj" 77 $! ---------------------------------- 78 $! Look for the compiler used and specify architecture. 79 $! 80 $ CC = "CC" 81 $ if f$getsyi("HW_MODEL").ge.1024 82 $ then 83 $ arch = "__alpha__=1" 84 $ if "''comp'" .eqs. "" then gosub decc_config 85 $ else 86 $ arch = "__vax__=1" 87 $ if "''comp'" .nes. "" then goto screen_config 88 $ if f$search("SYS$SYSTEM:VAXC.EXE").nes."" 89 $ then 90 $ gosub vaxc_config 91 $ else 92 $ if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes."" 93 $ then 94 $ gosub decc_config 95 $ else 96 $ DEFS = ",HAVE_STRERROR" 97 $ if f$trnlnm("GNU_CC").eqs."" 98 $ then 99 $ write sys$output "C compiler required to rebuild BYACC" 100 $ close optf 101 $ exit 102 $ else 103 $ write optf "gnu_cc:[000000]gcclib.olb/lib" 104 $ comp = "__gcc__=1" 105 $ CC = "GCC" 106 $ endif 107 $ endif 108 $ endif 109 $ endif 110 $! 111 $ screen_config: 112 $! 113 $ if using_vaxc .eq. 1 then write optf "sys$library:vaxcrtl.exe/share" 114 $ close optf 115 $! -------------- vms_link.opt is created ------------- 116 $ if f$edit("''p1'", "UPCASE") .eqs. "VMS_LINK.OPT" 117 $ then 118 $! mms called this script to build vms_link.opt. all done 119 $ exit 120 $ endif 121 $! 122 $ if f$search("SYS$SYSTEM:MMS.EXE").eqs."" 123 $ then 124 $! can also use /Debug /Listing, /Show=All 125 $ 126 $ CFLAGS := 'CFLAGS/Diagnostics /Define=("''DEFS'") /Include=([]) 127 $ 128 $ if "''p3'" .nes. "" then goto 'p3 129 $! 130 $! 131 $ all : 132 $! 133 $ call make closure 134 $ call make error 135 $ call make lalr 136 $ call make lr0 137 $ call make main 138 $ call make mkpar 139 $ call make output 140 $ call make reader 141 $ call make yaccpar 142 $ call make symtab 143 $ call make verbose 144 $ call make warshall 145 $! 146 $ link /exec='target/map/cross main.obj, vms_link/opt 147 $ goto build_last 148 $! 149 $ install : 150 $ WRITE SYS$ERROR "** no rule for install" 151 $ goto build_last 152 $! 153 $ clobber : 154 $ if f$search("BYACC.com") .nes. "" then delete BYACC.com;* 155 $ if f$search("*.exe") .nes. "" then delete *.exe;* 156 $! fallthru 157 $! 158 $ clean : 159 $ if f$search("*.obj") .nes. "" then delete *.obj;* 160 $ if f$search("*.bak") .nes. "" then delete *.bak;* 161 $ if f$search("*.lis") .nes. "" then delete *.lis;* 162 $ if f$search("*.log") .nes. "" then delete *.log;* 163 $ if f$search("*.map") .nes. "" then delete *.map;* 164 $ if f$search("*.opt") .nes. "" then delete *.opt;* 165 $! fallthru 166 $! 167 $ build_last : 168 $ if f$search("*.dia") .nes. "" then delete *.dia;* 169 $ if f$search("*.lis") .nes. "" then purge *.lis 170 $ if f$search("*.obj") .nes. "" then purge *.obj 171 $ if f$search("*.map") .nes. "" then purge *.map 172 $ if f$search("*.opt") .nes. "" then purge *.opt 173 $ if f$search("*.exe") .nes. "" then purge *.exe 174 $ if f$search("*.log") .nes. "" then purge *.log 175 $! fallthru 176 $! 177 $ vms_link_opt : 178 $ exit 1 179 $! 180 $! Runs BYACC from the current directory (used for testing) 181 $ byacc_com : 182 $ if "''f$search("BYACC.com")'" .nes. "" then delete BYACC.com;* 183 $ copy nl: BYACC.com 184 $ open/append test_script BYACC.com 185 $ write test_script "$ temp = f$environment(""procedure"")" 186 $ write test_script "$ temp = temp -" 187 $ write test_script " - f$parse(temp,,,""version"",""syntax_only"") -" 188 $ write test_script " - f$parse(temp,,,""type"",""syntax_only"")" 189 $ write test_script "$ BYACC :== $ 'temp'.exe" 190 $ write test_script "$ define/user_mode sys$input sys$command" 191 $ write test_script "$ define/user_mode sys$output sys$command" 192 $ write test_script "$ BYACC 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8" 193 $ close test_script 194 $ write sys$output "** made BYACC.com" 195 $ exit 196 $! 197 $ else 198 $ mms/ignore=warning/macro=('comp','mmstar','arch') 'p3 199 $ endif 200 $ exit 201 $ make: subroutine 202 $ if f$search("''p1'.obj") .eqs. "" 203 $ then 204 $ write sys$output "compiling ''p1'" 205 $ 'CC 'CFLAGS 'p1.c 206 $ if f$search("''p1'.dia") .nes. "" then delete 'p1.dia;* 207 $ endif 208 $exit 209 $ return 210 $ endsubroutine 211