From: Richard Levitte Date: Wed, 7 Feb 2018 18:23:39 +0000 (+0100) Subject: mkerr.pl: When writing internal FOOerr.h, pay attention to disablable modules X-Git-Tag: OpenSSL_1_1_1-pre1~40 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=cb7b7275683655537c63e42b5e3ef3d7045e4104;p=oweals%2Fopenssl.git 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 Reviewed-by: Tim Hudson (Merged from https://github.com/openssl/openssl/pull/5275) --- diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 3dd66b8baa..9e05fd1d5f 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -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 ) diff --git a/util/mkerr.pl b/util/mkerr.pl index 52a44c9ffb..1740e40427 100755 --- a/util/mkerr.pl +++ b/util/mkerr.pl @@ -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 + +# 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.