Fix SIP build errors by using /NoTypeName/

The typedef is only present in the .sip file, but without this
annotation SIP assumes it also exists in QGIS headers. This didn't
completely break the build, since we concatenate multiple SIP headers
into larger files, so the typedefs from one part "fixed" another. Run
sip-build without --concatenate to see the issue clearly.

This fix is currently sadly not fully effective due to a SIP bug:
https://github.com/Python-SIP/sip/issues/66
This commit is contained in:
David Koňařík 2025-01-02 16:23:22 +01:00 committed by Martin Dobias
parent b49f5ccd38
commit 4d86676c35
13 changed files with 50 additions and 48 deletions

View File

@ -13,7 +13,7 @@
typedef QgsOptional<QgsExpression> QgsOptionalQgsExpressionBase;
typedef QgsOptional<QgsExpression> QgsOptionalQgsExpressionBase /NoTypeName/;
class QgsOptionalExpression : QgsOptionalQgsExpressionBase
{

View File

@ -141,7 +141,7 @@ Returns ``True`` if this range overlaps another range.
typedef QgsRange<double> QgsRangedoubleBase;
typedef QgsRange<double> QgsRangedoubleBase /NoTypeName/;
class QgsDoubleRange : QgsRangedoubleBase
{
@ -210,7 +210,7 @@ Returns ``True`` if the range consists of all possible values.
typedef QgsRange<int> QgsRangeintBase;
typedef QgsRange<int> QgsRangeintBase /NoTypeName/;
class QgsIntRange : QgsRangeintBase
{

View File

@ -9,7 +9,7 @@
typedef QgsSettingsEntryBaseTemplate<QVariant> QgsSettingsEntryBaseTemplateQVariantBase;
typedef QgsSettingsEntryBaseTemplate<QVariant> QgsSettingsEntryBaseTemplateQVariantBase /NoTypeName/;
class QgsSettingsEntryVariant : QgsSettingsEntryBaseTemplateQVariantBase
{
@ -110,7 +110,7 @@ Returns settings value.
};
typedef QgsSettingsEntryBaseTemplate<QString> QgsSettingsEntryBaseTemplateQStringBase;
typedef QgsSettingsEntryBaseTemplate<QString> QgsSettingsEntryBaseTemplateQStringBase /NoTypeName/;
class QgsSettingsEntryString : QgsSettingsEntryBaseTemplateQStringBase
{
@ -211,7 +211,7 @@ Returns the string maximum length. By -1 there is no limitation.
typedef QgsSettingsEntryBaseTemplate<QStringList> QgsSettingsEntryBaseTemplateQStringListBase;
typedef QgsSettingsEntryBaseTemplate<QStringList> QgsSettingsEntryBaseTemplateQStringListBase /NoTypeName/;
class QgsSettingsEntryStringList : QgsSettingsEntryBaseTemplateQStringListBase
{
@ -289,7 +289,7 @@ This constructor is intended to be used from plugins.
typedef QgsSettingsEntryBaseTemplate<bool> QgsSettingsEntryBaseTemplateboolBase;
typedef QgsSettingsEntryBaseTemplate<bool> QgsSettingsEntryBaseTemplateboolBase /NoTypeName/;
class QgsSettingsEntryBool : QgsSettingsEntryBaseTemplateboolBase
{
@ -367,7 +367,7 @@ This constructor is intended to be used from plugins.
typedef QgsSettingsEntryBaseTemplate<int> QgsSettingsEntryBaseTemplateintBase;
typedef QgsSettingsEntryBaseTemplate<int> QgsSettingsEntryBaseTemplateintBase /NoTypeName/;
class QgsSettingsEntryInteger : QgsSettingsEntryBaseTemplateintBase
{
@ -470,7 +470,7 @@ Returns the maximum value.
typedef QgsSettingsEntryBaseTemplate<double> QgsSettingsEntryBaseTemplatedoubleBase;
typedef QgsSettingsEntryBaseTemplate<double> QgsSettingsEntryBaseTemplatedoubleBase /NoTypeName/;
class QgsSettingsEntryDouble : QgsSettingsEntryBaseTemplatedoubleBase
{
@ -595,7 +595,7 @@ Returns how much decimals should be shown in the Gui.
typedef QgsSettingsEntryBaseTemplate<QColor> QgsSettingsEntryBaseTemplateQColorBase;
typedef QgsSettingsEntryBaseTemplate<QColor> QgsSettingsEntryBaseTemplateQColorBase /NoTypeName/;
class QgsSettingsEntryColor : QgsSettingsEntryBaseTemplateQColorBase
{
@ -689,7 +689,7 @@ Returns ``True`` if transparency is allowed for the color
};
typedef QgsSettingsEntryBaseTemplate<QVariantMap> QgsSettingsEntryBaseTemplateQVariantMapBase;
typedef QgsSettingsEntryBaseTemplate<QVariantMap> QgsSettingsEntryBaseTemplateQVariantMapBase /NoTypeName/;
class QgsSettingsEntryVariantMap : QgsSettingsEntryBaseTemplateQVariantMapBase
{

View File

@ -75,7 +75,7 @@ Returns the layer id of the source layer.
};
typedef QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource> QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase;
typedef QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource> QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase /NoTypeName/;
class QgsVectorLayerFeatureIterator : QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase
{

View File

@ -76,7 +76,7 @@ To be re-implemented to implemeent type specific configuration (e.g. opacity for
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QLineEdit,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQLineEditQStringBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QLineEdit,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQLineEditQStringBase /NoTypeName/;
class QgsSettingsStringLineEditWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQLineEditQStringBase
{
@ -122,7 +122,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QComboBox,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQComboBoxQStringBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QComboBox,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQComboBoxQStringBase /NoTypeName/;
class QgsSettingsStringComboBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQComboBoxQStringBase
{
@ -179,7 +179,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool,QCheckBox,bool> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryBoolQCheckBoxboolBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool,QCheckBox,bool> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryBoolQCheckBoxboolBase /NoTypeName/;
class QgsSettingsBoolCheckBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryBoolQCheckBoxboolBase
{
@ -223,7 +223,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
};
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryInteger,QSpinBox,int> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryIntegerQSpinBoxintBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryInteger,QSpinBox,int> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryIntegerQSpinBoxintBase /NoTypeName/;
class QgsSettingsIntegerSpinBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryIntegerQSpinBoxintBase
{
@ -268,7 +268,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryDouble,QDoubleSpinBox,double> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryDoubleQDoubleSpinBoxdoubleBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryDouble,QDoubleSpinBox,double> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryDoubleQDoubleSpinBoxdoubleBase /NoTypeName/;
class QgsSettingsDoubleSpinBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryDoubleQDoubleSpinBoxdoubleBase
{
@ -313,7 +313,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryColor,QgsColorButton,QColor> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryColorQgsColorButtonQColorBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryColor,QgsColorButton,QColor> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryColorQgsColorButtonQColorBase /NoTypeName/;
class QgsSettingsColorButtonWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryColorQgsColorButtonQColorBase
{

View File

@ -13,7 +13,7 @@
typedef QgsOptional<QgsExpression> QgsOptionalQgsExpressionBase;
typedef QgsOptional<QgsExpression> QgsOptionalQgsExpressionBase /NoTypeName/;
class QgsOptionalExpression : QgsOptionalQgsExpressionBase
{

View File

@ -141,7 +141,7 @@ Returns ``True`` if this range overlaps another range.
typedef QgsRange<double> QgsRangedoubleBase;
typedef QgsRange<double> QgsRangedoubleBase /NoTypeName/;
class QgsDoubleRange : QgsRangedoubleBase
{
@ -210,7 +210,7 @@ Returns ``True`` if the range consists of all possible values.
typedef QgsRange<int> QgsRangeintBase;
typedef QgsRange<int> QgsRangeintBase /NoTypeName/;
class QgsIntRange : QgsRangeintBase
{

View File

@ -9,7 +9,7 @@
typedef QgsSettingsEntryBaseTemplate<QVariant> QgsSettingsEntryBaseTemplateQVariantBase;
typedef QgsSettingsEntryBaseTemplate<QVariant> QgsSettingsEntryBaseTemplateQVariantBase /NoTypeName/;
class QgsSettingsEntryVariant : QgsSettingsEntryBaseTemplateQVariantBase
{
@ -110,7 +110,7 @@ Returns settings value.
};
typedef QgsSettingsEntryBaseTemplate<QString> QgsSettingsEntryBaseTemplateQStringBase;
typedef QgsSettingsEntryBaseTemplate<QString> QgsSettingsEntryBaseTemplateQStringBase /NoTypeName/;
class QgsSettingsEntryString : QgsSettingsEntryBaseTemplateQStringBase
{
@ -211,7 +211,7 @@ Returns the string maximum length. By -1 there is no limitation.
typedef QgsSettingsEntryBaseTemplate<QStringList> QgsSettingsEntryBaseTemplateQStringListBase;
typedef QgsSettingsEntryBaseTemplate<QStringList> QgsSettingsEntryBaseTemplateQStringListBase /NoTypeName/;
class QgsSettingsEntryStringList : QgsSettingsEntryBaseTemplateQStringListBase
{
@ -289,7 +289,7 @@ This constructor is intended to be used from plugins.
typedef QgsSettingsEntryBaseTemplate<bool> QgsSettingsEntryBaseTemplateboolBase;
typedef QgsSettingsEntryBaseTemplate<bool> QgsSettingsEntryBaseTemplateboolBase /NoTypeName/;
class QgsSettingsEntryBool : QgsSettingsEntryBaseTemplateboolBase
{
@ -367,7 +367,7 @@ This constructor is intended to be used from plugins.
typedef QgsSettingsEntryBaseTemplate<int> QgsSettingsEntryBaseTemplateintBase;
typedef QgsSettingsEntryBaseTemplate<int> QgsSettingsEntryBaseTemplateintBase /NoTypeName/;
class QgsSettingsEntryInteger : QgsSettingsEntryBaseTemplateintBase
{
@ -470,7 +470,7 @@ Returns the maximum value.
typedef QgsSettingsEntryBaseTemplate<double> QgsSettingsEntryBaseTemplatedoubleBase;
typedef QgsSettingsEntryBaseTemplate<double> QgsSettingsEntryBaseTemplatedoubleBase /NoTypeName/;
class QgsSettingsEntryDouble : QgsSettingsEntryBaseTemplatedoubleBase
{
@ -595,7 +595,7 @@ Returns how much decimals should be shown in the Gui.
typedef QgsSettingsEntryBaseTemplate<QColor> QgsSettingsEntryBaseTemplateQColorBase;
typedef QgsSettingsEntryBaseTemplate<QColor> QgsSettingsEntryBaseTemplateQColorBase /NoTypeName/;
class QgsSettingsEntryColor : QgsSettingsEntryBaseTemplateQColorBase
{
@ -689,7 +689,7 @@ Returns ``True`` if transparency is allowed for the color
};
typedef QgsSettingsEntryBaseTemplate<QVariantMap> QgsSettingsEntryBaseTemplateQVariantMapBase;
typedef QgsSettingsEntryBaseTemplate<QVariantMap> QgsSettingsEntryBaseTemplateQVariantMapBase /NoTypeName/;
class QgsSettingsEntryVariantMap : QgsSettingsEntryBaseTemplateQVariantMapBase
{

View File

@ -75,7 +75,7 @@ Returns the layer id of the source layer.
};
typedef QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource> QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase;
typedef QgsAbstractFeatureIteratorFromSource<QgsVectorLayerFeatureSource> QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase /NoTypeName/;
class QgsVectorLayerFeatureIterator : QgsAbstractFeatureIteratorFromSourceQgsVectorLayerFeatureSourceBase
{

View File

@ -76,7 +76,7 @@ To be re-implemented to implemeent type specific configuration (e.g. opacity for
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QLineEdit,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQLineEditQStringBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QLineEdit,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQLineEditQStringBase /NoTypeName/;
class QgsSettingsStringLineEditWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQLineEditQStringBase
{
@ -122,7 +122,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QComboBox,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQComboBoxQStringBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryString,QComboBox,QString> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQComboBoxQStringBase /NoTypeName/;
class QgsSettingsStringComboBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryStringQComboBoxQStringBase
{
@ -179,7 +179,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool,QCheckBox,bool> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryBoolQCheckBoxboolBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryBool,QCheckBox,bool> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryBoolQCheckBoxboolBase /NoTypeName/;
class QgsSettingsBoolCheckBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryBoolQCheckBoxboolBase
{
@ -223,7 +223,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
};
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryInteger,QSpinBox,int> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryIntegerQSpinBoxintBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryInteger,QSpinBox,int> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryIntegerQSpinBoxintBase /NoTypeName/;
class QgsSettingsIntegerSpinBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryIntegerQSpinBoxintBase
{
@ -268,7 +268,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryDouble,QDoubleSpinBox,double> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryDoubleQDoubleSpinBoxdoubleBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryDouble,QDoubleSpinBox,double> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryDoubleQDoubleSpinBoxdoubleBase /NoTypeName/;
class QgsSettingsDoubleSpinBoxWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryDoubleQDoubleSpinBoxdoubleBase
{
@ -313,7 +313,7 @@ Constructor of the wrapper for a given ``setting`` and its widget ``editor``
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryColor,QgsColorButton,QColor> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryColorQgsColorButtonQColorBase;
typedef QgsSettingsEditorWidgetWrapperTemplate<QgsSettingsEntryColor,QgsColorButton,QColor> QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryColorQgsColorButtonQColorBase /NoTypeName/;
class QgsSettingsColorButtonWrapper : QgsSettingsEditorWidgetWrapperTemplateQgsSettingsEntryColorQgsColorButtonQColorBase
{

View File

@ -1884,7 +1884,8 @@ while CONTEXT.line_idx < CONTEXT.line_count:
f'\n%TypeHeaderCode\n#include "{os.path.basename(CONTEXT.header_file)}"'
)
# for template based inheritance, add a typedef to define the base type
# for template based inheritance, add a typedef to define the base type,
# since SIP doesn't allow inheriting from template classes directly
while template_inheritance_template:
tpl = template_inheritance_template.pop()
cls1 = template_inheritance_class1.pop()
@ -1892,11 +1893,12 @@ while CONTEXT.line_idx < CONTEXT.line_count:
cls3 = template_inheritance_class3.pop()
if cls2 == "":
CONTEXT.current_line = f"\ntypedef {tpl}<{cls1}> {tpl}{cls1}Base;\n\n{CONTEXT.current_line}"
# We use /NoTypeName/ to say that this typedef is not present in actual QGIS headers
CONTEXT.current_line = f"\ntypedef {tpl}<{cls1}> {tpl}{cls1}Base /NoTypeName/;\n\n{CONTEXT.current_line}"
elif cls3 == "":
CONTEXT.current_line = f"\ntypedef {tpl}<{cls1},{cls2}> {tpl}{cls1}{cls2}Base;\n\n{CONTEXT.current_line}"
CONTEXT.current_line = f"\ntypedef {tpl}<{cls1},{cls2}> {tpl}{cls1}{cls2}Base /NoTypeName/;\n\n{CONTEXT.current_line}"
else:
CONTEXT.current_line = f"\ntypedef {tpl}<{cls1},{cls2},{cls3}> {tpl}{cls1}{cls2}{cls3}Base;\n\n{CONTEXT.current_line}"
CONTEXT.current_line = f"\ntypedef {tpl}<{cls1},{cls2},{cls3}> {tpl}{cls1}{cls2}{cls3}Base /NoTypeName/;\n\n{CONTEXT.current_line}"
if tpl not in CONTEXT.declared_classes:
tpl_header = f"{tpl.lower()}.h"

View File

@ -56,7 +56,7 @@ typedef QVector<QVariant> QgsSuperClass;
}
typedef QtClass<QVariant> QtClassQVariantBase;
typedef QtClass<QVariant> QtClassQVariantBase /NoTypeName/;
class QgsSipifyHeader : QtClassQVariantBase
{
@ -406,7 +406,7 @@ QFlags<QgsSipifyHeader::MyEnum> operator|(QgsSipifyHeader::MyEnum f1, QFlags<Qgs
typedef QgsTemplate<Something> QgsTemplateSomethingBase;
typedef QgsTemplate<Something> QgsTemplateSomethingBase /NoTypeName/;
class TemplateInheritance1 : QgsTemplateSomethingBase
{
@ -425,7 +425,7 @@ class TemplateInheritance2
%End
}
typedef QgsTemplate<Something> QgsTemplateSomethingBase;
typedef QgsTemplate<Something> QgsTemplateSomethingBase /NoTypeName/;
class TemplateInheritance3 : QgsTemplateSomethingBase, SomethingElse
{
@ -451,7 +451,7 @@ class TemplateInheritance5 : SomethingElse
%End
}
typedef YourSuperTemplate<Abc,Def,Ghi> YourSuperTemplateAbcDefGhiBase;
typedef YourSuperTemplate<Abc,Def,Ghi> YourSuperTemplateAbcDefGhiBase /NoTypeName/;
class TemplateInheritance6 : SomethingElse, YourSuperTemplateAbcDefGhiBase
{

View File

@ -56,7 +56,7 @@ typedef QVector<QVariant> QgsSuperClass;
}
typedef QtClass<QVariant> QtClassQVariantBase;
typedef QtClass<QVariant> QtClassQVariantBase /NoTypeName/;
class QgsSipifyHeader : QtClassQVariantBase
{
@ -406,7 +406,7 @@ QFlags<QgsSipifyHeader::MyEnum> operator|(QgsSipifyHeader::MyEnum f1, QFlags<Qgs
typedef QgsTemplate<Something> QgsTemplateSomethingBase;
typedef QgsTemplate<Something> QgsTemplateSomethingBase /NoTypeName/;
class TemplateInheritance1 : QgsTemplateSomethingBase
{
@ -425,7 +425,7 @@ class TemplateInheritance2
%End
}
typedef QgsTemplate<Something> QgsTemplateSomethingBase;
typedef QgsTemplate<Something> QgsTemplateSomethingBase /NoTypeName/;
class TemplateInheritance3 : QgsTemplateSomethingBase, SomethingElse
{
@ -451,7 +451,7 @@ class TemplateInheritance5 : SomethingElse
%End
}
typedef YourSuperTemplate<Abc,Def,Ghi> YourSuperTemplateAbcDefGhiBase;
typedef YourSuperTemplate<Abc,Def,Ghi> YourSuperTemplateAbcDefGhiBase /NoTypeName/;
class TemplateInheritance6 : SomethingElse, YourSuperTemplateAbcDefGhiBase
{