Qbs

Blog Documentation Get Qbs Community

Scanner

Creates custom dependency scanners in products or modules. More...

Properties

Detailed Description

A Scanner item can appear inside a Module item, and allows to extract dependencies for artifacts from the artifacts' file contents. For example, this is what a scanner for "qrc" files might look like:

import qbs.Xml

Module {
  Scanner {
    inputs: 'qrc'
    scan: {
      var xml = new Xml.DomDocument(input.filePath);
      dependencies = [];
      // retrieve <file> entries from the XML document
      return dependencies;
    }
  }
}

Property Documentation

condition : bool

If true, the scanner is enabled, otherwise it does nothing.

Default: true

inputs : stringList

A list of file tags the input artifacts must match.

Default: Undefined

recursive : bool

Determines whether to scan the returned dependencies using the same scanner.

Default: false

scan : script

A script that reads the input artifact and returns either a string list with dependencies or an object.

If the return value is an array, it is interpreted as a list of dependency paths.

If the return value is an object, it may be empty or provide dependencies and/or scannerProperties. The dependencies property provides the dependency paths. The scannerProperties property is a map of custom values stored in the build graph and exposed as input.qbsScanners.<scannerId>.<propertyName> in prepare and outputArtifacts scripts (not in scan scripts). Use the separate searchPaths script to supply search paths.

The code in this script is treated as a function with the signature function(project, product, input, filePath), where input is the artifact at which the scan originated, and filePath is the currently scanned file. For non-recursive scans, filePath is always equal to input.filePath.

Default: Undefined

scannerId : string

An identifier for this scanner. For scanners declared in a module, the module name is prepended to this property to form a global scanner id used for caching scan results (for example, cpp.myScanner). For scanners declared directly in a product, the value is used as-is.

That global id must be unique within the product, including scanners coming from modules.

In prepare and outputArtifacts scripts, scanner properties are exposed via input.qbsScanners.<scannerId>.<propertyName> (use bracket notation when the id contains dots, for example input.qbsScanners["Qt.core.moc"]). They are not available on input in scan scripts; values come from the last scan stored in the build graph.

If not set explicitly, the pluginName is used for plugin-based scanners. Otherwise, a stable identifier (SHA1-hash) is derived from the scan script.

Default: Undefined

searchPaths : script

A script that returns the paths where to look for dependencies.

The code in this script is treated as a function with the signature function(project, product, input).

Default: Undefined