Hi,

I am trying to set up a project using the Qt Plugin System. The project 
consists of multiple binaries, one dynamic library that defines the Q_INTERFACE 
(LIB) and multiple plugins (PLUGIN) implementing this interface. To have common 
unit tests for all plugins, I have a gtest-based binary that loads and tests 
the plugins via their interface. This binary should only get linked to LIB, not 
to PLUGINS, which is why I removed the „dynamiclibrary“ tag, and added a new 
tag, „plugin“ for PLUGINS. Now, of course, my plugin will not be build because 
there is no rule cpp,hpp - plugin. Is there an easy way to call the prepare 
script of the cpp rules that would be active for a dynamic library? Something 
like prepare: cpp.compiler.prepare? Or is there a better way to achieve what I 
want?

I am probably not the only person trying to create a plugin, maybe it would 
make sense to add such a plugin type to QBS.cpp or qt_plugin to QBS.Qt? Or is 
there already something like this?

plugin1.qbs:

Product {
        name: „PLUGIN1“
        type: „plugin“

        Depends {name: „cpp“}
        
        Depends { name: „LIB“ }

        Rule {
            id: mycompiler
            inputs: ["cpp"]
            auxiliaryInputs: ["hpp"]

            Artifact {
                fileTags: [„plugin"]
                filePath: product.name + ".so"
            }

            prepare: compiler.prepare
        }
}

test.qbs

CppApplication {
        type: ["application", "copied_plugins"]
        name: "PluginTester"

        Depends { name: "cpp" }
        cpp.systemIncludePaths: [ "/usr/src/gtest/" ]

        Depends { name: „LIB" }
        Depends { name: „PLUGIN1" }

        files: [ "main.cpp" ]

        Rule {
            id: plugin_copy

            // take outputs of projects this product depends on, if they are of 
type plugin
            // as input to this rule
            usings: [„plugin"]

            Artifact {
                fileTags: [ "copied_plugins" ]
                filePath: input.fileName
            }

            prepare: {
                var args = []
                args.push("--symbolic-link")
                args.push(input.filePath)
                args.push(output.filePath)

                var cmd = new Command("cp", args)
                cmd.description = "creating symlink for " + input.fileName + " 
to PluginTester"
                return cmd;
            }

        }

    }
_______________________________________________
QBS mailing list
QBS@qt-project.org
http://lists.qt-project.org/mailman/listinfo/qbs

Reply via email to