Add cpack_ifw_configure_file command

This commit is contained in:
Konstantin Podsvirov 2016-12-13 02:01:14 +03:00
parent 914728f8d7
commit 6310f7c3a0
4 changed files with 76 additions and 0 deletions

View File

@ -59,6 +59,7 @@ All Modules
/module/CPackDeb
/module/CPackDMG
/module/CPackIFW
/module/CPackIFWConfigureFile
/module/CPackNSIS
/module/CPackPackageMaker
/module/CPackProductBuild

View File

@ -0,0 +1 @@
.. cmake-module:: ../../Modules/CPackIFWConfigureFile.cmake

View File

@ -0,0 +1,9 @@
cpack-ifw-configure-file
------------------------
* The :command:`cpack_ifw_configure_file` command was added
(in :module:`CPackIFWConfigureFile`) to configure file templates prepared
in QtIFW/SDK/Creator style.
* The :module:`CPackIFWConfigureFile` module was added to define
:command:`cpack_ifw_configure_file` command.

View File

@ -0,0 +1,65 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#.rst:
# CPackIFWConfigureFile
# ---------------------
#
# The module defines :command:`configure_file` similar command to
# configure file templates prepared in QtIFW/SDK/Creator style.
#
#
# Commands
# ^^^^^^^^
#
# The module defines the following commands:
#
# .. command:: cpack_ifw_configure_file
#
# Copy a file to another location and modify its contents.
#
# ::
#
# cpack_ifw_configure_file(<input> <output>)
#
# Copies an ``<input>`` file to an ``<output>`` file and substitutes variable
# values referenced as ``%{VAR}`` or ``%VAR%`` in the input file content.
# Each variable reference will be replaced with the current value of the
# variable, or the empty string if the variable is not defined.
#
# NOTE: This file used to himself packaging via CPack IFW generator and
# should be compatible with minimal CMake version defined in
# ../CMakeLists.txt file.
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