aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2023-10-25 09:19:08 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2023-10-26 14:24:12 +0000
commit6abde77c3df60ccac25089660df5797de7f6e68c (patch)
tree80a8d722c2436fc5dd1c125a96c57f797ab98732
parent97b3ce60039390a052e9f229e2f61a4c75c8e4bc (diff)
shiboken6: Improve API extractor command line arguments parsing
Prevent empty include paths being added, throwing off the clang arguments parsing. Split lists discarding empty bits. Put the header file last. Amends 95314e809969bf38714a7b63651ce877621618d8. Task-number: PYSIDE-2505 Change-Id: If9949b4279729a0ba548dc57edb9c726668f5eca Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> (cherry picked from commit 9205a48848c881c67130e7b96e3ad98aa870052e) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r--sources/shiboken6/ApiExtractor/apiextractor.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/sources/shiboken6/ApiExtractor/apiextractor.cpp b/sources/shiboken6/ApiExtractor/apiextractor.cpp
index 7b8ddf340..cf1b59b88 100644
--- a/sources/shiboken6/ApiExtractor/apiextractor.cpp
+++ b/sources/shiboken6/ApiExtractor/apiextractor.cpp
@@ -103,6 +103,8 @@ private:
void ApiExtractorOptionsParser::parseIncludePathOption(const QString &value,
HeaderType headerType)
{
+ if (value.isEmpty())
+ throw Exception(u"Empty value passed to include path option"_s);
const auto path = QFile::encodeName(QDir::cleanPath(value));
m_options->m_includePaths.append(HeaderPath{path, headerType});
}
@@ -174,19 +176,22 @@ bool ApiExtractorOptionsParser::handleOption(const QString &key, const QString &
return true;
}
if (key == u"clang-options") {
- m_options->m_clangOptions.append(value.split(u','));
+ m_options->m_clangOptions.append(value.split(u',', Qt::SkipEmptyParts));
return true;
}
if (key == u"include-paths") {
- parseIncludePathOption(value.split(QDir::listSeparator()), HeaderType::Standard);
+ parseIncludePathOption(value.split(QDir::listSeparator(), Qt::SkipEmptyParts),
+ HeaderType::Standard);
return true;
}
if (key == u"framework-include-paths") {
- parseIncludePathOption(value.split(QDir::listSeparator()), HeaderType::Framework);
+ parseIncludePathOption(value.split(QDir::listSeparator(), Qt::SkipEmptyParts),
+ HeaderType::Framework);
return true;
}
if (key == u"system-include-paths") {
- parseIncludePathOption(value.split(QDir::listSeparator()), HeaderType::System);
+ parseIncludePathOption(value.split(QDir::listSeparator(), Qt::SkipEmptyParts),
+ HeaderType::System);
return true;
}
if (key == u"language-level") {
@@ -376,16 +381,16 @@ bool ApiExtractorPrivate::runHelper(ApiExtractorFlags flags)
for (const HeaderPath &headerPath : std::as_const(m_includePaths))
arguments.append(HeaderPath::includeOption(headerPath));
+ if (flags.testFlag(ApiExtractorFlag::UsePySideExtensions))
+ addPySideExtensions(&arguments);
arguments.append(QFile::encodeName(preprocessedCppFileName));
+
if (ReportHandler::isDebug(ReportHandler::SparseDebug)) {
qCInfo(lcShiboken).noquote().nospace()
<< "clang language level: " << int(m_languageLevel)
<< "\nclang arguments: " << arguments;
}
- if (flags.testFlag(ApiExtractorFlag::UsePySideExtensions))
- addPySideExtensions(&arguments);
-
const bool result = m_builder->build(arguments, flags, addCompilerSupportArguments,
m_languageLevel);
if (!result)