home *** CD-ROM | disk | FTP | other *** search
- $! libiberty/vmsbuild.com -- build liberty.olb for VMS host, VMS target
- $!
- $ CC = "gcc /noVerbose/Debug/Incl=([],[-.include])"
- $ LIBR = "library /Obj"
- $ LINK = "link"
- $ DELETE= "delete /noConfirm"
- $ SEARCH= "search /Exact"
- $ ECHO = "write sys$output"
- $ ABORT = "exit %x002C"
- $!
- $ LIB_NAME = "liberty.olb" !this is what we're going to construct
- $ WORK_LIB = "new-lib.olb" !used to guard against an incomplete build
- $
- $! manually copied from Makefile.in
- $ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "-
- + "fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o "-
- + "floatformat.o objalloc.o obstack.o spaces.o strerror.o strsignal.o "-
- + "xatexit.o xexit.o xmalloc.o xstrdup.o xstrerror.o"
- $! anything not caught by link+search of dummy.* should be added here
- $ EXTRA_OFILES = ""
- $!
- $! move to the directory which contains this command procedure
- $ old_dir = f$environ("DEFAULT")
- $ new_dir = f$parse("_._;",f$environ("PROCEDURE")) - "_._;"
- $ set default 'new_dir'
- $
- $ ECHO "Starting libiberty build..."
- $ create config.h
- /* libiberty config.h for VMS */
- #define NEED_sys_siglist
- #define NEED_strsignal
- #define NEED_psignal
- #define NEED_basename
- $ if f$search("alloca-conf.h").eqs."" then -
- copy alloca-norm.h alloca-conf.h
- $ LIBR 'WORK_LIB' /Create
- $
- $! first pass: compile "required" modules
- $ ofiles = REQUIRED_OFILES + " " + EXTRA_OFILES
- $ pass = 1
- $ gosub do_ofiles
- $
- $! second pass: process dummy.c, using the first pass' results
- $ ECHO " now checking run-time library for missing functionality"
- $ if f$search("dummy.obj").nes."" then DELETE dummy.obj;*
- $ define/noLog sys$error _NL: !can't use /User_Mode here due to gcc
- $ define/noLog sys$output _NL: ! driver's use of multiple image activation
- $ on error then continue
- $ 'CC' dummy.c
- $ deassign sys$error !restore, more or less
- $ deassign sys$output
- $ if f$search("dummy.obj").eqs."" then goto pass2_failure1
- $! link dummy.obj, capturing full linker feedback in dummy.map
- $ oldmsg = f$environ("MESSAGE")
- $ set message /Facility/Severity/Identification/Text
- $ define/User sys$output _NL:
- $ define/User sys$error _NL:
- $ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
- gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
- $ set message 'oldmsg'
- $ if f$search("dummy.map").eqs."" then goto pass2_failure2
- $ DELETE dummy.obj;*
- $ SEARCH dummy.map "%LINK-I-UDFSYM" /Output=dummy.list
- $ DELETE dummy.map;*
- $ ECHO " check completed"
- $! we now have a file with one entry per line of unresolvable symbols
- $ ofiles = ""
- $ if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
- $ open/Read ifile$ dummy.list
- $iloop: read/End=idone ifile$ iline
- $ iline = f$edit(iline,"COMPRESS,TRIM,LOWERCASE")
- $ ofiles = ofiles + " " + f$element(1," ",iline) + ".o"
- $ goto iloop
- $idone: close ifile$
- $ DELETE dummy.list;*
- $ on error then ABORT
- $
- $! third pass: compile "missing" modules collected in pass 2
- $ pass = 3
- $ gosub do_ofiles
- $
- $! finish up
- $ LIBR 'WORK_LIB' /Compress /Output='LIB_NAME' !new-lib.olb -> liberty.olb
- $ DELETE 'WORK_LIB';*
- $
- $! all done
- $ ECHO "Completed libiberty build."
- $ type sys$input:
-
- You many wish to do
- $ COPY LIBERTY.OLB GNU_CC:[000000]
- so that this run-time library resides in the same location as gcc's
- support library. When building gas, be sure to leave the original
- copy of liberty.olb here so that gas's build procedure can find it.
-
- $ set default 'old_dir'
- $ exit
- $
- $!
- $! compile each element of the space-delimited list 'ofiles'
- $!
- $do_ofiles:
- $ ofiles = f$edit(ofiles,"COMPRESS,TRIM")
- $ i = 0
- $oloop:
- $ f = f$element(i," ",ofiles)
- $ if f.eqs." " then goto odone
- $ f = f - ".o" !strip dummy suffix
- $ ECHO " ''f'"
- $ skip_f = 0
- $ if pass.eq.3 .and. f$search("''f'.c").eqs."" then gosub chk_deffunc
- $ if .not.skip_f
- $ then
- $ 'CC' 'f'.c
- $ LIBR 'WORK_LIB' 'f'.obj /Insert
- $ DELETE 'f'.obj;*
- $ endif
- $ i = i + 1
- $ goto oloop
- $odone:
- $ return
- $
- $!
- $! check functions.def for a DEFFUNC() entry corresponding to missing file 'f'.c
- $!
- $chk_deffunc:
- $ define/User sys$output _NL:
- $ define/User sys$error _NL:
- $ SEARCH functions.def "DEFFUNC","''f'" /Match=AND
- $ if (($status.and.%x7FFFFFFF) .eq. 1)
- $ then
- $ skip_f = 1
- $ open/Append config_h config.h
- $ write config_h "#define NEED_''f'"
- $ close config_h
- $ endif
- $ return
- $
- $!
- $pass2_failure1:
- $! if we reach here, dummy.c failed to compile and we're really stuck
- $ type sys$input:
-
- Cannot compile the library contents checker (dummy.c + functions.def),
- so cannot continue!
-
- $! attempt the compile again, without suppressing diagnostic messages this time
- $ on error then ABORT +0*f$verify(v)
- $ v = f$verify(1)
- $ 'CC' dummy.c
- $ ABORT +0*f$verify(v) !'f$verify(0)'
- $!
- $pass2_failure2:
- $! should never reach here..
- $ type sys$input:
-
- Cannot link the library contents checker (dummy.obj), so cannot continue!
-
- $! attempt the link again, without suppressing diagnostic messages this time
- $ on error then ABORT +0*f$verify(v)
- $ v = f$verify(1)
- $ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
- gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
- $ ABORT +0*f$verify(v) !'f$verify(0)'
- $
- $! not reached
- $ exit
-