[Mesa-dev] [PATCH 1/2] intel: genxml: add script to generate gzipped genxml

Dylan Baker dylan at pnwbakers.com
Fri Mar 10 17:28:49 UTC 2017


Quoting Lionel Landwerlin (2017-03-10 08:26:15)
> Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> ---
>  src/intel/Makefile.genxml.am        |  1 +
>  src/intel/genxml/gen_zipped_file.py | 25 +++++++++++++++++++++++++
>  2 files changed, 26 insertions(+)
>  create mode 100755 src/intel/genxml/gen_zipped_file.py
> 
> diff --git a/src/intel/Makefile.genxml.am b/src/intel/Makefile.genxml.am
> index 20e4b15786..1866d7e2df 100644
> --- a/src/intel/Makefile.genxml.am
> +++ b/src/intel/Makefile.genxml.am
> @@ -60,4 +60,5 @@ EXTRA_DIST += \
>         genxml/genX_pack.h \
>         genxml/gen_macros.h \
>         genxml/gen_pack_header.py \
> +       genxml/gen_zipped_file.py \
>         genxml/README
> diff --git a/src/intel/genxml/gen_zipped_file.py b/src/intel/genxml/gen_zipped_file.py
> new file mode 100755
> index 0000000000..d5735336c5
> --- /dev/null
> +++ b/src/intel/genxml/gen_zipped_file.py
> @@ -0,0 +1,25 @@
> +#!/usr/bin/env python2
> +#encoding=utf-8

copyright?

> +
> +import os
> +import sys
> +import zlib
> +

could you wrap the rest of this in a main function, and add the 
"if __name__ == "__main__" idiom to the bottom of the file?

> +if len(sys.argv) < 2:
> +    print("No input xml file specified")
> +    sys.exit(1)
> +
> +input_file = open(sys.argv[1])
> +input_data = input_file.read()
> +compressed_data = zlib.compress(input_data)

with open(sys.argv[1]) as f:
    compressed_data = zlib.compress(f.read())

This ensures that the fd is closed even if there's an exception, and is more
idomatic.

> +
> +gen_name = os.path.splitext(os.path.basename(sys.argv[1]))[0]
> +sys.stdout.write("static const uint8_t %s_xml[] = {\n   " % gen_name)

You don't want to use sys.stdout.write, you need to manually flush if you do,
print would be better. I'm going to suggest that you use print_function here to
(and below), since you can control whether that prints the newline at the end
(which is what I assume you're trying to avoid using sys.stdout.write.

> +
> +count = 0
> +for c in compressed_data:
> +    sys.stdout.write("0x%.2x, " % ord(c))
> +    count += 1
> +    if count % 12 == 0:
> +        sys.stdout.write("\n  ")
> +print("\n};")

If you use the print function (from __future__ import print_function), then you
can use enumerate to simplify this to:

for i, c in enumerate(compressed_data, start=1):
    print("0x%.2x, " % ord(c), end='\n  ' if not i % 12 else '')
print('\n};)

Start needs to be 1 rather than 0, since i gets incremented at the start of the
loop rather than the end in this version.


If you want to get really fancy you can use python's str.format instead of the
old % syntax (this is just a suggestion, feel no obligation):

    print("{:0=#4x}, ".format(ord(c)))

Which specifies:
0: fill with zeros
=: make it equal to the width
#: print the 0x (or 0b, or 0o for binary and octal)
4: the wdith (which needs to include the #)
x: format hexidecimal

Dylan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20170310/624ceefb/attachment-0001.sig>


More information about the mesa-dev mailing list