Skip to content

Commit

Permalink
devel/blueprint-compiler: fix runtime on big-endian
Browse files Browse the repository at this point in the history
  • Loading branch information
pkubaj committed Sep 27, 2023
1 parent 41d81a8 commit edff562
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 0 deletions.
1 change: 1 addition & 0 deletions devel/blueprint-compiler/Makefile
@@ -1,6 +1,7 @@
PORTNAME= blueprint-compiler
DISTVERSIONPREFIX= v
DISTVERSION= 0.10.0
PORTREVISION= 1
CATEGORIES= devel

MAINTAINER= jbeich@FreeBSD.org
Expand Down
13 changes: 13 additions & 0 deletions devel/blueprint-compiler/files/patch-blueprintcompiler_gir.py
@@ -0,0 +1,13 @@
--- blueprintcompiler/gir.py.orig 2023-09-26 21:07:04 UTC
+++ blueprintcompiler/gir.py
@@ -888,8 +888,8 @@ class Repository(GirNode):
return self.lookup_namespace(ns).get_type(dir_entry.DIR_ENTRY_NAME)

def _resolve_type_id(self, type_id: int) -> GirType:
- if type_id & 0xFFFFFF == 0:
- type_id = (type_id >> 27) & 0x1F
+ if type_id & (0xFFFFFF if sys.byteorder == "little" else 0xFFFFFF00) == 0:
+ type_id = ((type_id >> 27) if sys.byteorder == "little" else type_id) & 0x1F
# simple type
if type_id == typelib.TYPE_BOOLEAN:
return BoolType()
38 changes: 38 additions & 0 deletions devel/blueprint-compiler/files/patch-blueprintcompiler_typelib.py
@@ -0,0 +1,38 @@
--- blueprintcompiler/typelib.py.orig 2023-07-21 20:06:18 UTC
+++ blueprintcompiler/typelib.py
@@ -61,7 +61,14 @@ class Field:
def __init__(self, offset: int, type: str, shift=0, mask=None):
self._offset = offset
self._type = type
- self._shift = shift
+ if not mask or sys.byteorder == "little":
+ self._shift = shift
+ elif self._type == "u8" or self._type == "i8":
+ self._shift = 8 - (shift + mask)
+ elif self._type == "u16" or self._type == "i16":
+ self._shift = 16 - (shift + mask)
+ else:
+ self._shift = 32 - (shift + mask)
self._mask = (1 << mask) - 1 if mask else None
self._name = f"{offset}__{type}__{shift}__{mask}"

@@ -170,7 +177,7 @@ class Typelib:
OBJ_FINAL = Field(0x02, "u16", 3, 1)
OBJ_GTYPE_NAME = Field(0x08, "string")
OBJ_PARENT = Field(0x10, "dir_entry")
- OBJ_GTYPE_STRUCT = Field(0x14, "string")
+ OBJ_GTYPE_STRUCT = Field(0x12, "string")
OBJ_N_INTERFACES = Field(0x14, "u16")
OBJ_N_FIELDS = Field(0x16, "u16")
OBJ_N_PROPERTIES = Field(0x18, "u16")
@@ -255,7 +262,9 @@ class Typelib:

def _int(self, size, signed) -> int:
return int.from_bytes(
- self._typelib_file[self._offset : self._offset + size], sys.byteorder
+ self._typelib_file[self._offset : self._offset + size],
+ sys.byteorder,
+ signed=signed,
)


0 comments on commit edff562

Please sign in to comment.