<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
span.E-MailFormatvorlage19
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="DE" link="blue" vlink="purple" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">>> Did you remember to connect the "package-build-file" tag to your
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">>> product type? Either by making this tag the product type or via a
<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">>> chain of rules.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">> I didn't do it, because I don't understand how to do it.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">So for example you could do this:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">```<o:p></o:p></span></p>
<p class="MsoNormal">Product {<br>
    name: "ToxPhone"<o:p></o:p></p>
<p class="MsoNormal"><span lang="EN-US">    type: [ /* maybe some other types here… */ "package-build-file" ]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">    // …</span><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">```<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">This will cause your rule to be executed because the product “ToxPhone” requires it because it is of the type produced by your rule.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">See also
<a href="https://qbs.io/docs/qml-qbslanguageitems-rule/#rules-and-product-types">
https://qbs.io/docs/qml-qbslanguageitems-rule/#rules-and-product-types</a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Best<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US">Jochen<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US" style="mso-fareast-language:EN-US"><o:p> </o:p></span></p>
<div style="border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="margin-bottom:12.0pt"><b><span style="font-size:12.0pt;color:black">Von:
</span></b><span style="font-size:12.0pt;color:black">Qbs <qbs-bounces@qt-project.org> im Auftrag von Карелин Павел <hkarel@yandex.ru><br>
<b>Datum: </b>Dienstag, 10. Mai 2022 um 18:27<br>
<b>An: </b>qbs@qt-project.org <qbs@qt-project.org><br>
<b>Betreff: </b>Re: [Qbs] Failed 'PackageBuild' product on QBS 1.22<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><br>
<br>
10.05.2022 17:49, Christian Kandeler пишет:<br>
><br>
> On 5/10/22 15:02, Карелин Павел wrote:<br>
>><br>
>><br>
>> 05.05.2022 12:14, Christian Kandeler пишет:<br>
>>> On 5/5/22 11:00, Карелин Павел wrote:<br>
>>>><br>
>>>><br>
>>>> 05.05.2022 10:47, Christian Kandeler пишет:<br>
>>>>> On 5/4/22 18:18, Карелин Павел wrote:<br>
>>>>>> Christian, how would you solve my problem?<br>
>>>>>> After the project is built, the deb-package is assembled. To <br>
>>>>>> build the deb-package, you need a list of dependent libraries <br>
>>>>>> (not all, only parts, system dependencies no required). For <br>
>>>>>> example this list:<br>
>>>>>><br>
>>>>>> /opt/ffmpeg/4.4/lib/libavutil.so*<br>
>>>>>> /opt/ffmpeg/4.4/lib/libswscale.so*<br>
>>>>>> /opt/ffmpeg/4.4/lib/libswresample.so*<br>
>>>>>> /opt/opencv/4.5.5/lib/libopencv_core.so*<br>
>>>>>> /opt/opencv/4.5.5/lib/libopencv_calib3d.so*<br>
>>>>>> /opt/opencv/4.5.5/lib/libopencv_imgproc.so*<br>
>>>>>><br>
>>>>>> I can get library paths and names of so-modules from dependencies:<br>
>>>>>><br>
>>>>>> Depends { name: "lib.ffmpeg" }<br>
>>>>>> Depends { name: "lib.opencv" }<br>
>>>>>><br>
>>>>>> How can I create such a list and put it in the package_build_info <br>
>>>>>> file? With the rules?<br>
>>>>> lib.ffmpeg and lib.opencv are modules in your projects?<br>
>>>> Yes, they are modules. I use my own QBS-extensions to include <br>
>>>> third-party assembled libraries in my projects <br>
>>>> (<a href="https://github.com/hkarel/QbsExt/tree/master/modules/lib">https://github.com/hkarel/QbsExt/tree/master/modules/lib</a>).<br>
>>><br>
>>> Then I think the correct way is to<br>
>>><br>
>>>     - collect these libraries in a Group in the respective module<br>
>>><br>
>>>     - mark them as target artifacts (see <br>
>>> <a href="https://doc.qt.io/qbs/qml-qbslanguageitems-group.html#filesAreTargets-prop)">
https://doc.qt.io/qbs/qml-qbslanguageitems-group.html#filesAreTargets-prop)</a><br>
>>><br>
>>>     - give them a suitable tag<br>
>>><br>
>>>     - on the consuming side, create a rule whose <br>
>>> inputsFromDependencies matches that tag and in this rule, do <br>
>>> whatever you need to do.<br>
>><br>
>> Tried to follow you recommendation:<br>
>><br>
>> --- LibModule ---<br>
>> Module {<br>
>>     id: libmod<br>
>>     property string prefix<br>
>>     property string version: ""<br>
>><br>
>>     property bool enabled: true<br>
>>     property bool useSystem: false<br>
>><br>
>>     property string includeSuffix: "/include"<br>
>>     property string libSuffix: "/lib"<br>
>><br>
>>     property path includePath: (useSystem || !enabled)<br>
>>                                ? undefined<br>
>>                                : prefix + (version.length ? "/" + <br>
>> version : "") + includeSuffix<br>
>><br>
>>     property path libraryPath: (useSystem || !enabled)<br>
>>                                ? undefined<br>
>>                                : prefix + (version.length ? "/" + <br>
>> version : "") + libSuffix<br>
>><br>
>>     property var dynamicLibraries: ["sodium"]<br>
>>     property var staticLibraries: []<br>
>>     ...<br>
>>     Group {<br>
>>         //name: "package-build"<br>
>>         fileTags: "package-build"<br>
>>         filesAreTargets: true<br>
>>         files: {<br>
>>             var libfiles = [];<br>
>>             if (!libmod.useSystem && libmod.enabled)<br>
>>                 for (var i in libmod.dynamicLibraries) {<br>
>>                     libfiles.push(<br>
>>                         libmod.libraryPath +<br>
>> ("/lib{0}.so*").format(libmod.dynamicLibraries[i]))<br>
>>                 }<br>
>><br>
>>             console.info("=== libfiles ===");<br>
>>             console.info(libfiles);<br>
>><br>
>>             return libfiles;<br>
>>         }<br>
>>     }<br>
>> } // Module<br>
>><br>
>> LibModule {<br>
>>     id: sodium<br>
>>     version: "1.0.x"<br>
>>     prefix: "/opt/sodium"<br>
>>     checkingHeaders:  ["sodium.h"]<br>
>>     dynamicLibraries: ["sodium"]<br>
>>     staticLibraries:  ["sodium"]<br>
>> }<br>
>><br>
>> Product {<br>
>>     name: "ToxPhone"<br>
>>     ...<br>
>>     Depends { name: "lib.sodium" }<br>
>>     ...<br>
>>     lib.sodium.version:   project.sodiumVersion<br>
>>     //lib.sodium.useSystem: project.useSystemSodium<br>
>><br>
>>     Rule {<br>
>>         id: pkgbuild<br>
>>         //inputs: ["package-build"]<br>
>>         inputsFromDependencies: ["package-build"]<br>
>><br>
>>         Artifact {<br>
>>             fileTags: ["package-build-file"]<br>
>>             filePath: FileInfo.joinPaths(project.buildDirectory, <br>
>> "package_build_info")<br>
>>         }<br>
>>         prepare: {<br>
>>             var outputFile = <br>
>> FileInfo.joinPaths(project.buildDirectory, "package_build_info");<br>
>><br>
>>             console.info("=== outputFile ===");<br>
>>             console.info(outputFile);<br>
>>         }<br>
>>     }<br>
>><br>
>> } // Product<br>
>><br>
>> The inscription "=== outputFile ===" is never printed. What am I <br>
>> doing wrong?<br>
>><br>
> Did you remember to connect the "package-build-file" tag to your <br>
> product type? Either by making this tag the product type or via a <br>
> chain of rules.<br>
I didn't do it, because I don't understand how to do it.<br>
<br>
><br>
><br>
> Christian<br>
><br>
><br>
><br>
> _______________________________________________<br>
> Qbs mailing list<br>
> Qbs@qt-project.org<br>
> <a href="https://lists.qt-project.org/listinfo/qbs">https://lists.qt-project.org/listinfo/qbs</a><br>
<br>
_______________________________________________<br>
Qbs mailing list<br>
Qbs@qt-project.org<br>
<a href="https://lists.qt-project.org/listinfo/qbs">https://lists.qt-project.org/listinfo/qbs</a><o:p></o:p></p>
</div>
</div>
</body>
</html>