[Mesa-dev] [PATCH] r600/egd_tables.py: make the script python 2+3 compatible

Dylan Baker dylan at pnwbakers.com
Thu Mar 1 17:00:38 UTC 2018


Quoting sndirsch at suse.de (2018-03-01 08:11:54)
> From: Stefan Dirsch <sndirsch at suse.de>
> 
> Patch by "Tomas Chvatal" <tchvatal at suse.com> with modifications
> by "Michal Srb" <msrb at suse.com> to not break python 2.
> 
> https://bugzilla.suse.com/show_bug.cgi?id=1082303
> 
> v2:
> - no longer try to encode a unicode
> - make use of 'from __future__ import print_function', so semantics
>   of print statements in python2 are closer to print functions in python3
> 
> https://lists.freedesktop.org/archives/mesa-dev/2018-February/187056.html
> 
> Signed-off-by: Stefan Dirsch <sndirsch at suse.de>
> Reviewed-by: Tomas Chvatal <tchvatal at suse.com>
> Reviewed-by: Dylan Baker <dylan at pnwbakers.com>

Process comment for you. Reviewed-by in mesa is like the kernel, it carries a
very specific formal meaning and you don't add Reviewed-by (or Acked-by,
Tested-by, etc) unless someone explicitly says that they give a Reviewed-by.

Also, please use the natural name at domain form for emails. Scripts that scrape emails
out of emails and git commits are not fooled by "name at domain" anyway.

> ---
>  src/gallium/drivers/r600/egd_tables.py | 53 +++++++++++++++++-----------------
>  1 file changed, 27 insertions(+), 26 deletions(-)
> 
> diff --git a/src/gallium/drivers/r600/egd_tables.py b/src/gallium/drivers/r600/egd_tables.py
> index d7b78c7fb1..4796456330 100644
> --- a/src/gallium/drivers/r600/egd_tables.py
> +++ b/src/gallium/drivers/r600/egd_tables.py
> @@ -1,3 +1,4 @@
> +from __future__ import print_function
>  
>  CopyRight = '''
>  /*
> @@ -60,7 +61,7 @@ class StringTable:
>          """
>          fragments = [
>              '"%s\\0" /* %s */' % (
> -                te[0].encode('string_escape'),
> +                te[0],
>                  ', '.join(str(idx) for idx in te[2])
>              )
>              for te in self.table
> @@ -217,10 +218,10 @@ def write_tables(regs, packets):
>      strings = StringTable()
>      strings_offsets = IntTable("int")
>  
> -    print '/* This file is autogenerated by egd_tables.py from evergreend.h. Do not edit directly. */'
> -    print
> -    print CopyRight.strip()
> -    print '''
> +    print('/* This file is autogenerated by egd_tables.py from evergreend.h. Do not edit directly. */')
> +    print('')
> +    print(CopyRight.strip())
> +    print('''
>  #ifndef EG_TABLES_H
>  #define EG_TABLES_H
>  
> @@ -242,20 +243,20 @@ struct eg_packet3 {
>          unsigned name_offset;
>          unsigned op;
>  };
> -'''
> +''')
>  
> -    print 'static const struct eg_packet3 packet3_table[] = {'
> +    print('static const struct eg_packet3 packet3_table[] = {')
>      for pkt in packets:
> -        print '\t{%s, %s},' % (strings.add(pkt[5:]), pkt)
> -    print '};'
> -    print
> +        print('\t{%s, %s},' % (strings.add(pkt[5:]), pkt))
> +    print('};')
> +    print('')
>  
> -    print 'static const struct eg_field egd_fields_table[] = {'
> +    print('static const struct eg_field egd_fields_table[] = {')
>  
>      fields_idx = 0
>      for reg in regs:
>          if len(reg.fields) and reg.own_fields:
> -            print '\t/* %s */' % (fields_idx)
> +            print('\t/* %s */' % (fields_idx))
>  
>              reg.fields_idx = fields_idx
>  
> @@ -266,34 +267,34 @@ struct eg_packet3 {
>                          while value[1] >= len(values_offsets):
>                              values_offsets.append(-1)
>                          values_offsets[value[1]] = strings.add(strip_prefix(value[0]))
> -                    print '\t{%s, %s(~0u), %s, %s},' % (
> +                    print('\t{%s, %s(~0u), %s, %s},' % (
>                          strings.add(field.name), field.s_name,
> -                        len(values_offsets), strings_offsets.add(values_offsets))
> +                        len(values_offsets), strings_offsets.add(values_offsets)))
>                  else:
> -                    print '\t{%s, %s(~0u)},' % (strings.add(field.name), field.s_name)
> +                    print('\t{%s, %s(~0u)},' % (strings.add(field.name), field.s_name))
>                  fields_idx += 1
>  
> -    print '};'
> -    print
> +    print('};')
> +    print('')
>  
> -    print 'static const struct eg_reg egd_reg_table[] = {'
> +    print('static const struct eg_reg egd_reg_table[] = {')
>      for reg in regs:
>          if len(reg.fields):
> -            print '\t{%s, %s, %s, %s},' % (strings.add(reg.name), reg.r_name,
> -                len(reg.fields), reg.fields_idx if reg.own_fields else reg.fields_owner.fields_idx)
> +            print('\t{%s, %s, %s, %s},' % (strings.add(reg.name), reg.r_name,
> +                len(reg.fields), reg.fields_idx if reg.own_fields else reg.fields_owner.fields_idx))
>          else:
> -            print '\t{%s, %s},' % (strings.add(reg.name), reg.r_name)
> -    print '};'
> -    print
> +            print('\t{%s, %s},' % (strings.add(reg.name), reg.r_name))
> +    print('};')
> +    print('')
>  
>      strings.emit(sys.stdout, "egd_strings")
>  
> -    print
> +    print('')
>  
>      strings_offsets.emit(sys.stdout, "egd_strings_offsets")
>  
> -    print
> -    print '#endif'
> +    print('')
> +    print('#endif')
>  
>  
>  def main():
> -- 
> 2.13.6
> 

As-is I think this is a good enough first pass. There are some other things in
this file that should be addressed (I brought them up in the previous patch),
but this should introduce no behavioral changes in python 2 (which is all we're
using ATM anyway), and will make the file run in python 3.

Reviewed-by: Dylan Baker <dylan at pnwbakers.com>
-------------- 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/20180301/e1bbc179/attachment-0001.sig>


More information about the mesa-dev mailing list