svn commit: samba r5479 - in branches/SAMBA_4_0/source: build/pidl script

jelmer at samba.org jelmer at samba.org
Mon Feb 21 01:16:47 GMT 2005


Author: jelmer
Date: 2005-02-21 01:16:47 +0000 (Mon, 21 Feb 2005)
New Revision: 5479

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=5479

Log:
Add ODL input support. 
The ODL module can convert an ODL structure to an IDL structure so that:
 - The COM subsystem can use the ODL structure
 - The DCE/RPC subsystem can use the IDL structure

Added:
   branches/SAMBA_4_0/source/build/pidl/odl.pm
Modified:
   branches/SAMBA_4_0/source/build/pidl/idl.pm
   branches/SAMBA_4_0/source/build/pidl/idl.yp
   branches/SAMBA_4_0/source/build/pidl/ndr.pm
   branches/SAMBA_4_0/source/build/pidl/pidl.pl
   branches/SAMBA_4_0/source/script/build_idl.sh


Changeset:
Modified: branches/SAMBA_4_0/source/build/pidl/idl.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/idl.pm	2005-02-21 00:21:33 UTC (rev 5478)
+++ branches/SAMBA_4_0/source/build/pidl/idl.pm	2005-02-21 01:16:47 UTC (rev 5479)
@@ -2383,8 +2383,6 @@
 	my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
 
 	foreach my $x (@{$idl}) {
-		NdrParser::InterfaceORPC($x);
-
 		# Do the inheritance
 		if (defined($x->{BASE}) and $x->{BASE} ne "") {
 			my $parent = util::get_interface($idl, $x->{BASE});

Modified: branches/SAMBA_4_0/source/build/pidl/idl.yp
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/idl.yp	2005-02-21 00:21:33 UTC (rev 5478)
+++ branches/SAMBA_4_0/source/build/pidl/idl.yp	2005-02-21 01:16:47 UTC (rev 5479)
@@ -374,8 +374,6 @@
 	my $idl = $self->YYParse( yylex => \&_Lexer, yyerror => \&_Error );
 
 	foreach my $x (@{$idl}) {
-		NdrParser::InterfaceORPC($x);
-
 		# Do the inheritance
 		if (defined($x->{BASE}) and $x->{BASE} ne "") {
 			my $parent = util::get_interface($idl, $x->{BASE});

Modified: branches/SAMBA_4_0/source/build/pidl/ndr.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-21 00:21:33 UTC (rev 5478)
+++ branches/SAMBA_4_0/source/build/pidl/ndr.pm	2005-02-21 01:16:47 UTC (rev 5479)
@@ -2114,33 +2114,6 @@
 	}
 }
 
-# Add ORPC specific bits to an interface.
-sub InterfaceORPC($)
-{
-	my $x = shift;	
-	# Add [in] ORPCTHIS *this, [out] ORPCTHAT *that
-	# for 'object' interfaces
-	if (util::has_property($x, "object")) {
-		foreach my $e (@{$x->{DATA}}) {
-			if($e->{TYPE} eq "FUNCTION") {
-				$e->{PROPERTIES}->{object} = 1;
-				unshift(@{$e->{ELEMENTS}}, 
-                       { 'NAME' => 'ORPCthis',
-                         'POINTERS' => 0,
-                         'PROPERTIES' => { 'in' => '1' },
-                         'TYPE' => 'ORPCTHIS'
-                       });
-				unshift(@{$e->{ELEMENTS}},
-                       { 'NAME' => 'ORPCthat',
-                         'POINTERS' => 0,
-                         'PROPERTIES' => { 'out' => '1' },
-					  'TYPE' => 'ORPCTHAT'
-                       });
-			}
-		}
-	}
-}
-
 sub Load($)
 {
 	my $idl = shift;

Added: branches/SAMBA_4_0/source/build/pidl/odl.pm
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/odl.pm	2005-02-21 00:21:33 UTC (rev 5478)
+++ branches/SAMBA_4_0/source/build/pidl/odl.pm	2005-02-21 01:16:47 UTC (rev 5479)
@@ -0,0 +1,59 @@
+##########################################
+# Converts ODL stuctures to IDL structures
+# (C) 2004-2005 Jelmer Vernooij <jelmer at samba.org>
+
+package ODL;
+
+use strict;
+
+sub FunctionAddObjArgs($)
+{
+	my $e = shift;
+	
+	unshift(@{$e->{ELEMENTS}}, {
+		'NAME' => 'ORPCthis',
+		'POINTERS' => 0,
+		'PROPERTIES' => { 'in' => '1' },
+		'TYPE' => 'ORPCTHIS'
+	});
+	unshift(@{$e->{ELEMENTS}}, {
+		'NAME' => 'ORPCthat',
+		'POINTERS' => 0,
+		'PROPERTIES' => { 'out' => '1' },
+		'TYPE' => 'ORPCTHAT'
+	});
+}
+
+sub ReplaceInterfacePointers($)
+{
+	my $e = shift;
+
+	foreach my $x (@{$e->{ELEMENTS}}) {
+		next unless typelist::hasType($x);
+		next unless typelist::getType($x)->{DATA}->{TYPE} eq "INTERFACE";
+		
+		$x->{TYPE} = "MInterfacePointer";
+	}
+}
+
+# Add ORPC specific bits to an interface.
+sub ODL2IDL($)
+{
+	my $odl = shift;
+	my @idl = @{$odl};
+	
+	foreach my $x (@idl) {
+		# Add [in] ORPCTHIS *this, [out] ORPCTHAT *that
+		# for 'object' interfaces
+		if (util::has_property($x, "object")) {
+			foreach my $e (@{$x->{DATA}}) {
+				($e->{TYPE} eq "FUNCTION") && FunctionAddObjArgs($e);
+				ReplaceInterfacePointers($e);
+			}
+		}
+	}
+
+	return \@idl;
+}
+
+1;

Modified: branches/SAMBA_4_0/source/build/pidl/pidl.pl
===================================================================
--- branches/SAMBA_4_0/source/build/pidl/pidl.pl	2005-02-21 00:21:33 UTC (rev 5478)
+++ branches/SAMBA_4_0/source/build/pidl/pidl.pl	2005-02-21 01:16:47 UTC (rev 5479)
@@ -21,6 +21,7 @@
 use proxy;
 use stub;
 use ndr;
+use odl;
 use eparser;
 use validator;
 use typelist;
@@ -40,6 +41,7 @@
 my($opt_eparser) = 0;
 my($opt_keep) = 0;
 my($opt_swig) = 0;
+my($opt_odl) = 0;
 my($opt_output);
 
 my $idl_parser = new idl;
@@ -79,6 +81,7 @@
              --swig                create swig wrapper file
              --diff                run diff on the idl and dumped output
              --keep                keep the .pidl file
+             --odl                 accept ODL input
            \n";
     exit(0);
 }
@@ -96,6 +99,7 @@
         'client' => \$opt_client,
 	    'eparser' => \$opt_eparser,
 	    'diff' => \$opt_diff,
+		'odl' => \$opt_odl,
 	    'keep' => \$opt_keep,
 	    'swig' => \$opt_swig
 	    );
@@ -109,6 +113,7 @@
 {
 	my $idl_file = shift;
 	my $output;
+	my $podl;
 	my $pidl;
 
 	my $basename = basename($idl_file, ".idl");
@@ -143,6 +148,11 @@
 		typelist::LoadIdl($pidl);
 	}
 
+	if ($opt_odl) {
+		$podl = $pidl;
+		$pidl = ODL::ODL2IDL($podl);
+	}
+
 	if ($opt_header) {
 		my($header) = util::ChangeExtension($output, ".h");
 		util::FileSave($header, IdlHeader::Parse($pidl));

Modified: branches/SAMBA_4_0/source/script/build_idl.sh
===================================================================
--- branches/SAMBA_4_0/source/script/build_idl.sh	2005-02-21 00:21:33 UTC (rev 5478)
+++ branches/SAMBA_4_0/source/script/build_idl.sh	2005-02-21 01:16:47 UTC (rev 5479)
@@ -4,7 +4,7 @@
 
 [ -d librpc/gen_ndr ] || mkdir -p librpc/gen_ndr || exit 1
 
-PIDL="$PERL ./build/pidl/pidl.pl --output librpc/gen_ndr/ndr_ --parse --header --parser --server --client --swig"
+PIDL="$PERL ./build/pidl/pidl.pl --output librpc/gen_ndr/ndr_ --parse --header --parser --server --client --swig --odl"
 
 if [ x$FULLBUILD = xFULL ]; then
       echo Rebuilding all idl files in librpc/idl



More information about the samba-cvs mailing list