From 282cde69ab0359c16cefcacbfdc284b974796948 Mon Sep 17 00:00:00 2001 From: "Andrew J. Hesford" Date: Sat, 23 Sep 2023 21:04:10 -0400 Subject: [PATCH] blender: update to 3.6.4. --- .../blender/patches/python3.12-opcode.patch | 89 ++ .../patches/python3.12-pyarg-parser.patch | 1161 +++++++++++++++++ .../patches/python3.12-pylongobject.patch | 134 ++ 3 files changed, 1384 insertions(+) create mode 100644 srcpkgs/blender/patches/python3.12-opcode.patch create mode 100644 srcpkgs/blender/patches/python3.12-pyarg-parser.patch create mode 100644 srcpkgs/blender/patches/python3.12-pylongobject.patch diff --git a/srcpkgs/blender/patches/python3.12-opcode.patch b/srcpkgs/blender/patches/python3.12-opcode.patch new file mode 100644 index 00000000000..fabe6de6787 --- /dev/null +++ b/srcpkgs/blender/patches/python3.12-opcode.patch @@ -0,0 +1,89 @@ +https://src.fedoraproject.org/rpms/blender/raw/7045717eb5477c40905f6d29dfd3dbf5ed674e4d/f/blender-3.6.1-py312-opcode.patch + +--- blender-3.6.1/source/blender/python/intern/bpy_driver.c.pyop 2023-05-18 08:04:45.000000000 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_driver.c 2023-08-01 17:11:06.356802916 +0900 +@@ -313,14 +313,27 @@ static const bool secure_opcodes[255] = + OK_OP(CACHE), + OK_OP(POP_TOP), + OK_OP(PUSH_NULL), ++#if PY_VERSION_HEX >= 0x030c0000 /* Python 3.12 and newer */ ++ OK_OP(INTERPRETER_EXIT), ++ OK_OP(END_FOR), ++ OK_OP(END_SEND), ++#endif + OK_OP(NOP), ++#if PY_VERSION_HEX < 0x030c0000 /* older than Python 3.12 */ + OK_OP(UNARY_POSITIVE), ++#endif + OK_OP(UNARY_NEGATIVE), + OK_OP(UNARY_NOT), + OK_OP(UNARY_INVERT), + OK_OP(BINARY_SUBSCR), ++#if PY_VERSION_HEX >= 0x030c0000 /* Python 3.12 and newer */ ++ OK_OP(BINARY_SLICE), ++ OK_OP(STORE_SLICE), ++#endif + OK_OP(GET_LEN), ++#if PY_VERSION_HEX < 0x030c0000 /* older than Python 3.12 */ + OK_OP(LIST_TO_TUPLE), ++#endif + OK_OP(RETURN_VALUE), + OK_OP(SWAP), + OK_OP(BUILD_TUPLE), +@@ -329,10 +342,15 @@ static const bool secure_opcodes[255] = + OK_OP(BUILD_MAP), + OK_OP(COMPARE_OP), + OK_OP(JUMP_FORWARD), ++#if PY_VERSION_HEX >= 0x030c0000 /* Python 3.12 and newer */ ++ OK_OP(POP_JUMP_IF_FALSE), ++ OK_OP(POP_JUMP_IF_TRUE), ++#else + OK_OP(JUMP_IF_FALSE_OR_POP), + OK_OP(JUMP_IF_TRUE_OR_POP), + OK_OP(POP_JUMP_FORWARD_IF_FALSE), + OK_OP(POP_JUMP_FORWARD_IF_TRUE), ++#endif + OK_OP(LOAD_GLOBAL), + OK_OP(IS_OP), + OK_OP(CONTAINS_OP), +@@ -340,8 +358,13 @@ static const bool secure_opcodes[255] = + OK_OP(LOAD_FAST), + OK_OP(STORE_FAST), + OK_OP(DELETE_FAST), ++#if PY_VERSION_HEX >= 0x030c0000 /* Python 3.12 and newer */ ++ OK_OP(POP_JUMP_IF_NOT_NONE), ++ OK_OP(POP_JUMP_IF_NONE), ++#else + OK_OP(POP_JUMP_FORWARD_IF_NOT_NONE), + OK_OP(POP_JUMP_FORWARD_IF_NONE), ++#endif + OK_OP(BUILD_SLICE), + OK_OP(LOAD_DEREF), + OK_OP(STORE_DEREF), +@@ -354,17 +377,26 @@ static const bool secure_opcodes[255] = + OK_OP(DICT_MERGE), + OK_OP(DICT_UPDATE), + # endif ++#if PY_VERSION_HEX >= 0x030c0000 /* Python 3.12 and newer */ ++ OK_OP(INSTRUMENTED_POP_JUMP_IF_NONE), ++ OK_OP(INSTRUMENTED_POP_JUMP_IF_NOT_NONE), ++ OK_OP(INSTRUMENTED_POP_JUMP_IF_FALSE), ++ OK_OP(INSTRUMENTED_POP_JUMP_IF_TRUE), ++#else + OK_OP(POP_JUMP_BACKWARD_IF_NOT_NONE), + OK_OP(POP_JUMP_BACKWARD_IF_NONE), + OK_OP(POP_JUMP_BACKWARD_IF_FALSE), + OK_OP(POP_JUMP_BACKWARD_IF_TRUE), ++#endif + + /* Special cases. */ + OK_OP(LOAD_CONST), /* Ok because constants are accepted. */ + OK_OP(LOAD_NAME), /* Ok, because `PyCodeObject.names` is checked. */ + OK_OP(CALL), /* Ok, because we check its "name" before calling. */ + OK_OP(KW_NAMES), /* Ok, because it's used for calling functions with keyword arguments. */ ++#if PY_VERSION_HEX < 0x030c0000 /* older than Python 3.12 */ + OK_OP(PRECALL), /* Ok, because it's used for calling. */ ++#endif + + # else /* Python 3.10 and older. */ + diff --git a/srcpkgs/blender/patches/python3.12-pyarg-parser.patch b/srcpkgs/blender/patches/python3.12-pyarg-parser.patch new file mode 100644 index 00000000000..9728122c1e5 --- /dev/null +++ b/srcpkgs/blender/patches/python3.12-pyarg-parser.patch @@ -0,0 +1,1161 @@ +https://src.fedoraproject.org/rpms/blender/raw/7045717eb5477c40905f6d29dfd3dbf5ed674e4d/f/blender-3.6.1-py312-pyarg-parser-def.patch + +--- blender-3.6.1/source/blender/python/generic/imbuf_py_api.c.py312 2023-07-31 22:34:10.598661316 +0900 ++++ blender-3.6.1/source/blender/python/generic/imbuf_py_api.c 2023-07-31 22:42:31.327330268 +0900 +@@ -93,12 +93,11 @@ static PyObject *py_imbuf_resize(Py_ImBu + + static const char *_keywords[] = {"size", "method", NULL}; + static _PyArg_Parser _parser = { +- "(ii)" /* `size` */ ++ .format = "(ii)" /* `size` */ + "|$" /* Optional keyword only arguments. */ + "O&" /* `method` */ + ":resize", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &size[0], &size[1], PyC_ParseStringEnum, &method)) +@@ -139,11 +138,10 @@ static PyObject *py_imbuf_crop(Py_ImBuf + + static const char *_keywords[] = {"min", "max", NULL}; + static _PyArg_Parser _parser = { +- "(II)" /* `min` */ ++ .format = "(II)" /* `min` */ + "(II)" /* `max` */ + ":crop", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &crop.xmin, &crop.ymin, &crop.xmax, &crop.ymax)) +@@ -431,10 +429,9 @@ static PyObject *M_imbuf_new(PyObject *U + int size[2]; + static const char *_keywords[] = {"size", NULL}; + static _PyArg_Parser _parser = { +- "(ii)" /* `size` */ ++ .format = "(ii)" /* `size` */ + ":new", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &size[0], &size[1])) { + return NULL; +@@ -471,10 +468,9 @@ static PyObject *M_imbuf_load(PyObject * + + static const char *_keywords[] = {"filepath", NULL}; + static _PyArg_Parser _parser = { +- "s" /* `filepath` */ ++ .format = "s" /* `filepath` */ + ":load", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &filepath)) { + return NULL; +@@ -518,12 +514,11 @@ static PyObject *M_imbuf_write(PyObject + + static const char *_keywords[] = {"image", "filepath", NULL}; + static _PyArg_Parser _parser = { +- "O!" /* `image` */ ++ .format = "O!" /* `image` */ + "|$" /* Optional keyword only arguments. */ + "s" /* `filepath` */ + ":write", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &Py_ImBuf_Type, &py_imb, &filepath)) { + return NULL; +--- blender-3.6.1/source/blender/python/gpu/gpu_py_batch.c.py312 2023-07-31 22:34:10.601661314 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_batch.c 2023-07-31 22:44:12.219263571 +0900 +@@ -55,13 +55,12 @@ static PyObject *pygpu_batch__tp_new(PyT + + static const char *_keywords[] = {"type", "buf", "elem", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "O&" /* `type` */ + "O!" /* `buf` */ + "O!" /* `elem` */ + ":GPUBatch.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +@@ -256,13 +255,12 @@ static PyObject *pygpu_batch_draw_instan + + static const char *_keywords[] = {"program", "instance_start", "instance_count", NULL}; + static _PyArg_Parser _parser = { +- "O!" /* `program` */ ++ .format = "O!" /* `program` */ + "|$" /* Optional keyword only arguments. */ + "i" /* `instance_start` */ + "i" /* `instance_count' */ + ":GPUBatch.draw_instanced", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &BPyGPUShader_Type, &py_program, &instance_start, &instance_count)) +@@ -298,13 +296,12 @@ static PyObject *pygpu_batch_draw_range( + + static const char *_keywords[] = {"program", "elem_start", "elem_count", NULL}; + static _PyArg_Parser _parser = { +- "O!" /* `program` */ ++ .format = "O!" /* `program` */ + "|$" /* Optional keyword only arguments. */ + "i" /* `elem_start' */ + "i" /* `elem_count' */ + ":GPUBatch.draw_range", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &BPyGPUShader_Type, &py_program, &elem_start, &elem_count)) +--- blender-3.6.1/source/blender/python/gpu/gpu_py_element.c.py312 2023-07-31 22:34:10.601661314 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_element.c 2023-07-31 22:44:28.707252670 +0900 +@@ -38,11 +38,10 @@ static PyObject *pygpu_IndexBuf__tp_new( + + static const char *_keywords[] = {"type", "seq", NULL}; + static _PyArg_Parser _parser = { +- "$O" /* `type` */ ++ .format = "$O" /* `type` */ + "&O" /* `seq` */ + ":IndexBuf.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, PyC_ParseStringEnum, &prim_type, &seq)) { +--- blender-3.6.1/source/blender/python/gpu/gpu_py_framebuffer.c.py312 2023-07-31 22:34:10.603661313 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_framebuffer.c 2023-07-31 22:45:05.470228366 +0900 +@@ -276,12 +276,11 @@ static PyObject *pygpu_framebuffer__tp_n + PyObject *color_attachements = NULL; + static const char *_keywords[] = {"depth_slot", "color_slots", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "O" /* `depth_slot` */ + "O" /* `color_slots` */ + ":GPUFrameBuffer.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, &depth_attachment, &color_attachements)) +@@ -371,13 +370,12 @@ static PyObject *pygpu_framebuffer_clear + + static const char *_keywords[] = {"color", "depth", "stencil", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "O" /* `color` */ + "O" /* `depth` */ + "O" /* `stencil` */ + ":clear", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, &py_col, &py_depth, &py_stencil)) { + return NULL; +@@ -490,7 +488,7 @@ static PyObject *pygpu_framebuffer_read_ + static const char *_keywords[] = { + "x", "y", "xsize", "ysize", "channels", "slot", "format", "data", NULL}; + static _PyArg_Parser _parser = { +- "i" /* `x` */ ++ .format = "i" /* `x` */ + "i" /* `y` */ + "i" /* `xsize` */ + "i" /* `ysize` */ +@@ -500,8 +498,7 @@ static PyObject *pygpu_framebuffer_read_ + "|$" /* Optional keyword only arguments. */ + "O!" /* `data` */ + ":read_color", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +@@ -589,15 +586,14 @@ static PyObject *pygpu_framebuffer_read_ + + static const char *_keywords[] = {"x", "y", "xsize", "ysize", "data", NULL}; + static _PyArg_Parser _parser = { +- "i" /* `x` */ ++ .format = "i" /* `x` */ + "i" /* `y` */ + "i" /* `xsize` */ + "i" /* `ysize` */ + "|$" /* Optional keyword only arguments. */ + "O!" /* `data` */ + ":read_depth", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, &x, &y, &w, &h, &BPyGPU_BufferType, &py_buffer)) +--- blender-3.6.1/source/blender/python/gpu/gpu_py_offscreen.c.py312 2023-07-31 22:34:10.604661312 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_offscreen.c 2023-07-31 22:45:39.391205939 +0900 +@@ -186,11 +186,10 @@ static PyObject *pygpu_offscreen_unbind( + + static const char *_keywords[] = {"restore", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "O&" /* `restore` */ + ":unbind", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, PyC_ParseBool, &restore)) { + return NULL; +@@ -218,13 +217,12 @@ static PyObject *pygpu_offscreen__tp_new + + static const char *_keywords[] = {"width", "height", "format", NULL}; + static _PyArg_Parser _parser = { +- "i" /* `width` */ ++ .format = "i" /* `width` */ + "i" /* `height` */ + "|$" /* Optional keyword only arguments. */ + "O&" /* `format` */ + ":GPUOffScreen.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, &width, &height, PyC_ParseStringEnum, &pygpu_textureformat)) +@@ -339,7 +337,7 @@ static PyObject *pygpu_offscreen_draw_vi + NULL, + }; + static _PyArg_Parser _parser = { +- "O" /* `scene` */ ++ .format = "O" /* `scene` */ + "O" /* `view_layer` */ + "O" /* `view3d` */ + "O" /* `region` */ +@@ -349,8 +347,7 @@ static PyObject *pygpu_offscreen_draw_vi + "O&" /* `do_color_management` */ + "O&" /* `draw_background` */ + ":draw_view3d", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +--- blender-3.6.1/source/blender/python/gpu/gpu_py_shader.c.py312 2023-07-31 22:34:10.605661312 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_shader.c 2023-07-31 22:46:04.128189584 +0900 +@@ -107,7 +107,7 @@ static PyObject *pygpu_shader__tp_new(Py + static const char *_keywords[] = { + "vertexcode", "fragcode", "geocode", "libcode", "defines", "name", NULL}; + static _PyArg_Parser _parser = { +- "s" /* `vertexcode` */ ++ .format = "s" /* `vertexcode` */ + "s" /* `fragcode` */ + "|$" /* Optional keyword only arguments. */ + "s" /* `geocode` */ +@@ -115,8 +115,7 @@ static PyObject *pygpu_shader__tp_new(Py + "s" /* `defines` */ + "s" /* `name` */ + ":GPUShader.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +@@ -841,12 +840,11 @@ static PyObject *pygpu_shader_from_built + + static const char *_keywords[] = {"shader_name", "config", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `shader_name` */ ++ .format = "O&" /* `shader_name` */ + "|$" /* Optional keyword only arguments. */ + "O&" /* `config` */ + ":from_builtin", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +--- blender-3.6.1/source/blender/python/gpu/gpu_py_shader_create_info.cc.py312 2023-07-31 22:34:10.607661310 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_shader_create_info.cc 2023-07-31 22:46:53.192157144 +0900 +@@ -482,14 +482,13 @@ static PyObject *pygpu_shader_info_fragm + + static const char *_keywords[] = {"slot", "type", "name", "blend", nullptr}; + static _PyArg_Parser _parser = { +- "i" /* `slot` */ ++ .format = "i" /* `slot` */ + "O&" /* `type` */ + "s" /* `name` */ + "|$" /* Optional keyword only arguments. */ + "O&" /* `blend` */ + ":fragment_out", +- _keywords, +- nullptr, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +@@ -586,15 +585,14 @@ static PyObject *pygpu_shader_info_image + + static const char *_keywords[] = {"slot", "format", "type", "name", "qualifiers", nullptr}; + static _PyArg_Parser _parser = { +- "i" /* `slot` */ ++ .format = "i" /* `slot` */ + "O&" /* `format` */ + "O&" /* `type` */ + "s" /* `name` */ + "|$" /* Optional keyword only arguments. */ + "O" /* `qualifiers` */ + ":image", +- _keywords, +- nullptr, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +@@ -769,13 +767,12 @@ static PyObject *pygpu_shader_info_push_ + + static const char *_keywords[] = {"type", "name", "size", nullptr}; + static _PyArg_Parser _parser = { +- "O&" /* `type` */ ++ .format = "O&" /* `type` */ + "s" /* `name` */ + "|" /* Optional arguments. */ + "I" /* `size` */ + ":push_constant", +- _keywords, +- nullptr, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, PyC_ParseStringEnum, &pygpu_type, &name, &array_size)) +--- blender-3.6.1/source/blender/python/gpu/gpu_py_texture.c.py312 2023-07-31 22:34:10.607661310 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_texture.c 2023-07-31 22:55:30.710104087 +0900 +@@ -121,15 +121,14 @@ static PyObject *pygpu_texture__tp_new(P + + static const char *_keywords[] = {"size", "layers", "is_cubemap", "format", "data", NULL}; + static _PyArg_Parser _parser = { +- "O" /* `size` */ ++ .format = "O" /* `size` */ + "|$" /* Optional keyword only arguments. */ + "i" /* `layers` */ + "p" /* `is_cubemap` */ + "O&" /* `format` */ + "O!" /* `data` */ + ":GPUTexture.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +@@ -294,12 +293,11 @@ static PyObject *pygpu_texture_clear(BPy + + static const char *_keywords[] = {"format", "value", NULL}; + static _PyArg_Parser _parser = { +- "$" /* Keyword only arguments. */ ++ .format = "$" /* Keyword only arguments. */ + "O&" /* `format` */ + "O" /* `value` */ + ":clear", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, PyC_ParseStringEnum, &pygpu_dataformat, &py_values)) +--- blender-3.6.1/source/blender/python/gpu/gpu_py_uniformbuffer.c.py312 2023-07-31 22:34:10.608661310 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_uniformbuffer.c 2023-07-31 22:58:19.589656161 +0900 +@@ -65,10 +65,9 @@ static PyObject *pygpu_uniformbuffer__tp + + static const char *_keywords[] = {"data", NULL}; + static _PyArg_Parser _parser = { +- "O" /* `data` */ ++ .format = "O" /* `data` */ + ":GPUUniformBuf.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, &pybuffer_obj)) { + return NULL; +--- blender-3.6.1/source/blender/python/gpu/gpu_py_vertex_buffer.c.py312 2023-07-31 22:34:10.609661309 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_vertex_buffer.c 2023-07-31 22:58:39.983722822 +0900 +@@ -237,11 +237,10 @@ static PyObject *pygpu_vertbuf__tp_new(P + + static const char *_keywords[] = {"format", "len", NULL}; + static _PyArg_Parser _parser = { +- "O!" /* `format` */ ++ .format = "O!" /* `format` */ + "I" /* `len` */ + ":GPUVertBuf.__new__", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, &BPyGPUVertFormat_Type, ¶ms.py_fmt, ¶ms.len)) +@@ -273,11 +272,10 @@ static PyObject *pygpu_vertbuf_attr_fill + + static const char *_keywords[] = {"id", "data", NULL}; + static _PyArg_Parser _parser = { +- "O" /* `id` */ ++ .format = "O" /* `id` */ + "O" /* `data` */ + ":attr_fill", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, &identifier, &data)) { + return NULL; +--- blender-3.6.1/source/blender/python/gpu/gpu_py_vertex_format.c.py312 2023-07-31 22:34:10.610661308 +0900 ++++ blender-3.6.1/source/blender/python/gpu/gpu_py_vertex_format.c 2023-07-31 22:58:53.309766384 +0900 +@@ -91,14 +91,13 @@ static PyObject *pygpu_vertformat_attr_a + + static const char *_keywords[] = {"id", "comp_type", "len", "fetch_mode", NULL}; + static _PyArg_Parser _parser = { +- "$" /* Keyword only arguments. */ ++ .format = "$" /* Keyword only arguments. */ + "s" /* `id` */ + "O&" /* `comp_type` */ + "I" /* `len` */ + "O&" /* `fetch_mode` */ + ":attr_add", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +--- blender-3.6.1/source/blender/python/intern/bpy.c.py312 2023-05-18 08:04:45.000000000 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy.c 2023-07-31 22:42:10.505344032 +0900 +@@ -118,13 +118,12 @@ static PyObject *bpy_blend_paths(PyObjec + + static const char *_keywords[] = {"absolute", "packed", "local", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "O&" /* `absolute` */ + "O&" /* `packed` */ + "O&" /* `local` */ + ":blend_paths", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -181,12 +180,11 @@ static PyObject *bpy_flip_name(PyObject + + static const char *_keywords[] = {"", "strip_digits", NULL}; + static _PyArg_Parser _parser = { +- "s#" /* `name` */ ++ .format = "s#" /* `name` */ + "|$" /* Optional, keyword only arguments. */ + "O&" /* `strip_digits` */ + ":flip_name", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &name_src, &name_src_len, PyC_ParseBool, &strip_digits)) +@@ -225,12 +223,11 @@ static PyObject *bpy_user_resource(PyObj + + static const char *_keywords[] = {"type", "path", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `type` */ ++ .format = "O&" /* `type` */ + "|$" /* Optional keyword only arguments. */ + "s" /* `path` */ + ":user_resource", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, PyC_ParseStringEnum, &type, &subdir)) { + return NULL; +@@ -268,12 +265,11 @@ static PyObject *bpy_system_resource(PyO + + static const char *_keywords[] = {"type", "path", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `type` */ ++ .format = "O&" /* `type` */ + "|$" /* Optional keyword only arguments. */ + "s" /* `path` */ + ":system_resource", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, PyC_ParseStringEnum, &type, &subdir)) { + return NULL; +@@ -313,13 +309,12 @@ static PyObject *bpy_resource_path(PyObj + + static const char *_keywords[] = {"type", "major", "minor", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `type` */ ++ .format = "O&" /* `type` */ + "|$" /* Optional keyword only arguments. */ + "i" /* `major` */ + "i" /* `minor` */ + ":resource_path", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, PyC_ParseStringEnum, &type, &major, &minor)) +@@ -353,13 +348,12 @@ static PyObject *bpy_driver_secure_code_ + const bool verbose = false; + static const char *_keywords[] = {"code", "namespace", "verbose", NULL}; + static _PyArg_Parser _parser = { +- "O!" /* `expression` */ ++ .format = "O!" /* `expression` */ + "|$" /* Optional keyword only arguments. */ + "O!" /* `namespace` */ + "O&" /* `verbose` */ + ":driver_secure_code_test", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +--- blender-3.6.1/source/blender/python/intern/bpy_app.c.py312 2023-05-18 08:04:45.000000000 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_app.c 2023-07-31 22:42:10.506344031 +0900 +@@ -502,10 +502,9 @@ static PyObject *bpy_app_is_job_running( + }; + static const char *_keywords[] = {"job_type", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `job_type` */ ++ .format = "O&" /* `job_type` */ + ":is_job_running", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, pyrna_enum_value_parse_string, &job_type_enum)) +--- blender-3.6.1/source/blender/python/intern/bpy_app_icons.c.py312 2023-05-18 08:04:45.000000000 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_app_icons.c 2023-07-31 22:42:10.508344030 +0900 +@@ -41,12 +41,11 @@ static PyObject *bpy_app_icons_new_trian + + static const char *_keywords[] = {"range", "coords", "colors", NULL}; + static _PyArg_Parser _parser = { +- "(BB)" /* `range` */ ++ .format = "(BB)" /* `range` */ + "S" /* `coords` */ + "S" /* `colors` */ + ":new_triangles", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &coords_range[0], &coords_range[1], &py_coords, &py_colors)) +@@ -102,10 +101,9 @@ static PyObject *bpy_app_icons_new_trian + + static const char *_keywords[] = {"filename", NULL}; + static _PyArg_Parser _parser = { +- "s" /* `filename` */ ++ .format = "s" /* `filename` */ + ":new_triangles_from_file", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &filename)) { + return NULL; +@@ -129,10 +127,9 @@ static PyObject *bpy_app_icons_release(P + int icon_id; + static const char *_keywords[] = {"icon_id", NULL}; + static _PyArg_Parser _parser = { +- "i" /* `icon_id` */ ++ .format = "i" /* `icon_id` */ + ":release", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &icon_id)) { + return NULL; +--- blender-3.6.1/source/blender/python/intern/bpy_app_timers.c.py312 2023-07-31 22:34:10.616661304 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_app_timers.c 2023-07-31 22:59:24.192867336 +0900 +@@ -94,13 +94,12 @@ static PyObject *bpy_app_timers_register + + static const char *_keywords[] = {"function", "first_interval", "persistent", NULL}; + static _PyArg_Parser _parser = { +- "O" /* `function` */ ++ .format = "O" /* `function` */ + "|$" /* Optional keyword only arguments. */ + "d" /* `first_interval` */ + "p" /* `persistent` */ + ":register", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &function, &first_interval, &persistent)) { +--- blender-3.6.1/source/blender/python/intern/bpy_gizmo_wrap.c.py312 2023-07-31 22:34:10.617661304 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_gizmo_wrap.c 2023-07-31 22:59:34.377900630 +0900 +@@ -52,13 +52,12 @@ static bool bpy_gizmotype_target_propert + + static const char *const _keywords[] = {"id", "type", "array_length", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "s" /* `id` */ + "O&" /* `type` */ + "i" /* `array_length` */ + ":register_class", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(empty_tuple, + item, +--- blender-3.6.1/source/blender/python/intern/bpy_library_load.c.py312 2023-07-31 22:34:10.617661304 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_library_load.c 2023-07-31 23:01:07.290204352 +0900 +@@ -191,7 +191,7 @@ static PyObject *bpy_lib_load(BPy_Proper + NULL, + }; + static _PyArg_Parser _parser = { +- "s" /* `filepath` */ ++ .format = "s" /* `filepath` */ + /* Optional keyword only arguments. */ + "|$" + "O&" /* `link` */ +@@ -201,8 +201,7 @@ static PyObject *bpy_lib_load(BPy_Proper + "O&" /* `reuse_liboverrides` */ + "O&" /* `create_liboverrides_runtime` */ + ":load", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +--- blender-3.6.1/source/blender/python/intern/bpy_library_write.c.py312 2023-07-31 22:34:10.620661302 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_library_write.c 2023-07-31 23:01:17.683238325 +0900 +@@ -84,15 +84,14 @@ static PyObject *bpy_lib_write(BPy_Prope + NULL, + }; + static _PyArg_Parser _parser = { +- "s" /* `filepath` */ ++ .format = "s" /* `filepath` */ + "O!" /* `datablocks` */ + "|$" /* Optional keyword only arguments. */ + "O&" /* `path_remap` */ + "O&" /* `fake_user` */ + "O&" /* `compress` */ + ":write", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +--- blender-3.6.1/source/blender/python/intern/bpy_msgbus.c.py312 2023-07-31 22:34:10.620661302 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_msgbus.c 2023-07-31 23:03:48.453731192 +0900 +@@ -241,15 +241,14 @@ static PyObject *bpy_msgbus_subscribe_rn + NULL, + }; + static _PyArg_Parser _parser = { +- "O" /* `key` */ ++ .format = "O" /* `key` */ + "O" /* `owner` */ + "O!" /* `args` */ + "O" /* `notify` */ + "|$" /* Optional keyword only arguments. */ + "O!" /* `options` */ + ":subscribe_rna", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -342,10 +341,9 @@ static PyObject *bpy_msgbus_publish_rna( + NULL, + }; + static _PyArg_Parser _parser = { +- "O" /* `key` */ ++ .format = "O" /* `key` */ + ":publish_rna", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &py_sub)) { + return NULL; +--- blender-3.6.1/source/blender/python/intern/bpy_props.c.py312 2023-07-31 22:34:10.622661300 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_props.c 2023-07-31 23:05:40.195096474 +0900 +@@ -1579,11 +1579,10 @@ static bool bpy_prop_string_visit_fn_cal + NULL, + }; + static _PyArg_Parser _parser = { +- "s" /* `text` */ ++ .format = "s" /* `text` */ + "s" /* `info` */ + ":search", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(item, NULL, &_parser, &text, &info)) { + PyC_Err_PrintWithFunc(py_func); +@@ -2819,7 +2818,7 @@ static PyObject *BPy_BoolProperty(PyObje + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ + "s" /* `description` */ +@@ -2833,8 +2832,7 @@ static PyObject *BPy_BoolProperty(PyObje + "O" /* `get` */ + "O" /* `set` */ + ":BoolProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -2976,7 +2974,7 @@ static PyObject *BPy_BoolVectorProperty( + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ + "s" /* `description` */ +@@ -2991,8 +2989,7 @@ static PyObject *BPy_BoolVectorProperty( + "O" /* `get` */ + "O" /* `set` */ + ":BoolVectorProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -3166,7 +3163,7 @@ static PyObject *BPy_IntProperty(PyObjec + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ + "s" /* `description` */ +@@ -3185,8 +3182,7 @@ static PyObject *BPy_IntProperty(PyObjec + "O" /* `get` */ + "O" /* `set` */ + ":IntProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -3335,7 +3331,7 @@ static PyObject *BPy_IntVectorProperty(P + "get", "set", NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ + "s" /* `description` */ +@@ -3355,8 +3351,7 @@ static PyObject *BPy_IntVectorProperty(P + "O" /* `get` */ + "O" /* `set` */ + ":IntVectorProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -3533,7 +3528,7 @@ static PyObject *BPy_FloatProperty(PyObj + "update", "get", "set", NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ + "s" /* `description` */ +@@ -3554,8 +3549,7 @@ static PyObject *BPy_FloatProperty(PyObj + "O" /* `get` */ + "O" /* `set` */ + ":FloatProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -3717,7 +3711,7 @@ static PyObject *BPy_FloatVectorProperty + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ + "s" /* `description` */ +@@ -3739,8 +3733,7 @@ static PyObject *BPy_FloatVectorProperty + "O" /* `get` */ + "O" /* `set` */ + ":FloatVectorProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -3928,7 +3921,7 @@ static PyObject *BPy_StringProperty(PyOb + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ + "s" /* `description` */ +@@ -3945,8 +3938,7 @@ static PyObject *BPy_StringProperty(PyOb + "O" /* `search` */ + "O&" /* `search_options` */ + ":StringProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -4132,7 +4124,7 @@ static PyObject *BPy_EnumProperty(PyObje + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "O" /* `items` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ +@@ -4146,8 +4138,7 @@ static PyObject *BPy_EnumProperty(PyObje + "O" /* `get` */ + "O" /* `set` */ + ":EnumProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -4360,7 +4351,7 @@ PyObject *BPy_PointerProperty(PyObject * + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "O" /* `type` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ +@@ -4372,8 +4363,7 @@ PyObject *BPy_PointerProperty(PyObject * + "O" /* `poll` */ + "O" /* `update` */ + ":PointerProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -4503,7 +4493,7 @@ PyObject *BPy_CollectionProperty(PyObjec + NULL, + }; + static _PyArg_Parser _parser = { +- "O&" /* `attr` */ ++ .format = "O&" /* `attr` */ + "O" /* `type` */ + "|$" /* Optional, keyword only arguments. */ + "s" /* `name` */ +@@ -4513,8 +4503,7 @@ PyObject *BPy_CollectionProperty(PyObjec + "O&" /* `override` */ + "O&" /* `tags` */ + ":CollectionProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -4621,10 +4610,9 @@ static PyObject *BPy_RemoveProperty(PyOb + NULL, + }; + static _PyArg_Parser _parser = { +- "s" /* `attr` */ ++ .format = "s" /* `attr` */ + ":RemoveProperty", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &id)) { + return NULL; +--- blender-3.6.1/source/blender/python/intern/bpy_rna.c.py312 2023-07-31 22:34:10.624661299 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_rna.c 2023-07-31 23:06:05.478179124 +0900 +@@ -3622,12 +3622,11 @@ static PyObject *pyrna_struct_is_propert + + static const char *_keywords[] = {"", "ghost", NULL}; + static _PyArg_Parser _parser = { +- "s" /* `name` (positional). */ ++ .format = "s" /* `name` (positional). */ + "|$" /* Optional keyword only arguments. */ + "O&" /* `ghost` */ + ":is_property_set", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &name, PyC_ParseBool, &use_ghost)) { + return NULL; +--- blender-3.6.1/source/blender/python/intern/bpy_rna_context.c.py312 2023-07-31 22:34:10.624661299 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_rna_context.c 2023-07-31 23:06:16.302214508 +0900 +@@ -239,13 +239,12 @@ static PyObject *bpy_context_temp_overri + + static const char *const _keywords[] = {"window", "area", "region", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional, keyword only arguments. */ ++ .format = "|$" /* Optional, keyword only arguments. */ + "O&" /* `window` */ + "O&" /* `area` */ + "O&" /* `region` */ + ":temp_override", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + /* Parse known keywords, the remaining keywords are set using #CTX_py_state_push. */ + kwds = kwds ? PyDict_Copy(kwds) : PyDict_New(); +--- blender-3.6.1/source/blender/python/intern/bpy_rna_data.c.py312 2023-07-31 22:34:10.625661298 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_rna_data.c 2023-07-31 23:06:26.121246611 +0900 +@@ -130,11 +130,10 @@ static PyObject *bpy_rna_data_temp_data( + const char *filepath = NULL; + static const char *_keywords[] = {"filepath", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "z" /* `filepath` */ + ":temp_data", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kw, &_parser, &filepath)) { + return NULL; +--- blender-3.6.1/source/blender/python/intern/bpy_rna_gizmo.c.py312 2023-07-31 22:34:10.626661298 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_rna_gizmo.c 2023-07-31 23:07:04.923373455 +0900 +@@ -340,15 +340,14 @@ static PyObject *bpy_gizmo_target_set_ha + * (see: rna_wm_gizmo_api.c). conventions should match. */ + static const char *const _keywords[] = {"self", "target", "get", "set", "range", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `self` */ ++ .format = "O&" /* `self` */ + "O&" /* `target` */ + "|$" /* Optional keyword only arguments. */ + "O" /* `get` */ + "O" /* `set` */ + "O" /* `range` */ + ":target_set_handler", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -438,11 +437,10 @@ static PyObject *bpy_gizmo_target_get_va + + static const char *const _keywords[] = {"self", "target", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `self` */ ++ .format = "O&" /* `self` */ + "O&" /* `target` */ + ":target_get_value", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -503,12 +501,11 @@ static PyObject *bpy_gizmo_target_set_va + + static const char *const _keywords[] = {"self", "target", "value", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `self` */ ++ .format = "O&" /* `self` */ + "O&" /* `target` */ + "O" /* `value` */ + ":target_set_value", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +@@ -581,11 +578,10 @@ static PyObject *bpy_gizmo_target_get_ra + + static const char *const _keywords[] = {"self", "target", NULL}; + static _PyArg_Parser _parser = { +- "O&" /* `self` */ ++ .format = "O&" /* `self` */ + "O&" /* `target` */ + ":target_get_range", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, +--- blender-3.6.1/source/blender/python/intern/bpy_rna_id_collection.c.py312 2023-07-31 22:34:10.627661297 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_rna_id_collection.c 2023-07-31 23:07:35.212455793 +0900 +@@ -159,13 +159,12 @@ static PyObject *bpy_user_map(PyObject * + + static const char *_keywords[] = {"subset", "key_types", "value_types", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "O" /* `subset` */ + "O!" /* `key_types` */ + "O!" /* `value_types` */ + ":user_map", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, &subset, &PySet_Type, &key_types, &PySet_Type, &val_types)) +@@ -302,10 +301,9 @@ static PyObject *bpy_batch_remove(PyObje + + static const char *_keywords[] = {"ids", NULL}; + static _PyArg_Parser _parser = { +- "O" /* `ids` */ ++ .format = "O" /* `ids` */ + ":batch_remove", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, kwds, &_parser, &ids)) { + return ret; +@@ -380,13 +378,12 @@ static PyObject *bpy_orphans_purge(PyObj + + static const char *_keywords[] = {"do_local_ids", "do_linked_ids", "do_recursive", NULL}; + static _PyArg_Parser _parser = { +- "|" /* Optional arguments. */ ++ .format = "|" /* Optional arguments. */ + "O&" /* `do_local_ids` */ + "O&" /* `do_linked_ids` */ + "O&" /* `do_recursive` */ + ":orphans_purge", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +--- blender-3.6.1/source/blender/python/intern/bpy_rna_text.c.py312 2023-07-31 22:34:10.630661295 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_rna_text.c 2023-07-31 23:07:58.243491337 +0900 +@@ -64,11 +64,10 @@ static PyObject *bpy_rna_region_as_strin + + static const char *_keywords[] = {"range", NULL}; + static _PyArg_Parser _parser = { +- "|$" /* Optional keyword only arguments. */ ++ .format = "|$" /* Optional keyword only arguments. */ + "((ii)(ii))" /* `range` */ + ":region_as_string", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kwds, &_parser, ®ion.curl, ®ion.curc, ®ion.sell, ®ion.selc)) +@@ -122,12 +121,11 @@ static PyObject *bpy_rna_region_from_str + + static const char *_keywords[] = {"", "range", NULL}; + static _PyArg_Parser _parser = { +- "s#" /* `buf` (positional). */ ++ .format = "s#" /* `buf` (positional). */ + "|$" /* Optional keyword only arguments. */ + "((ii)(ii))" /* `range` */ + ":region_from_string", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kwds, +--- blender-3.6.1/source/blender/python/intern/bpy_utils_units.c.py312 2023-07-31 22:34:10.631661294 +0900 ++++ blender-3.6.1/source/blender/python/intern/bpy_utils_units.c 2023-07-31 23:08:18.178522102 +0900 +@@ -176,14 +176,13 @@ static PyObject *bpyunits_to_value(PyObj + NULL, + }; + static _PyArg_Parser _parser = { +- "s" /* `unit_system` */ ++ .format = "s" /* `unit_system` */ + "s" /* `unit_category` */ + "s#" /* `str_input` */ + "|$" /* Optional keyword only arguments. */ + "z" /* `str_ref_unit` */ + ":to_value", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast( + args, kw, &_parser, &usys_str, &ucat_str, &inpt, &str_len, &uref)) +@@ -263,7 +262,7 @@ static PyObject *bpyunits_to_string(PyOb + NULL, + }; + static _PyArg_Parser _parser = { +- "s" /* `unit_system` */ ++ .format = "s" /* `unit_system` */ + "s" /* `unit_category` */ + "d" /* `value` */ + "|$" /* Optional keyword only arguments. */ +@@ -271,8 +270,7 @@ static PyObject *bpyunits_to_string(PyOb + "O&" /* `split_unit` */ + "O&" /* `compatible_unit` */ + ":to_string", +- _keywords, +- 0, ++ .keywords = _keywords, + }; + if (!_PyArg_ParseTupleAndKeywordsFast(args, + kw, diff --git a/srcpkgs/blender/patches/python3.12-pylongobject.patch b/srcpkgs/blender/patches/python3.12-pylongobject.patch new file mode 100644 index 00000000000..460a1ccfbce --- /dev/null +++ b/srcpkgs/blender/patches/python3.12-pylongobject.patch @@ -0,0 +1,134 @@ +https://src.fedoraproject.org/rpms/blender/raw/7045717eb5477c40905f6d29dfd3dbf5ed674e4d/f/blender-3.6.1-py312-pylongobject.patch + +--- blender-3.6.1/source/blender/freestyle/intern/python/BPy_IntegrationType.cpp.pyorig 2023-05-18 08:04:44.000000000 +0900 ++++ blender-3.6.1/source/blender/freestyle/intern/python/BPy_IntegrationType.cpp 2023-08-01 16:30:13.609640614 +0900 +@@ -186,6 +186,7 @@ PyTypeObject IntegrationType_Type = { + + /*-----------------------BPy_IntegrationType instance definitions -------------------------*/ + ++#if PY_VERSION_HEX < 0x030c0000 /* older than Python 3.12 */ + static PyLongObject _IntegrationType_MEAN = { + PyVarObject_HEAD_INIT(&IntegrationType_Type, 1){MEAN}}; + static PyLongObject _IntegrationType_MIN = {PyVarObject_HEAD_INIT(&IntegrationType_Type, 1){MIN}}; +@@ -194,6 +195,26 @@ static PyLongObject _IntegrationType_FIR + PyVarObject_HEAD_INIT(&IntegrationType_Type, 1){FIRST}}; + static PyLongObject _IntegrationType_LAST = { + PyVarObject_HEAD_INIT(&IntegrationType_Type, 1){LAST}}; ++#else ++#define NON_SIZE_BITS 3 ++#define TAG_FROM_SIGN_AND_SIZE(sign, size) ((1 - (sign)) | ((size) << NON_SIZE_BITS)) ++#define _Py_IntegrationTypeType_DIGIT_INIT(val) \ ++ { \ ++ .ob_base = PyObject_HEAD_INIT(&IntegrationType_Type) \ ++ .long_value = { \ ++ .lv_tag = TAG_FROM_SIGN_AND_SIZE( \ ++ (val) == 0 ? 0 : ((val) < 0 ? -1 : 1), \ ++ (val) == 0 ? 0 : 1), \ ++ { ((val) >= 0 ? (val) : -(val)) }, \ ++ } \ ++ } ++ ++static PyLongObject _IntegrationType_MEAN = _Py_IntegrationTypeType_DIGIT_INIT(MEAN); ++static PyLongObject _IntegrationType_MIN = _Py_IntegrationTypeType_DIGIT_INIT(MIN); ++static PyLongObject _IntegrationType_MAX = _Py_IntegrationTypeType_DIGIT_INIT(MAX); ++static PyLongObject _IntegrationType_FIRST = _Py_IntegrationTypeType_DIGIT_INIT(FIRST); ++static PyLongObject _IntegrationType_LAST = _Py_IntegrationTypeType_DIGIT_INIT(LAST); ++#endif + + #define BPy_IntegrationType_MEAN ((PyObject *)&_IntegrationType_MEAN) + #define BPy_IntegrationType_MIN ((PyObject *)&_IntegrationType_MIN) +--- blender-3.6.1/source/blender/freestyle/intern/python/BPy_MediumType.cpp.pyorig 2023-05-18 08:04:44.000000000 +0900 ++++ blender-3.6.1/source/blender/freestyle/intern/python/BPy_MediumType.cpp 2023-08-01 16:30:18.875628797 +0900 +@@ -71,6 +71,7 @@ PyTypeObject MediumType_Type = { + + /*-----------------------BPy_IntegrationType instance definitions -------------------------*/ + ++#if PY_VERSION_HEX < 0x030c0000 /* older than Python 3.12 */ + PyLongObject _BPy_MediumType_DRY_MEDIUM = { + PyVarObject_HEAD_INIT(&MediumType_Type, 1){Stroke::DRY_MEDIUM}, + }; +@@ -80,6 +81,24 @@ PyLongObject _BPy_MediumType_HUMID_MEDIU + PyLongObject _BPy_MediumType_OPAQUE_MEDIUM = { + PyVarObject_HEAD_INIT(&MediumType_Type, 1){Stroke::OPAQUE_MEDIUM}, + }; ++#else ++#define NON_SIZE_BITS 3 ++#define TAG_FROM_SIGN_AND_SIZE(sign, size) ((1 - (sign)) | ((size) << NON_SIZE_BITS)) ++#define _Py_MediumType_DIGIT_INIT(val) \ ++ { \ ++ .ob_base = PyObject_HEAD_INIT(&MediumType_Type) \ ++ .long_value = { \ ++ .lv_tag = TAG_FROM_SIGN_AND_SIZE( \ ++ (val) == 0 ? 0 : ((val) < 0 ? -1 : 1), \ ++ (val) == 0 ? 0 : 1), \ ++ { ((val) >= 0 ? (val) : -(val)) }, \ ++ } \ ++ } ++ ++PyLongObject _BPy_MediumType_DRY_MEDIUM = _Py_MediumType_DIGIT_INIT(Stroke::DRY_MEDIUM); ++PyLongObject _BPy_MediumType_HUMID_MEDIUM = _Py_MediumType_DIGIT_INIT(Stroke::HUMID_MEDIUM); ++PyLongObject _BPy_MediumType_OPAQUE_MEDIUM = _Py_MediumType_DIGIT_INIT(Stroke::OPAQUE_MEDIUM); ++#endif + + //-------------------MODULE INITIALIZATION-------------------------------- + +--- blender-3.6.1/source/blender/freestyle/intern/python/BPy_Nature.cpp.pyorig 2023-05-18 08:04:44.000000000 +0900 ++++ blender-3.6.1/source/blender/freestyle/intern/python/BPy_Nature.cpp 2023-08-01 16:49:31.446042329 +0900 +@@ -135,6 +135,7 @@ PyTypeObject Nature_Type = { + + /*-----------------------BPy_Nature instance definitions ----------------------------------*/ + ++#if PY_VERSION_HEX < 0x030c0000 /* older than Python 3.12 */ + static PyLongObject _Nature_POINT = {PyVarObject_HEAD_INIT(&Nature_Type, 0){Nature::POINT}}; + static PyLongObject _Nature_S_VERTEX = {PyVarObject_HEAD_INIT(&Nature_Type, 1){Nature::S_VERTEX}}; + static PyLongObject _Nature_VIEW_VERTEX = { +@@ -157,6 +158,36 @@ static PyLongObject _Nature_MATERIAL_BOU + PyVarObject_HEAD_INIT(&Nature_Type, 1){Nature::MATERIAL_BOUNDARY}}; + static PyLongObject _Nature_EDGE_MARK = { + PyVarObject_HEAD_INIT(&Nature_Type, 1){Nature::EDGE_MARK}}; ++#else ++#define NON_SIZE_BITS 3 ++#define TAG_FROM_SIGN_AND_SIZE(sign, size) ((1 - (sign)) | ((size) << NON_SIZE_BITS)) ++#define _Py_Nature_TypeType_DIGIT_INIT(val) \ ++ { \ ++ .ob_base = PyObject_HEAD_INIT(&Nature_Type) \ ++ .long_value = { \ ++ .lv_tag = TAG_FROM_SIGN_AND_SIZE( \ ++ (val) == 0 ? 0 : ((val) < 0 ? -1 : 1), \ ++ (val) == 0 ? 0 : 1), \ ++ { ((val) >= 0 ? (val) : -(val)) }, \ ++ } \ ++ } ++ ++static PyLongObject _Nature_POINT = _Py_Nature_TypeType_DIGIT_INIT(Nature::POINT); ++static PyLongObject _Nature_S_VERTEX = _Py_Nature_TypeType_DIGIT_INIT(Nature::S_VERTEX); ++static PyLongObject _Nature_VIEW_VERTEX = _Py_Nature_TypeType_DIGIT_INIT(Nature::VIEW_VERTEX); ++static PyLongObject _Nature_NON_T_VERTEX = _Py_Nature_TypeType_DIGIT_INIT(Nature::NON_T_VERTEX); ++static PyLongObject _Nature_T_VERTEX = _Py_Nature_TypeType_DIGIT_INIT(Nature::T_VERTEX); ++static PyLongObject _Nature_CUSP = _Py_Nature_TypeType_DIGIT_INIT(Nature::CUSP); ++static PyLongObject _Nature_NO_FEATURE = _Py_Nature_TypeType_DIGIT_INIT(Nature::NO_FEATURE); ++static PyLongObject _Nature_SILHOUETTE = _Py_Nature_TypeType_DIGIT_INIT(Nature::SILHOUETTE); ++static PyLongObject _Nature_BORDER = _Py_Nature_TypeType_DIGIT_INIT(Nature::BORDER); ++static PyLongObject _Nature_CREASE = _Py_Nature_TypeType_DIGIT_INIT(Nature::CREASE); ++static PyLongObject _Nature_RIDGE = _Py_Nature_TypeType_DIGIT_INIT(Nature::RIDGE); ++static PyLongObject _Nature_VALLEY = _Py_Nature_TypeType_DIGIT_INIT(Nature::VALLEY); ++static PyLongObject _Nature_SUGGESTIVE_CONTOUR = _Py_Nature_TypeType_DIGIT_INIT(Nature::SUGGESTIVE_CONTOUR); ++static PyLongObject _Nature_MATERIAL_BOUNDARY = _Py_Nature_TypeType_DIGIT_INIT(Nature::MATERIAL_BOUNDARY); ++static PyLongObject _Nature_EDGE_MARK = _Py_Nature_TypeType_DIGIT_INIT(Nature::EDGE_MARK); ++#endif + + #define BPy_Nature_POINT ((PyObject *)&_Nature_POINT) + #define BPy_Nature_S_VERTEX ((PyObject *)&_Nature_S_VERTEX) +@@ -247,7 +278,12 @@ static PyObject *BPy_Nature_bitwise(PyOb + else { + result = PyObject_NewVar(BPy_Nature, &Nature_Type, 1); + if (result) { ++#if PY_VERSION_HEX >= 0x030c0000 /* Python 3.12 and newer */ ++ result->i.long_value.lv_tag = TAG_FROM_SIGN_AND_SIZE((v > 0 ? 1 : -1), 1); ++ result->i.long_value.ob_digit[0] = v; ++#else + result->i.ob_digit[0] = v; ++#endif + } + } + return (PyObject *)result;