Browse Source

Merge topic 'cpackifw-framework-version'

993ebdc7 CPackIFW: Framework version

Acked-by: Kitware Robot <[email protected]>
Merge-request: !761
Brad King 8 years ago
parent
commit
f0ae821681
1 changed files with 50 additions and 13 deletions
  1. 50 13
      Modules/CPackIFW.cmake

+ 50 - 13
Modules/CPackIFW.cmake

@@ -717,21 +717,58 @@ set(CPackIFW_CMake_INCLUDED 1)
 # Framework version
 #=============================================================================
 
-if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND CPACK_IFW_DEVTOOL_EXECUTABLE)
-  execute_process(COMMAND
-    "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}" --framework-version
-    OUTPUT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION)
-  if(CPACK_IFW_FRAMEWORK_VERSION)
-    string(REPLACE " " ""
-      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION}")
-    string(REPLACE "\t" ""
-      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION}")
-    string(REPLACE "\n" ""
-      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION}")
-    if(CPACK_IFW_VERBOSE)
-      message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} version")
+set(CPACK_IFW_FRAMEWORK_VERSION_FORCED ""
+  CACHE STRING "The forced version of used QtIFW tools")
+mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+set(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT 1
+  CACHE STRING "The timeout to return QtIFW framework version string from \"installerbase\" executable")
+mark_as_advanced(CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT)
+if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+  set(CPACK_IFW_FRAMEWORK_VERSION)
+  # Invoke version from "installerbase" executable
+  foreach(_ifw_version_argument --framework-version --version)
+    if(NOT CPACK_IFW_FRAMEWORK_VERSION)
+      execute_process(COMMAND
+        "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}" ${_ifw_version_argument}
+        TIMEOUT ${CPACK_IFW_FRAMEWORK_VERSION_TIMEOUT}
+        RESULT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_RESULT
+        OUTPUT_VARIABLE CPACK_IFW_FRAMEWORK_VERSION_OUTPUT
+        OUTPUT_STRIP_TRAILING_WHITESPACE
+        ENCODING UTF8)
+      if(NOT CPACK_IFW_FRAMEWORK_VERSION_RESULT AND CPACK_IFW_FRAMEWORK_VERSION_OUTPUT)
+        string(REGEX MATCH "[0-9]+(\\.[0-9]+)*"
+          CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_FRAMEWORK_VERSION_OUTPUT}")
+        if(CPACK_IFW_FRAMEWORK_VERSION)
+          if("${_ifw_version_argument}" STREQUAL "--framework-version")
+            set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION")
+          elseif("${_ifw_version_argument}" STREQUAL "--version")
+            set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_FRAMEWORK_VERSION")
+          endif()
+        endif()
+      endif()
+    endif()
+  endforeach()
+  # Finaly try to get version from executable path
+  if(NOT CPACK_IFW_FRAMEWORK_VERSION)
+    string(REGEX MATCH "[0-9]+(\\.[0-9]+)*"
+      CPACK_IFW_FRAMEWORK_VERSION "${CPACK_IFW_INSTALLERBASE_EXECUTABLE}")
+    if(CPACK_IFW_FRAMEWORK_VERSION)
+      set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "INSTALLERBASE_PATH")
     endif()
   endif()
+elseif(CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+  set(CPACK_IFW_FRAMEWORK_VERSION ${CPACK_IFW_FRAMEWORK_VERSION_FORCED})
+  set(CPACK_IFW_FRAMEWORK_VERSION_SOURCE "FORCED")
+endif()
+if(CPACK_IFW_VERBOSE)
+  if(CPACK_IFW_FRAMEWORK_VERSION AND CPACK_IFW_FRAMEWORK_VERSION_FORCED)
+    message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} (forced) version")
+  elseif(CPACK_IFW_FRAMEWORK_VERSION)
+    message(STATUS "Found QtIFW ${CPACK_IFW_FRAMEWORK_VERSION} version")
+  endif()
+endif()
+if(CPACK_IFW_INSTALLERBASE_EXECUTABLE AND NOT CPACK_IFW_FRAMEWORK_VERSION)
+  message(WARNING "Could not detect QtIFW tools version. Set used version to variable \"CPACK_IFW_FRAMEWORK_VERSION_FORCED\" manualy.")
 endif()
 
 #=============================================================================