Issues with abi-complience-checker
Sandro Knauß
sknauss at kde.org
Wed Dec 12 21:39:23 GMT 2018
Hey,
I now looked at every repository that failed to build successfully a ABI dump
for Pim. Most of them build successful, but a few of them have issues:
- kmime has an unexported header in kmime/kmime_newsarticle.h:
#include <supertrait.h> that lives in src/supertrait.h
- akonadi-search is unhappy that xapian.h is not imported as first file.
- kitinerary has an unexported header in KPim/kitinerary/airportdb.h:
#include "timezonedb.h" that lives in src/knowledgedb/timezonedb.h
- PimCommonAkonadi adds
$<TARGET_PROPERTY:KF5::IMAP,INTERFACE_INCLUDE_DIRECTORIES>
to target_include_directories, but KF5::IMAP is a private dependency. Can we
remove this?
- kdepim-apps-libs: FollowupReminder adds
$<TARGET_PROPERTY:KF5::AkonadiCore,INTERFACE_INCLUDE_DIRECTORIES>
to target_include_directories. But both files in src/libfollowupreminder/src/*h
don't use relative links to AkonadiCore. Can we remove this?
How this ABI checker tool works. As input the tool uses the output made while
installing the package.
- It scans this output for installs of ".*Config.cmake$" files
- runs cmake in trace-expand mode for "find_package({name} CONFIG REQUIRED)"
- scans this cmake output for
- PACKAGE_VERSION -> this is the library version
- IMPORTED_SONAME_DEBUG, -> to get the soversion
- IMPORTED_LOCATION_DEBUG -> the the path of the lib
- INTERFACE_INCLUDE_DIRECTORIES -> all needed include directories
- each exported header file is tried to be compiled and symbols are
extracted.
The source code of this script you find in sysadmin/ci-tooling/helpers/
create-abi-dump.py
For more information look at T3689.
hefee
-------------- next part --------------
Temporary header file '/tmp/9I6RsnM92s/dump1.h' with the following content will be compiled to create GCC translation unit dump:
// add includes
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Debug/search_debug_export.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/search_pim_export.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/search_xapian_export.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Debug/akonadisearchdebugdialog.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Debug/akonadisearchdebugsearchpathcombobox.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/xapiandatabase.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/xapiandocument.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/xapianqueryparser.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/xapiansearchstore.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/xapiantermgenerator.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/collectionquery.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/contactcompleter.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/contactquery.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/emailquery.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/indexeditems.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/notequery.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/query.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/PIM/resultiterator.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Core/search_core_export.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Core/query.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Core/resultiterator.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Core/searchstore.h"
#include "/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Core/term.h"
// add namespaces
namespace Akonadi{typedef int tmp_add_type_1;}
Akonadi::tmp_add_type_1 tmp_add_func_1(){return 0;};
namespace Akonadi{namespace Internal{typedef int tmp_add_type_2;}}
Akonadi::Internal::tmp_add_type_2 tmp_add_func_2(){return 0;};
namespace Akonadi{namespace Search{typedef int tmp_add_type_3;}}
Akonadi::Search::tmp_add_type_3 tmp_add_func_3(){return 0;};
namespace Akonadi{namespace Search{namespace PIM{typedef int tmp_add_type_4;}}}
Akonadi::Search::PIM::tmp_add_type_4 tmp_add_func_4(){return 0;};
namespace boost{typedef int tmp_add_type_5;}
boost::tmp_add_type_5 tmp_add_func_5(){return 0;};
namespace boost{namespace core{typedef int tmp_add_type_6;}}
boost::core::tmp_add_type_6 tmp_add_func_6(){return 0;};
namespace boost{namespace detail{typedef int tmp_add_type_7;}}
boost::detail::tmp_add_type_7 tmp_add_func_7(){return 0;};
namespace Qt{typedef int tmp_add_type_8;}
Qt::tmp_add_type_8 tmp_add_func_8(){return 0;};
namespace QtMetaTypePrivate{typedef int tmp_add_type_9;}
QtMetaTypePrivate::tmp_add_type_9 tmp_add_func_9(){return 0;};
namespace QtPrivate{typedef int tmp_add_type_10;}
QtPrivate::tmp_add_type_10 tmp_add_func_10(){return 0;};
namespace QtPrivate{namespace SwapExceptionTester{typedef int tmp_add_type_11;}}
QtPrivate::SwapExceptionTester::tmp_add_type_11 tmp_add_func_11(){return 0;};
namespace QtSharedPointer{typedef int tmp_add_type_12;}
QtSharedPointer::tmp_add_type_12 tmp_add_func_12(){return 0;};
namespace Xapian{typedef int tmp_add_type_13;}
Xapian::tmp_add_type_13 tmp_add_func_13(){return 0;};
namespace Xapian{namespace Internal{typedef int tmp_add_type_14;}}
Xapian::Internal::tmp_add_type_14 tmp_add_func_14(){return 0;};
namespace boost{namespace exception_detail{typedef int tmp_add_type_15;}}
boost::exception_detail::tmp_add_type_15 tmp_add_func_15(){return 0;};
// add classes
KCompositeJob* tmp_add_class_0;
KJob* tmp_add_class_1;
QAbstractItemDelegate* tmp_add_class_2;
QAbstractItemModel* tmp_add_class_3;
QAbstractListModel* tmp_add_class_4;
QAbstractSlider* tmp_add_class_5;
QAbstractSpinBox* tmp_add_class_6;
QAbstractTableModel* tmp_add_class_7;
QActionEvent* tmp_add_class_8;
QApplicationStateChangeEvent* tmp_add_class_9;
QArrayData* tmp_add_class_10;
QAssociativeIterable* tmp_add_class_11;
QAtomicInt* tmp_add_class_12;
QBasicMutex* tmp_add_class_13;
QBrush* tmp_add_class_14;
QBrushData* tmp_add_class_15;
QByteArrayDataPtr* tmp_add_class_16;
QByteRef* tmp_add_class_17;
QChar* tmp_add_class_18;
QCharRef* tmp_add_class_19;
QChildEvent* tmp_add_class_20;
QCloseEvent* tmp_add_class_21;
QColor* tmp_add_class_22;
QComboBox* tmp_add_class_23;
QConicalGradient* tmp_add_class_24;
QContextMenuEvent* tmp_add_class_25;
QContiguousCacheData* tmp_add_class_26;
QCursor* tmp_add_class_27;
QDebugStateSaver* tmp_add_class_28;
QDeferredDeleteEvent* tmp_add_class_29;
QDialog* tmp_add_class_30;
QDoubleValidator* tmp_add_class_31;
QDragEnterEvent* tmp_add_class_32;
QDragLeaveEvent* tmp_add_class_33;
QDragMoveEvent* tmp_add_class_34;
QDropEvent* tmp_add_class_35;
QDynamicPropertyChangeEvent* tmp_add_class_36;
QEnterEvent* tmp_add_class_37;
QEvent* tmp_add_class_38;
QExposeEvent* tmp_add_class_39;
QFile* tmp_add_class_40;
QFileDevice* tmp_add_class_41;
QFileOpenEvent* tmp_add_class_42;
QFlag* tmp_add_class_43;
QFocusEvent* tmp_add_class_44;
QFont* tmp_add_class_45;
QFontInfo* tmp_add_class_46;
QFontMetrics* tmp_add_class_47;
QFontMetricsF* tmp_add_class_48;
QFrame* tmp_add_class_49;
QGenericArgument* tmp_add_class_50;
QGenericReturnArgument* tmp_add_class_51;
QGradient* tmp_add_class_52;
QHashData* tmp_add_class_53;
QHashDummyValue* tmp_add_class_54;
QHelpEvent* tmp_add_class_55;
QHideEvent* tmp_add_class_56;
QHoverEvent* tmp_add_class_57;
QIODevice* tmp_add_class_58;
QIcon* tmp_add_class_59;
QIconDragEvent* tmp_add_class_60;
QImage* tmp_add_class_61;
QIncompatibleFlag* tmp_add_class_62;
QInputEvent* tmp_add_class_63;
QInputMethodEvent* tmp_add_class_64;
QInputMethodQueryEvent* tmp_add_class_65;
QIntValidator* tmp_add_class_66;
QInternal* tmp_add_class_67;
QKeyEvent* tmp_add_class_68;
QKeySequence* tmp_add_class_69;
QLatin1Char* tmp_add_class_70;
QLatin1String* tmp_add_class_71;
QLine* tmp_add_class_72;
QLineF* tmp_add_class_73;
QLinearGradient* tmp_add_class_74;
QListData* tmp_add_class_75;
QLocale* tmp_add_class_76;
QMapDataBase* tmp_add_class_77;
QMapNodeBase* tmp_add_class_78;
QMargins* tmp_add_class_79;
QMarginsF* tmp_add_class_80;
QMatrix* tmp_add_class_81;
QMessageLogContext* tmp_add_class_82;
QMetaObject* tmp_add_class_83;
QMetaType* tmp_add_class_84;
QModelIndex* tmp_add_class_85;
QMouseEvent* tmp_add_class_86;
QMoveEvent* tmp_add_class_87;
QMutex* tmp_add_class_88;
QMutexLocker* tmp_add_class_89;
QNativeGestureEvent* tmp_add_class_90;
QObject* tmp_add_class_91;
QObjectData* tmp_add_class_92;
QObjectUserData* tmp_add_class_93;
QPaintDevice* tmp_add_class_94;
QPaintEvent* tmp_add_class_95;
QPainterPath* tmp_add_class_96;
QPainterPathStroker* tmp_add_class_97;
QPalette* tmp_add_class_98;
QPersistentModelIndex* tmp_add_class_99;
QPixelFormat* tmp_add_class_100;
QPixmap* tmp_add_class_101;
QPlatformSurfaceEvent* tmp_add_class_102;
QPoint* tmp_add_class_103;
QPointF* tmp_add_class_104;
QPointingDeviceUniqueId* tmp_add_class_105;
QPolygon* tmp_add_class_106;
QPolygonF* tmp_add_class_107;
QRadialGradient* tmp_add_class_108;
QRect* tmp_add_class_109;
QRectF* tmp_add_class_110;
QRegExp* tmp_add_class_111;
QRegExpValidator* tmp_add_class_112;
QRegion* tmp_add_class_113;
QRegularExpression* tmp_add_class_114;
QRegularExpressionMatch* tmp_add_class_115;
QRegularExpressionMatchIterator* tmp_add_class_116;
QRegularExpressionValidator* tmp_add_class_117;
QResizeEvent* tmp_add_class_118;
QRgba64* tmp_add_class_119;
QRubberBand* tmp_add_class_120;
QScopedPointerPodDeleter* tmp_add_class_121;
QScreenOrientationChangeEvent* tmp_add_class_122;
QScrollEvent* tmp_add_class_123;
QScrollPrepareEvent* tmp_add_class_124;
QSequentialIterable* tmp_add_class_125;
QSharedData* tmp_add_class_126;
QShortcutEvent* tmp_add_class_127;
QShowEvent* tmp_add_class_128;
QSignalBlocker* tmp_add_class_129;
QSize* tmp_add_class_130;
QSizeF* tmp_add_class_131;
QSizePolicy* tmp_add_class_132;
QSlider* tmp_add_class_133;
QStatusTipEvent* tmp_add_class_134;
QStringDataPtr* tmp_add_class_135;
QStringList* tmp_add_class_136;
QStringMatcher* tmp_add_class_137;
QStringRef* tmp_add_class_138;
QStringView* tmp_add_class_139;
QStyle* tmp_add_class_140;
QStyleHintReturn* tmp_add_class_141;
QStyleHintReturnMask* tmp_add_class_142;
QStyleHintReturnVariant* tmp_add_class_143;
QStyleOption* tmp_add_class_144;
QStyleOptionButton* tmp_add_class_145;
QStyleOptionComboBox* tmp_add_class_146;
QStyleOptionComplex* tmp_add_class_147;
QStyleOptionDockWidget* tmp_add_class_148;
QStyleOptionFocusRect* tmp_add_class_149;
QStyleOptionFrame* tmp_add_class_150;
QStyleOptionGraphicsItem* tmp_add_class_151;
QStyleOptionGroupBox* tmp_add_class_152;
QStyleOptionHeader* tmp_add_class_153;
QStyleOptionMenuItem* tmp_add_class_154;
QStyleOptionProgressBar* tmp_add_class_155;
QStyleOptionRubberBand* tmp_add_class_156;
QStyleOptionSizeGrip* tmp_add_class_157;
QStyleOptionSlider* tmp_add_class_158;
QStyleOptionSpinBox* tmp_add_class_159;
QStyleOptionTab* tmp_add_class_160;
QStyleOptionTabBarBase* tmp_add_class_161;
QStyleOptionTabWidgetFrame* tmp_add_class_162;
QStyleOptionTitleBar* tmp_add_class_163;
QStyleOptionToolBar* tmp_add_class_164;
QStyleOptionToolBox* tmp_add_class_165;
QStyleOptionToolButton* tmp_add_class_166;
QStyleOptionViewItem* tmp_add_class_167;
QSysInfo* tmp_add_class_168;
QTabBar* tmp_add_class_169;
QTabWidget* tmp_add_class_170;
QTabletEvent* tmp_add_class_171;
QTextStream* tmp_add_class_172;
QTextStreamManipulator* tmp_add_class_173;
QTimerEvent* tmp_add_class_174;
QToolBarChangeEvent* tmp_add_class_175;
QTouchDevice* tmp_add_class_176;
QTouchEvent* tmp_add_class_177;
QTransform* tmp_add_class_178;
QUrl* tmp_add_class_179;
QValidator* tmp_add_class_180;
QVariant* tmp_add_class_181;
QVariantComparisonHelper* tmp_add_class_182;
QVector2D* tmp_add_class_183;
QWhatsThisClickedEvent* tmp_add_class_184;
QWheelEvent* tmp_add_class_185;
QWidget* tmp_add_class_186;
QWidgetData* tmp_add_class_187;
QWindowStateChangeEvent* tmp_add_class_188;
The GCC parameters:
gcc -fdump-lang-raw -fkeep-inline-functions -c -x c++ -fpermissive -w -std=c++11 -fPIC "/tmp/9I6RsnM92s/dump1.h" -I/mnt/suse-qt510/akonadi-search/install/include/KF5 -I/usr/lib64/qt5/mkspecs/linux-g\+\+ -I/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Core -I/usr/include/qt5 -I/usr/include/qt5/QtWidgets -I/usr/include/qt5/QtGui -I/usr/include/qt5/QtCore -I/usr/include/pgsql/server -I/usr/include/pgsql/server/utils -I/mnt/suse-qt510/akonadi-search/install/include/KF5/plasma -I/mnt/suse-qt510/akonadi-search/install/include/KF5/KCoreAddons -I/mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiCore
In file included from /mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/xapiandatabase.h:23,
from /tmp/9I6RsnM92s/dump1.h:8:
/usr/include/xapian.h:31:4: error: #error "Include <xapian.h> before Qt headers, or put 'CONFIG += no_keywords' in your .pro file and use Q_SLOTS instead of slots, etc"
# error "Include <xapian.h> before Qt headers, or put 'CONFIG += no_keywords' in your .pro file and use Q_SLOTS instead of slots, etc"
^~~~~
In file included from /usr/include/xapian.h:76,
from /mnt/suse-qt510/akonadi-search/install/include/KF5/AkonadiSearch/Xapian/xapiandatabase.h:23,
from /tmp/9I6RsnM92s/dump1.h:8:
/usr/include/xapian/keymaker.h:114:10: error: a template-id may not appear in a using-declaration
std::vector<KeySpec> slots;
^~~~~~~~~~~~~~~
/usr/include/xapian/keymaker.h: In member function ‘void Xapian::MultiValueKeyMaker::add_value(Xapian::valueno, bool, const string&)’:
/usr/include/xapian/keymaker.h:145:7: error: expected primary-expression before ‘.’ token
slots.push_back(KeySpec(slot, reverse, defvalue));
^
More information about the kde-pim
mailing list