Fix util/mkerr.pl

- Adjust mkerr.pl to produce the line length we used for source
  reformating.

- Have mkerr.pl keep track of preprocessor directive indentation

  Among others, do not spuriously throw away a #endif at the end of
  header files.

- Make sure mkerr.pl specifies any header inclusion correctly

Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
Richard Levitte 2016-05-18 19:52:34 +02:00
parent f3e235ed6f
commit 97665e1c4f

View file

@ -7,7 +7,6 @@
# https://www.openssl.org/source/license.html
my $config = "crypto/err/openssl.ec";
my $hprefix = "openssl/";
my $debug = 0;
my $unref = 0;
my $rebuild = 0;
@ -70,6 +69,8 @@ Options:
-hprefix P Prepend the filenames in generated #include <header>
statements with prefix P. Default: 'openssl/' (without
the quotes, naturally)
NOTE: not used any more because our include directory
structure has changed.
-debug Turn on debugging verbose output on stderr.
@ -173,8 +174,8 @@ close IN;
while (($hdr, $lib) = each %libinc)
{
next if($hdr eq "NONE");
print STDERR "Scanning header file $hdr\n" if $debug;
my $line = "", $def= "", $linenr = 0, $gotfile = 0;
print STDERR "Scanning header file $hdr\n" if $debug;
my $line = "", $def= "", $linenr = 0, $gotfile = 0, $cpp = 0;
if (open(IN, "<$hdr")) {
$gotfile = 1;
while(<IN>) {
@ -409,14 +410,21 @@ foreach $lib (keys %csrc)
# Rewrite the header file
$cpp = 0;
$cplusplus = 0;
if (open(IN, "<$hfile")) {
# Copy across the old file
while(<IN>) {
$cplusplus = $cpp if /^#.*ifdef.*cplusplus/;
$cpp++ if /^#\s*if/;
$cpp-- if /^#\s*endif/;
push @out, $_;
last if (/BEGIN ERROR CODES/);
}
close IN;
} else {
$cpp = 1;
$cplusplus = 1;
push @out,
"/*\n",
" * Copyright 1995-$YEAR The OpenSSL Project Authors. All Rights Reserved.\n",
@ -428,11 +436,11 @@ foreach $lib (keys %csrc)
" */\n",
"\n",
"#ifndef HEADER_${lib}_ERR_H\n",
"#define HEADER_${lib}_ERR_H\n",
"# define HEADER_${lib}_ERR_H\n",
"\n",
"#ifdef __cplusplus\n",
"# ifdef __cplusplus\n",
"extern \"C\" {\n",
"#endif\n",
"# endif\n",
"\n",
"/* BEGIN ERROR CODES */\n";
}
@ -441,15 +449,16 @@ foreach $lib (keys %csrc)
print OUT @out;
undef @out;
print OUT <<"EOF";
/*
* Content after this point is generated by util/mkerr.pl
* DO NOT EDIT!
* The following lines are auto generated by the script mkerr.pl. Any changes
* made after this point may be overwritten when the script is next run.
*/
EOF
if($static) {
print OUT <<"EOF";
${staticloader}void ERR_load_${lib}_strings(void);
EOF
} else {
print OUT <<"EOF";
@ -505,11 +514,17 @@ EOF
}
print OUT <<"EOF";
#ifdef __cplusplus
}
#endif
#endif
EOF
do {
if ($cplusplus == $cpp) {
print OUT "#", " "x$cpp, "ifdef __cplusplus\n";
print OUT "}\n";
print OUT "#", " "x$cpp, "endif\n";
}
if ($cpp-- > 0) {
print OUT "#", " "x$cpp, "endif\n";
}
} while ($cpp);
close OUT;
# Rewrite the C source file containing the error details.
@ -541,8 +556,13 @@ EOF
my $hincf;
if($static) {
$hfile =~ /([^\/]+)$/;
$hincf = "<${hprefix}$1>";
$hincf = $hfile;
$hincf =~ s|.*include/||;
if ($hincf =~ m|^openssl/|) {
$hincf = "<${hincf}>";
} else {
$hincf = "\"${hincf}\"";
}
} else {
$hincf = "\"$hfile\"";
}
@ -596,7 +616,7 @@ EOF
$fn = $ftrans{$fn};
}
# print OUT "{ERR_PACK($pack_errcode,$i,0),\t\"$fn\"},\n";
if(length($i) + length($fn) > 58) {
if(length($i) + length($fn) > 57) {
print OUT " {ERR_FUNC($i),\n \"$fn\"},\n";
} else {
print OUT " {ERR_FUNC($i), \"$fn\"},\n";
@ -619,7 +639,7 @@ EOF
$rn = $1;
$rn =~ tr/_[A-Z]/ [a-z]/;
}
if(length($i) + length($rn) > 56) {
if(length($i) + length($rn) > 55) {
print OUT " {${rstr},\n \"$rn\"},\n";
} else {
print OUT " {${rstr}, \"$rn\"},\n";