diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2023-10-25 09:19:08 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-10-26 14:24:12 +0000 |
commit | 6abde77c3df60ccac25089660df5797de7f6e68c (patch) | |
tree | 80a8d722c2436fc5dd1c125a96c57f797ab98732 | |
parent | 97b3ce60039390a052e9f229e2f61a4c75c8e4bc (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.cpp | 19 |
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) |