mirror of
https://github.com/Kitware/CMake.git
synced 2025-12-30 02:10:10 -06:00
- Extended command description. - Added basic "Examples" section. - Added "See Also" section.
149 lines
4.2 KiB
CMake
149 lines
4.2 KiB
CMake
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
|
|
# file LICENSE.rst or https://cmake.org/licensing for details.
|
|
|
|
#[=======================================================================[.rst:
|
|
CPackIFWConfigureFile
|
|
---------------------
|
|
|
|
.. versionadded:: 3.8
|
|
|
|
This module provides a command similar to :command:`configure_file` for
|
|
configuring file templates prepared in QtIFW/SDK/Creator style.
|
|
|
|
Load this module in a CMake project with:
|
|
|
|
.. code-block:: cmake
|
|
|
|
include(CPackIFWConfigureFile)
|
|
|
|
Commands
|
|
^^^^^^^^
|
|
|
|
This module provides the following command:
|
|
|
|
.. 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:
|
|
|
|
.. code-block:: cmake
|
|
|
|
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
|
|
(:variable:`CMAKE_CURRENT_SOURCE_DIR`).
|
|
|
|
``<output>``
|
|
Output file. If given as a relative path, it is interpreted as relative
|
|
to the current binary directory (:variable:`CMAKE_CURRENT_BINARY_DIR`).
|
|
|
|
Qt Installer Framework (QtIFW) uses ``@`` characters for embedding
|
|
predefined variables (``TargetDir``, ``StartMenuDir``, etc.) in Qt
|
|
installer scripts:
|
|
|
|
.. code-block:: javascript
|
|
:caption: ``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 :command:`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.
|
|
|
|
.. code-block:: cmake
|
|
:caption: ``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)
|
|
|
|
.. code-block:: javascript
|
|
:caption: ``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
|
|
^^^^^^^^
|
|
|
|
* The :cpack_gen:`CPack IFW Generator`.
|
|
* The :module:`CPackIFW` module.
|
|
#]=======================================================================]
|
|
|
|
if(NOT DEFINED CPackIFWConfigureFile_CMake_INCLUDED)
|
|
set(CPackIFWConfigureFile_CMake_INCLUDED 1)
|
|
|
|
macro(cpack_ifw_configure_file INPUT OUTPUT)
|
|
file(READ "${INPUT}" _tmp)
|
|
foreach(_tmp_regex "%{([^%}]+)}" "%([^%]+)%")
|
|
string(REGEX MATCHALL "${_tmp_regex}" _tmp_vars "${_tmp}")
|
|
while(_tmp_vars)
|
|
foreach(_tmp_var ${_tmp_vars})
|
|
string(REGEX REPLACE "${_tmp_regex}" "\\1"
|
|
_tmp_var_name "${_tmp_var}")
|
|
if(DEFINED ${_tmp_var_name})
|
|
set(_tmp_var_value "${${_tmp_var_name}}")
|
|
elseif(NOT "$ENV{${_tmp_var_name}}" STREQUAL "")
|
|
set(_tmp_var_value "$ENV{${_tmp_var_name}}")
|
|
else()
|
|
set(_tmp_var_value "")
|
|
endif()
|
|
string(REPLACE "${_tmp_var}" "${_tmp_var_value}" _tmp "${_tmp}")
|
|
endforeach()
|
|
string(REGEX MATCHALL "${_tmp_regex}" _tmp_vars "${_tmp}")
|
|
endwhile()
|
|
endforeach()
|
|
if(IS_ABSOLUTE "${OUTPUT}")
|
|
file(WRITE "${OUTPUT}" "${_tmp}")
|
|
else()
|
|
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT}" "${_tmp}")
|
|
endif()
|
|
endmacro()
|
|
|
|
endif() # NOT DEFINED CPackIFWConfigureFile_CMake_INCLUDED
|