1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
################################################################################
#
# PROGRAM: config.pl
#
################################################################################
#
# DESCRIPTION: Generate tokenizer code for config options
#
################################################################################
#
# $Project: /Convert-Binary-C $
# $Author: mhx $
# $Date: 2009/03/15 04:10:45 +0100 $
# $Revision: 29 $
# $Source: /token/config.pl $
#
################################################################################
#
# Copyright (c) 2002-2009 Marcus Holland-Moritz. All rights reserved.
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
#
################################################################################
use Devel::Tokenizer::C;
@options = qw(
UnsignedBitfields
UnsignedChars
Warnings
PointerSize
EnumSize
IntSize
CharSize
ShortSize
LongSize
LongLongSize
FloatSize
DoubleSize
LongDoubleSize
Alignment
CompoundAlignment
Include
Define
Assert
DisabledKeywords
KeywordMap
ByteOrder
EnumType
HasCPPComments
HasMacroVAARGS
OrderMembers
Bitfields
StdCVersion
HostedC
);
@sourcify = qw(
Context
Defines
);
$file = shift;
if( $file =~ /config/ ) {
@OPT = @options;
$PRE = 'OPTION';
$NAME = 'ConfigOption';
}
elsif( $file =~ /sourcify/ ) {
@OPT = @sourcify;
$PRE = 'SOURCIFY_OPTION';
$NAME = 'SourcifyConfigOption';
}
$ROUT = "get$NAME";
$ROUT =~ s/([a-z])([A-Z])/$1_\l$2/g;
$enums = join "\n", map " ${PRE}_$_,", @OPT;
$switch = Devel::Tokenizer::C->new( TokenFunc => sub { "return ${PRE}_$_[0];\n" },
TokenString => 'option' )
->add_tokens( @OPT )->generate;
open OUT, ">$file" or die $!;
print OUT <<END;
typedef enum {
$enums
INVALID_$PRE
} $NAME;
static $NAME $ROUT( const char *option )
{
$switch
unknown:
return INVALID_$PRE;
}
END
close OUT;
|