[Qbs] Dynamic generation of the resource file

Карелин Павел hkarel at yandex.ru
Fri Oct 1 21:47:21 CEST 2021


Good time of day, colleagues

I previously asked how to dynamically create a resource file for project 
QGit (https://github.com/hkarel/qgit). The answer was received (see 
correspondence below).
I got the following solution:

     Group {
         name: "trigrams"
         fileTags: "trigrams"
         files: FileInfo.joinPaths(product.sourceDirectory, 
"spellcheck/sonnet/trigrams/*")
     }

     Group {
         fileTagsFilter: ["trigrams-map"]
         fileTags: ["qt.core.resource_data"]
     }
     Qt.core.resourceFileBaseName: "trigrams"
     Qt.core.resourcePrefix: "trigrams"

     Rule {
         id: idtrigrams
         inputs: ["trigrams"]
         explicitlyDependsOnFromDependencies: ["trigrams-generator"]

         Artifact {
             fileTags: ["trigrams-map"]
             filePath: FileInfo.joinPaths(project.buildDirectory, 
"trigrams", input.baseName + ".tmap")
         }
         prepare: {
             var runUtl = 
explicitlyDependsOn["trigrams-generator"][0].filePath
             var outputFile = FileInfo.joinPaths(project.buildDirectory, 
"trigrams", input.baseName + ".tmap");

             var cmd = new Command(runUtl, [input.filePath, outputFile]);
             cmd.description = "sonnet parse trigrams";
             cmd.highlight = "filegen";
             return cmd;
         }
     }

As a result, such a resource file is created:

<!DOCTYPE RCC>
<RCC version="1.0">
     <qresource prefix="trigrams">
         <file 
alias="en_US.tmap">/home/hkarel/CProjects/QGit/build/Debug/trigrams/en_US.tmap</file>
         <file 
alias="ru_RU.tmap">/home/hkarel/CProjects/QGit/build/Debug/trigrams/ru_RU.tmap</file>
     </qresource>
</RCC>

Question: how to add another "qresource prefix" section to this resource 
file, for example "binary"?
So that the resource file looks like this:

<!DOCTYPE RCC>
<RCC version="1.0">
     <qresource prefix="trigrams">
         <file 
alias="en_US.tmap">/home/hkarel/CProjects/QGit/build/Debug/trigrams/en_US.tmap</file>
         <file 
alias="ru_RU.tmap">/home/hkarel/CProjects/QGit/build/Debug/trigrams/ru_RU.tmap</file>
     </qresource>
     <qresource prefix="binary">
         <file 
alias="file1.bin">/home/hkarel/CProjects/QGit/build/Debug/binary_res/file1.bin</file>
         <file 
alias="file2.bin">/home/hkarel/CProjects/QGit/build/Debug/binary_res/file1.bin</file>
     </qresource>
</RCC>

--
BR, Pavel



-------- Перенаправленное сообщение --------
Тема: 	Re: [Qbs] Build and run a AuxiliaryApplication before build a 
MainApplication
Дата: 	Mon, 22 Feb 2021 11:00:18 +0100
От: 	Christian Kandeler <christian.kandeler at qt.io>
Кому: 	qbs at qt-project.org



On 2/19/21 5:43 PM, Карелин Павел wrote:
> Project QGit__micro is attached.
> The situation is reproduced 

I've attached the corrected qbs files.



Christian


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/qbs/attachments/20211001/09de6ae8/attachment.html>
-------------- next part --------------
import qbs
import qbs.File
import qbs.FileInfo

Product {
    name: "QGit"
    targetName: "qgit"

    type: "application"
    destinationDirectory: "./bin"

    Depends { name: "cpp" }
    Depends { name: "GenTrigrams" }
    Depends { productTypes: ["trigrams-generator"] }
    Depends { name: "Qt"; submodules: ["core", "widgets"] }

    Group {
        fileTags: "trigrams"
        files: FileInfo.joinPaths(product.sourceDirectory, "spellcheck/sonnet/trigrams/*")
    }

    Group {
        fileTagsFilter: ["trigrams-map"]
        fileTags: ["qt.core.resource_data"]
    }
    Qt.core.resourceFileBaseName: "trigrams"
    Qt.core.resourcePrefix: "trigrams"

    Rule {
        id: idtrigrams
        inputs: ["trigrams"]
        explicitlyDependsOnFromDependencies: ["trigrams-generator"]

        Artifact {
            fileTags: ["trigrams-map"]
            filePath: FileInfo.joinPaths(project.buildDirectory, "trigrams", input.baseName + ".tmap")
        }
        prepare: {
            var runUtl = explicitlyDependsOn["trigrams-generator"][0].filePath
            var outputFile = FileInfo.joinPaths(project.buildDirectory, "trigrams", input.baseName + ".tmap");

//            console.info("=== runUtl ===");
//            console.info(input);
//            console.info(inputs);
//            console.info(runUtl);
//            console.info(input.filePath);
//            console.info(outputFile);

            var cmd = new Command(runUtl, [input.filePath, outputFile]);
            cmd.description = "sonnet parse trigrams";
            cmd.highlight = "filegen";
            return cmd;
        }
    }

    files: [
        "qgit.cpp",
    ]

//    property var test: {
//        console.info("=== Qt.core.version ===");
//        console.info(Qt.core.version);
//        console.info("=== VERSION_PROJECT ===");
//        console.info(project.projectVersion[0]);
//    }
}
-------------- next part --------------
import qbs
import qbs.FileInfo

Product {
    name: "GenTrigrams"
    targetName: "gentrigrams"
    condition: true

    //type: "application"
    type: ["application"]
    destinationDirectory: "./bin"

    Depends { name: "cpp" }
    Depends { name: "Qt"; submodules: ["core"] }

    cpp.defines: project.cppDefines
    cpp.cxxFlags: project.cxxFlags
    cpp.cxxLanguageVersion: project.cxxLanguageVersion

    // This declaration is needed to suppress Qt warnings
    cpp.systemIncludePaths: Qt.core.cpp.includePaths

    files: [
        "gentrigrams.cpp"
    ]

    Group {
        fileTagsFilter: "application"
        fileTags: "trigrams-generator"
    }
}


More information about the Qbs mailing list