1 | #!/usr/bin/perl -w
|
---|
2 |
|
---|
3 | ###################################################
|
---|
4 | # package to produce a table of all idl parsers
|
---|
5 | # Copyright tridge@samba.org 2003
|
---|
6 | # Copyright jelmer@samba.org 2005
|
---|
7 | # released under the GNU GPL
|
---|
8 |
|
---|
9 | use strict;
|
---|
10 |
|
---|
11 | use Getopt::Long;
|
---|
12 | use File::Basename;
|
---|
13 |
|
---|
14 | my $opt_output = 'librpc/gen_ndr/tables.c';
|
---|
15 | my $opt_help = 0;
|
---|
16 |
|
---|
17 |
|
---|
18 | #########################################
|
---|
19 | # display help text
|
---|
20 | sub ShowHelp()
|
---|
21 | {
|
---|
22 | print "
|
---|
23 | perl NDR interface table generator
|
---|
24 | Copyright (C) tridge\@samba.org
|
---|
25 |
|
---|
26 | Usage: tables.pl [options] <idlfile>
|
---|
27 |
|
---|
28 | \n";
|
---|
29 | exit(0);
|
---|
30 | }
|
---|
31 |
|
---|
32 | # main program
|
---|
33 | GetOptions (
|
---|
34 | 'help|h|?' => \$opt_help,
|
---|
35 | 'output=s' => \$opt_output,
|
---|
36 | );
|
---|
37 |
|
---|
38 | if ($opt_help) {
|
---|
39 | ShowHelp();
|
---|
40 | exit(0);
|
---|
41 | }
|
---|
42 |
|
---|
43 | my $init_fns = "";
|
---|
44 |
|
---|
45 | ###################################
|
---|
46 | # extract table entries from 1 file
|
---|
47 | sub process_file($)
|
---|
48 | {
|
---|
49 | my $filename = shift;
|
---|
50 | open(FILE, $filename) || die "unable to open $filename\n";
|
---|
51 | my $found = 0;
|
---|
52 |
|
---|
53 | while (my $line = <FILE>) {
|
---|
54 | if ($line =~ /extern const struct ndr_interface_table (\w+);/) {
|
---|
55 | $found = 1;
|
---|
56 | $init_fns.="\tstatus = ndr_table_register(&$1);\n";
|
---|
57 | $init_fns.="\tif (NT_STATUS_IS_ERR(status)) return status;\n\n";
|
---|
58 | }
|
---|
59 | }
|
---|
60 |
|
---|
61 | if ($found) {
|
---|
62 | print "#include \"$filename\"\n";
|
---|
63 | }
|
---|
64 |
|
---|
65 | close(FILE);
|
---|
66 | }
|
---|
67 |
|
---|
68 | print <<EOF;
|
---|
69 |
|
---|
70 | /* Automatically generated by tables.pl. DO NOT EDIT */
|
---|
71 |
|
---|
72 | #include "includes.h"
|
---|
73 | #include "librpc/ndr/libndr.h"
|
---|
74 | #include "librpc/ndr/ndr_table.h"
|
---|
75 | EOF
|
---|
76 |
|
---|
77 | process_file($_) foreach (@ARGV);
|
---|
78 |
|
---|
79 | print <<EOF;
|
---|
80 |
|
---|
81 | NTSTATUS ndr_table_register_builtin_tables(void)
|
---|
82 | {
|
---|
83 | NTSTATUS status;
|
---|
84 |
|
---|
85 | $init_fns
|
---|
86 |
|
---|
87 | return NT_STATUS_OK;
|
---|
88 | }
|
---|
89 | EOF
|
---|