1 |
578 |
markom |
$! libiberty/vmsbuild.com -- build liberty.olb for VMS host, VMS target
|
2 |
|
|
$!
|
3 |
|
|
$ CC = "gcc /noVerbose/Debug/Incl=([],[-.include])"
|
4 |
|
|
$ LIBR = "library /Obj"
|
5 |
|
|
$ LINK = "link"
|
6 |
|
|
$ DELETE= "delete /noConfirm"
|
7 |
|
|
$ SEARCH= "search /Exact"
|
8 |
|
|
$ ECHO = "write sys$output"
|
9 |
|
|
$ ABORT = "exit %x002C"
|
10 |
|
|
$!
|
11 |
|
|
$ LIB_NAME = "liberty.olb" !this is what we're going to construct
|
12 |
|
|
$ WORK_LIB = "new-lib.olb" !used to guard against an incomplete build
|
13 |
|
|
$
|
14 |
|
|
$! manually copied from Makefile.in
|
15 |
|
|
$ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "-
|
16 |
|
|
+ "fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o "-
|
17 |
|
|
+ "floatformat.o objalloc.o obstack.o spaces.o strerror.o strsignal.o "-
|
18 |
|
|
+ "xatexit.o xexit.o xmalloc.o xmemdup.o xstrdup.o xstrerror.o"
|
19 |
|
|
$! anything not caught by link+search of dummy.* should be added here
|
20 |
|
|
$ EXTRA_OFILES = ""
|
21 |
|
|
$!
|
22 |
|
|
$! move to the directory which contains this command procedure
|
23 |
|
|
$ old_dir = f$environ("DEFAULT")
|
24 |
|
|
$ new_dir = f$parse("_._;",f$environ("PROCEDURE")) - "_._;"
|
25 |
|
|
$ set default 'new_dir'
|
26 |
|
|
$
|
27 |
|
|
$ ECHO "Starting libiberty build..."
|
28 |
|
|
$ create config.h
|
29 |
|
|
/* libiberty config.h for VMS */
|
30 |
|
|
#define NEED_sys_siglist
|
31 |
|
|
#define NEED_strsignal
|
32 |
|
|
#define NEED_psignal
|
33 |
|
|
#define NEED_basename
|
34 |
|
|
$ LIBR 'WORK_LIB' /Create
|
35 |
|
|
$
|
36 |
|
|
$! first pass: compile "required" modules
|
37 |
|
|
$ ofiles = REQUIRED_OFILES + " " + EXTRA_OFILES
|
38 |
|
|
$ pass = 1
|
39 |
|
|
$ gosub do_ofiles
|
40 |
|
|
$
|
41 |
|
|
$! second pass: process dummy.c, using the first pass' results
|
42 |
|
|
$ ECHO " now checking run-time library for missing functionality"
|
43 |
|
|
$ if f$search("dummy.obj").nes."" then DELETE dummy.obj;*
|
44 |
|
|
$ define/noLog sys$error _NL: !can't use /User_Mode here due to gcc
|
45 |
|
|
$ define/noLog sys$output _NL: ! driver's use of multiple image activation
|
46 |
|
|
$ on error then continue
|
47 |
|
|
$ 'CC' dummy.c
|
48 |
|
|
$ deassign sys$error !restore, more or less
|
49 |
|
|
$ deassign sys$output
|
50 |
|
|
$ if f$search("dummy.obj").eqs."" then goto pass2_failure1
|
51 |
|
|
$! link dummy.obj, capturing full linker feedback in dummy.map
|
52 |
|
|
$ oldmsg = f$environ("MESSAGE")
|
53 |
|
|
$ set message /Facility/Severity/Identification/Text
|
54 |
|
|
$ define/User sys$output _NL:
|
55 |
|
|
$ define/User sys$error _NL:
|
56 |
|
|
$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
|
57 |
|
|
gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
|
58 |
|
|
$ set message 'oldmsg'
|
59 |
|
|
$ if f$search("dummy.map").eqs."" then goto pass2_failure2
|
60 |
|
|
$ DELETE dummy.obj;*
|
61 |
|
|
$ SEARCH dummy.map "%LINK-I-UDFSYM" /Output=dummy.list
|
62 |
|
|
$ DELETE dummy.map;*
|
63 |
|
|
$ ECHO " check completed"
|
64 |
|
|
$! we now have a file with one entry per line of unresolvable symbols
|
65 |
|
|
$ ofiles = ""
|
66 |
|
|
$ if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
|
67 |
|
|
$ open/Read ifile$ dummy.list
|
68 |
|
|
$iloop: read/End=idone ifile$ iline
|
69 |
|
|
$ iline = f$edit(iline,"COMPRESS,TRIM,LOWERCASE")
|
70 |
|
|
$ ofiles = ofiles + " " + f$element(1," ",iline) + ".o"
|
71 |
|
|
$ goto iloop
|
72 |
|
|
$idone: close ifile$
|
73 |
|
|
$ DELETE dummy.list;*
|
74 |
|
|
$ on error then ABORT
|
75 |
|
|
$
|
76 |
|
|
$! third pass: compile "missing" modules collected in pass 2
|
77 |
|
|
$ pass = 3
|
78 |
|
|
$ gosub do_ofiles
|
79 |
|
|
$
|
80 |
|
|
$! finish up
|
81 |
|
|
$ LIBR 'WORK_LIB' /Compress /Output='LIB_NAME' !new-lib.olb -> liberty.olb
|
82 |
|
|
$ DELETE 'WORK_LIB';*
|
83 |
|
|
$
|
84 |
|
|
$! all done
|
85 |
|
|
$ ECHO "Completed libiberty build."
|
86 |
|
|
$ type sys$input:
|
87 |
|
|
|
88 |
|
|
You many wish to do
|
89 |
|
|
$ COPY LIBERTY.OLB GNU_CC:[000000]
|
90 |
|
|
so that this run-time library resides in the same location as gcc's
|
91 |
|
|
support library. When building gas, be sure to leave the original
|
92 |
|
|
copy of liberty.olb here so that gas's build procedure can find it.
|
93 |
|
|
|
94 |
|
|
$ set default 'old_dir'
|
95 |
|
|
$ exit
|
96 |
|
|
$
|
97 |
|
|
$!
|
98 |
|
|
$! compile each element of the space-delimited list 'ofiles'
|
99 |
|
|
$!
|
100 |
|
|
$do_ofiles:
|
101 |
|
|
$ ofiles = f$edit(ofiles,"COMPRESS,TRIM")
|
102 |
|
|
$ i = 0
|
103 |
|
|
$oloop:
|
104 |
|
|
$ f = f$element(i," ",ofiles)
|
105 |
|
|
$ if f.eqs." " then goto odone
|
106 |
|
|
$ f = f - ".o" !strip dummy suffix
|
107 |
|
|
$ ECHO " ''f'"
|
108 |
|
|
$ skip_f = 0
|
109 |
|
|
$ if pass.eq.3 .and. f$search("''f'.c").eqs."" then gosub chk_deffunc
|
110 |
|
|
$ if .not.skip_f
|
111 |
|
|
$ then
|
112 |
|
|
$ 'CC' 'f'.c
|
113 |
|
|
$ LIBR 'WORK_LIB' 'f'.obj /Insert
|
114 |
|
|
$ DELETE 'f'.obj;*
|
115 |
|
|
$ endif
|
116 |
|
|
$ i = i + 1
|
117 |
|
|
$ goto oloop
|
118 |
|
|
$odone:
|
119 |
|
|
$ return
|
120 |
|
|
$
|
121 |
|
|
$!
|
122 |
|
|
$! check functions.def for a DEFFUNC() entry corresponding to missing file 'f'.c
|
123 |
|
|
$!
|
124 |
|
|
$chk_deffunc:
|
125 |
|
|
$ define/User sys$output _NL:
|
126 |
|
|
$ define/User sys$error _NL:
|
127 |
|
|
$ SEARCH functions.def "DEFFUNC","''f'" /Match=AND
|
128 |
|
|
$ if (($status.and.%x7FFFFFFF) .eq. 1)
|
129 |
|
|
$ then
|
130 |
|
|
$ skip_f = 1
|
131 |
|
|
$ open/Append config_h config.h
|
132 |
|
|
$ write config_h "#define NEED_''f'"
|
133 |
|
|
$ close config_h
|
134 |
|
|
$ endif
|
135 |
|
|
$ return
|
136 |
|
|
$
|
137 |
|
|
$!
|
138 |
|
|
$pass2_failure1:
|
139 |
|
|
$! if we reach here, dummy.c failed to compile and we're really stuck
|
140 |
|
|
$ type sys$input:
|
141 |
|
|
|
142 |
|
|
Cannot compile the library contents checker (dummy.c + functions.def),
|
143 |
|
|
so cannot continue!
|
144 |
|
|
|
145 |
|
|
$! attempt the compile again, without suppressing diagnostic messages this time
|
146 |
|
|
$ on error then ABORT +0*f$verify(v)
|
147 |
|
|
$ v = f$verify(1)
|
148 |
|
|
$ 'CC' dummy.c
|
149 |
|
|
$ ABORT +0*f$verify(v) !'f$verify(0)'
|
150 |
|
|
$!
|
151 |
|
|
$pass2_failure2:
|
152 |
|
|
$! should never reach here..
|
153 |
|
|
$ type sys$input:
|
154 |
|
|
|
155 |
|
|
Cannot link the library contents checker (dummy.obj), so cannot continue!
|
156 |
|
|
|
157 |
|
|
$! attempt the link again, without suppressing diagnostic messages this time
|
158 |
|
|
$ on error then ABORT +0*f$verify(v)
|
159 |
|
|
$ v = f$verify(1)
|
160 |
|
|
$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
|
161 |
|
|
gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
|
162 |
|
|
$ ABORT +0*f$verify(v) !'f$verify(0)'
|
163 |
|
|
$
|
164 |
|
|
$! not reached
|
165 |
|
|
$ exit
|