1
0
mirror of https://github.com/Mbed-TLS/mbedtls.git synced 2025-07-30 22:43:08 +03:00

version_check_feature() added to check for compile-time options at run-time

This commit is contained in:
Paul Bakker
2014-04-30 11:49:44 +02:00
parent 8394684dd3
commit 0f90d7d2b5
11 changed files with 726 additions and 4 deletions

View File

@ -84,3 +84,8 @@ do
mv tmp $i
done
[ $VERBOSE ] && echo "Re-generating library/error.c"
scripts/generate_errors.pl include/polarssl scripts/data_files library/error.c
[ $VERBOSE ] && echo "Re-generating library/version_features.c"
scripts/generate_features.pl include/polarssl scripts/data_files library/version_features.c

View File

@ -0,0 +1,60 @@
/*
* Version feature information
*
* Copyright (C) 2006-2014, Brainspark B.V.
*
* This file is part of PolarSSL (http://www.polarssl.org)
* Lead Maintainer: Paul Bakker <polarssl_maintainer at polarssl.org>
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#include "polarssl/config.h"
#if defined(POLARSSL_VERSION_C)
#include "polarssl/version.h"
#include <string.h>
#if defined(_MSC_VER) && !defined snprintf && !defined(EFIX64) && \
!defined(EFI32)
#define snprintf _snprintf
#endif
const char *features[] = {
FEATURE_DEFINES
NULL
};
int version_check_feature( const char *feature )
{
const char **idx = features;
if( feature == NULL )
return( -1 );
while( *idx != NULL )
{
if( !strcasecmp( *idx, feature ) )
return( 0 );
idx++;
}
return( -1 );
}
#endif /* POLARSSL_VERSION_C */

57
scripts/generate_features.pl Executable file
View File

@ -0,0 +1,57 @@
#!/usr/bin/perl
#
use strict;
my $include_dir = shift or die "Missing include directory";
my $data_dir = shift or die "Missing data directory";
my $feature_file = shift or die "Missing destination file";
my $feature_format_file = $data_dir.'/version_features.fmt';
my @sections = ( "System support", "PolarSSL modules",
"PolarSSL feature support" );
my $line_separator = $/;
undef $/;
open(FORMAT_FILE, "$feature_format_file") or die "Opening feature format file '$feature_format_file': $!";
my $feature_format = <FORMAT_FILE>;
close(FORMAT_FILE);
$/ = $line_separator;
open(CONFIG_H, "$include_dir/config.h") || die("Failure when opening config.h: $!");
my $feature_defines = "";
my $in_section = 0;
while (my $line = <CONFIG_H>)
{
next if ($in_section && $line !~ /#define/ && $line !~ /SECTION/);
next if (!$in_section && $line !~ /SECTION/);
if ($in_section) {
if ($line =~ /SECTION/) {
$in_section = 0;
next;
}
my ($define) = $line =~ /#define (\w+)/;
$feature_defines .= "#if defined(${define})\n";
$feature_defines .= " \"${define}\",\n";
$feature_defines .= "#endif /* ${define} */\n";
}
if (!$in_section) {
my ($section_name) = $line =~ /SECTION: ([\w ]+)/;
my $found_section = grep $_ eq $section_name, @sections;
$in_section = 1 if ($found_section);
}
};
$feature_format =~ s/FEATURE_DEFINES\n/$feature_defines/g;
open(ERROR_FILE, ">$feature_file") or die "Opening destination file '$feature_file': $!";
print ERROR_FILE $feature_format;
close(ERROR_FILE);