#!/usr/bin/perl

use warnings;
use strict;

# Things that shouldn't be enabled.
# Notes:
# - POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3 and
#   POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION could be enabled if the
#   respective tests were adapted
my @excluded = qw(
POLARSSL_HAVE_INT8
POLARSSL_HAVE_INT16
POLARSSL_HAVE_SSE2
POLARSSL_PLATFORM_NO_STD_FUNCTIONS
POLARSSL_ECP_DP_M221_ENABLED
POLARSSL_ECP_DP_M383_ENABLED
POLARSSL_ECP_DP_M511_ENABLED
POLARSSL_NO_DEFAULT_ENTROPY_SOURCES
POLARSSL_NO_PLATFORM_ENTROPY
POLARSSL_SSL_HW_RECORD_ACCEL
POLARSSL_X509_ALLOW_EXTENSIONS_NON_V3
POLARSSL_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
POLARSSL_ZLIB_SUPPORT
POLARSSL_PKCS11_C
_ALT\s*$
);

my $include_dir;

if( @ARGV ) {
    die "Invalid number of arguments" if scalar @ARGV != 1;
    ($include_dir) = @ARGV;

    -d $include_dir or die "No such directory: $include_dir\n";
} else {
    $include_dir = 'include/polarssl';

    unless( -d $include_dir ) {
        chdir '..' or die;
        -d $include_dir
            or die "Without arguments, must be run from root or scripts\n"
    }
}

my $config_file = "$include_dir/config.h";

open my $config_read, '<', $config_file or die "read $config_file: $!\n";
my @config_lines = <$config_read>;
close $config_read;

my $exclude_re = join '|', @excluded;

open my $config_write, '>', $config_file or die "write $config_file: $!\n";

my $done;
for my $line (@config_lines) {
    if ($line =~ /name SECTION: Module configuration options/) {
        $done = 1;
    }

    if (!$done && $line =~ m!^//\s?#define! && $line !~ /$exclude_re/) {
        $line =~ s!^//!!;
    }

    print $config_write $line;
}

close $config_write;

__END__