diff options
-rw-r--r-- | sources/pyside2/tests/pysidetest/pysidetest_global.h | 1 | ||||
-rw-r--r-- | sources/shiboken2/ApiExtractor/apiextractor.cpp | 19 | ||||
-rw-r--r-- | sources/shiboken2/ApiExtractor/apiextractor.h | 2 | ||||
-rw-r--r-- | sources/shiboken2/generator/main.cpp | 5 | ||||
-rw-r--r-- | sources/shiboken2/generator/shiboken2/shibokengenerator.h | 5 |
5 files changed, 26 insertions, 6 deletions
diff --git a/sources/pyside2/tests/pysidetest/pysidetest_global.h b/sources/pyside2/tests/pysidetest/pysidetest_global.h index 6cc8570f0..f65662cb5 100644 --- a/sources/pyside2/tests/pysidetest/pysidetest_global.h +++ b/sources/pyside2/tests/pysidetest/pysidetest_global.h @@ -30,7 +30,6 @@ #define PYSIDETEST_GLOBAL_H // PySide global.h file -#include "pyside2_global.h" #include "testobject.h" #include "testview.h" #include "hiddenobject.h" diff --git a/sources/shiboken2/ApiExtractor/apiextractor.cpp b/sources/shiboken2/ApiExtractor/apiextractor.cpp index 3fdd613ae..aa552cdd3 100644 --- a/sources/shiboken2/ApiExtractor/apiextractor.cpp +++ b/sources/shiboken2/ApiExtractor/apiextractor.cpp @@ -172,7 +172,20 @@ int ApiExtractor::classCount() const return m_builder->classes().count(); } -bool ApiExtractor::run() +// Add defines required for parsing Qt code headers +static void addPySideExtensions(QByteArrayList *a) +{ + // Make "signals:", "slots:" visible as access specifiers + a->append(QByteArrayLiteral("-DQT_ANNOTATE_ACCESS_SPECIFIER(a)=__attribute__((annotate(#a)))")); + + // Q_PROPERTY is defined as class annotation which does not work since a + // sequence of properties will to expand to a sequence of annotations + // annotating nothing, causing clang to complain. Instead, define it away in a + // static assert with the stringified argument in a ','-operator (cf qdoc). + a->append(QByteArrayLiteral("-DQT_ANNOTATE_CLASS(type,...)=static_assert(sizeof(#__VA_ARGS__),#type);")); +} + +bool ApiExtractor::run(bool usePySideExtensions) { if (m_builder) return false; @@ -215,6 +228,10 @@ bool ApiExtractor::run() << "clang language level: " << int(m_languageLevel) << "\nclang arguments: " << arguments; } + + if (usePySideExtensions) + addPySideExtensions(&arguments); + const bool result = m_builder->build(arguments, m_languageLevel); if (!result) autoRemove = false; diff --git a/sources/shiboken2/ApiExtractor/apiextractor.h b/sources/shiboken2/ApiExtractor/apiextractor.h index b0c2c696f..9c79ae7a5 100644 --- a/sources/shiboken2/ApiExtractor/apiextractor.h +++ b/sources/shiboken2/ApiExtractor/apiextractor.h @@ -93,7 +93,7 @@ public: int classCount() const; - bool run(); + bool run(bool usePySideExtensions); private: QString m_typeSystemFileName; QFileInfoList m_cppFileNames; diff --git a/sources/shiboken2/generator/main.cpp b/sources/shiboken2/generator/main.cpp index 3c9d13b48..8d819c763 100644 --- a/sources/shiboken2/generator/main.cpp +++ b/sources/shiboken2/generator/main.cpp @@ -612,7 +612,10 @@ int main(int argc, char *argv[]) extractor.setCppFileNames(cppFileNames); extractor.setTypeSystem(typeSystemFileName); - if (!extractor.run()) { + auto shibokenGenerator = dynamic_cast<const ShibokenGenerator *>(generators.constFirst().data()); + const bool usePySideExtensions = shibokenGenerator && shibokenGenerator->usePySideExtensions(); + + if (!extractor.run(usePySideExtensions)) { errorPrint(QLatin1String("Error running ApiExtractor.")); return EXIT_FAILURE; } diff --git a/sources/shiboken2/generator/shiboken2/shibokengenerator.h b/sources/shiboken2/generator/shiboken2/shibokengenerator.h index 33da01a3a..6d36026cd 100644 --- a/sources/shiboken2/generator/shiboken2/shibokengenerator.h +++ b/sources/shiboken2/generator/shiboken2/shibokengenerator.h @@ -90,6 +90,9 @@ public: /// Returns a list of all ancestor classes for the given class. AbstractMetaClassList getAllAncestors(const AbstractMetaClass *metaClass) const; + /// Returns true if the user enabled PySide extensions. + bool usePySideExtensions() const; + protected: bool doSetup() override; @@ -377,8 +380,6 @@ protected: bool useCtorHeuristic() const; /// Returns true if the user enabled the so called "return value heuristic". bool useReturnValueHeuristic() const; - /// Returns true if the user enabled PySide extensions. - bool usePySideExtensions() const; /// Returns true if the generator should use the result of isNull()const to compute boolean casts. bool useIsNullAsNbNonZero() const; /// Returns true if the generated code should use the "#define protected public" hack. |