[QBS] Autotest runner and Qt plugin path

Ch'Gans chgans at gna.org
Sun Jun 19 12:59:57 CEST 2016


On 19 June 2016 at 20:51, Ch'Gans <chgans at gna.org> wrote:
> On 19 June 2016 at 19:38, Jake Petroules <Jake.Petroules at qt.io> wrote:
>> AutotestRunner (https://doc.qt.io/qbs/autotestrunner-item.html) provides an
>> environment property that you can use to control the environment that your
>> tests are run with. Create an item derived from AutotestRunner, like so:
>>
>> AutotestRunner {
>>     Depends { name: "Qt.core" }
>>     environment: base.concat(["QT_PLUGIN_PATH=" + Qt.core.pluginPath])
>> }
>
> Thanks a lot Jake, somehow I missed that one!

Actually it now works in CI environment, but it broke executing the
tests via QtC. The work-around is to set the environement to 'clean'
*and* unset *all* QtC overrides (namely LD_LIBRARY_PATH, PATH,
QBS_RUN_FILE_PATH and QTDIR.

I tried to selectively unset them (in a combinatorial-ish way) and it
seem that I really need to unset *all* of them. Not sure what's going
on there...

Chris

>
>>
>> ...and then use that in place of AutotestRunner. In fact, I'd argue that we
>> should provide this by default in qbs as "QtAutotestRunner", so maybe look
>> for that in a future release. :)
>
> Sounds like a good idea, if this is a typical workaround people have to do.
>
> Thanks again,
> Chris
>
>>
>> Good luck!
>>
>> On Jun 19, 2016, at 12:23 AM, Ch'Gans <chgans at gna.org> wrote:
>>
>> Hi there,
>>
>> I'm using the Autorunner for my project to run my automated unit tests.
>> I am using multi QBS profile  (Qt version/toolchains) with no default
>> profile.
>>
>> When using QtCreator on my dev machine to run my autotests everything
>> is fine, when using qbs command line within my CI system the tests
>> fail because of the app being unable unable to find the required Qt
>> Plugins.
>> My command looks like: qbs build -p autotest-runner profile:qt57-lnxgcc53_64
>>
>> One way to solve this on CI is to export QT_QPA_PLATFORM_PLUGIN_PATH
>> in the shell before running Qbs, something I don't want to do since
>> the plugin path depends on the profile and i want to use a clean and
>> predictable shell env. (Note: exporting QTDIR didn't do the trick)
>>
>> I have tried to use 'qbs.setupBuildEnvironment: {
>> Environment.putEnv('QT_QPA_PLATFORM_PLUGIN_PATH', Qt.core.pluginPath);
>> }' inside my product definition, but then Qbs complains that it cannot
>> find the variable 'Qt'.
>>
>> Ideally i would like a simple solution that work out of the box. I
>> don't want to go with qt.conf or the likes.
>>
>> So my question is: What is the best way to build/setup my
>> autotest-runner environment so that it can load Qt plugins correctly?
>>
>> Notes:
>> * CI doesn't have an XServer runniing, so i'm trying to use the
>> 'offscreen' platform plugin, anyway this is not the source of my
>> problem, since by default the testapp try to load xcb and it doesn't
>> work for the reason explained above
>> * my test application's rpath contains
>> "/path/to/qt/unifed/5.X/gcc_64/lib" where 5.X correspond to the Qt
>> version defined for the Qbs profile in use.
>> * For now I'm only dealing with Linux, but later I would like to exec
>> my tests on Windows, and eventually on MacOSX too.
>>
>> Thanks in advance for any information that could shed some light on
>> how to achieve that 'the right way' (tm) with Qbs,
>> Chris
>> _______________________________________________
>> QBS mailing list
>> QBS at qt-project.org
>> http://lists.qt-project.org/mailman/listinfo/qbs
>>
>>
>> --
>> Jake Petroules - jake.petroules at qt.io
>> Consulting Services Engineer - The Qt Company
>> Qbs build system evangelist - qbs.io
>>



More information about the Qbs mailing list