-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChangeLog.beebe
254 lines (177 loc) · 8.16 KB
/
ChangeLog.beebe
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
This log documents changes to mawk-1.3.9.1 to prepare
mawk-1.3.9.1-autoconf, with drastically-improved portability, a few bug
fixes, and removal of a bug on all Solaris systems that prevented the
test suite from passing.
At the conclusion of the effort on a large collection of about 90
physical and virtual machines at the Department of Mathematics at the
University of Utah, using numerous versions of different C compilers,
including compilers named c89, c99, cc, clang, gcc, icc, lcc, opencc,
nvcc, pcc, pgcc, and suncc, and their companion C++ compilers, mawk now
builds and validates with almost all of them. The remaining failures
can all safely be characterized as compiler bugs or compiler
limitations, none of which mawk source code can address.
The CPU platforms tested include ARM, IA-64, MIPS, PowerPC, SPARC, x86,
and x86-64. Of those, MIPS and SPARC are big endian, and the remainder
are little-endian. PowerPC can be either: on Mac OS X, it is big
endian, and on GNU/Linux CentOS 7, it is little endian.
To give an idea of the number of builds, at the time of writing this,
there are 678 logs, of which 630 report that all tests passed.
Only relatively small changes to most of the mawk code were needed to
ensure that c89 compilers can handle it (except on Solaris, where c89
does not support 64-bit integers): these were just movement of
declaration before prior executable statements, and are documented
below.
Rather more changes were needed to make the code compilable with C++
compilers. A few C++ reserved words had to be #define'd to acceptable
ones, and a fair number of old K&R-style function definitions had to be
rewritten into c89 form to be acceptable to C++ compilers. Also,
because C++ does not permit silent casts of void to non-void types, a
number of statements, notably those involving memory allocations, had to
have explicit casts added to function calls. The C++ effort was
worthwhile, because it uncovered two bugs that are now fixed, thanks to
the stricter rules that compilers for C++ enforce compared to those for
C. Also, having C++ compilability for C software can double the number
of compilers to which the code can be exposed, and that is always a good
thing in support of portable software.
Initially, autoconfiguration support was added to make it possible to
choose the compiler at build time in simultaneous builds. As more
machines were tested, it was found necessary to introduce
#include "config.h"
to just two files to get configure-time symbol definitions for use in
preprocessor statements; no compiler-supplied symbols could be used for
that job.
The original Makefile became Makefile.in, which configure then turns
into Makefile. The Makefile.in was then substantionally rewritten to
improve the easy of testing of many builds: if a log reports
SUCCESS: ALL 4 TESTS PASSED!
then it can be ignored by the developer, apart from knowing that a "make
install" on that system is now possible. A small wrapper script finds
such log files, and applies "xz -9" maximal compression to them, to the
remaining *.log files are the only ones that human needs to examine.
Testing found that on all Solaris systems, and their derivatives of
OpenIndiana, Illumos, and Hipster, log(x) for x < 0 returns -Infinity,
instead of a NaN. To remove that test failure, a bit of wrapper code
was introduced in function bi_log() in bi_funct.c to test arguments
before calling the math-library log() function. Now, the Solaris tests
all pass (except for c89 compilation, as noted above).
All files are under RCS control, and for uniformity, all trailing
whitespace has been removed, so the changed recorded below are based on
"rcsdiff -b -w" listings to ignore spacing differences:
Here are brief descriptions of the changes from the mawk-1.3.9.1 test
release:
array.c:
Add typecasts on void*-assignments and/or function arguments.
Comment out two duplication function prototypes to remove
compiler warnings.
bi_funct.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
Add simple infty_() and nan_() functions, because infty() and
nan() are not universally available, or defined in C89.
Define THROW__ macro to attach to end of prototypes for
random() and srandom(), which are not reliably declared in
system header files on all systems, and to which C++
implementations may, or may not, attach a throw() attribute.
Make bi_log() test for negative and zero arguments before
calling log() to hide misbehavior of that function on Solaris.
bi_vars.c:
Add const modifier to declaration of bi_var_names[].
cast.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
code.c:
Convert K&R function definitions to c89 syntax.
config.h:
New file generated by configure script from config.hin, which
in turn is generated by autoheader from configure.in.
da.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
Change shadowed name variable to name_ in one code block to
eliminate compiler warnings.
error.c:
Convert K&R function definitions to c89 syntax.
execute.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
fcall.c:
Convert K&R function definitions to c89 syntax.
field.c:
Add typecasts on void*-assignments and/or function arguments.
files.c:
Convert K&R function definitions to c89 syntax.
fin.c:
Add prototype for isatty().
Convert K&R function definitions to c89 syntax.
fin.h:
Add preprocessor #define to change "setmode" to "setmode_" to
avoid conflict with declaration in <unistd.h> on BitRig BSD.
fpe_check.c:
Convert K&R function definitions to c89 syntax.
table.c:
hash.c renamed to table.c
Add preprocessor #define to rename C++ reserved word "delete"
to "delete_".
Convert K&R function definitions to c89 syntax.
init.c:
Convert K&R function definitions to c89 syntax.
Add preprocessor #define to rename optarg (declared in
<getopt.h> on some systems) to optarg_.
Add print_help() (output largely derived from "man
mawk"), and recognize --help and --version options, with
immediate exit 0, for compatibility with lots of other
free and open-source software.
Add support for --help and --version options.
table_kw.c:
Convert K&R function definitions to c89 syntax.
main.c:
Convert K&R function definitions to c89 syntax.
scancode.c:
makescan.c renamed to scancode.c
Convert K&R function definitions to c89 syntax.
Fix bug caught by C++ compilers: close(fp) should be
fclose(fp).
matherr.c:
Include config.h for HAVE_SIGINFO symbol.
Convert K&R function definitions to c89 syntax.
Define THROW__ appropriately for Solaris (__SunOS), C++, and
other.
mawk.h:
Include <stdint.h> for declarations of extended integer types.
parse.y:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
prtypes_int.c:
Convert K&R function definitions to c89 syntax.
printf.c:
Add typecasts on void*-assignments and/or function arguments.
Move one declaration before executable code to allow C89
compilation.
re_cmpl.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
scan.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
version.c:
Convert K&R function definitions to c89 syntax.
zmalloc.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
rexp/rexp.c:
Convert K&R function definitions to c89 syntax.
rexp/rexp.h:
Add const to RE_panic() prototype.
rexp/rexp0.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
Add definition of nonstandard (but often available) macro isblank().
Add preprocessor #define to rename C++ reserved word "try" to
"try_".
rexp/rexp1.c:
Add typecasts on void*-assignments and/or function arguments.
rexp/rexp2.c:
Add typecasts on void*-assignments and/or function arguments.
Convert K&R function definitions to c89 syntax.
rexp/rexp3.c:
Comment out duplication prototype for RE_new_run_stack().