libndr: Avoid assigning duplicate versions to symbols
[amitay/samba.git] / pidl / pidl
index 483f95af492f2a230ecc4232d5647e0e77a1517c..762824e6851e43797063e51781305167f5a67063 100755 (executable)
--- a/pidl/pidl
+++ b/pidl/pidl
@@ -381,14 +381,14 @@ usesgetlasterror, vararg, vi_progid, wire_marshal.
 
 =head1 SEE ALSO
 
-L<http://msdn.microsoft.com/library/en-us/rpc/rpc/field_attributes.asp>,
-L<http://wiki.wireshark.org/DCE/RPC>,
-L<http://www.samba.org/>,
+L<https://msdn.microsoft.com/en-us/library/windows/desktop/aa373864%28v=vs.85%29.aspx>
+L<https://wiki.wireshark.org/DCE/RPC>,
+L<https://www.samba.org/>,
 L<yapp(1)>
 
 =head1 LICENSE
 
-pidl is licensed under the GNU General Public License L<http://www.gnu.org/licenses/gpl.html>.
+pidl is licensed under the GNU General Public License L<https://www.gnu.org/licenses/gpl.html>.
 
 =head1 AUTHOR
 
@@ -402,6 +402,7 @@ pidl README by Andrew Tridgell.
 
 
 use strict;
+use warnings;
 use FindBin qw($RealBin $Script);
 use lib "$RealBin/lib";
 use Getopt::Long;
@@ -474,6 +475,7 @@ my($opt_template) = 0;
 my($opt_client);
 my($opt_typelib);
 my($opt_server);
+my($opt_server_compat);
 my($opt_ndr_parser);
 my($opt_tdr_parser);
 my($opt_ws_parser);
@@ -559,6 +561,7 @@ my $result = GetOptions (
                'samba3-template' => \$opt_samba3_template,
                'header:s' => \$opt_header,
                'server:s' => \$opt_server,
+               'server-compat:s' => \$opt_server_compat,
                'typelib:s' => \$opt_typelib,
                'tdr-parser:s' => \$opt_tdr_parser,
                'template' => \$opt_template,
@@ -669,6 +672,7 @@ sub process_file($)
        if (defined($opt_ws_parser) or
                defined($opt_client) or
                defined($opt_server) or
+               defined($opt_server_compat) or
                defined($opt_header) or
                defined($opt_ndr_parser) or
                defined($opt_python) or
@@ -712,8 +716,11 @@ sub process_file($)
        if (defined($opt_python)) {
                require Parse::Pidl::Samba4::Python;
                my $generator = new Parse::Pidl::Samba4::Python();
+               if (!defined($opt_client)) {
+                   $c_header = undef;
+               }
                my ($prsr) = $generator->Parse($basename, $ndr,
-                                       "$outputdir/ndr_$basename\_c.h", $h_filename);
+                                              $c_header, $h_filename);
                FileSave("$outputdir/py_$basename.c", $prsr);
        }
 
@@ -794,6 +801,19 @@ sub process_file($)
                FileSave($header, $h_code);
        }
 
+       if (defined($opt_server_compat)) {
+               require Parse::Pidl::Samba4::NDR::ServerCompat;
+
+               my $c_scompat = ($opt_server_compat or "$outputdir/ndr_$basename\_scompat.c");
+               my $h_scompat = $c_scompat;
+               $h_scompat =~ s/\.c$/.h/;
+
+               my $generator = new Parse::Pidl::Samba4::NDR::ServerCompat();
+               my ($source, $header) = $generator->Parse($ndr, $h_scompat, $h_filename);
+
+               FileSave($c_scompat, $source);
+               FileSave($h_scompat, $header);
+       }
 }
 
 if (scalar(@ARGV) == 0) {