mkerr.pl: When writing internal FOOerr.h, pay attention to disablable modules

If a module is disablable (i.e. can be configured with 'no-FOO'), the
resulting header file needs to be guarded with a check of the
corresponding OPENSSL_NO_FOO.  While this seem fairly innocuous, it
has an impact on the information in util/*.num, generated by mkdef.pl.

Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Tim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5275)
This commit is contained in:
Richard Levitte 2018-02-07 19:23:39 +01:00
parent 3a7141df87
commit cb7b727568
2 changed files with 30 additions and 10 deletions

View File

@ -674,10 +674,11 @@ generate_fuzz_oids:
ERROR_REBUILD=
errors:
( cd $(SRCDIR); $(PERL) util/ck_errf.pl -strict */*.c */*/*.c )
( cd $(SRCDIR); $(PERL) util/mkerr.pl $(ERROR_REBUILD) -internal )
( cd $(SRCDIR)/engines; \
( b=`pwd`; cd $(SRCDIR); \
$(PERL) -I$$b util/mkerr.pl $(ERROR_REBUILD) -internal )
( b=`pwd`; cd $(SRCDIR)/engines; \
for E in *.ec ; do \
$(PERL) ../util/mkerr.pl $(ERROR_REBUILD) -static \
$(PERL) -I$$b ../util/mkerr.pl $(ERROR_REBUILD) -static \
-conf $$E `basename $$E .ec`.c ; \
done )

View File

@ -9,6 +9,9 @@
use strict;
use warnings;
use lib ".";
use configdata;
my $config = "crypto/err/openssl.ec";
my $debug = 0;
my $internal = 0;
@ -430,6 +433,9 @@ foreach my $lib ( keys %errorfile ) {
my @function = sort grep( /^${lib}_/, keys %fcodes );
my @reasons = sort grep( /^${lib}_/, keys %rcodes );
# indent level for innermost preprocessor lines
my $indent = " ";
# Rewrite the header file
my $hfile = $hinc{$lib};
@ -453,14 +459,24 @@ EOF
if ( $internal ) {
# Declare the load function because the generate C file
# includes "fooerr.h" not "foo.h"
if ($lib ne "SSL" && $lib ne "ASYNC"
&& grep { $lib eq uc $_ } @disablables) {
print OUT <<"EOF";
# include <openssl/opensslconf.h>
# ifndef OPENSSL_NO_${lib}
EOF
$indent = " ";
}
print OUT <<"EOF";
# ifdef __cplusplus
#${indent}ifdef __cplusplus
extern \"C\" {
# endif
#${indent}endif
int ERR_load_${lib}_strings(void);
# ifdef __cplusplus
#${indent}ifdef __cplusplus
}
# endif
#${indent}endif
EOF
} else {
print OUT <<"EOF";
@ -498,7 +514,7 @@ EOF
$fassigned{$lib} .= "$findcode:";
print STDERR "New Function code $i\n" if $debug;
}
printf OUT "# define $i%s $fcodes{$i}\n", " " x $z;
printf OUT "#${indent}define $i%s $fcodes{$i}\n", " " x $z;
}
print OUT "\n/*\n * $lib reason codes.\n */\n";
@ -516,11 +532,14 @@ EOF
$rassigned{$lib} .= "$findcode:";
print STDERR "New Reason code $i\n" if $debug;
}
printf OUT "# define $i%s $rcodes{$i}\n", " " x $z;
printf OUT "#${indent}define $i%s $rcodes{$i}\n", " " x $z;
}
print OUT "\n";
print OUT "#endif\n";
while (length($indent) > 0) {
$indent = substr $indent, 0, -1;
print OUT "#${indent}endif\n";
}
# Rewrite the C source file containing the error details.