[QBS] ist it possible to have conditional artifacts?

Kurt Keller kk at parity-software.com
Wed Oct 16 17:02:04 CEST 2013


Am Mittwoch, den 16.10.2013
schrieb Christian Kandeler <christian.kandeler at digia.com>:

> On 10/15/2013 02:58 PM, Kurt Keller wrote:
> >>>     Rule {
> >>>       inputs: ['rpcsrc']
> >>>       Artifact {
> >>>         condition:
> >>> product.moduleProperty(product.moduleName,"generateCLNT")
> >>
> >> This looks like the right approach. Have you tried it?
> >
> > Yes now I have tried it. Qbs alway generates all 4 files. No matter,
> > how the properties generateSVC, generateCLNT, ... are set.
> 
> Looking at the qbs sources, it almost seems as if we simply forget to 
> evaluate the condition... Could you apply this patch and check whether 
> it helps?
> https://codereview.qt-project.org/#change,68361

After applying your patch it works a little bit better. I can now have
constant or expression-conditions like:

  condition: 1 > 0 ? true : false
  condition: true

but it can not resolve

  condition: product.moduleProperty(product.moduleName,"propertyName")

I give a more lengthy example:

Module {
  ...
  ...

  property bool generateHDR: true

  Rule {
    inputs: ['pswRpc']

    Artifact {
      condition: {
        var cond = product.moduleProperty(product.moduleName,"generateHDR");
        print("COND(condition) = " + cond);
        return cond;
      }
      fileTags:  ['hpp', 'rpc_header_file']
      fileName:  {
        var cond = product.moduleProperty(product.moduleName,"generateHDR");
        print("COND(fileName) = " + cond); 
        return input.baseName + '.h
      }
    }

    ...
    ...
}

when i 'run' this QBS reports on stdout:

COND(condition) = undefined
Setting up build graph for configuration qtc_qt511-debug
COND(fileName) = true

So it seems, that qbs does not have the complete 'environment' when
evaluating the condition of the Artifact but it does have the 'complete
environment' when it examines the property 'fileName'.

Regards
Kurt.




More information about the Qbs mailing list