On Fri, Dec 27, 2019 at 06:04:08PM +0300, Alberto Mardegan wrote:
I agree that in many cases the Depends item is the one who has the best
information on how to handle its deployment. For example, the QtGui
module will know which platform plugins need to be deployed, and the
QtQml module could know which QML modules need to be deployed and how.

you're mixing up two separate issues.

"deployment" (you actually mean dependency embedding) is just a special form of "linking" dependencies. you should be able to make a fully static build or a bundle with embedded dlls and plugins from the same project, by flipping a single bit. similarly, for qml, you could select whether the qml files are compiled (with the old qml compiler) or embedded as-is.

_what_ gets depended upon is a policy decision that is independent from the mechanism that does the linking. plugins specify a type, while modules declare what types of plugins they want to pull in. that makes this policy implicit, and a manual override is provided. that was actually already implemented for the qt port. qml modules should be typically found by qmlimportscanner or an equivalent mechanism. there should be probably a mechnism to exclude unnecessary transitive dependencies.

Project {
 QtGuiApplication {
   Depends {
     name: "QtGui"

     /* Or should this be automatically detected depending on
      * the target? Maybe one should have a "deployed-app" product,
      * and deployment should be triggered if and only if qbs is
      * asked to build that target?
      */

you are merely asking about the default of that property, which definitely should be specific to the particular Depends item. an expression that depends on a project-wide setting whether the result should be self-contaiend even when doing a dynamic build would certainly make sense.

    * Additional properties could be used to exclude some libraries
    * from being deployed (because we assume they exist in the
    * target system).
    */
   deployment.excludePatterns: [ "libstdc++.so*", "libxcb.so*" ]

the embedding property should apply to abstract modules (and their "slices", i.e., files that fall into a particular category), not os-specific files. yes, that means that there need to be modules for "system" dependencies, and they should be declared as such (so that projects don't need to repeat the exclusions each time).

_______________________________________________
Qbs mailing list
[email protected]
https://lists.qt-project.org/listinfo/qbs

Reply via email to