1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-11 17:58:16 +03:00

r10172: Add --dump-ndr-tree argument

This commit is contained in:
Jelmer Vernooij 2005-09-12 13:49:51 +00:00 committed by Gerald (Jerry) Carter
parent 76c224f288
commit 8eb69b3a6e

View File

@ -15,6 +15,7 @@ use Getopt::Long;
use File::Basename;
use Parse::Pidl;
use Parse::Pidl::Util;
use Parse::Pidl::ODL;
#####################################################################
# save a data structure into a file
@ -62,8 +63,9 @@ sub FileSave($$)
}
my($opt_help) = 0;
my($opt_parse_tree) = 0;
my($opt_dump_tree);
my($opt_parse_idl_tree) = 0;
my($opt_dump_idl_tree);
my($opt_dump_ndr_tree);
my($opt_dump_idl) = 0;
my($opt_uint_enums) = 0;
my($opt_diff) = 0;
@ -80,7 +82,6 @@ my($opt_swig);
my($opt_dcom_proxy);
my($opt_com_header);
my($opt_ejs);
my($opt_odl) = 0;
my($opt_quiet) = 0;
my($opt_outputdir) = '.';
my($opt_verbose) = 0;
@ -98,14 +99,14 @@ Usage: pidl [options] [--] <idlfile> [<idlfile>...]
Generic Options:
--help this help page
--outputdir=OUTDIR put output in OUTDIR/ [.]
--odl accept ODL input
--warn-compat warn about incompatibility with other compilers
--quiet be quiet
--verbose be verbose
Debugging:
--dump-tree[=OUTFILE] dump internal representation to file [BASENAME.pidl]
--parse-tree read internal representation instead of IDL
--dump-idl-tree[=FILE] dump internal representation to file [BASENAME.pidl]
--parse-idl-tree read internal representation instead of IDL
--dump-ndr-tree[=FILE] dump internal NDR data tree to file [BASENAME.ndr]
--dump-idl regenerate IDL file
--diff run diff on original IDL and dumped output
@ -121,8 +122,8 @@ Samba 4 output:
--swig[=OUTFILE] create swig wrapper file [BASENAME.i]
--server[=OUTFILE] create server boilerplate [ndr_BASENAME_s.c]
--template print a template for a pipe
--dcom-proxy[=OUTFILE] create DCOM proxy (implies --odl) [ndr_BASENAME_p.c]
--com-header[=OUTFILE] create header for COM (implies --odl) [com_BASENAME.h]
--dcom-proxy[=OUTFILE] create DCOM proxy [ndr_BASENAME_p.c]
--com-header[=OUTFILE] create header for COM [com_BASENAME.h]
Ethereal parsers:
--eth-parser[=OUTFILE] create ethereal parser and header
@ -135,8 +136,9 @@ GetOptions (
'help|h|?' => \$opt_help,
'outputdir=s' => \$opt_outputdir,
'dump-idl' => \$opt_dump_idl,
'dump-tree:s' => \$opt_dump_tree,
'parse-tree' => \$opt_parse_tree,
'dump-idl-tree:s' => \$opt_dump_idl_tree,
'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,
'header:s' => \$opt_header,
@ -149,7 +151,6 @@ GetOptions (
'eth-parser:s' => \$opt_eth_parser,
'ejs' => \$opt_ejs,
'diff' => \$opt_diff,
'odl' => \$opt_odl,
'swig:s' => \$opt_swig,
'dcom-proxy:s' => \$opt_dcom_proxy,
'com-header:s' => \$opt_com_header,
@ -172,13 +173,11 @@ sub process_file($)
my $basename = basename($idl_file, ".idl");
my($pidl_file) = ($opt_dump_tree or "$outputdir/$basename.pidl");
unless ($opt_quiet) { print "Compiling $idl_file\n"; }
if ($opt_parse_tree) {
$pidl = LoadStructure($pidl_file);
defined $pidl || die "Failed to load $pidl_file";
if ($opt_parse_idl_tree) {
$pidl = LoadStructure($idl_file);
defined $pidl || die "Failed to load $idl_file";
} else {
require Parse::Pidl::IDL;
my $idl_parser = new Parse::Pidl::IDL;
@ -189,8 +188,9 @@ sub process_file($)
Parse::Pidl::Typelist::LoadIdl($pidl);
}
if (defined($opt_dump_tree) && !SaveStructure($pidl_file, $pidl)) {
die "Failed to save $pidl_file\n";
if (defined($opt_dump_idl_tree)) {
my($pidl_file) = ($opt_dump_idl_tree or "$outputdir/$basename.pidl");
SaveStructure($pidl_file, $pidl) or die "Failed to save $pidl_file\n";
}
if ($opt_uint_enums) {
@ -219,7 +219,6 @@ sub process_file($)
"#include \"$outputdir/ndr_$basename.h\"\n" .
$res);
}
$opt_odl = 1;
}
if (defined($opt_dcom_proxy)) {
@ -232,7 +231,6 @@ sub process_file($)
"#include \"$outputdir/com_$basename.h\"\n" .
"#include \"lib/com/dcom/dcom.h\"\n" .$res);
}
$opt_odl = 1;
}
if ($opt_warn_compat) {
@ -240,19 +238,22 @@ sub process_file($)
Parse::Pidl::Compat::Check($pidl);
}
if ($opt_odl) {
require Parse::Pidl::ODL;
$pidl = Parse::Pidl::ODL::ODL2IDL($pidl);
}
$pidl = Parse::Pidl::ODL::ODL2IDL($pidl);
if (defined($opt_ndr_header) or defined($opt_eth_parser) or
defined($opt_client) or defined($opt_server) or
defined($opt_ndr_parser) or defined($opt_ejs)) {
defined($opt_ndr_parser) or defined($opt_ejs) or
defined($opt_dump_ndr_tree)) {
require Parse::Pidl::NDR;
Parse::Pidl::NDR::Validate($pidl);
$ndr = Parse::Pidl::NDR::Parse($pidl);
}
if (defined($opt_dump_ndr_tree)) {
my($ndr_file) = ($opt_dump_ndr_tree or "$outputdir/$basename.ndr");
SaveStructure($ndr_file, $ndr) or die "Failed to save $ndr_file\n";
}
if (defined($opt_header)) {
my $header = ($opt_header or "$outputdir/$basename.h");
require Parse::Pidl::Samba::Header;