Re: [Qbs] Failed 'PackageBuild' product on QBS 1.22

2022-05-12 Thread Карелин Павел
John, thanks for the tip. Unfortunately, this was not enough, the rule 
is still not called. Looks like something else is needed...

Christian, can I ask you for help on this issue?

--
Pavel

12.05.2022 12:07, Jochen Ulrich пишет:


>> Did you remember to connect the "package-build-file" tag to your

>> product type? Either by making this tag the product type or via a

>> chain of rules.

> I didn't do it, because I don't understand how to do it.

So for example you could do this:

```

Product {
    name: "ToxPhone"

    type: [ /* maybe some other types here… */ "package-build-file" ]

    // …

```

This will cause your rule to be executed because the product 
“ToxPhone” requires it because it is of the type produced by your rule.


See also 
https://qbs.io/docs/qml-qbslanguageitems-rule/#rules-and-product-types


Best

Jochen

*Von: *Qbs  im Auftrag von Карелин Павел 


*Datum: *Dienstag, 10. Mai 2022 um 18:27
*An: *qbs@qt-project.org 
*Betreff: *Re: [Qbs] Failed 'PackageBuild' product on QBS 1.22



10.05.2022 17:49, Christian Kandeler пишет:
>
> On 5/10/22 15:02, Карелин Павел wrote:
>>
>>
>> 05.05.2022 12:14, Christian Kandeler пишет:
>>> On 5/5/22 11:00, Карелин Павел wrote:


 05.05.2022 10:47, Christian Kandeler пишет:
