From ae5bf70b4947fcd14580f9526fa115e3a2e3337a Mon Sep 17 00:00:00 2001 From: hakril Date: Mon, 20 May 2024 13:26:35 +0200 Subject: [PATCH] Improve ctypes generation determinism for py2 vs py3 generator --- ctypes_generation/generate.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ctypes_generation/generate.py b/ctypes_generation/generate.py index ebf790d..6918eed 100644 --- a/ctypes_generation/generate.py +++ b/ctypes_generation/generate.py @@ -567,7 +567,7 @@ class StructureDocGenerator(NoTemplatedGenerator): self.emitline(struct.name) self.emitline(self.STRUCT_NAME_SEPARATOR * len(struct.name)) # Emit typedef - for name, type in struct.typedef.items(): + for name, type in sorted(struct.typedef.items()): self.emitline(".. class:: {0}".format(name)) self.emitline("") if hasattr(type, "type"): @@ -605,7 +605,7 @@ class StructureDocGenerator(NoTemplatedGenerator): self.emitline(enum.name) self.emitline(self.STRUCT_NAME_SEPARATOR * len(enum.name)) # Emit typedef - for name, type in enum.typedef.items(): + for name, type in sorted(enum.typedef.items()): self.emitline(".. class:: {0}".format(name)) self.emitline("") if hasattr(type, "type"): @@ -639,10 +639,17 @@ class MetaFileGenerator(NoTemplatedGenerator): def add_export_module(self, module): self.add_exportlist(module.name, module.name, module.modules_exports()) - def generate(self): + def pformat_exports_set(self, exports): + """A pretty print-function that have the same behavior on py2 & py3 (pprint.pformat is not)""" + assert isinstance(exports, set) + # import pdb;pdb.set_trace() + export_list = [repr(e) for e in sorted(exports)] + return "{{{0}}}\n".format(",\n".join(export_list)) # -> {export_list} + def generate(self): for name, modname, exports in self.modules: - self.emitline("{0} = {1}".format(name, pprint.pformat(exports))) + # import pdb;pdb.set_trace() + self.emitline("{0} = {1}".format(name, self.pformat_exports_set(exports))) self.emitline(META_WALKER)