X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=util%2Fmkerr.pl;h=9a3b634d57395279f53855bebb5341d1d7cdf2f3;hp=6004853bc166ef1614e8cf26b7339711ccd42751;hb=de51e830a637862ecd86b1feb848312366072dd1;hpb=4c1a6e004a940a66c1d113ea3656a124e3dca1ea;ds=sidebyside diff --git a/util/mkerr.pl b/util/mkerr.pl index 6004853bc1..9a3b634d57 100644 --- a/util/mkerr.pl +++ b/util/mkerr.pl @@ -14,6 +14,7 @@ my $pack_errcode; my $load_errcode; my $errcount; +my $year = (localtime)[5] + 1900; while (@ARGV) { my $arg = $ARGV[0]; @@ -44,13 +45,79 @@ while (@ARGV) { } elsif($arg eq "-write") { $dowrite = 1; shift @ARGV; + } elsif($arg eq "-help" || $arg eq "-h" || $arg eq "-?" || $arg eq "--help") { + print STDERR <<"EOF"; +mkerr.pl [options] ... + +Options: + + -conf F Use the config file F instead of the default one: + crypto/err/openssl.ec + + -hprefix P Prepend the filenames in generated #include
+ statements with prefix P. Default: 'openssl/' (without + the quotes, naturally) + + -debug Turn on debugging verbose output on stderr. + + -rebuild Rebuild all header and C source files, irrespective of the + fact if any error or function codes have been added/removed. + Default: only update files for libraries which saw change + (of course, this requires '-write' as well, or no + files will be touched!) + + -recurse scan a preconfigured set of directories / files for error and + function codes: + (, , , ) + When this option is NOT specified, the filelist is taken from + the commandline instead. Here, wildcards may be embedded. (Be + sure to escape those to prevent the shell from expanding them + for you when you wish mkerr.pl to do so instead.) + Default: take file list to scan from the command line. + + -reindex Discard the numeric values previously assigned to the error + and function codes as extracted from the scanned header files; + instead renumber all of them starting from 100. (Note that + the numbers assigned through 'R' records in the config file + remain intact.) + Default: keep previously assigned numbers. (You are warned + when collisions are detected.) + + -nostatic Generates a different source code, where these additional + functions are generated for each library specified in the + config file: + void ERR_load__strings(void); + void ERR_unload__strings(void); + void ERR__error(int f, int r, char *fn, int ln); + #define err(f,r) ERR__error(f,r,__FILE__,__LINE__) + while the code facilitates the use of these in an environment + where the error support routines are dynamically loaded at + runtime. + Default: 'static' code generation. + + -staticloader Prefix generated functions with the 'static' scope modifier. + Default: don't write any scope modifier prefix. + + -write Actually (over)write the generated code to the header and C + source files as assigned to each library through the config + file. + Default: don't write. + + -help / -h / -? / --help Show this help text. + + ... Additional arguments are added to the file list to scan, + assuming '-recurse' was NOT specified on the command line. + +EOF + exit 1; } else { last; } } if($recurse) { - @source = (, , ); + @source = ( , , , + , ); } else { @source = @ARGV; } @@ -69,8 +136,8 @@ while() $cskip{$3} = $1; if($3 ne "NONE") { $csrc{$1} = $3; - $fmax{$1} = 99; - $rmax{$1} = 99; + $fmax{$1} = 100; + $rmax{$1} = 100; $fassigned{$1} = ":"; $rassigned{$1} = ":"; $fnew{$1} = 0; @@ -196,7 +263,7 @@ while (($hdr, $lib) = each %libinc) if($1 eq "R") { $rcodes{$name} = $code; if ($rassigned{$lib} =~ /:$code:/) { - print STDERR "!! ERROR: $lib reason code $code assigned twice\n"; + print STDERR "!! ERROR: $lib reason code $code assigned twice (collision at $name)\n"; ++$errcount; } $rassigned{$lib} .= "$code:"; @@ -206,7 +273,7 @@ while (($hdr, $lib) = each %libinc) } } else { if ($fassigned{$lib} =~ /:$code:/) { - print STDERR "!! ERROR: $lib function code $code assigned twice\n"; + print STDERR "!! ERROR: $lib function code $code assigned twice (collision at $name)\n"; ++$errcount; } $fassigned{$lib} .= "$code:"; @@ -263,6 +330,9 @@ foreach $file (@source) { print STDERR "File loaded: ".$file."\r" if $debug; open(IN, "<$file") || die "Can't open source file $file\n"; while() { + # skip obsoleted source files entirely! + last if(/^#error\s+obsolete/); + if(/(([A-Z0-9]+)_F_([A-Z0-9_]+))/) { next unless exists $csrc{$2}; next if($1 eq "BIO_F_BUFFER_CTX"); @@ -272,6 +342,7 @@ foreach $file (@source) { $fnew{$2}++; } $notrans{$1} = 1 unless exists $ftrans{$3}; + print STDERR "Function: $1\t= $fcodes{$1} (lib: $2, name: $3)\n" if $debug; } if(/(([A-Z0-9]+)_R_[A-Z0-9_]+)/) { next unless exists $csrc{$2}; @@ -280,6 +351,7 @@ foreach $file (@source) { $rcodes{$1} = "X"; $rnew{$2}++; } + print STDERR "Reason: $1\t= $rcodes{$1} (lib: $2)\n" if $debug; } } close IN; @@ -321,7 +393,7 @@ foreach $lib (keys %csrc) } else { push @out, "/* ====================================================================\n", -" * Copyright (c) 2001-2008 The OpenSSL Project. All rights reserved.\n", +" * Copyright (c) 2001-$year The OpenSSL Project. All rights reserved.\n", " *\n", " * Redistribution and use in source and binary forms, with or without\n", " * modification, are permitted provided that the following conditions\n", @@ -506,7 +578,7 @@ EOF print OUT <<"EOF"; /* $cfile */ /* ==================================================================== - * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved. + * Copyright (c) 1999-$year The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -699,7 +771,7 @@ EOF undef %err_reason_strings; } -if($debug && defined(%notrans)) { +if($debug && %notrans) { print STDERR "The following function codes were not translated:\n"; foreach(sort keys %notrans) { @@ -717,7 +789,7 @@ foreach (keys %rcodes) { push (@runref, $_) unless exists $urcodes{$_}; } -if($debug && defined(@funref) ) { +if($debug && @funref) { print STDERR "The following function codes were not referenced:\n"; foreach(sort @funref) { @@ -725,7 +797,7 @@ if($debug && defined(@funref) ) { } } -if($debug && defined(@runref) ) { +if($debug && @runref) { print STDERR "The following reason codes were not referenced:\n"; foreach(sort @runref) {