From 97665e1c4fe14da9f4466b9999a5dfb4989acd61 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Wed, 18 May 2016 19:52:34 +0200 Subject: [PATCH] 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 --- util/mkerr.pl | 54 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/util/mkerr.pl b/util/mkerr.pl index b754a453cd..36f0640511 100644 --- a/util/mkerr.pl +++ b/util/mkerr.pl @@ -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
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() { @@ -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() { + $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"; -- 2.40.0