[Qbs] qbs-autoproject

Christian Gagneraud chgans at gmail.com
Sat Oct 28 15:19:02 CEST 2017


On 28/10/17 20:02, resurrection at centrum.cz wrote:
> We have discussed some configuration issues via separate e-mail but
> few things worth pointing out here:
> 
> - I should likely call close() explicitly after reading a file. One
> gets spoiled from QFile's destructor. :-) That might alleviate the
> too many open files issue. I reckon it ultimately hits the OS limit
> on open file handles otherwise.

Yes, Ubuntu has tight limits, but so far it has always pointed me to a 
defect of some sort. From an operating-system point of view, 
qbs-autoproject is consuming too many file descriptors. And this usually 
means 'leaks'.

I might open an issue on that one.

I'll try to remove the contentPattern in the 'items' property too, 
hopefully there won't be any needs to open all the files anymore.

I only need Library, Application and UnitTest items that i can match by 
names. I do have other items, but i would like to ignore them for the 
moment.

A desirable feature here would be to be able to control the order in 
witch the match are done, this way one could, for example, put specific 
patterns at the top, and catch-all at the bottom.

In my case, i would like to match ignored first, then tests, then apps, 
everything else becomes library.
It's not clear to me which stage of the pipeline is affected by the 
configuration probe and how a given stage (successive probes) is affected.

> - modules are for external dependencies like Qt or your custom made
> modules. The path is the one I use for Qt, you should put your path
> or remove it altogether if your project is not using Qt.

I got it, but why would you need to provide a path to Qt? Are you 
bypassing qbs-setup-qt and qmake?
If it's just an example, I think using 'Qt' is misleading.

> - As mentioned the other issues are to do with configuration of the
> patterns as the described project is fairly standard.
> 
> - I have tried it on legacy code base of 400+ products without
> optimizing or ignoring any patterns and while it took long the
> results seemed reasonable especially considering how messy it is.

Glad to hear it worked on a legacy code base, I have a similar situation.

> 
> I will look into the performance issue for sure. And the readme
> should really be turned into the wiki.

And a test framework? Ah, yeah, a JS library as well! ;)

I'm just teasing, your project is great, I like very much the 'pipeline' 
approach, and the use of Qbs to boostrap a Qbs project is like the 
cherry on the cake!

What if each stage of the pipeline had it's own configuration? Including 
an option to simply pass through. Or even crasier, a JSON or QML file in 
'.qbs-autoproject/' that defines the pipeline itself.

Anyway, in my case, I have two choices:
- parse msvs solution and project files, digest, generate
- scan the filesystem, digest, generate

The msvs is moving to "property files" (MS crap that make you feel 
you're solving problems), so i would like to implement a real XML 
parser, ideally in Qt/C++, but python will do in the first place.
It's a vast subject, with very long meanders...

The filesystem approach is interesting too, but it will pick up zombie 
cpp units and headers, I think i have black lists somewhere! ;)

Which lead me to the use of 'path' for the user's item input files, I 
would prefer to use the explicit 'files' property. This could be solved 
with a filterOut at the writer stage, but this should actually be done 
earlier, b/c it does impact the dependency analysis.

It would be great too to make the acyclic test failure a warning or an 
error. One might be interested to know if the test fails or not while 
using an 'internal' safety dependency-tracking mechanism.

I do not know how you implemented the dependency tracking, thinking that 
you did it in JS simply blows my mind (I'm not a JS guy).
Having said that, dependency tracking is more than C pre-processor stuff.

Chris



More information about the Qbs mailing list