r7160: Initial work on an esp function wrapper generator
[samba.git] / source / build / pidl / esp.pm
1 ###################################################
2 # ESP function wrapper generator
3 # Copyright jelmer@samba.org 2005
4 # released under the GNU GPL
5
6 package EspClient;
7
8 use strict;
9 use pidl::typelist;
10
11 my($res);
12
13 sub pidl ($)
14 {
15         $res .= shift;
16 }
17
18 sub ESPFunction($)
19 {
20         my $d = shift;
21
22         pidl "static int esp_$d->{NAME}(struct EspRequest *ep, int argc, struct MprVar **argv)\n";
23         pidl "{\n";
24
25         # FIXME
26
27         pidl "\treturn 0;\n";
28         pidl "}\n\n";
29 }
30
31 #####################################################################
32 # parse the interface definitions
33 sub ESPInterface($)
34 {
35         my($interface) = shift;
36         my @fns = ();
37
38         foreach my $d (@{$interface->{FUNCTIONS}}) {
39                 next if not defined($d->{OPNUM});
40                 
41                 ESPFunction($d);
42
43                 push (@fns, $d->{NAME});
44         }
45         
46         return @fns;
47 }
48
49 #####################################################################
50 # parse a parsed IDL into a C header
51 sub Parse($$)
52 {
53     my($ndr) = shift;
54         my $hdr = shift;
55         my @fns = ();
56
57         $res = "";
58         pidl "#include \"$hdr\"\n\n";
59     pidl "/* ESP wrapper functions auto-generated by pidl */\n\n";
60     foreach my $x (@{$ndr}) {
61             if ($x->{TYPE} eq "INTERFACE") {
62                     push (@fns, ESPInterface($x));
63             }
64     }
65
66         pidl "void setup_ejs_functions(void)\n";
67         pidl "{\n";
68         foreach (@fns) {
69                 pidl "\tespDefineCFunction(NULL, \"$_\", esp_$_, NULL);\n";
70         }
71         pidl "}\n";
72         
73     return $res;
74 }
75
76 1;