################################################### # Python function wrapper generator # Copyright jelmer@samba.org 2007 # released under the GNU GPL package Parse::Pidl::Samba4::Python; use Exporter; @ISA = qw(Exporter); use strict; use Parse::Pidl::Typelist; use Parse::Pidl::Util qw(has_property ParseExpr); use vars qw($VERSION); $VERSION = '0.01'; sub new($) { my ($class) = @_; my $self = { res => "", res_hdr => "", tabs => "", constants => {}}; bless($self, $class); } sub pidl_hdr ($$) { my $self = shift; $self->{res_hdr} .= shift; } sub pidl($$) { my ($self, $d) = @_; if ($d) { $self->{res} .= $self->{tabs}; $self->{res} .= $d; } $self->{res} .= "\n"; } sub indent($) { my ($self) = @_; $self->{tabs} .= "\t"; } sub deindent($) { my ($self) = @_; $self->{tabs} = substr($self->{tabs}, 0, -1); } sub Parse($$$$) { my($self,$basename,$ndr,$hdr) = @_; my $py_hdr = $hdr; $py_hdr =~ s/ndr_([^\/]+)$/py_$1/g; $self->pidl_hdr("/* header auto-generated by pidl */\n\n"); $self->pidl(" /* Python wrapper functions auto-generated by pidl */ #include \"includes.h\" #include #include \"$hdr\" #include \"$py_hdr\" "); $self->pidl("static PyMethodDef $basename\_methods[] = {"); $self->indent; $self->pidl("{ NULL, NULL, 0, NULL }"); $self->deindent; $self->pidl("};"); $self->pidl(""); $self->pidl("void init$basename(void)"); $self->pidl("{"); $self->indent; $self->pidl("PyObject *m;"); $self->pidl("m = Py_InitModule((char *)\"$basename\", $basename\_methods);"); # FIXME $self->deindent; $self->pidl("}"); return ($self->{res_hdr}, $self->{res}); } 1;