Commit cb7b7275 authored by Richard Levitte's avatar Richard Levitte
Browse files

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: default avatarRich Salz <rsalz@openssl.org>
Reviewed-by: default avatarTim Hudson <tjh@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/5275)
parent 3a7141df
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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 )

+26 −7
Original line number Diff line number Diff line
@@ -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";
# ifdef  __cplusplus
# include <openssl/opensslconf.h>

# ifndef OPENSSL_NO_${lib}

EOF
            $indent = "  ";
        }
        print OUT <<"EOF";
#${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.