python: Stabilize some script outputs
authorMathieu Bridon <bochecha@daitauha.fr>
Wed, 27 Jun 2018 10:37:38 +0000 (12:37 +0200)
committerEric Engestrom <eric.engestrom@intel.com>
Thu, 5 Jul 2018 11:52:12 +0000 (12:52 +0100)
In Python, dictionaries and sets are unordered, and as a result their
is no guarantee that running this script twice will produce the same
output.

Using ordered dicts and explicitly sorting items makes the build more
reproducible, and will make it possible to verify that we're not
breaking anything when we move the build scripts to Python 3.

Reviewed-by: Eric Engestrom <eric.engestrom@intel.com>
src/amd/common/sid_tables.py
src/compiler/nir/nir_algebraic.py
src/compiler/nir/nir_opt_algebraic.py
src/mapi/glapi/gen/glX_proto_size.py
src/mapi/glapi/gen/gl_XML.py

index 4e53acefa44c560a75a6bf08f5aa13d545d28495..ca90f82535d962e48a82807210a874e0095d24f6 100644 (file)
@@ -65,7 +65,7 @@ class StringTable:
         fragments = [
             '"%s\\0" /* %s */' % (
                 te[0].encode('string_escape'),
-                ', '.join(str(idx) for idx in te[2])
+                ', '.join(str(idx) for idx in sorted(te[2]))
             )
             for te in self.table
         ]
index d6784df004e14e69c082df6213a2ce3df4b2b5d1..847c59dbd89bbc73fa082c641fb9673a1e2c0bfd 100644 (file)
@@ -25,6 +25,7 @@
 
 from __future__ import print_function
 import ast
+from collections import OrderedDict
 import itertools
 import struct
 import sys
@@ -601,7 +602,7 @@ ${pass_name}(nir_shader *shader)
 
 class AlgebraicPass(object):
    def __init__(self, pass_name, transforms):
-      self.xform_dict = {}
+      self.xform_dict = OrderedDict()
       self.pass_name = pass_name
 
       error = False
index db907df8545e91cf91c79140f0d3b4b74ecb5541..2f1cba398f0393069602154042ca4b391caaf3b2 100644 (file)
@@ -23,6 +23,7 @@
 # Authors:
 #    Jason Ekstrand (jason@jlekstrand.net)
 
+from collections import OrderedDict
 import nir_algebraic
 import itertools
 
@@ -628,7 +629,7 @@ optimizations = [
      'options->lower_unpack_snorm_4x8'),
 ]
 
-invert = {'feq': 'fne', 'fne': 'feq', 'fge': 'flt', 'flt': 'fge' }
+invert = OrderedDict([('feq', 'fne'), ('fne', 'feq'), ('fge', 'flt'), ('flt', 'fge')])
 
 for left, right in list(itertools.combinations(invert.keys(), 2)) + zip(invert.keys(), invert.keys()):
    optimizations.append((('inot', ('ior(is_used_once)', (left, a, b), (right, c, d))),
index e16dbab3e093739ebf37d355f5999af469d3e3de..8dbb0af86d74a04d7724ab721c3e7b9fdf38e31d 100644 (file)
@@ -191,7 +191,7 @@ class glx_enum_function(object):
 
         print '    switch( e ) {'
 
-        for c in self.count:
+        for c in sorted(self.count):
             for e in self.count[c]:
                 first = 1
 
index a5320e90a1ded5e6ec1540b9a7277f041b3a9923..1bab5fee51fd96341c16c76426252ec338dad109 100644 (file)
@@ -24,6 +24,7 @@
 # Authors:
 #    Ian Romanick <idr@us.ibm.com>
 
+from collections import OrderedDict
 from decimal import Decimal
 import xml.etree.ElementTree as ET
 import re, sys, string
@@ -861,7 +862,7 @@ class gl_item_factory(object):
 
 class gl_api(object):
     def __init__(self, factory):
-        self.functions_by_name = {}
+        self.functions_by_name = OrderedDict()
         self.enums_by_name = {}
         self.types_by_name = {}