svn commit: samba r26657 - in branches/SAMBA_4_0: . source/pidl source/pidl/lib/Parse/Pidl/Samba4 source/script

jelmer at samba.org jelmer at samba.org
Thu Jan 3 21:21:17 GMT 2008


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 jelmer at samba.org 2007
+# released under the GNU GPL
+
+package Parse::Pidl::Samba4::Python;
+
+use Exporter;
+ at 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/^/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



More information about the samba-cvs mailing list