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