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
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>
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);
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]
'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,
$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
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;
}
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)) {