> On 5/4/22 18:18, Карелин Павел wrote:
>> Christian, how would you solve my problem?
>> After the project is built, the deb-package is assembled. To
>> build the deb-package, you need a list of dependent libraries
>> (not all, only parts, system dependencies no required). For
>> example this list:
>>
>> /opt/ffmpeg/4.4/lib/libavutil.so*
>> /opt/ffmpeg/4.4/lib/libswscale.so*
>> /opt/ffmpeg/4.4/lib/libswresample.so*
>> /opt/opencv/4.5.5/lib/libopencv_core.so*
>> /opt/opencv/4.5.5/lib/libopencv_calib3d.so*
>> /opt/opencv/4.5.5/lib/libopencv_imgproc.so*
>>
>> I can get library paths and names of so-modules from dependencies:
>>
>> Depends { name: "lib.ffmpeg" }
>> Depends { name: "lib.opencv" }
>>
>> How can I create such a list and put it in the package_build_info
>> file? With the rules?
> lib.ffmpeg and lib.opencv are modules in your projects?
 Yes, they are modules. I use my own QBS-extensions to include
 third-party assembled libraries in my projects
 (https://github.com/hkarel/QbsExt/tree/master/modules/lib).
>>>
>>> Then I think the correct way is to
>>>
>>>     - collect these libraries in a Group in the respective module
>>>
>>>     - mark them as target artifacts (see
>>> 
https://doc.qt.io/qbs/qml-qbslanguageitems-group.html#filesAreTargets-prop)

>>>
>>>     - give them a suitable tag
>>>
>>>     - on the consuming side, create a rule whose
>>> inputsFromDependencies matches that tag and in this rule, do
>>> whatever you need to do.
>>
>> Tried to follow you recommendation:
>>
>> --- LibModule ---
>> Module {
>>     id: libmod
>>     property string prefix
>>     property string version: ""
>>
>>     property bool enabled: true
>>     property bool useSystem: false
>>
>>     property string includeSuffix: "/include"
>>     property string libSuffix: "/lib"
>>
>>     property path includePath: (useSystem || !enabled)
>>    ? undefined
>>    : prefix + (version.length ? "/" +
>> version : "") + includeSuffix
>>
>>     property path libraryPath: (useSystem || !enabled)
>>    ? undefined
>>    : prefix + (version.length ? "/" +
>> version : "") + libSuffix
>>
>>     property var dynamicLibraries: ["sodium"]
>>     property var staticLibraries: []
>>     ...
>>     Group {
>>     //name: "package-build"
>>     fileTags: "package-build"
>>     filesAreTargets: true
>>     files: {
>>     var libfiles = [];
>>     if (!libmod.useSystem && libmod.enabled)
>>     for (var i in libmod.dynamicLibraries) {
>>     libfiles.push(
>>     libmod.libraryPath +
>> ("/lib{0}.so*").format(libmod.dynamicLibraries[i]))
>>     }
>>
>>     console.info("=== libfiles ===");
>>     console.info(libfiles);
>>
>>     return libfiles;
>>     }
>>     }
>> } // Module
>>
>> LibModule {
>>     id: sodium
>>     version: "1.0.x"
>>     prefix: "/opt/sodium"
>>     checkingHeaders:  ["sodium.h"]
>>     dynamicLibraries: ["sodium"]
>>     staticLibraries:  ["sodium"]
>> }
>>
>> Product {
>>     name: "ToxPhone"
>>     ...
>>     Depends { name: "lib.sodium" }
>>     ...
>>     lib.sodium.version:   project.sodiumVersion
>>     //lib.sodium.useSystem: project.useSystemSodium
>>
>>     Rule {
>>     id: pkgbuild
>>     //inputs: ["package-build"]
>>     inputsFromDependencies: ["package-build"]
>>
>>     Artifact {
>>     fileTags: ["package-build-file"]
>>     filePath: FileInfo.joinPaths(project.buildDirectory,
>> "package_build_info")

Re: [Qbs] Failed 'PackageBuild' product on QBS 1.22

2022-05-12 Thread Jochen Ulrich
>> Did you remember to connect the "package-build-file" tag to your
>> product type? Either by making this tag the product type or via a
>> chain of rules.
> I didn't do it, because I don't understand how to do it.

So for example you could do this:

```
Product {
name: "ToxPhone"
type: [ /* maybe some other types here… */ "package-build-file" ]
// …
```

This will cause your rule to be executed because the product “ToxPhone” 
requires it because it is of the type produced by your rule.
See also https://qbs.io/docs/qml-qbslanguageitems-rule/#rules-and-product-types

Best
Jochen


Von: Qbs  im Auftrag von Карелин Павел 

Datum: Dienstag, 10. Mai 2022 um 18:27
An: qbs@qt-project.org 
Betreff: Re: [Qbs] Failed 'PackageBuild' product on QBS 1.22


10.05.2022 17:49, Christian Kandeler пишет:
>
> On 5/10/22 15:02, Карелин Павел wrote:
>>
>>
>> 05.05.2022 12:14, Christian Kandeler пишет:
>>> On 5/5/22 11:00, Карелин Павел wrote:


 05.05.2022 10:47, Christian Kandeler пишет:
> On 5/4/22 18:18, Карелин Павел wrote:
>> Christian, how would you solve my problem?
>> After the project is built, the deb-package is assembled. To
>> build the deb-package, you need a list of dependent libraries
>> (not all, only parts, system dependencies no required). For
>> example this list:
>>
>> /opt/ffmpeg/4.4/lib/libavutil.so*
>> /opt/ffmpeg/4.4/lib/libswscale.so*
>> /opt/ffmpeg/4.4/lib/libswresample.so*
>> /opt/opencv/4.5.5/lib/libopencv_core.so*
>> /opt/opencv/4.5.5/lib/libopencv_calib3d.so*
>> /opt/opencv/4.5.5/lib/libopencv_imgproc.so*
>>
>> I can get library paths and names of so-modules from dependencies:
>>
>> Depends { name: "lib.ffmpeg" }
>> Depends { name: "lib.opencv" }
>>
>> How can I create such a list and put it in the package_build_info
>> file? With the rules?
> lib.ffmpeg and lib.opencv are modules in your projects?
 Yes, they are modules. I use my own QBS-extensions to include
 third-party assembled libraries in my projects
 (https://github.com/hkarel/QbsExt/tree/master/modules/lib).
>>>
>>> Then I think the correct way is to
>>>
>>> - collect these libraries in a Group in the respective module
>>>
>>> - mark them as target artifacts (see
>>> https://doc.qt.io/qbs/qml-qbslanguageitems-group.html#filesAreTargets-prop)
>>>
>>> - give them a suitable tag
>>>
>>> - on the consuming side, create a rule whose
>>> inputsFromDependencies matches that tag and in this rule, do
>>> whatever you need to do.
>>
>> Tried to follow you recommendation:
>>
>> --- LibModule ---
>> Module {
>> id: libmod
>> property string prefix
>> property string version: ""
>>
>> property bool enabled: true
>> property bool useSystem: false
>>
>> property string includeSuffix: "/include"
>> property string libSuffix: "/lib"
>>
>> property path includePath: (useSystem || !enabled)
>>? undefined
>>: prefix + (version.length ? "/" +
>> version : "") + includeSuffix
>>
>> property path libraryPath: (useSystem || !enabled)
>>? undefined
>>: prefix + (version.length ? "/" +
>> version : "") + libSuffix
>>
>> property var dynamicLibraries: ["sodium"]
>> property var staticLibraries: []
>> ...
>> Group {
>> //name: "package-build"
>> fileTags: "package-build"
>> filesAreTargets: true
>> files: {
>> var libfiles = [];
>> if (!libmod.useSystem && libmod.enabled)
>> for (var i in libmod.dynamicLibraries) {
>> libfiles.push(
>> libmod.libraryPath +
>> ("/lib{0}.so*").format(libmod.dynamicLibraries[i]))
>> }
>>
>> console.info("=== libfiles ===");
>> console.info(libfiles);
>>
>> return libfiles;
>> }
>> }
>> } // Module
>>
>> LibModule {
>> id: sodium
>> version: "1.0.x"
>> prefix: "/opt/sodium"
>> checkingHeaders:  ["sodium.h"]
>> dynamicLibraries: ["sodium"]
>> staticLibraries:  ["sodium"]
>> }
>>
>> Product {
>> name: "ToxPhone"
>> ...
>> Depends { name: "lib.sodium" }
>> ...
>> lib.sodium.version:   project.sodiumVersion
>> //lib.sodium.useSystem: project.useSystemSodium
>>
>> Rule {
>> id: pkgbuild
>> //inputs: ["package-build"]
>> inputsFromDependencies: ["package-build"]
>>
>> Artifact {
>> fileTags: ["package-build-file"]
>> filePath: FileInfo.joinPaths(project.buildDirectory,
>> "package_build_info")
>> }
>> prepare: {
>> var outputFile =
>> FileInfo.joinPaths(project.buildDirectory, "package_build_info");
>>
>> console.info("=== outputFile ===");
>> console.info(outputFile);
>> }
>> }
>>