$! $Id: vmsbuild.com,v 1.2 2014/04/06 19:08:57 tom Exp $ $! VMS build-script for BYACC. Requires installed C compiler $! $! Screen Configurations $! --------------------- $! To build BYACC, type: $! $ @vmsbuild [BYACC [ [bld_target]]] $! $! where: $! :== { decc | vaxc } $! $! The default compiler on VAX hosts is vaxc, else decc (Alpha hosts). $! $! ----------------------------------------------------------- $ hlp = f$edit("''p1'", "UPCASE") $ if "''hlp'" .eqs. "HELP" .or. - "''hlp'" .eqs. "-H" .or. - "''hlp'" .eqs. "-?" .or. - "''hlp'" .eqs. "?" then gosub usage $ goto start $! $ vaxc_config: $ comp = "__vaxc__=1" $ CFLAGS = "/VAXC" $ DEFS = ",HAVE_STRERROR" $ using_vaxc = 1 $ return $! $ decc_config: $ comp = "__decc__=1" $ CFLAGS = "/DECC/prefix=all" $ DEFS = ",HAVE_ALARM,HAVE_STRERROR" $ return $! $ usage: $ write sys$output "usage: " $ write sys$output " $ @vmsbuild [BYACC [{decc | vaxc} []]]" $ exit 2 $! $ start: $! ----------------------------------------------------------- $! pickup user's compiler choice, if any $! ----------------------------------------------------------- $! $ comp = "" $ using_vaxc = 0 $ if "''p2'" .nes. "" $ then $ comp = f$edit(p2, "UPCASE") $ if "''comp'" .eqs. "VAXC" $ then $ gosub vaxc_config $ else $ if "''comp'" .eqs. "DECC" $ then $ gosub decc_config $ else $ gosub usage $ endif $ endif $ endif $! ----------------------------------------------------------- $! Build the option-file $! $ open/write optf vms_link.opt $ write optf "closure.obj" $ write optf "error.obj" $ write optf "lalr.obj" $ write optf "lr0.obj" $ write optf "mkpar.obj" $ write optf "output.obj" $ write optf "reader.obj" $ write optf "yaccpar.obj" $ write optf "symtab.obj" $ write optf "verbose.obj" $ write optf "warshall.obj" $! ---------------------------------- $! Look for the compiler used and specify architecture. $! $ CC = "CC" $ if f$getsyi("HW_MODEL").ge.1024 $ then $ arch = "__alpha__=1" $ if "''comp'" .eqs. "" then gosub decc_config $ else $ arch = "__vax__=1" $ if "''comp'" .nes. "" then goto screen_config $ if f$search("SYS$SYSTEM:VAXC.EXE").nes."" $ then $ gosub vaxc_config $ else $ if f$search("SYS$SYSTEM:DECC$COMPILER.EXE").nes."" $ then $ gosub decc_config $ else $ DEFS = ",HAVE_STRERROR" $ if f$trnlnm("GNU_CC").eqs."" $ then $ write sys$output "C compiler required to rebuild BYACC" $ close optf $ exit $ else $ write optf "gnu_cc:[000000]gcclib.olb/lib" $ comp = "__gcc__=1" $ CC = "GCC" $ endif $ endif $ endif $ endif $! $ screen_config: $! $ if using_vaxc .eq. 1 then write optf "sys$library:vaxcrtl.exe/share" $ close optf $! -------------- vms_link.opt is created ------------- $ if f$edit("''p1'", "UPCASE") .eqs. "VMS_LINK.OPT" $ then $! mms called this script to build vms_link.opt. all done $ exit $ endif $! $ if f$search("SYS$SYSTEM:MMS.EXE").eqs."" $ then $! can also use /Debug /Listing, /Show=All $ $ CFLAGS := 'CFLAGS/Diagnostics /Define=("''DEFS'") /Include=([]) $ $ if "''p3'" .nes. "" then goto 'p3 $! $! $ all : $! $ call make closure $ call make error $ call make lalr $ call make lr0 $ call make main $ call make mkpar $ call make output $ call make reader $ call make yaccpar $ call make symtab $ call make verbose $ call make warshall $! $ link /exec='target/map/cross main.obj, vms_link/opt $ goto build_last $! $ install : $ WRITE SYS$ERROR "** no rule for install" $ goto build_last $! $ clobber : $ if f$search("BYACC.com") .nes. "" then delete BYACC.com;* $ if f$search("*.exe") .nes. "" then delete *.exe;* $! fallthru $! $ clean : $ if f$search("*.obj") .nes. "" then delete *.obj;* $ if f$search("*.bak") .nes. "" then delete *.bak;* $ if f$search("*.lis") .nes. "" then delete *.lis;* $ if f$search("*.log") .nes. "" then delete *.log;* $ if f$search("*.map") .nes. "" then delete *.map;* $ if f$search("*.opt") .nes. "" then delete *.opt;* $! fallthru $! $ build_last : $ if f$search("*.dia") .nes. "" then delete *.dia;* $ if f$search("*.lis") .nes. "" then purge *.lis $ if f$search("*.obj") .nes. "" then purge *.obj $ if f$search("*.map") .nes. "" then purge *.map $ if f$search("*.opt") .nes. "" then purge *.opt $ if f$search("*.exe") .nes. "" then purge *.exe $ if f$search("*.log") .nes. "" then purge *.log $! fallthru $! $ vms_link_opt : $ exit 1 $! $! Runs BYACC from the current directory (used for testing) $ byacc_com : $ if "''f$search("BYACC.com")'" .nes. "" then delete BYACC.com;* $ copy nl: BYACC.com $ open/append test_script BYACC.com $ write test_script "$ temp = f$environment(""procedure"")" $ write test_script "$ temp = temp -" $ write test_script " - f$parse(temp,,,""version"",""syntax_only"") -" $ write test_script " - f$parse(temp,,,""type"",""syntax_only"")" $ write test_script "$ BYACC :== $ 'temp'.exe" $ write test_script "$ define/user_mode sys$input sys$command" $ write test_script "$ define/user_mode sys$output sys$command" $ write test_script "$ BYACC 'p1 'p2 'p3 'p4 'p5 'p6 'p7 'p8" $ close test_script $ write sys$output "** made BYACC.com" $ exit $! $ else $ mms/ignore=warning/macro=('comp','mmstar','arch') 'p3 $ endif $ exit $ make: subroutine $ if f$search("''p1'.obj") .eqs. "" $ then $ write sys$output "compiling ''p1'" $ 'CC 'CFLAGS 'p1.c $ if f$search("''p1'.dia") .nes. "" then delete 'p1.dia;* $ endif $exit $ return $ endsubroutine