aboutsummaryrefslogtreecommitdiffstats
path: root/cmake
diff options
context:
space:
mode:
authorCristian Adam <cristian.adam@qt.io>2020-02-06 13:17:20 +0100
committerAlessandro Portale <alessandro.portale@qt.io>2020-02-06 18:19:50 +0000
commita5178afb613e1e502df8b29b1b460ea3b0c12467 (patch)
tree9236416e41d210ab70fa8fe91e6436de5a70b6a8 /cmake
parent8d767a3a2139b710f97e3b14553aa98fdae1362f (diff)
CMake Deployment: Move creation of qt.conf to add_qtc_executable
Change-Id: Icbeed128cc99b077aad925f278aaf9534d3f9fec Reviewed-by: Alessandro Portale <alessandro.portale@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CMakeLists.txt73
-rw-r--r--cmake/InstallDependentSharedObjects.cmake.in13
-rw-r--r--cmake/QtCreatorAPI.cmake49
3 files changed, 70 insertions, 65 deletions
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
index 2d2d9f2b1b2..96625d0a123 100644
--- a/cmake/CMakeLists.txt
+++ b/cmake/CMakeLists.txt
@@ -6,85 +6,40 @@
#
# This way we are sure that all the binaries have been installed before.
-if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.16)
+option(DEPLOY_QTC_DEPENDENCIES
+ "Deployment of Qt, Clang, C++ Runtime libraries" ON)
+
+if (CMAKE_VERSION VERSION_GREATER_EQUAL 3.16 AND DEPLOY_QTC_DEPENDENCIES)
get_target_property(moc_binary Qt5::moc IMPORTED_LOCATION)
get_filename_component(moc_dir "${moc_binary}" DIRECTORY)
- get_filename_component(qt5_base_dir "${moc_dir}/../" ABSOLUTE)
+ get_filename_component(QT_BASE_DIR "${moc_dir}/../" ABSOLUTE)
if (MSVC AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
set(exclusion_mask PATTERN "*d.dll" EXCLUDE)
endif()
- if (WIN32)
- set(qt5_plugin_dest_dir ${IDE_BIN_PATH}/plugins)
- set(qt5_qml_dest_dir ${IDE_BIN_PATH}/qml)
- elseif(APPLE)
- set(qt5_plugin_dest_dir ${IDE_PLUGIN_PATH})
- set(qt5_qml_dest_dir ${IDE_DATA_PATH}/../Imports/qtquick2)
- else()
- set(qt5_plugin_dest_dir ${IDE_LIBRARY_BASE_PATH}/Qt/plugins)
- set(qt5_qml_dest_dir ${IDE_LIBRARY_BASE_PATH}/Qt/qml)
- endif()
-
foreach(plugin
- designer iconengines imageformats platforms platformthemes
- printsupport qmltooling sqldrivers styles)
- if(NOT EXISTS "${qt5_base_dir}/plugins/${plugin}")
+ assetimporters designer iconengines imageformats platforminputcontexts
+ platforms platformthemes printsupport qmltooling sqldrivers styles
+ xcbglintegrations)
+ if(NOT EXISTS "${QT_BASE_DIR}/plugins/${plugin}")
continue()
endif()
install(
- DIRECTORY "${qt5_base_dir}/plugins/${plugin}"
- DESTINATION ${qt5_plugin_dest_dir}
+ DIRECTORY "${QT_BASE_DIR}/plugins/${plugin}"
+ DESTINATION ${QT_DEST_PLUGIN_PATH}
${exclusion_mask}
)
- list(APPEND qt5_plugin_directories "${qt5_plugin_dest_dir}/${plugin}")
+ list(APPEND QT_PLUGIN_DIRECTORIES "${QT_DEST_PLUGIN_PATH}/${plugin}")
endforeach()
install(
- DIRECTORY "${qt5_base_dir}/qml/"
- DESTINATION ${qt5_qml_dest_dir}
+ DIRECTORY "${QT_BASE_DIR}/qml/"
+ DESTINATION ${QT_DEST_QML_PATH}
PATTERN "qml/*"
${exclusion_mask}
)
- install(CODE "
- function(create_qt_conf location base_dir)
- get_filename_component(install_prefix \"\${CMAKE_INSTALL_PREFIX}\" ABSOLUTE)
- file(RELATIVE_PATH qt_conf_binaries
- \"\${install_prefix}/\${base_dir}\"
- \"\${install_prefix}/${IDE_BIN_PATH}\"
- )
- if (NOT qt_conf_binaries)
- set(qt_conf_binaries .)
- endif()
- file(RELATIVE_PATH qt_conf_plugins
- \"\${install_prefix}/\${base_dir}\"
- \"\${install_prefix}/${qt5_plugin_dest_dir}\"
- )
- file(RELATIVE_PATH qt_conf_qml
- \"\${install_prefix}/\${base_dir}\"
- \"\${install_prefix}/${qt5_qml_dest_dir}\"
- )
-
- file(WRITE \"\${CMAKE_INSTALL_PREFIX}/\${location}/qt.conf\"
- \"[Paths]\n\"
- \"Binaries=\${qt_conf_binaries}\n\"
- \"Plugins=\${qt_conf_plugins}\n\"
- \"Qml2Imports=\${qt_conf_qml}\n\"
- )
- endfunction()
-
- if(APPLE)
- create_qt_conf(\"${IDE_DATA_PATH}\" \"${IDE_DATA_PATH}/..\")
- create_qt_conf(\"${IDE_LIBEXEC_PATH}\" \"${IDE_DATA_PATH}/..\")
- else()
- create_qt_conf(\"${IDE_APP_PATH}\" \"${IDE_APP_PATH}\")
- create_qt_conf(\"${IDE_LIBEXEC_PATH}\" \"${IDE_LIBEXEC_PATH}\")
- endif()
-
- "
- )
-
# Analyze the binaries and install missing dependencies if they are
# found the CMAKE_PREFIX_PATH e.g. Qt, Clang
configure_file(InstallDependentSharedObjects.cmake.in InstallDependentSharedObjects.cmake @ONLY)
diff --git a/cmake/InstallDependentSharedObjects.cmake.in b/cmake/InstallDependentSharedObjects.cmake.in
index 21494890808..a54e1fa5427 100644
--- a/cmake/InstallDependentSharedObjects.cmake.in
+++ b/cmake/InstallDependentSharedObjects.cmake.in
@@ -10,14 +10,15 @@ endif()
get_filename_component(install_prefix "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
# Get the dependencies of Qt's plugins
-foreach(plugin @qt5_plugin_directories@)
+set(qt_plugin_directories "@QT_PLUGIN_DIRECTORIES@")
+foreach(plugin IN LISTS qt_plugin_directories)
file(GLOB plugin_files "${install_prefix}/${plugin}/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
- list(APPEND qt5_plugin_files "${plugin_files}")
+ list(APPEND qt_plugin_files "${plugin_files}")
endforeach()
# Get the qml module dependencies
-file(GLOB_RECURSE qml_plugin_files "${install_prefix}/@qt5_qml_dest_dir@/*/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
-list(APPEND qt5_plugin_files "${qml_plugin_files}")
+file(GLOB_RECURSE qml_plugin_files "${install_prefix}/@QT_DEST_QML_PATH@/*/*@CMAKE_SHARED_LIBRARY_SUFFIX@")
+list(APPEND qt_plugin_files "${qml_plugin_files}")
set(installed_EXECUTABLES_NOT_PREFIXED "@__QTC_INSTALLED_EXECUTABLES@")
set(installed_LIBRARIES_NOT_PREFIXED "@__QTC_INSTALLED_LIBRARIES@")
@@ -74,7 +75,7 @@ while(installed_libraries_size GREATER 0)
endif()
set(qt_plugins_installed TRUE)
- set(installed_MODULES "${qt5_plugin_files}")
+ set(installed_MODULES "${qt_plugin_files}")
endif()
list(REMOVE_DUPLICATES unresolved_deps)
@@ -125,7 +126,7 @@ while(installed_libraries_size GREATER 0)
set(so_dest "${install_prefix}/@IDE_LIBRARY_PATH@/${so_dir}")
else()
set(so_src "${p}/lib/${so}")
- if (p STREQUAL "@qt5_base_dir@")
+ if (p STREQUAL "@QT_BASE_DIR@")
set(so_dest "${install_prefix}/@IDE_LIBRARY_BASE_PATH@/Qt/lib")
else()
set(so_dest "${install_prefix}/@IDE_LIBRARY_PATH@")
diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake
index a38429358da..fe1c1b2e763 100644
--- a/cmake/QtCreatorAPI.cmake
+++ b/cmake/QtCreatorAPI.cmake
@@ -46,6 +46,9 @@ if (APPLE)
set(_IDE_DATA_PATH "${_IDE_OUTPUT_PATH}/Resources")
set(_IDE_DOC_PATH "${_IDE_OUTPUT_PATH}/Resources/doc")
set(_IDE_BIN_PATH "${_IDE_OUTPUT_PATH}/MacOS")
+
+ set(QT_DEST_PLUGIN_PATH "${_IDE_PLUGIN_PATH}")
+ set(QT_DEST_QML_PATH "${_IDE_DATA_PATH}/../Imports/qtquick2")
else ()
set(_IDE_APP_PATH "bin")
set(_IDE_APP_TARGET "${IDE_ID}")
@@ -55,8 +58,12 @@ else ()
set(_IDE_PLUGIN_PATH "lib/${IDE_ID}/plugins")
if (WIN32)
set(_IDE_LIBEXEC_PATH "bin")
+ set(QT_DEST_PLUGIN_PATH "bin/plugins")
+ set(QT_DEST_QML_PATH "bin/qml")
else ()
set(_IDE_LIBEXEC_PATH "libexec/${IDE_ID}/bin")
+ set(QT_DEST_PLUGIN_PATH "lib/Qt/plugins")
+ set(QT_DEST_QML_PATH "lib/Qt/qml")
endif ()
set(_IDE_DATA_PATH "share/${IDE_ID}")
set(_IDE_DOC_PATH "share/doc/${IDE_ID}")
@@ -946,6 +953,48 @@ function(add_qtc_executable name)
install(TARGETS ${name} DESTINATION "${_DESTINATION}" OPTIONAL)
update_cached_list(__QTC_INSTALLED_EXECUTABLES
"${_DESTINATION}/${name}${CMAKE_EXECUTABLE_SUFFIX}")
+
+ install(CODE "
+ function(create_qt_conf location base_dir)
+ get_filename_component(install_prefix \"\${CMAKE_INSTALL_PREFIX}\" ABSOLUTE)
+ file(RELATIVE_PATH qt_conf_binaries
+ \"\${install_prefix}/\${location}\"
+ \"\${install_prefix}/\${base_dir}\"
+ )
+ if (NOT qt_conf_binaries)
+ set(qt_conf_binaries .)
+ endif()
+ file(RELATIVE_PATH qt_conf_plugins
+ \"\${install_prefix}/\${base_dir}\"
+ \"\${install_prefix}/${QT_DEST_PLUGIN_PATH}\"
+ )
+ file(RELATIVE_PATH qt_conf_qml
+ \"\${install_prefix}/\${base_dir}\"
+ \"\${install_prefix}/${QT_DEST_QML_PATH}\"
+ )
+ file(WRITE \"\${CMAKE_INSTALL_PREFIX}/\${location}/qt.conf\"
+ \"[Paths]\n\"
+ \"Plugins=\${qt_conf_plugins}\n\"
+ \"Qml2Imports=\${qt_conf_qml}\n\"
+ )
+ # For Apple for Qt Creator do not add a Prefix
+ if (NOT APPLE OR NOT qt_conf_binaries STREQUAL \"../\")
+ file(APPEND \"\${CMAKE_INSTALL_PREFIX}/\${location}/qt.conf\"
+ \"Prefix=\${qt_conf_binaries}\n\"
+ )
+ endif()
+
+ endfunction()
+ if(APPLE)
+ create_qt_conf(\"${_EXECUTABLE_PATH}\" \"${IDE_DATA_PATH}/..\")
+ elseif (WIN32)
+ create_qt_conf(\"${_EXECUTABLE_PATH}\" \"${IDE_APP_PATH}\")
+ else()
+ create_qt_conf(\"${_EXECUTABLE_PATH}\" \"${IDE_LIBRARY_BASE_PATH}/Qt\")
+ endif()
+ "
+ )
+
endif()
endfunction()