summaryrefslogtreecommitdiff
path: root/tools/pidl
diff options
context:
space:
mode:
authorGuy Harris <guy@alum.mit.edu>2014-11-03 11:20:27 -0800
committerGuy Harris <guy@alum.mit.edu>2014-11-03 19:21:29 +0000
commit0713d35bcd8037318295bc28f7cae68c82f4d92e (patch)
treeb072637299aa806f71da9ef6fa65c8fd6a9058a5 /tools/pidl
parentf2269b4f37f7c3becf7722a5634175f2a3418f54 (diff)
downloadwireshark-0713d35bcd8037318295bc28f7cae68c82f4d92e.tar.gz
Make the compilation of PIDL produce the same results if the content hasn't changed
Pick up change from Samba: commit 4986359816704f38d4fad3ddd0d07a0f0a25b335 Author: Matthieu Patou <mat@matws.net> Date: Mon Sep 22 21:52:14 2014 -0700 pidl: Make the compilation of PIDL producing the same results if the content hasn't change Newer perl versions don't generate stable results anymore. Pair-Programmed-With: Stefan Metzmacher <metze@samba.org> Change-Id: Ifced47229b3033d1fae494adff0dee6671304812 Reviewed-on: https://code.wireshark.org/review/5090 Reviewed-by: Guy Harris <guy@alum.mit.edu>
Diffstat (limited to 'tools/pidl')
-rw-r--r--tools/pidl/lib/Parse/Pidl/Dump.pm4
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/Header.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm2
-rw-r--r--tools/pidl/lib/Parse/Pidl/Samba4/Python.pm48
-rw-r--r--tools/pidl/lib/Parse/Pidl/Util.pm1
-rw-r--r--tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm6
7 files changed, 39 insertions, 26 deletions
diff --git a/tools/pidl/lib/Parse/Pidl/Dump.pm b/tools/pidl/lib/Parse/Pidl/Dump.pm
index bf5811c116..4e623db673 100644
--- a/tools/pidl/lib/Parse/Pidl/Dump.pm
+++ b/tools/pidl/lib/Parse/Pidl/Dump.pm
@@ -39,7 +39,7 @@ sub DumpProperties($)
my $res = "";
foreach my $d ($props) {
- foreach my $k (keys %{$d}) {
+ foreach my $k (sort(keys %{$d})) {
if ($k eq "in") {
$res .= "[in] ";
next;
@@ -244,7 +244,7 @@ sub DumpInterfaceProperties($)
my($res);
$res .= "[\n";
- foreach my $k (keys %{$data}) {
+ foreach my $k (sort(keys %{$data})) {
$first || ($res .= ",\n"); $first = 0;
$res .= "$k($data->{$k})";
}
diff --git a/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm b/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
index 8142b35699..aa913f192e 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba3/ClientNDR.pm
@@ -59,7 +59,7 @@ sub HeaderProperties($$)
my($props,$ignores) = @_;
my $ret = "";
- foreach my $d (keys %{$props}) {
+ foreach my $d (sort(keys %{$props})) {
next if (grep(/^$d$/, @$ignores));
if($props->{$d} ne "1") {
$ret.= "$d($props->{$d}),";
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm b/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
index 49c5afabba..e9b7bee040 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/Header.pm
@@ -38,7 +38,7 @@ sub HeaderProperties($$)
my($props,$ignores) = @_;
my $ret = "";
- foreach my $d (keys %{$props}) {
+ foreach my $d (sort(keys %{$props})) {
next if (grep(/^$d$/, @$ignores));
if($props->{$d} ne "1") {
$ret.= "$d($props->{$d}),";
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
index b4954ca624..ee68090ac6 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/NDR/Client.pm
@@ -259,7 +259,7 @@ sub HeaderProperties($$)
my($props,$ignores) = @_;
my $ret = "";
- foreach my $d (keys %{$props}) {
+ foreach my $d (sort(keys %{$props})) {
next if (grep(/^$d$/, @$ignores));
if($props->{$d} ne "1") {
$ret.= "$d($props->{$d}),";
diff --git a/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm b/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm
index d603176391..31cf63f366 100644
--- a/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm
+++ b/tools/pidl/lib/Parse/Pidl/Samba4/Python.pm
@@ -22,9 +22,11 @@ $VERSION = '0.01';
sub new($) {
my ($class) = @_;
- my $self = { res => "", res_hdr => "", tabs => "", constants => {},
+ my $self = { res => "", res_hdr => "", tabs => "",
+ constants => [], constants_uniq => {},
module_methods => [], module_objects => [], ready_types => [],
- module_imports => {}, type_imports => {},
+ module_imports => [], module_imports_uniq => {},
+ type_imports => [], type_imports_uniq => {},
patch_type_calls => [], prereadycode => [],
postreadycode => []};
bless($self, $class);
@@ -94,7 +96,11 @@ sub register_constant($$$$)
{
my ($self, $name, $type, $value) = @_;
- $self->{constants}->{$name} = [$type, $value];
+ unless (defined $self->{constants_uniq}->{$name}) {
+ my $h = {"key" => $name, "val" => [$type, $value]};
+ push @{$self->{constants}}, $h;
+ $self->{constants_uniq}->{$name} = $h;
+ }
}
sub EnumAndBitmapConsts($$$)
@@ -844,8 +850,11 @@ sub register_module_import($$)
$var_name =~ s/\./_/g;
$var_name = "dep_$var_name";
- $self->{module_imports}->{$var_name} = $module_path;
-
+ unless (defined $self->{module_imports_uniq}->{$var_name}) {
+ my $h = { "key" => $var_name, "val" => $module_path};
+ push @{$self->{module_imports}}, $h;
+ $self->{module_imports_uniq}->{$var_name} = $h;
+ }
return $var_name;
}
@@ -854,8 +863,10 @@ sub import_type_variable($$$)
my ($self, $module, $name) = @_;
$self->register_module_import($module);
- unless (defined($self->{type_imports}->{$name})) {
- $self->{type_imports}->{$name} = $module;
+ unless (defined $self->{type_imports_uniq}->{$name}) {
+ my $h = { "key" => $name, "val" => $module};
+ push @{$self->{type_imports}}, $h;
+ $self->{type_imports_uniq}->{$name} = $h;
}
return "$name\_Type";
}
@@ -1405,25 +1416,25 @@ sub Parse($$$$$)
$self->pidl("{");
$self->indent;
$self->pidl("PyObject *m;");
- foreach (keys %{$self->{module_imports}}) {
- $self->pidl("PyObject *$_;");
+ foreach my $h (@{$self->{module_imports}}) {
+ $self->pidl("PyObject *$h->{'key'};");
}
$self->pidl("");
- foreach (keys %{$self->{module_imports}}) {
- my $var_name = $_;
- my $module_path = $self->{module_imports}->{$var_name};
+ foreach my $h (@{$self->{module_imports}}) {
+ my $var_name = $h->{'key'};
+ my $module_path = $h->{'val'};
$self->pidl("$var_name = PyImport_ImportModule(\"$module_path\");");
$self->pidl("if ($var_name == NULL)");
$self->pidl("\treturn;");
$self->pidl("");
}
- foreach (keys %{$self->{type_imports}}) {
- my $type_var = "$_\_Type";
- my $module_path = $self->{type_imports}->{$_};
+ foreach my $h (@{$self->{type_imports}}) {
+ my $type_var = "$h->{'key'}\_Type";
+ my $module_path = $h->{'val'};
$self->pidl_hdr("static PyTypeObject *$type_var;\n");
- my $pretty_name = PrettifyTypeName($_, $module_path);
+ my $pretty_name = PrettifyTypeName($h->{'key'}, $module_path);
my $module_var = "dep_$module_path";
$module_var =~ s/\./_/g;
$self->pidl("$type_var = (PyTypeObject *)PyObject_GetAttrString($module_var, \"$pretty_name\");");
@@ -1454,9 +1465,10 @@ sub Parse($$$$$)
$self->pidl("if (m == NULL)");
$self->pidl("\treturn;");
$self->pidl("");
- foreach my $name (keys %{$self->{constants}}) {
+ foreach my $h (@{$self->{constants}}) {
+ my $name = $h->{'key'};
my $py_obj;
- my ($ctype, $cvar) = @{$self->{constants}->{$name}};
+ my ($ctype, $cvar) = @{$h->{'val'}};
if ($cvar =~ /^[0-9]+$/ or $cvar =~ /^0x[0-9a-fA-F]+$/) {
$py_obj = "PyInt_FromLong($cvar)";
} elsif ($cvar =~ /^".*"$/) {
diff --git a/tools/pidl/lib/Parse/Pidl/Util.pm b/tools/pidl/lib/Parse/Pidl/Util.pm
index 006718d139..421cb8f9dc 100644
--- a/tools/pidl/lib/Parse/Pidl/Util.pm
+++ b/tools/pidl/lib/Parse/Pidl/Util.pm
@@ -43,6 +43,7 @@ unless we actually need it
sub MyDumper($)
{
require Data::Dumper;
+ $Data::Dumper::Sortkeys = 1;
my $s = shift;
return Data::Dumper::Dumper($s);
}
diff --git a/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm b/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm
index 6831acb9dc..76d8317290 100644
--- a/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm
+++ b/tools/pidl/lib/Parse/Pidl/Wireshark/NDR.pm
@@ -952,7 +952,7 @@ sub ProcessInterface($$)
$self->Interface($x);
$self->pidl_code("\n".DumpFunctionTable($x));
- foreach (keys %{$return_types{$x->{NAME}}}) {
+ foreach (sort(keys %{$return_types{$x->{NAME}}})) {
my ($type, $desc) = @{$return_types{$x->{NAME}}->{$_}};
my $dt = $self->find_type($type);
$dt or die("Unable to find information about return type `$type'");
@@ -1183,7 +1183,7 @@ sub DumpHfDeclaration($)
$res = "\n/* Header field declarations */\n";
- foreach (keys %{$self->{conformance}->{header_fields}})
+ foreach (sort(keys %{$self->{conformance}->{header_fields}}))
{
$res .= "static gint $_ = -1;\n";
}
@@ -1210,7 +1210,7 @@ sub DumpHfList($)
my ($self) = @_;
my $res = "\tstatic hf_register_info hf[] = {\n";
- foreach (values %{$self->{conformance}->{header_fields}})
+ foreach (sort {$a->{INDEX} cmp $b->{INDEX}} values %{$self->{conformance}->{header_fields}})
{
$res .= "\t{ &$_->{INDEX},
{ ".make_str($_->{NAME}).", ".make_str($_->{FILTER}).", $_->{FT_TYPE}, $_->{BASE_TYPE}, $_->{VALSSTRING}, $_->{MASK}, ".make_str_or_null($_->{BLURB}).", HFILL }},