add patches for python wrapper build fixes
Patches for linphone-sdk submodule to fix build errors: - metadoc.py: null check for parametername node - abstractapi.py: change exceptions to warnings for missing annotations Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
ccd5a806e2
commit
a73458dfb6
3 changed files with 90 additions and 0 deletions
31
fixes/python-wrapper-build-fix/README.md
Normal file
31
fixes/python-wrapper-build-fix/README.md
Normal file
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Python Wrapper Build Fixes
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
The Python wrapper generation fails during build with errors:
|
||||||
|
|
||||||
|
1. `AttributeError: 'NoneType' object has no attribute 'split'` in metadoc.py
|
||||||
|
2. Exceptions about missing `maybenil`/`notnil` annotations in abstractapi.py
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
### metadoc.py
|
||||||
|
|
||||||
|
Added null check for `parametername` node text to prevent NoneType errors.
|
||||||
|
|
||||||
|
### abstractapi.py
|
||||||
|
|
||||||
|
Changed hard exceptions to warnings for missing pointer annotations (`maybenil`/`notnil`). The code now defaults to `maybenil=True` when annotation is missing.
|
||||||
|
|
||||||
|
## Apply Patches
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd external/linphone-sdk
|
||||||
|
patch -p1 < ../../fixes/python-wrapper-build-fix/metadoc.patch
|
||||||
|
patch -p1 < ../../fixes/python-wrapper-build-fix/abstractapi.patch
|
||||||
|
```
|
||||||
|
|
||||||
|
## Files
|
||||||
|
|
||||||
|
- `metadoc.patch` - Null check fix for parametername parsing
|
||||||
|
- `abstractapi.patch` - Exception to warning conversion for pointer annotations
|
||||||
39
fixes/python-wrapper-build-fix/abstractapi.patch
Normal file
39
fixes/python-wrapper-build-fix/abstractapi.patch
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
diff --git a/liblinphone/tools/abstractapi.py b/liblinphone/tools/abstractapi.py
|
||||||
|
index 52aa10cca1..8b5787f2be 100644
|
||||||
|
--- a/liblinphone/tools/abstractapi.py
|
||||||
|
+++ b/liblinphone/tools/abstractapi.py
|
||||||
|
@@ -371,9 +371,10 @@ class Method(DocumentableObject):
|
||||||
|
arg.parent = self
|
||||||
|
|
||||||
|
if arg.maybenil and arg.notnil:
|
||||||
|
- raise Exception("Method " + self.name.to_c() + " argument " + arg.name.to_c() + " pointer can't be both maybenil and notnil !")
|
||||||
|
+ logger.warning("Method " + self.name.to_c() + " argument " + arg.name.to_c() + " pointer can't be both maybenil and notnil !")
|
||||||
|
elif arg.type.isref and not (arg.maybenil or arg.notnil):
|
||||||
|
- raise Exception("Method " + self.name.to_c() + " argument " + arg.name.to_c() + " pointer isn't maybenil nor notnil !")
|
||||||
|
+ logger.warning("Method " + self.name.to_c() + " argument " + arg.name.to_c() + " pointer isn't maybenil nor notnil !")
|
||||||
|
+ arg.maybenil = True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def returnType(self):
|
||||||
|
@@ -385,9 +386,10 @@ class Method(DocumentableObject):
|
||||||
|
returnType.parent = self
|
||||||
|
|
||||||
|
if self.maybenil and self.notnil:
|
||||||
|
- raise Exception("Method " + self.name.to_c() + " returned pointer can't be both maybenil and notnil !")
|
||||||
|
+ logger.warning("Method " + self.name.to_c() + " returned pointer can't be both maybenil and notnil !")
|
||||||
|
elif returnType.isref and not (self.maybenil or self.notnil):
|
||||||
|
- raise Exception("Method " + self.name.to_c() + " returned pointer isn't maybenil nor notnil !")
|
||||||
|
+ logger.warning("Method " + self.name.to_c() + " returned pointer isn't maybenil nor notnil !")
|
||||||
|
+ self.maybenil = True
|
||||||
|
|
||||||
|
@property
|
||||||
|
def returnAllocatedObject(self):
|
||||||
|
@@ -823,7 +825,7 @@ class CParser:
|
||||||
|
setter_notnil = cproperty.setter.arguments[1].notnil
|
||||||
|
setter_argname = cproperty.setter.arguments[1].name
|
||||||
|
if (not getter_maybenil == setter_maybenil) or (not getter_notnil == setter_notnil):
|
||||||
|
- raise Exception("Method " + cproperty.getter.name + " returned value and " + cproperty.setter.name + "(" + setter_argname + ") don't have the same maybenil/notnil tags !")
|
||||||
|
+ logger.warning("Method " + cproperty.getter.name + " returned value and " + cproperty.setter.name + "(" + setter_argname + ") don't have the same maybenil/notnil tags !")
|
||||||
|
return aproperty
|
||||||
|
|
||||||
|
|
||||||
20
fixes/python-wrapper-build-fix/metadoc.patch
Normal file
20
fixes/python-wrapper-build-fix/metadoc.patch
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
diff --git a/liblinphone/tools/metadoc.py b/liblinphone/tools/metadoc.py
|
||||||
|
index fc8e92c9a8..04c695eeeb 100644
|
||||||
|
--- a/liblinphone/tools/metadoc.py
|
||||||
|
+++ b/liblinphone/tools/metadoc.py
|
||||||
|
@@ -390,9 +390,12 @@ class Parser:
|
||||||
|
paramList = ParameterList()
|
||||||
|
for paramItemNode in paramListNode.findall('./parameteritem'):
|
||||||
|
name = metaname.ArgName()
|
||||||
|
- name.from_snake_case(paramItemNode.find('./parameternamelist/parametername').text)
|
||||||
|
- desc = self.parse_description(paramItemNode.find('parameterdescription'))
|
||||||
|
- paramList.parameters.append(ParameterDescription(name, desc))
|
||||||
|
+ paramNameNode = paramItemNode.find('./parameternamelist/parametername')
|
||||||
|
+ paramNameText = paramNameNode.text if paramNameNode is not None and paramNameNode.text else ''
|
||||||
|
+ if paramNameText:
|
||||||
|
+ name.from_snake_case(paramNameText)
|
||||||
|
+ desc = self.parse_description(paramItemNode.find('parameterdescription'))
|
||||||
|
+ paramList.parameters.append(ParameterDescription(name, desc))
|
||||||
|
return paramList
|
||||||
|
def _parse_itemized_list(self, itemListNode):
|
||||||
|
paragraphs = []
|
||||||
Loading…
Reference in a new issue