[Qbs] Failed 'PackageBuild' product on QBS 1.22
Карелин Павел
hkarel at yandex.ru
Thu May 12 21:10:58 CEST 2022
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 <qbs-bounces at qt-project.org> im Auftrag von Карелин Павел
> <hkarel at yandex.ru>
> *Datum: *Dienstag, 10. Mai 2022 um 18:27
> *An: *qbs at qt-project.org <qbs at 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);
> >> }
> >> }
> >>
> >> } // Product
> >>
> >> The inscription "=== outputFile ===" is never printed. What am I
> >> doing wrong?
> >>
> > 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.
>
> >
> >
> > Christian
> >
> >
> >
> > _______________________________________________
> > Qbs mailing list
> > Qbs at qt-project.org
> > https://lists.qt-project.org/listinfo/qbs
>
> _______________________________________________
> Qbs mailing list
> Qbs at qt-project.org
> https://lists.qt-project.org/listinfo/qbs
>
>
> _______________________________________________
> Qbs mailing list
> Qbs at qt-project.org
> https://lists.qt-project.org/listinfo/qbs
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20220512/5a2366f6/attachment.htm>
More information about the Qbs
mailing list