On 28/10/17 00:59, resurrect...@centrum.cz wrote:
Thanks for trying it out Christian! I will try to answer some of your questions:

 > qbs-autoproject tookssomething like 10 to 15 minutes (as advertised)

Take a look at https://github.com/Resurr3ction/qbs-autoproject#performance-tips if any of those could help you there. Particularly not using the contentPattern and removing unused items should help a lot. If you just want to see the structure (like the qbs-create-project does) you may disable the dependency scanner by setting dependencyMode = DependencyMode.Disabled.

I now have disabled the dependency, i will sort out that later.
I have as well adjusted ignorePattern so that qbs-autoproject only see the "easy" sub directories, mainly static libraries


At this stage, i'm not sure if qbs-autoproject refused to write the qbs files, or if it allows to generate broken qbs files, that can then be fixed manually.

qbs-autoproject will write out only one file that will be named as your root directory. Since you cannot edit it (because it would be overwritten) I did not see any benefit in splitting it into multiple files. It is also easier to debug when all projects/products are in single file imho.

I'm fine with that.

However, qbs-autoproject fails to write the final qbs file:

$ qbs build
No build graph exists yet for this configuration.
Resolving project for configuration default
Nos @ Sat Oct 28 2017 12:38:16 GMT+1300 (NZDT)
--------------------------------------
Running steps...
[1/11] Parsing configuration...
    Project root: /home/krys/Projects/nos-build-ng
    Output path: /home/krys/Projects/nos-build-ng/.autoproject
Install path: /home/krys/Projects/nos-build-ng/default/install-root/linux,unix-undefined-gcc
    Output format: Tree
    Dependency mode: Disabled
    Items:
        AutoprojectApp
        AutoprojectDynamicLib
        AutoprojectPlugin
        AutoprojectStaticLib
        AutoprojectInclude
        AutoprojectDoc
    Modules:
        Qt
[1/11] Done (0ms)
[2/11] Scanning modules...
    Qt
[2/11] Done (1ms)
[3/11] Creating projects...
<...> <- 1 project per subdir, recursively, starting with root
[3/11] Done (715ms)
[4/11] Creating products...
<...> <- 1 static lib per subdir, recursively
[4/11] Done (2390ms)
[5/11] Merging products...
<no log details here>
[5/11] Done (173ms)
[6/11] Consolidating products...
<...> <- Wrong association are made here
[6/11] Done (43859ms)
[7/11] Cleaning projects...
<...> <- Removes lot of empty project, including root :(
[7/11] Done (1949ms)
[8/11] Scanning dependencies...
Dependencies disabled --- skipping
[8/11] Done (0ms)
[9/11] Finding includes...
Dependencies disabled --- skipping
[9/11] Done (0ms)
[10/11] Setting dependencies...
Dependencies disabled --- skipping
[10/11] Done (0ms)
[11/11] Writing project...
ERROR: TypeError: Result of expression 'proj' [undefined] is not an object.

I'm suspecting a completely empty top project.


I think the problem comes from the consolidation phase:

Imagine you start with only 2 top level folders, that are 2 libraries:
- Feature
- Topic

If Topic contains a Feature sub-folder (which is not a library on it's own, it's just source code organisation), the the consolidation phase will merge Feature with Topic/Feature

A simple use case:
$ tree .
.
├── project.qbs
├── Core
│   ├── core.cpp
│   ├── core.qbs
│   └── Web
│       ├── web.cpp
│       └── web.h
├── Gui
│   ├── gui.cpp
│   ├── gui.qbs
│   └── Web
│       ├── web.cpp
│       └── web.h
└── Web
    ├── web.cpp
    ├── web.h
    └── web.qbs


In this case the consolidator will merge Core/Web, Gui/Web with Web/ instead of simplifying to Core, Gui and Web as top libraries.


After trying the "full" dependency-tracked custom Qbs (Export items), i decided that i don't want that. I like it, but I cannot afford so to speak. My DAG is so wild, that qbs fight to load it and i end up with Linux's limits.conf problems. Such as command line too long (true) and too many open files (Ubuntu's mistake).

Now this is interesting. Could you tell me more about these issues? Export item vs include-directory should not be a significant difference except for the cyclic dependency problem. Have you tried NoHeaderOnly dependencyMode?

Let me clarify, this has nothing to do with qbs-autoproject, I have used my scripts as initial generator, and then manually polished the generated files. I have something like 150 products (apps and libs), the libraries have a complex inter-dependency. If I try to use the Export Item on each of these, i end up with an app build command that has lot of duplicated include search path (-I), a lot of duplicated library search path (-L) and a lot of duplicated link objects (-lfoo, -lbar, ...) This is where i hit the Linux limits.conf, I am not sure if I do it wrong thought.

I as well hit the "too many open files" with qbs-autoproject, I have the feeling that it keeps all the source files open while scanning.
JS File objects not garbage collected?

It's not clear to me how i can inject my initial qbs support files into the qbs-autoproject ones, maybe i just need to edit '.qbs-autoproject/' files. I found it hard to define "where the project is", "what the project name is", and "where is my custom stuff".

All your custom stuff should be done via custom items and modules. So in your case you would edit (or remove or add more) stuff in .autoproject/imports/ and then you would link these to the qbs-autproject via the `items` property - giving them the pattern etc.

Thanks, I get it now, this is pretty cool and very similar to how my python scripts work.

What about the 'modules' property, why there is a 'Qt' module there with an hard coded include path? Is it just an example? I think i will want to use this feature, as i have a couple of special ThirdParty libraries.

Thanks,
Chris
_______________________________________________
Qbs mailing list
Qbs@qt-project.org
http://lists.qt-project.org/mailman/listinfo/qbs

Reply via email to