CPackIFWConfigureFile

Added in version 3.8.

This module provides a command similar to configure_file() for configuring file templates prepared in QtIFW/SDK/Creator style.

Load this module in a CMake project with:

include(CPackIFWConfigureFile)

Commands

This module provides the following command:

cpack_ifw_configure_file

Copies a file template to output file and substitutes variable values referenced as %{VAR} or %VAR% from the input file template content:

cpack_ifw_configure_file(<input> <output>)
<input>

Input file template. If given as a relative path, it is interpreted as relative to the current source directory (CMAKE_CURRENT_SOURCE_DIR).

<output>

Output file. If given as a relative path, it is interpreted as relative to the current binary directory (CMAKE_CURRENT_BINARY_DIR).

Qt Installer Framework (QtIFW) uses @ characters for embedding predefined variables (TargetDir, StartMenuDir, etc.) in Qt installer scripts:

example.qs
component.addOperation(
  "CreateShortcut",
  "@TargetDir@/example.com.html",
  "@StartMenuDir@/Example Web Site.lnk"
);

The purpose of this command is to preserve the QtIFW predefined variables containing the @ characters (@VAR@), and instead use the % characters for template placeholders (%VAR%, %{VAR}) in Qt/IFW/SDK/Creator templates. The configure_file() command would otherwise replace all variable references containing the @ characters.

Each variable reference will be replaced with the current value of the variable, or the empty string if the variable is not defined.

Examples

In the following example this module is used to create an IFW component script from a given template file qt.tools.foo.qs.in, where %FOO_DOC_DIR% variable reference will be replaced by the values of the FOO_DOC_DIR CMake variable.

CMakeLists.txt
cmake_minimum_required(VERSION 3.8)

project(Foo)

# ...

include(CPackIFWConfigureFile)

set(FOO_DOC_DIR "doc/foo")

cpack_ifw_configure_file(qt.tools.foo.qs.in qt.tools.foo.qs)
qt.tools.foo.qs.in
function Component()
{
}

Component.prototype.createOperations = function()
{
  if (installer.value("os") === "win") {
    component.addOperation(
      "CreateShortcut",
      "@TargetDir@/%FOO_DOC_DIR%/example.com.html",
      "@StartMenuDir@/Example Web Site.lnk"
    );
  }

  component.createOperations();
}

// ...

See Also