Author: jelmer Date: 2008-01-03 21:21:16 +0000 (Thu, 03 Jan 2008) New Revision: 26657
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=26657 Log: pidl: Add basics for generating Python modules. Added: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Python.pm Modified: branches/SAMBA_4_0/ branches/SAMBA_4_0/source/pidl/pidl branches/SAMBA_4_0/source/script/build_idl.sh Changeset: Property changes on: branches/SAMBA_4_0 ___________________________________________________________________ Name: bzr:revision-info ...skipped... Name: bzr:file-ids ...skipped... Name: bzr:revision-id:v3-trunk0 ...skipped... Added: branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Python.pm =================================================================== --- branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Python.pm 2008-01-03 21:21:12 UTC (rev 26656) +++ branches/SAMBA_4_0/source/pidl/lib/Parse/Pidl/Samba4/Python.pm 2008-01-03 21:21:16 UTC (rev 26657) @@ -0,0 +1,79 @@ +################################################### +# Python function wrapper generator +# Copyright [EMAIL PROTECTED] 2007 +# released under the GNU GPL + +package Parse::Pidl::Samba4::Python; + +use Exporter; [EMAIL PROTECTED] = 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/^/py_/g; + + $self->pidl_hdr("/* header auto-generated by pidl */\n\n"); + + $self->pidl(" +/* Python wrapper functions auto-generated by pidl */ +#include \"includes.h\" +#include <Python.h> +#include \"$hdr\" +#include \"$py_hdr\" + +"); + + $self->pidl("void init$basename(void)"); + $self->pidl("{"); + $self->indent; + # FIXME + $self->deindent; + $self->pidl("}"); + return ($self->{res_hdr}, $self->{res}); +} + +1; Modified: branches/SAMBA_4_0/source/pidl/pidl =================================================================== --- branches/SAMBA_4_0/source/pidl/pidl 2008-01-03 21:21:12 UTC (rev 26656) +++ branches/SAMBA_4_0/source/pidl/pidl 2008-01-03 21:21:16 UTC (rev 26657) @@ -17,7 +17,7 @@ pidl --help -pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [<idlfile>.idl]... +pidl [--outputdir[=OUTNAME]] [--includedir DIR...] [--parse-idl-tree] [--dump-idl-tree] [--dump-ndr-tree] [--header[=OUTPUT]] [--ejs[=OUTPUT]] [--python[=OUTPUT]] [--swig[=OUTPUT]] [--ndr-parser[=OUTPUT]] [--client] [--server] [--warn-compat] [--quiet] [--verbose] [--template] [--ws-parser[=OUTPUT]] [--diff] [--dump-idl] [--tdr-parser[=OUTPUT]] [--samba3-ndr-client[=OUTPUT]] [--samba3-ndr-server[=OUTPUT]] [<idlfile>.idl]... =head1 DESCRIPTION @@ -468,6 +468,7 @@ my($opt_ws_parser); my($opt_swig); my($opt_ejs); +my($opt_python); my($opt_quiet) = 0; my($opt_outputdir) = '.'; my($opt_verbose) = 0; @@ -504,6 +505,7 @@ --client[=OUTFILE] create a C NDR client [ndr_BASENAME_c.c] --tdr-parser[=OUTFILE] create a C TDR parser [tdr_BASENAME.c] --ejs[=OUTFILE] create ejs wrapper file [BASENAME_ejs.c] + --python[=OUTFILE] create python wrapper file [py_BASENAME.c] --swig[=OUTFILE] create swig wrapper file [BASENAME.i] --server[=OUTFILE] create server boilerplate [ndr_BASENAME_s.c] --template print a template for a pipe @@ -538,6 +540,7 @@ 'client:s' => \$opt_client, 'ws-parser:s' => \$opt_ws_parser, 'ejs' => \$opt_ejs, + 'python' => \$opt_python, 'diff' => \$opt_diff, 'swig:s' => \$opt_swig, 'quiet' => \$opt_quiet, @@ -606,6 +609,7 @@ defined($opt_header) or defined($opt_ndr_parser) or defined($opt_ejs) or + defined($opt_python) or defined($opt_dump_ndr_tree) or defined($opt_samba3_header) or defined($opt_samba3_parser) or @@ -657,6 +661,14 @@ FileSave("$outputdir/ndr_$basename\_ejs.h", $hdr); } + if (defined($opt_python)) { + require Parse::Pidl::Samba4::Python; + my $generator = new Parse::Pidl::Samba4::Python(); + my ($hdr,$prsr) = $generator->Parse($basename, $ndr, $h_filename); + FileSave("$outputdir/py_$basename.c", $prsr); + FileSave("$outputdir/py_$basename.h", $hdr); + } + if (defined($opt_server)) { require Parse::Pidl::Samba4::NDR::Server; Modified: branches/SAMBA_4_0/source/script/build_idl.sh =================================================================== --- branches/SAMBA_4_0/source/script/build_idl.sh 2008-01-03 21:21:12 UTC (rev 26656) +++ branches/SAMBA_4_0/source/script/build_idl.sh 2008-01-03 21:21:16 UTC (rev 26657) @@ -6,7 +6,7 @@ [ -d librpc/gen_ndr ] || mkdir -p librpc/gen_ndr || exit 1 -PIDL="$PERL $srcdir/pidl/pidl --outputdir librpc/gen_ndr --header --ndr-parser --server --client --swig --ejs $PIDL_EXTRA_ARGS" +PIDL="$PERL $srcdir/pidl/pidl --outputdir librpc/gen_ndr --header --ndr-parser --server --client --swig --ejs --python $PIDL_EXTRA_ARGS" if [ x$FULLBUILD = xFULL ]; then echo Rebuilding all idl files in librpc/idl