On Mon, 2 Jul 2018 15:42:43 +0200
<[email protected]> wrote:
> I remember seeing something about this but I wanted to know if this is a WAD
> or bug. Consider:
>
> //imports/MyProduct.qbs
> Product {
> Depends { name: "cpp" }
> cpp.defines: ["MY_DEF"]
> }
>
> //SomeProject.qbs
> MyProduct {
> cpp.defines: ["ANOTHER_DEF"]
> }
>
> What will be the value of `cpp.defines`? To me quite unexpectedly only
> "ANOTHER_DEF".
Yes, that's right. I suppose the rationale was that explicitly removing stuff
is more complicated, so overwrite is the default. Whether that was the correct
decision is debatable; there is something to be said for auto-inheriting.
Similarly for properties set in groups vs the value in the surrounding product.
> In order to have both values I would need to do this:
>
> MyProduct {
> Properties {
> condition: true
> cpp.defines: [String(outer), "ANOTHER_DEF"]
Good lord, no:
MyProduct {
cpp.defines: base.concat("ANOTHER_DEF")
}
See https://doc.qt.io/qbs/qml-qbslanguageitems-module.html#base
> That is pretty weird to me. First of all the fact that unlike elsewhere (e.g.
> from a Module) inherited properties are overriden.
Actually, property assignments in modules are the *only* ones that accumulate.
In particular, inheritance never accumulates, anywhere.
> But even more the fact that "outer" is neither list/array nor string. It
> needs to be explicitely converted to String to satisfy some kind of condition
> that forces all cpp.defines to be of type String even if they are actually
> convertible to it.
The behavior is entirely correct. cpp.defines is of type string list, so trying
to put it into a string list is incorrect, as the resulting type would be a
list of list of strings. It does not matter that the value is convertible to
string -- almost everything is in JavaScript. Such automatic conversions are
exactly what the type system is supposed to prevent. See also
https://codereview.qt-project.org/#/c/169577/.
(You would use outer.concat() instead, but see above for the real solution
here.)
Christian
_______________________________________________
Qbs mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qbs