04764f5fa0bfe101fb9ef50c4b882f3595eb968c
[samba.git] / source4 / librpc / tables.pl
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