462ef19e0823f65dd6bcebba7eca85572a5c2755
[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 DCE/RPC interface table generator
24            Copyright (C) tridge\@samba.org
25
26            Usage: tables.pl [options] <idlfile>
27
28            Options:
29              --output OUTNAME      put output in OUTNAME.*
30            \n";
31     exit(0);
32 }
33
34 # main program
35 GetOptions (
36             'help|h|?' => \$opt_help, 
37             'output=s' => \$opt_output,
38             );
39
40 if ($opt_help) {
41     ShowHelp();
42     exit(0);
43 }
44
45 my $init_fns = "";
46
47 ###################################
48 # extract table entries from 1 file
49 sub process_file($)
50 {
51         my $filename = shift;
52         open(FILE, $filename) || die "unable to open $filename\n";
53         my $found = 0;
54
55         while (my $line = <FILE>) {
56                 if ($line =~ /extern const struct dcerpc_interface_table (\w+);/) {
57                         $found = 1;
58                         $init_fns.="\tlibrpc_register_interface(&$1);\n";
59                 }
60         }
61
62         if ($found) {
63                 print TABLEC "#include \"$filename\"\n";
64         }
65
66         close(FILE);
67 }
68
69 print "Creating $opt_output\n";
70 open(TABLEC, ">$opt_output") || die "failed to open $opt_output\n";
71
72 print TABLEC <<EOF;
73
74 /* Automatically generated by tables.pl. DO NOT EDIT */
75
76 #include "includes.h"
77 #include "librpc/rpc/dcerpc_table.h"
78 EOF
79
80 process_file($_) foreach (@ARGV);
81
82 print TABLEC <<EOF;
83
84 NTSTATUS dcerpc_table_init(void)
85 {
86         static BOOL initialized = False;
87
88         if (initialized) return NT_STATUS_OK;
89         initialized = True;
90
91 $init_fns
92         
93         return NT_STATUS_OK;
94 }
95 EOF
96
97 close(TABLEC);