From 9d4d5163de8b78c5a03348a10ceedb220c92f7b2 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 9 Jun 2005 07:48:26 +0000 Subject: [PATCH] r7424: add --uint-enums option to pidl to generate defines for the enum members (this hopefully will fix the build on AIX) metze --- source/build/pidl/ndr_header.pm | 39 +++++++++++++++++++++++++++++++++------ source/build/pidl/pidl.pl | 23 +++++++++++++++-------- source/build/pidl/util.pm | 11 +++++++++++ 3 files changed, 59 insertions(+), 14 deletions(-) diff --git a/source/build/pidl/ndr_header.pm b/source/build/pidl/ndr_header.pm index 429f603f886..e3e6022ded7 100644 --- a/source/build/pidl/ndr_header.pm +++ b/source/build/pidl/ndr_header.pm @@ -120,17 +120,44 @@ sub HeaderEnum($$) my($name) = shift; my $first = 1; - pidl "\nenum $name {\n"; - $tab_depth++; - foreach my $e (@{$enum->{ELEMENTS}}) { + if (not util::useUintEnums()) { + pidl "\nenum $name {\n"; + $tab_depth++; + foreach my $e (@{$enum->{ELEMENTS}}) { unless ($first) { pidl ",\n"; } $first = 0; tabs(); pidl $e; + } + pidl "\n"; + $tab_depth--; + pidl "}"; + } else { + my $count = 0; + pidl "\nenum $name { __donnot_use_enum_$name=0x7FFFFFFF};\n"; + my $with_val = 0; + my $without_val = 0; + foreach my $e (@{$enum->{ELEMENTS}}) { + my $t = "$e"; + my $name; + my $value; + if ($t =~ /(.*)=(.*)/) { + $name = $1; + $value = $2; + $with_val = 1; + die ("you can't mix enum member with values and without values when using --uint-enums!") + unless ($without_val == 0); + } else { + $name = $t; + $value = $count++; + $without_val = 1; + die ("you can't mix enum member with values and without values when using --uint-enums!") + unless ($with_val == 0); + } + pidl "#define $name ( $value )\n"; + } + pidl "\n"; } - pidl "\n"; - $tab_depth--; - pidl "}"; } ##################################################################### diff --git a/source/build/pidl/pidl.pl b/source/build/pidl/pidl.pl index fcc58de51e2..169b5ea6c60 100755 --- a/source/build/pidl/pidl.pl +++ b/source/build/pidl/pidl.pl @@ -36,6 +36,7 @@ use pidl::esp; my($opt_help) = 0; my($opt_parse) = 0; my($opt_dump) = 0; +my($opt_uint_enums) = 0; my($opt_diff) = 0; my($opt_header); my($opt_template) = 0; @@ -70,6 +71,7 @@ Options: --output=OUTNAME put output in OUTNAME.* --parse parse a idl file to a .pidl file --dump dump a pidl file back to idl + --uint-enums don't use C enums, instead use uint* types --header[=OUTFILE] create a C NDR header file --parser[=OUTFILE] create a C NDR parser --esp[=OUTFILE] create esp wrapper file @@ -96,22 +98,23 @@ GetOptions ( 'output=s' => \$opt_output, 'parse' => \$opt_parse, 'dump' => \$opt_dump, + 'uint-enums' => \$opt_uint_enums, 'header:s' => \$opt_header, 'server' => \$opt_server, 'template' => \$opt_template, 'parser:s' => \$opt_parser, - 'client' => \$opt_client, + 'client' => \$opt_client, 'eth-parser:s' => \$opt_eth_parser, - 'eth-header:s' => \$opt_eth_header, - 'esp:s' => \$opt_esp, + 'eth-header:s' => \$opt_eth_header, + 'esp:s' => \$opt_esp, 'diff' => \$opt_diff, - 'odl' => \$opt_odl, + 'odl' => \$opt_odl, 'keep' => \$opt_keep, 'swig' => \$opt_swig, - 'dcom-proxy' => \$opt_dcom_proxy, - 'com-header' => \$opt_com_header, - 'quiet' => \$opt_quiet, - 'warn-compat' => \$opt_warn_compat + 'dcom-proxy' => \$opt_dcom_proxy, + 'com-header' => \$opt_com_header, + 'quiet' => \$opt_quiet, + 'warn-compat' => \$opt_warn_compat ); if ($opt_help) { @@ -151,6 +154,10 @@ sub process_file($) defined $pidl || die "Failed to load $pidl_file - maybe you need --parse\n"; } + if ($opt_uint_enums) { + util::setUseUintEnums(1); + } + if ($opt_dump) { print IdlDump::Dump($pidl); } diff --git a/source/build/pidl/util.pm b/source/build/pidl/util.pm index c26ab2dd041..26c940c02ad 100644 --- a/source/build/pidl/util.pm +++ b/source/build/pidl/util.pm @@ -204,4 +204,15 @@ sub make_str($) return "\"" . $str . "\""; } +# a hack to build on platforms that don't like negative enum values +my $useUintEnums = 0; +sub setUseUintEnums($) +{ + $useUintEnums = shift; +} +sub useUintEnums() +{ + return $useUintEnums; +} + 1; -- 2.11.4.GIT