pidl: Add ability to write type metadata to a file.
authorJelmer Vernooij <jelmer@samba.org>
Sat, 12 Jan 2008 21:15:12 +0000 (22:15 +0100)
committerJelmer Vernooij <jelmer@samba.org>
Sat, 12 Jan 2008 21:15:12 +0000 (22:15 +0100)
(This used to be commit e8ab241ff47f2c3e6f80f9c62373139e4c9f5a1e)

source4/pidl/lib/Parse/Pidl/Typelist.pm
source4/pidl/pidl

index 8fb7448070af02d6b0fe3a1ab0881262298395f8..3721800b970e780ab54ae1b219145e6a7436187f 100644 (file)
@@ -238,7 +238,7 @@ sub mapTypeName($)
 
 sub LoadIdl($)
 {
 
 sub LoadIdl($)
 {
-       my $idl = shift;
+       my ($idl) = @_;
 
        foreach my $x (@{$idl}) {
                next if $x->{TYPE} ne "INTERFACE";
 
        foreach my $x (@{$idl}) {
                next if $x->{TYPE} ne "INTERFACE";
@@ -254,6 +254,11 @@ sub LoadIdl($)
        }
 }
 
        }
 }
 
+sub GenerateTypeLib()
+{
+       return Parse::Pidl::Util::MyDumper(\%types);
+}
+
 RegisterScalars();
 
 1;
 RegisterScalars();
 
 1;
index 4395df2020c25dc5961f8748e293b1a29c7541d8..500b4dcbfcae888aebe16a43bfc700f59d3f0619 100755 (executable)
@@ -17,7 +17,7 @@ pidl - An IDL compiler written in Perl
 
 pidl --help
 
 
 pidl --help
 
-pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--python[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [<idlfile>.idl]...
+pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--python[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [--typelib=[OUTPUT]] [<idlfile>.idl]...
 
 =head1 DESCRIPTION
 
 
 =head1 DESCRIPTION
 
@@ -88,6 +88,10 @@ Generate a C file and C header containing TDR parsers. The filename for
 the parser defaults to tdr_OUTNAME.c. The header filename will be the 
 parser filename with the extension changed from .c to .h.
 
 the parser defaults to tdr_OUTNAME.c. The header filename will be the 
 parser filename with the extension changed from .c to .h.
 
+=item I<--typelib>
+
+Write type information to the specified file.
+
 =item I<--server>
 
 Generate boilerplate for the RPC server that implements 
 =item I<--server>
 
 Generate boilerplate for the RPC server that implements 
@@ -462,6 +466,7 @@ my($opt_samba3_ndr_client);
 my($opt_samba3_ndr_server);
 my($opt_template) = 0;
 my($opt_client);
 my($opt_samba3_ndr_server);
 my($opt_template) = 0;
 my($opt_client);
+my($opt_typelib);
 my($opt_server);
 my($opt_ndr_parser);
 my($opt_tdr_parser);
 my($opt_server);
 my($opt_ndr_parser);
 my($opt_tdr_parser);
@@ -498,6 +503,7 @@ Debugging:
  --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
  --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
+ --typelib               print type information
 
 Samba 4 output:
  --header[=OUTFILE]      create generic header file [BASENAME.h]
 
 Samba 4 output:
  --header[=OUTFILE]      create generic header file [BASENAME.h]
@@ -534,6 +540,7 @@ my $result = GetOptions (
                'samba3-ndr-server:s' => \$opt_samba3_ndr_server,
                'header:s' => \$opt_header,
            'server:s' => \$opt_server,
                'samba3-ndr-server:s' => \$opt_samba3_ndr_server,
                'header:s' => \$opt_header,
            'server:s' => \$opt_server,
+               'typelib:s' => \$opt_typelib,
            'tdr-parser:s' => \$opt_tdr_parser,
            'template' => \$opt_template,
            'ndr-parser:s' => \$opt_ndr_parser,
            'tdr-parser:s' => \$opt_tdr_parser,
            'template' => \$opt_template,
            'ndr-parser:s' => \$opt_ndr_parser,
@@ -711,6 +718,12 @@ sub process_file($)
                FileSave($tdr_header, $hdr);
        }
 
                FileSave($tdr_header, $hdr);
        }
 
+       if (defined($opt_typelib)) {
+               my $typelib = ($opt_typelib or "$outputdir/$basename.tlb");
+               require Parse::Pidl::Typelist;
+               FileSave($typelib, Parse::Pidl::Typelist::GenerateTypeLib());
+       }
+
        if ($opt_template) {
                require Parse::Pidl::Samba4::Template;
                print Parse::Pidl::Samba4::Template::Parse($pidl);
        if ($opt_template) {
                require Parse::Pidl::Samba4::Template;
                print Parse::Pidl::Samba4::Template::Parse($pidl);