Uh oh!
There was an error while loading. Please reload this page.
Qt header discovery & framework support; vendor simplecpp update - #302
Conversation
jcfr
commented
Sep 18, 2025
@jamesobutler Now this has been proposed upstream, we will be able to contribute |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
jcfr
commented
Sep 18, 2025
@mrbean-bremen Thanks for the review 🙏 I will revisit and update shortly 🚀 |
…a4f49b (bfc53ad); was master (37fa4f4) Upstream: commontk/simplecpp@bfc53ad Source date: 2025-08-30 Files: generator/simplecpp/simplecpp.h, generator/simplecpp/simplecpp.cpp Patch: generator/simplecpp/do_not_stop_on_error.patch re-applied Compare: commontk/simplecpp@37fa4f4...bfc53ad
4c7ea5a to
9a945d4Compare- Prefer `QLibraryInfo::{HeadersPath}` to locate Qt headers; fall back to
`$QTDIR/include` when `QLibraryInfo` is unavailable or invalid.
- Accept include roots from `PYTHONQT_INCLUDE` and `--include-paths`; warn
and skip non-existent paths; normalize with `QDir::cleanPath`.
- Probe module subdirs under the Qt include root and append those that
exist (QtCore, QtGui, QtNetwork, QtOpenGL, QtXml).
- Use `DUI::addIncludePath(...)` instead of pushing to `includePaths`.
- Minor cleanups: Use QStringLiteral, add helpers for path joining/dir checks.
Remove hardcoded macOS `/Library/Frameworks` header paths from the QTDIR-missing
branch anticipating the addition of `getFrameworkDirectories` function.9a945d4 to
b330ba7Compare… PYTHONQT_FRAMEWORK
Add `getFrameworkDirectories` to collect framework/library search roots from:
- `.` (cwd),
- `PYTHONQT_FRAMEWORK` (path-list, validated),
- `--framework-paths` CLI arg (validated),
- `${QTDIR}/lib/<Module>` when present, plus `${QTDIR}/lib`.
Co-authored-by: Hans Johnson <hans-johnson@uiowa.edu>- Extend Qt version discovery to accept framework roots (e.g., .../QtCore.framework) in addition to include dirs. - On macOS, also probe `Versions/A/Headers/qtcoreversion.h`. - Try include paths first, then framework paths; abort with a clear error if neither yields a version. Co-authored-by: Hans Johnson <hans-johnson@uiowa.edu>
This improves header file detection on macOS by introducing support for additional common paths where `qtcoreversion.h` might be located. This change enhances compatibility with different Qt installations.
9689614 to
dd42ec8Comparejcfr
commented
Sep 19, 2025
@mrbean-bremen This now ready for final review & integration 🙏 🚀 |
mrbean-bremen
left a comment
There was a problem hiding this comment.
Very nice - thank you!
| // Prefer QLibraryInfo (works without QTDIR) | ||
| QString qtInclude = QLibraryInfo::location(QLibraryInfo::HeadersPath); | ||
| if (!isDir(qtInclude)) { | ||
| // Fallback to QTDIR/include | ||
| const QString qtDir = qEnvironmentVariable("QTDIR"); |
There was a problem hiding this comment.
I dislike a little bit the fact that now we can't generate the bindings for a different Qt version than the version with which the generator was built. Sure, this is a little bit of a corner case, but I know that I have used this at some time during development.
Could we get another override mechanism for the Qt include directory?
There was a problem hiding this comment.
Very sensible point. This is an oversight & I will revisit.
There was a problem hiding this comment.
I dislike a little bit the fact that now we can't generate the bindings for a different Qt version than the version with which the generator was built. Sure, this is a little bit of a corner case, but I know that I have used this at some time during development.
For future reference, this has been addressed in #313
This PR modernizes how the generator discovers Qt headers/frameworks and vendors a newer
simplecppwith framework-aware search logic. Together these changes make builds robust on macOS (Qt frameworks) and cleaner across all platforms.Vendor
simplecppupdateBumps
generator/simplecpp/{simplecpp.h, simplecpp.cpp}to patched-2025-08-30-37fa4f49b (upstream: commontk/simplecpp@bfc53ad; previously cppcheck-opensource/simplecpp@37fa4f4).Re-applies local patch:
generator/simplecpp/do_not_stop_on_error.patch.Introduces a typed, ordered search path API:
DUI::PathKind { Include, SystemInclude, Framework, SystemFramework }DUI::searchPathsplus helpersaddIncludePath,addSystemIncludePath,addFrameworkPath,addSystemFrameworkPathsearchPathsis empty, legacyincludePathsis mirrored asInclude.Adds Apple framework resolution for
#include <Pkg/Hdr.h>→<Pkg.framework/Headers/Hdr.h>(andPrivateHeadersfallback).Interleaves
-Iand-Fin the original CLI order; handles-isystemand-iframework.Upstream compare:commontk/simplecpp@37fa4f4...bfc53ad
Note
This changes are vendored from the
commontk/simplecppfork including commit backported from:-I,-isystem,-F,-iframework+ Darwin framework support (with legacy-Iback-compat) cppcheck-opensource/simplecpp#511Generator: discover Qt headers via
QLibraryInfoPrefers
QLibraryInfo::HeadersPath; falls back to$QTDIR/includeif needed.Accepts include roots from:
PYTHONQT_INCLUDE(path list; validated)--include-paths(validated)Probes and appends existing module subdirs under the Qt include root:
QtCore,QtGui,QtNetwork,QtOpenGL,QtXml.Starts using
DUI::addIncludePath(...)instead of pushing to the legacyincludePaths.Removes hardcoded macOS
/Library/Frameworks/.../Headersassumptions (to defer to new framework discovery).Generator: discover Qt framework paths dynamically (macOS)
New
getFrameworkDirectories(...)collects framework/library search roots from:.(cwd)PYTHONQT_FRAMEWORK(validated)--framework-paths(validated)${QTDIR}/lib/<Module>.frameworkwhen present, plus${QTDIR}/libQLibraryInfo::LibrariesPathwhen availablePasses these paths to the preprocessor using
DUI::addFrameworkPath(...).Generator: detect Qt version from frameworks on macOS
getQtVersion(...)now accepts either header include directories or framework roots.Versions/A/Headers/qtcoreversion.hwhen given a framework root (e.g.,.../QtCore.framework).This pull request supersedes the following ones:
This pull request fixes the following issues: