r12465: Merge Parse::Pidl::Samba4::NDR::Header into Parse::Pidl::Samba4::NDR::Parser.
[samba.git] / source4 / pidl / pidl
index 4a68424b97fd5b13b884b3ad4509e78e2501d9be..1bfe6e396c429d1dd0216af8f23efb1fccdfb9fb 100755 (executable)
@@ -17,7 +17,7 @@ pidl - An IDL compiler written in Perl
 
 pidl --help
 
-pidl [--outputdir[=OUTNAME]] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--ndr-header[=OUTPUT]] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--swig[=OUTPUT]] [--uint-enums] [--ndr-parser[=OUTPUT]] [--client] [--server] [--dcom-proxy] [--com-header] [--warn-compat] [--quiet] [--verbose] [--template] [--eth-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-header=[OUTPUT]] [--tdr-parser[=OUTPUT]] [--samba3-header[=OUTPUT]] [--samba3-parser=[OUTPUT]] [--samba3-server=[OUTPUT]] [--samba3-template[=OUTPUT]] [--samba3-client[=OUTPUT]] [<idlfile>.idl]...
+pidl [--outputdir[=OUTNAME]] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--swig[=OUTPUT]] [--uint-enums] [--ndr-parser[=OUTPUT]] [--client] [--server] [--dcom-proxy] [--com-header] [--warn-compat] [--quiet] [--verbose] [--template] [--eth-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-header=[OUTPUT]] [--tdr-parser[=OUTPUT]] [--samba3-header[=OUTPUT]] [--samba3-parser=[OUTPUT]] [--samba3-server=[OUTPUT]] [--samba3-template[=OUTPUT]] [--samba3-client[=OUTPUT]] [<idlfile>.idl]...
 
 =head1 DESCRIPTION
 
@@ -71,13 +71,11 @@ Generate a new IDL file. File will be named OUTNAME.idl.
 
 Generate a C header file for the specified interface. Filename defaults to OUTNAME.h.
 
-=item I<--ndr-header>
-
-Generate a C header file with the prototypes for the NDR parsers. Filename defaults to ndr_OUTNAME.h.
-
 =item I<--ndr-parser>
 
-Generate a C file containing NDR parsers. Filename defaults to ndr_OUTNAME.c.
+Generate a C file and C header containing NDR parsers. The filename for 
+the parser defaults to ndr_OUTNAME.c. The header filename will be the 
+parser filename with the extension changed from .c to .h.
 
 =item I<--server>
 
@@ -455,7 +453,6 @@ my($opt_dump_idl) = 0;
 my($opt_uint_enums) = 0;
 my($opt_diff) = 0;
 my($opt_header);
-my($opt_ndr_header);
 my($opt_samba3_header);
 my($opt_samba3_parser);
 my($opt_samba3_server);
@@ -504,7 +501,6 @@ Debugging:
 Samba 4 output:
  --header[=OUTFILE]      create generic header file [BASENAME.h]
  --uint-enums            don't use C enums, instead use uint* types
- --ndr-header[=OUTFILE]  create a C NDR-specific header file [ndr_BASENAME.h]
  --ndr-parser[=OUTFILE]  create a C NDR parser [ndr_BASENAME.c]
  --client[=OUTFILE]      create a C NDR client [ndr_BASENAME_c.c]
  --tdr-header[=OUTFILE]  create a C TDR header file [tdr_BASENAME.h]
@@ -538,7 +534,6 @@ my $result = GetOptions (
                'parse-idl-tree' => \$opt_parse_idl_tree,
                'dump-ndr-tree:s' => \$opt_dump_ndr_tree,
            'uint-enums' => \$opt_uint_enums,
-           'ndr-header:s' => \$opt_ndr_header,
                'samba3-header:s' => \$opt_samba3_header,
                'samba3-parser:s' => \$opt_samba3_parser,
                'samba3-server:s' => \$opt_samba3_server,
@@ -646,7 +641,7 @@ sub process_file($)
 
        $pidl = Parse::Pidl::ODL::ODL2IDL($pidl);
 
-       if (defined($opt_ndr_header) or defined($opt_eth_parser) or 
+       if (defined($opt_eth_parser) or 
            defined($opt_client) or defined($opt_server) or 
            defined($opt_ndr_parser) or defined($opt_ejs) or 
                defined($opt_dump_ndr_tree) or defined($opt_samba3_header) or 
@@ -668,17 +663,6 @@ sub process_file($)
                FileSave($header, Parse::Pidl::Samba4::Header::Parse($pidl));
        }
 
-       if (defined($opt_ndr_header)) {
-               my $header = ($opt_ndr_header or "$outputdir/ndr_$basename.h");
-               require Parse::Pidl::Samba4::NDR::Header;
-               FileSave($header, Parse::Pidl::Samba4::NDR::Header::Parse($pidl, $basename));
-               if (defined($opt_swig)) {
-                 require Parse::Pidl::Samba4::SWIG;
-                 my($filename) = ($opt_swig or "$outputdir/$basename.i");
-                 Parse::Pidl::Samba4::SWIG::RewriteHeader($pidl, $header, $filename);
-               }
-       }
-
        my $h_filename = "$outputdir/ndr_$basename.h";
        if (defined($opt_client)) {
                require Parse::Pidl::Samba4::NDR::Client;
@@ -724,9 +708,28 @@ $dcom
        }
 
        if (defined($opt_ndr_parser)) {
-               my $parser = ($opt_ndr_parser or "$outputdir/ndr_$basename.c");
+               my $parser_fname = ($opt_ndr_parser or "$outputdir/ndr_$basename.c");
                require Parse::Pidl::Samba4::NDR::Parser;
-               FileSave($parser, Parse::Pidl::Samba4::NDR::Parser::Parse($ndr, $parser));
+               my $header_fname = $parser_fname; 
+               $header_fname =~ s/\.c$/\.h/;
+               my ($header,$parser) = Parse::Pidl::Samba4::NDR::Parser::Parse($ndr, $basename);
+
+               my $baseheader = $h_filename; $baseheader =~ s/\/ndr_/\//;
+               $header = "#include \"$baseheader\"\n$header";
+
+               $parser = "#include \"includes.h\"\n"
+               . "#include \"librpc/gen_ndr/ndr_misc.h\"\n"
+               . "#include \"librpc/gen_ndr/ndr_dcerpc.h\"\n"
+               . "#include \"$header_fname\"\n\n$parser";
+
+               FileSave($parser_fname, $parser);
+               FileSave($header_fname, $header);
+
+               if (defined($opt_swig)) {
+                 require Parse::Pidl::Samba4::SWIG;
+                 my($filename) = ($opt_swig or "$outputdir/$basename.i");
+                 Parse::Pidl::Samba4::SWIG::RewriteHeader($pidl, $header_fname, $filename);
+               }
        }
 
        if (defined($opt_eth_parser)) {