[Mesa-dev] [PATCH 1/2] build: Stabilize some script outputs

Dylan Baker dylan at pnwbakers.com
Thu Jul 5 15:38:27 UTC 2018


Quoting Mathieu Bridon (2018-06-27 03:37:38)
> 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.

Small nit: in python < 3.7 dicts are unordered. In cpython 3.6 (and pypy since
forever?) they are, in python 3.7 dicts are guaranteed to be ordered, and
OrderedDict is just an alias for dict.

> 
> 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.
> ---
>  src/amd/common/sid_tables.py          | 2 +-
>  src/compiler/nir/nir_algebraic.py     | 3 ++-
>  src/compiler/nir/nir_opt_algebraic.py | 3 ++-
>  src/mapi/glapi/gen/glX_proto_size.py  | 2 +-
>  src/mapi/glapi/gen/gl_XML.py          | 3 ++-
>  5 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/src/amd/common/sid_tables.py b/src/amd/common/sid_tables.py
> index 4e53acefa4..ca90f82535 100644
> --- a/src/amd/common/sid_tables.py
> +++ b/src/amd/common/sid_tables.py
> @@ -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
>          ]
> diff --git a/src/compiler/nir/nir_algebraic.py b/src/compiler/nir/nir_algebraic.py
> index d6784df004..847c59dbd8 100644
> --- a/src/compiler/nir/nir_algebraic.py
> +++ b/src/compiler/nir/nir_algebraic.py
> @@ -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
> diff --git a/src/compiler/nir/nir_opt_algebraic.py b/src/compiler/nir/nir_opt_algebraic.py
> index db907df854..2f1cba398f 100644
> --- a/src/compiler/nir/nir_opt_algebraic.py
> +++ b/src/compiler/nir/nir_opt_algebraic.py
> @@ -23,6 +23,7 @@
>  # Authors:
>  #    Jason Ekstrand (jason at 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))),
> diff --git a/src/mapi/glapi/gen/glX_proto_size.py b/src/mapi/glapi/gen/glX_proto_size.py
> index e16dbab3e0..8dbb0af86d 100644
> --- a/src/mapi/glapi/gen/glX_proto_size.py
> +++ b/src/mapi/glapi/gen/glX_proto_size.py
> @@ -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
>  
> diff --git a/src/mapi/glapi/gen/gl_XML.py b/src/mapi/glapi/gen/gl_XML.py
> index a5320e90a1..1bab5fee51 100644
> --- a/src/mapi/glapi/gen/gl_XML.py
> +++ b/src/mapi/glapi/gen/gl_XML.py
> @@ -24,6 +24,7 @@
>  # Authors:
>  #    Ian Romanick <idr at 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 = {}
>  
> -- 
> 2.17.1
> 
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 228 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180705/c8b713fc/attachment.sig>


More information about the mesa-dev mailing list