#! /usr/bin/perl

use strict;
use warnings;

my $debug = $ENV{DEBUG};

# This scripts finds DEPRECATEDIN declarations and converts them to
# C declarations with the corresponding OSSL_DEPRECATEDIN attribute
# macro.  It also makes sure they are guarded them with a corresponding
# '#ifndef OPENSSL_NO_DEPRECATED', and pays extra attention to only have
# one such guard around a group of deprecations for the same version.

my $parens_re =
    qr/(
           \(                   # The start of what we recurse on
               (?:
                   (?> [^()]+ )     # Non-parens, without backtracking
               |
                   (?-1)            # Recurse to start of parens group
               )*
           \)                   # The end of what we recurse on
       )/x;

my $deprecated_kw_re = qr/(DEPRECATEDIN)_(\d+_\d+(?:_\d+)?)/;
my $deprecated_re =
    qr/
          $deprecated_kw_re
          \(
          (
              (?:
                  (?> [^()]+ )
              |
                  $parens_re
              )*
          )
          \)
    /x;
my $headertext;
{
    local $/;
    $headertext = <STDIN>;
}
$headertext =~ s/\R/\n/g;

my $cppspaces = '';
my $last_cppspaces = '';
my $currentguard = "";
my $cnt = 0;
while ( $headertext =~ m/(.*?)                          # $1
                         (                              # $2
                             ^
                             (?|
                                 (\#)(\s*)(if)?.*?      # $3 ('#')
                                                        # $4 (spaces)
                                                        # $5 ('if'?)
                             |
                                 \s*$deprecated_kw_re\(.*?
                                                        # $3 = 'DEPRECATEDIN'
                                                        # $4 (vers)
                             )
                             \n
                         )
                        /msx ) {
    my $before = $1;
    my $capture = $2;
    my $after = $';

    my $deprecation = '';
    my $test = $capture.$';
    my $version = undef;

    print STDERR "DEBUG: captured:\n$capture"
        if $debug;

    if ($3 eq '#') {
        # Treat preprocessor lines (count spaces)
        $cppspaces = $4;
        $cppspaces .= ' ' if (defined $5 && $5 eq 'if');
        print STDERR "DEBUG: cpp spaces set to ", length($cppspaces), "\n"
            if $debug;
        $before .= $capture;
    } elsif ($test =~ m/^\s*$deprecated_re(.*?\n)/) {
        # Treat DEPRECATEDIN_...
        $version = $2;
        $deprecation = "OSSL_DEPRECATEDIN_$version $3;$5";
        $after = $';            # Different from the previous!
        print STDERR "DEBUG: changed to:\n$deprecation\n"
            if $debug;
    }

    if ($currentguard ne ''
        && (defined $version && $currentguard ne $version
            || $before !~ /^\s*$/s)) {
        print "#${last_cppspaces}endif\n";
        $cppspaces = substr($cppspaces, 0, -1);
        $currentguard = "";
    }
    print $before;
    if ($deprecation) {
        if ($currentguard eq '' && defined $version) {
            $currentguard = $version;
            print "#${cppspaces}ifndef OPENSSL_NO_DEPRECATED_$version\n";
            $last_cppspaces = $cppspaces;
            $cppspaces .= ' ';
            print STDERR "DEBUG: cpp spaces set to ", length($cppspaces), "\n"
                if $debug;
        }
        print $deprecation;
    }
    $headertext = $after;
}
print "#endif\n" if $currentguard ne '';
print $headertext;
