Browse Source

Add cpack_ifw_configure_file command

Konstantin Podsvirov 9 years ago
parent
commit
6310f7c3a0

+ 1 - 0
Help/manual/cmake-modules.7.rst

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

+ 1 - 0
Help/module/CPackIFWConfigureFile.rst

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

+ 9 - 0
Help/release/dev/cpack-ifw-configure-file.rst

@@ -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.

+ 65 - 0
Modules/CPackIFWConfigureFile.cmake

@@ -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