aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sources/pyside2/tests/pysidetest/pysidetest_global.h1
-rw-r--r--sources/shiboken2/ApiExtractor/apiextractor.cpp19
-rw-r--r--sources/shiboken2/ApiExtractor/apiextractor.h2
-rw-r--r--sources/shiboken2/generator/main.cpp5
-rw-r--r--sources/shiboken2/generator/shiboken2/shibokengenerator.h5
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.