pidl: Move more stuff outside ifdef when defining enums and generate pretty code...
[ira/wip.git] / source / pidl / lib / Parse / Pidl / Samba4 / Header.pm
index 75d4c235cb4203d8ce1a6acd8af543264f921524..b96a58783c9ef3d32c8712d4c2b622b845f009cd 100644 (file)
@@ -10,7 +10,7 @@ use strict;
 use Parse::Pidl qw(fatal);
 use Parse::Pidl::Typelist qw(mapTypeName scalar_is_reference);
 use Parse::Pidl::Util qw(has_property is_constant unmake_str);
-use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets);
+use Parse::Pidl::Samba4 qw(is_intree ElementStars ArrayBrackets choose_header);
 
 use vars qw($VERSION);
 $VERSION = '0.01';
@@ -107,47 +107,49 @@ sub HeaderEnum($$)
        my($enum,$name) = @_;
        my $first = 1;
 
-       pidl "#ifndef USE_UINT_ENUMS\n";
-       pidl "enum $name {\n";
-       $tab_depth++;
+       pidl "enum $name";
        if (defined($enum->{ELEMENTS})) {
+               pidl "\n#ifndef USE_UINT_ENUMS\n";
+               pidl " {\n";
+               $tab_depth++;
                foreach my $e (@{$enum->{ELEMENTS}}) {
                        unless ($first) { pidl ",\n"; }
                        $first = 0;
                        pidl tabs();
                        pidl $e;
                }
-       }
-       pidl "\n";
-       $tab_depth--;
-       pidl "}\n";
-       pidl "#else\n";
-       my $count = 0;
-       pidl "enum $name { __donnot_use_enum_$name=0x7FFFFFFF}\n";
-       my $with_val = 0;
-       my $without_val = 0;
-       if (defined($enum->{ELEMENTS})) {
-               foreach my $e (@{$enum->{ELEMENTS}}) {
-                       my $t = "$e";
-                       my $name;
-                       my $value;
-                       if ($t =~ /(.*)=(.*)/) {
-                               $name = $1;
-                               $value = $2;
-                               $with_val = 1;
-                               fatal($e->{ORIGINAL}, "you can't mix enum member with values and without values!")
-                                       unless ($without_val == 0);
-                       } else {
-                               $name = $t;
-                               $value = $count++;
-                               $without_val = 1;
-                               fatal($e->{ORIGINAL}, "you can't mix enum member with values and without values!")
-                                       unless ($with_val == 0);
+               pidl "\n";
+               $tab_depth--;
+               pidl "}";
+               pidl "\n";
+               pidl "#else\n";
+               my $count = 0;
+               my $with_val = 0;
+               my $without_val = 0;
+               if (defined($enum->{ELEMENTS})) {
+                       pidl " { __donnot_use_enum_$name=0x7FFFFFFF}\n";
+                       foreach my $e (@{$enum->{ELEMENTS}}) {
+                               my $t = "$e";
+                               my $name;
+                               my $value;
+                               if ($t =~ /(.*)=(.*)/) {
+                                       $name = $1;
+                                       $value = $2;
+                                       $with_val = 1;
+                                       fatal($e->{ORIGINAL}, "you can't mix enum member with values and without values!")
+                                               unless ($without_val == 0);
+                               } else {
+                                       $name = $t;
+                                       $value = $count++;
+                                       $without_val = 1;
+                                       fatal($e->{ORIGINAL}, "you can't mix enum member with values and without values!")
+                                               unless ($with_val == 0);
+                               }
+                               pidl "#define $name ( $value )\n";
                        }
-                       pidl "#define $name ( $value )\n";
                }
+               pidl "#endif\n";
        }
-       pidl "#endif\n";
 }
 
 #####################################################################
@@ -215,7 +217,7 @@ sub HeaderType($$$)
 sub HeaderTypedef($)
 {
        my($typedef) = shift;
-       HeaderType($typedef, $typedef->{DATA}, $typedef->{NAME});
+       HeaderType($typedef, $typedef->{DATA}, $typedef->{NAME}) if defined ($typedef->{DATA});
 }
 
 #####################################################################
@@ -326,7 +328,7 @@ sub HeaderImport
        foreach (@imports) {
                s/\.idl\"$//;
                s/^\"//;
-               pidl "#include \"librpc/gen_ndr/$_\.h\"\n";
+               pidl choose_header("librpc/gen_ndr/$_\.h", "gen_ndr/$_.h") . "\n";
        }
 }