On 7/10/25 16:59, Christian Kandeler via Qbs wrote:
On 7/10/25 1:16 PM, Richard Weickelt wrote:
> Qbs flattens nested and merges referenced project items during the evaluation process.

That's news to me ;)


Well, my wording might have been not exact and misleading, sorry, but yet Qbs manipulates project items which effectively results in a flattened structure of property values in project items. It's not the way my wording may have suggested, but much more complicated. I am referring to the calls to copyProperties() in ProductsCollector, especially this one: https://code.qt.io/cgit/qbs/qbs.git/tree/src/lib/corelib/loader/productscollector.cpp#n441 which implements inheritance of project properties.

Qbs physically copies properties from outer project items into inner project items and from upper project items into sub project items before evaluation. The problem Jochen describes happens because Qbs copies mySetting from SupportProject into MyApp.

In SupportProject "parent" resolves to TestProject.
In MyApp "parent" resolves to SupportProject where we copy the value from.

To fix the relationship, one could change line https://code.qt.io/cgit/qbs/qbs.git/tree/src/lib/corelib/loader/productscollector.cpp#n451 to

    Item::addChild(projectItem->parent()->parent(), loadedItem);

probably with some additional checking (projectItem->parent() may not have a parent). projectItem is the SubProject item and projectItem->parent() is SupportProject where we copy the properties from, so projectItem->parent()->parent() is the intended parent (TestProject). But whether that is the right thing to do, I leave up to Christian.

Cheers
Richard
_______________________________________________
Qbs mailing list
Qbs@qt-project.org
https://lists.qt-project.org/listinfo/qbs

Reply via email to