summaryrefslogtreecommitdiff
path: root/cmake
diff options
context:
space:
mode:
Diffstat (limited to 'cmake')
-rw-r--r--cmake/CMakeLists.txt56
-rw-r--r--cmake/FindDesignerComponents.cmake2
-rw-r--r--cmake/Findelfutils.cmake70
-rw-r--r--cmake/InstallDependentSharedObjects.cmake.in151
-rw-r--r--cmake/QtCreatorAPI.cmake177
-rw-r--r--cmake/QtCreatorIDEBranding.cmake9
6 files changed, 448 insertions, 17 deletions
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
new file mode 100644
index 0000000000..96625d0a12
--- /dev/null
+++ b/cmake/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Deployment of Qt, Clang, C++ Runtime libraries is being done in this script.
+#
+# It should be included as a subdirectory as last because of CMake's
+# cmake_install.cmake script behviour of including subdirectories at the end
+# of the script, not respecting the order of install commands from CMakeLists.txt
+#
+# This way we are sure that all the binaries have been installed before.
+
+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(QT_BASE_DIR "${moc_dir}/../" ABSOLUTE)
+
+ if (MSVC AND NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
+ set(exclusion_mask PATTERN "*d.dll" EXCLUDE)
+ endif()
+
+ foreach(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 "${QT_BASE_DIR}/plugins/${plugin}"
+ DESTINATION ${QT_DEST_PLUGIN_PATH}
+ ${exclusion_mask}
+ )
+ list(APPEND QT_PLUGIN_DIRECTORIES "${QT_DEST_PLUGIN_PATH}/${plugin}")
+ endforeach()
+
+ install(
+ DIRECTORY "${QT_BASE_DIR}/qml/"
+ DESTINATION ${QT_DEST_QML_PATH}
+ PATTERN "qml/*"
+ ${exclusion_mask}
+ )
+
+ # 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)
+ install(SCRIPT ${CMAKE_CURRENT_BINARY_DIR}/InstallDependentSharedObjects.cmake)
+
+ if (MSVC)
+ set(CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP ON)
+ include(InstallRequiredsystemLibraries)
+
+ install(PROGRAMS ${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS}
+ DESTINATION ${IDE_APP_PATH}
+ )
+ endif()
+endif()
diff --git a/cmake/FindDesignerComponents.cmake b/cmake/FindDesignerComponents.cmake
index 3d2b0255de..50073b8d6c 100644
--- a/cmake/FindDesignerComponents.cmake
+++ b/cmake/FindDesignerComponents.cmake
@@ -34,7 +34,7 @@ if (NOT _designer_location)
get_target_property(_designer_location Qt5::Designer IMPORTED_LOCATION)
endif()
get_target_property(_designer_is_framework Qt5::Designer FRAMEWORK)
-find_library(DesignerComponents_LIBRARIES NAMES Qt5DesignerComponents QtDesignerComponents
+find_library(DesignerComponents_LIBRARIES NAMES Qt5DesignerComponents QtDesignerComponents Qt5DesignerComponentsd QtDesignerComponentsd
HINTS "${_designer_location}/.." "${_designer_location}/../..")
if (_designer_is_framework)
diff --git a/cmake/Findelfutils.cmake b/cmake/Findelfutils.cmake
new file mode 100644
index 0000000000..b4d043d53e
--- /dev/null
+++ b/cmake/Findelfutils.cmake
@@ -0,0 +1,70 @@
+#.rst:
+# Findelfutils
+# -----------------
+#
+# Try to locate the elfutils binary installation
+#
+# The ``ELFUTILS_INSTALL_DIR`` (CMake or Environment) variable should be used
+# to pinpoint the elfutils binary installation
+#
+# If found, this will define the following variables:
+#
+# ``elfutils_FOUND``
+# True if the elfutils header and library files have been found
+#
+# ``elfutils::dw``
+# ``elfutils::elf``
+# Imported targets containing the includes and libraries need to build
+# against
+#
+
+if (TARGET elfutils::dw AND TARGET elfutils::elf)
+ set(elfutils_FOUND TRUE)
+ return()
+endif()
+
+find_path(ELFUTILS_INCLUDE_DIR
+ NAMES libdwfl.h elfutils/libdwfl.h
+ PATH_SUFFIXES include
+ HINTS
+ "${ELFUTILS_INSTALL_DIR}" ENV ELFUTILS_INSTALL_DIR
+)
+
+foreach(lib dw elf eu_compat)
+ find_library(ELFUTILS_LIB_${lib}
+ NAMES ${lib}
+ PATH_SUFFIXES lib
+ HINTS
+ "${ELFUTILS_INSTALL_DIR}" ENV ELFUTILS_INSTALL_DIR
+ )
+endforeach()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(elfutils
+ DEFAULT_MSG
+ ELFUTILS_INCLUDE_DIR ELFUTILS_LIB_dw ELFUTILS_LIB_elf
+)
+
+if(elfutils_FOUND)
+ foreach(lib dw elf)
+ if (NOT TARGET elfutils::${lib})
+ add_library(elfutils::${lib} UNKNOWN IMPORTED)
+ set_target_properties(elfutils::${lib}
+ PROPERTIES
+ IMPORTED_LOCATION "${ELFUTILS_LIB_${lib}}"
+ INTERFACE_INCLUDE_DIRECTORIES
+ "${ELFUTILS_INCLUDE_DIR};${ELFUTILS_INCLUDE_DIR}/elfutils"
+ )
+ if (ELFUTILS_LIB_eu_compat)
+ target_link_libraries(elfutils::${lib} INTERFACE ${ELFUTILS_LIB_eu_compat})
+ endif()
+ endif()
+ endforeach()
+endif()
+
+mark_as_advanced(ELFUTILS_INCLUDE_DIR ELFUTILS_LIB_elf ELFUTILS_LIB_dw)
+
+include(FeatureSummary)
+set_package_properties(elfutils PROPERTIES
+ URL "https://sourceware.org/elfutils/"
+ DESCRIPTION "a collection of utilities and libraries to read, create and modify ELF binary files")
diff --git a/cmake/InstallDependentSharedObjects.cmake.in b/cmake/InstallDependentSharedObjects.cmake.in
new file mode 100644
index 0000000000..a54e1fa542
--- /dev/null
+++ b/cmake/InstallDependentSharedObjects.cmake.in
@@ -0,0 +1,151 @@
+if (MINGW AND @CMAKE_CXX_COMPILER_ID@ MATCHES "Clang")
+ set(CMAKE_GET_RUNTIME_DEPENDENCIES_TOOL objdump)
+endif()
+if (WIN32)
+ set(filter_regex PRE_EXCLUDE_REGEXES "api-ms-.*|ext-ms-.*")
+elseif (APPLE)
+ set(filter_regex PRE_EXCLUDE_REGEXES "libiodbc.*|libpq.*")
+endif()
+
+get_filename_component(install_prefix "${CMAKE_INSTALL_PREFIX}" ABSOLUTE)
+
+# Get the dependencies of Qt's plugins
+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 qt_plugin_files "${plugin_files}")
+endforeach()
+
+# Get the qml module dependencies
+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@")
+set(installed_MODULES_NOT_PREFIXED "@__QTC_INSTALLED_PLUGINS@")
+
+foreach(binary_type EXECUTABLES LIBRARIES MODULES)
+ foreach(element IN LISTS installed_${binary_type}_NOT_PREFIXED)
+ if (EXISTS "${install_prefix}/${element}")
+ list(APPEND installed_${binary_type} "${install_prefix}/${element}")
+ endif()
+ endforeach()
+endforeach()
+
+# Install first the dependencies, and continue to install the dependencies
+# of the installed dependencies e.g. libicu for libQt5Core on Linux.
+
+list(LENGTH installed_LIBRARIES installed_libraries_size)
+unset(qt_plugins_installed)
+
+while(installed_libraries_size GREATER 0)
+ foreach(binary_type EXECUTABLES LIBRARIES MODULES)
+ list(LENGTH installed_${binary_type} list_size)
+ if (NOT list_size EQUAL 0)
+ set(${binary_type}_TO_ANALYZE ${binary_type} "${installed_${binary_type}}")
+ else()
+ set(${binary_type}_TO_ANALYZE "")
+ endif()
+ endforeach()
+
+ file(GET_RUNTIME_DEPENDENCIES
+ UNRESOLVED_DEPENDENCIES_VAR unresolved_deps
+ RESOLVED_DEPENDENCIES_VAR resolved_deps
+ CONFLICTING_DEPENDENCIES_PREFIX conflicts
+ ${EXECUTABLES_TO_ANALYZE}
+ ${LIBRARIES_TO_ANALYZE}
+ ${MODULES_TO_ANALYZE}
+ DIRECTORIES
+ "${install_prefix}/@IDE_BIN_PATH@"
+ "${install_prefix}/@IDE_PLUGIN_PATH@"
+ "${install_prefix}/@IDE_LIBRARY_PATH@"
+ "${install_prefix}/@IDE_LIBRARY_BASE_PATH@/Qt/lib"
+ ${filter_regex}
+ )
+
+ # Clear for next step
+ set(installed_EXECUTABLES "")
+ set(installed_LIBRARIES "")
+ set(installed_MODULES "")
+
+ if (NOT qt_plugins_installed)
+ if (WIN32)
+ # Needed by QmlDesigner, QmlProfiler, but they are not referenced directly.
+ list(APPEND unresolved_deps libEGL.dll libGLESv2.dll)
+ endif()
+
+ set(qt_plugins_installed TRUE)
+ set(installed_MODULES "${qt_plugin_files}")
+ endif()
+
+ list(REMOVE_DUPLICATES unresolved_deps)
+ list(REMOVE_DUPLICATES resolved_deps)
+
+ file(TO_CMAKE_PATH "@CMAKE_PREFIX_PATH@" prefix_path)
+
+ # Add parent link directory paths. Needed for e.g. MinGW choco libstdc++-6.dll
+ if (WIN32)
+ foreach(path "@CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES@")
+ get_filename_component(parent_path "${path}" DIRECTORY)
+ list(APPEND prefix_path "${parent_path}")
+ endforeach()
+ endif()
+
+ # On Linux the Qt libraries might exist in the system, and they are passed
+ # as resolved, therefore scan the resolved dependencies too
+ if (NOT WIN32 AND NOT APPLE)
+ list(APPEND unresolved_deps "${resolved_deps}")
+ endif()
+
+ foreach(so IN LISTS unresolved_deps)
+
+ # Skip the installed dependencies
+ string(FIND "${so}" "${install_prefix}" found_prefix_path)
+ if (NOT found_prefix_path EQUAL -1)
+ continue()
+ endif()
+
+ # On Linux get the name of the resolved Qt dependency, this would come from ldconfig
+ # with the full path on the system
+ if (NOT APPLE AND NOT WIN32)
+ get_filename_component(so "${so}" NAME)
+ endif()
+
+ if (APPLE)
+ string(REPLACE "@rpath/" "" so "${so}")
+ get_filename_component(so_dir "${so}" DIRECTORY)
+ endif()
+
+ message(STATUS "Dependency: ${so}")
+ foreach(p IN LISTS prefix_path)
+ if (WIN32)
+ set(so_src "${p}/bin/${so}")
+ set(so_dest "${install_prefix}/@IDE_BIN_PATH@")
+ elseif(APPLE)
+ set(so_src "${p}/lib/${so}")
+ set(so_dest "${install_prefix}/@IDE_LIBRARY_PATH@/${so_dir}")
+ else()
+ set(so_src "${p}/lib/${so}")
+ 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@")
+ endif()
+ endif()
+
+ message(STATUS "Looking at: ${so_src}")
+ if (EXISTS "${so_src}")
+ file(INSTALL "${so_src}" DESTINATION "${so_dest}" FOLLOW_SYMLINK_CHAIN)
+ if (APPLE)
+ get_filename_component(so "${so}" NAME)
+ endif()
+ list(APPEND installed_LIBRARIES "${so_dest}/${so}")
+ break()
+ endif()
+
+ endforeach()
+ endforeach()
+
+ list(LENGTH installed_LIBRARIES installed_libraries_size)
+
+endwhile()
diff --git a/cmake/QtCreatorAPI.cmake b/cmake/QtCreatorAPI.cmake
index 03df34bd44..fe1c1b2e76 100644
--- a/cmake/QtCreatorAPI.cmake
+++ b/cmake/QtCreatorAPI.cmake
@@ -1,3 +1,8 @@
+if(QT_CREATOR_API_DEFINED)
+ return()
+endif()
+set(QT_CREATOR_API_DEFINED TRUE)
+
include(FeatureSummary)
#
@@ -15,15 +20,21 @@ list(APPEND DEFAULT_DEFINES
if (WIN32)
list(APPEND DEFAULT_DEFINES UNICODE _UNICODE _CRT_SECURE_NO_WARNINGS)
+
+ if (NOT BUILD_WITH_PCH)
+ # Windows 8 0x0602
+ list(APPEND DEFAULT_DEFINES
+ WINVER=0x0602 _WIN32_WINNT=0x0602
+ WIN32_LEAN_AND_MEAN)
+ endif()
endif()
#
# Setup path handling
#
-set(_IDE_APP_PATH "bin")
-
if (APPLE)
+ set(_IDE_APP_PATH ".")
set(_IDE_APP_TARGET "${IDE_DISPLAY_NAME}")
set(_IDE_OUTPUT_PATH "${_IDE_APP_PATH}/${_IDE_APP_TARGET}.app/Contents")
@@ -35,7 +46,11 @@ 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}")
set(_IDE_LIBRARY_BASE_PATH "lib")
@@ -43,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}")
@@ -74,6 +93,8 @@ list(APPEND DEFAULT_DEFINES
)
file(RELATIVE_PATH _PLUGIN_TO_LIB "/${IDE_PLUGIN_PATH}" "/${IDE_LIBRARY_PATH}")
+file(RELATIVE_PATH _PLUGIN_TO_QT "/${IDE_PLUGIN_PATH}" "/${IDE_LIBRARY_BASE_PATH}/Qt/lib")
+file(RELATIVE_PATH _LIB_TO_QT "/${IDE_LIBRARY_PATH}" "/${IDE_LIBRARY_BASE_PATH}/Qt/lib")
if (APPLE)
set(_RPATH_BASE "@executable_path")
@@ -85,13 +106,16 @@ elseif (WIN32)
set(_PLUGIN_RPATH "")
else()
set(_RPATH_BASE "\$ORIGIN")
- set(_LIB_RPATH "\$ORIGIN")
- set(_PLUGIN_RPATH "\$ORIGIN;\$ORIGIN/${_PLUGIN_TO_LIB}")
+ set(_LIB_RPATH "\$ORIGIN;\$ORIGIN/${_LIB_TO_QT}")
+ set(_PLUGIN_RPATH "\$ORIGIN;\$ORIGIN/${_PLUGIN_TO_LIB};\$ORIGIN/${_PLUGIN_TO_QT}")
endif ()
set(__QTC_PLUGINS "" CACHE INTERNAL "*** Internal ***")
+set(__QTC_INSTALLED_PLUGINS "" CACHE INTERNAL "*** Internal ***")
set(__QTC_LIBRARIES "" CACHE INTERNAL "*** Internal ***")
+set(__QTC_INSTALLED_LIBRARIES "" CACHE INTERNAL "*** Internal ***")
set(__QTC_EXECUTABLES "" CACHE INTERNAL "*** Internal ***")
+set(__QTC_INSTALLED_EXECUTABLES "" CACHE INTERNAL "*** Internal ***")
set(__QTC_TESTS "" CACHE INTERNAL "*** Internal ***")
#
@@ -211,7 +235,11 @@ endfunction()
function(finalize_test_setup test_name)
# Never translate tests:
- set_tests_properties(${name} PROPERTIES QT_SKIP_TRANSLATION ON)
+ set_tests_properties(${name}
+ PROPERTIES
+ QT_SKIP_TRANSLATION ON
+ TIMEOUT 5
+ )
if (WIN32)
list(APPEND env_path $ENV{PATH})
@@ -222,6 +250,10 @@ function(finalize_test_setup test_name)
list(APPEND env_path $<TARGET_FILE_DIR:libclang>)
endif()
+ if (TARGET elfutils::elf)
+ list(APPEND env_path $<TARGET_FILE_DIR:elfutils::elf>)
+ endif()
+
string(REPLACE "/" "\\" env_path "${env_path}")
string(REPLACE ";" "\\;" env_path "${env_path}")
@@ -384,10 +416,16 @@ endfunction()
#
function(add_qtc_library name)
- cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;BUILD_BY_DEFAULT" "DESTINATION"
+ cmake_parse_arguments(_arg "STATIC;OBJECT;SKIP_TRANSLATION;BUILD_BY_DEFAULT;ALLOW_ASCII_CASTS"
+ "DESTINATION"
"DEFINES;DEPENDS;EXTRA_TRANSLATIONS;INCLUDES;PUBLIC_DEFINES;PUBLIC_DEPENDS;PUBLIC_INCLUDES;SOURCES;EXPLICIT_MOC;SKIP_AUTOMOC;PROPERTIES" ${ARGN}
)
+ set(default_defines_copy ${DEFAULT_DEFINES})
+ if (_arg_ALLOW_ASCII_CASTS)
+ list(REMOVE_ITEM default_defines_copy QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII)
+ endif()
+
if (${_arg_UNPARSED_ARGUMENTS})
message(FATAL_ERROR "add_qtc_library had unparsed arguments")
endif()
@@ -435,7 +473,7 @@ function(add_qtc_library name)
set_public_includes(${name} "${_arg_PUBLIC_INCLUDES}")
target_compile_definitions(${name}
- PRIVATE ${EXPORT_SYMBOL} ${DEFAULT_DEFINES} ${_arg_DEFINES} ${TEST_DEFINES}
+ PRIVATE ${EXPORT_SYMBOL} ${default_defines_copy} ${_arg_DEFINES} ${TEST_DEFINES}
PUBLIC ${_arg_PUBLIC_DEFINES}
)
@@ -478,6 +516,14 @@ function(add_qtc_library name)
)
enable_pch(${name})
+ if (WIN32 AND library_type STREQUAL "SHARED")
+ # Match qmake naming scheme e.g. Library4.dll
+ set_target_properties(${name} PROPERTIES
+ SUFFIX "${PROJECT_VERSION_MAJOR}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ PREFIX ""
+ )
+ endif()
+
unset(NAMELINK_OPTION)
if (library_type STREQUAL "SHARED")
set(NAMELINK_OPTION NAMELINK_SKIP)
@@ -499,6 +545,24 @@ function(add_qtc_library name)
OPTIONAL
)
+ if (library_type STREQUAL "SHARED")
+ set(target_prefix ${CMAKE_SHARED_LIBRARY_PREFIX})
+ if (WIN32)
+ set(target_suffix ${PROJECT_VERSION_MAJOR}${CMAKE_SHARED_LIBRARY_SUFFIX})
+ set(target_prefix "")
+ elseif(APPLE)
+ set(target_suffix .${PROJECT_VERSION_MAJOR}${CMAKE_SHARED_LIBRARY_SUFFIX})
+ else()
+ set(target_suffix ${CMAKE_SHARED_LIBRARY_SUFFIX}.${PROJECT_VERSION_MAJOR})
+ endif()
+ set(lib_dir "${IDE_LIBRARY_PATH}")
+ if (WIN32)
+ set(lib_dir "${_DESTINATION}")
+ endif()
+ update_cached_list(__QTC_INSTALLED_LIBRARIES
+ "${lib_dir}/${target_prefix}${name}${target_suffix}")
+ endif()
+
if (NAMELINK_OPTION)
install(TARGETS ${name}
LIBRARY
@@ -690,6 +754,14 @@ function(add_qtc_plugin target_name)
QT_SKIP_TRANSLATION "${skip_translation}"
${_arg_PROPERTIES}
)
+
+ if (WIN32)
+ # Match qmake naming scheme e.g. Plugin4.dll
+ set_target_properties(${target_name} PROPERTIES
+ SUFFIX "${PROJECT_VERSION_MAJOR}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+ PREFIX ""
+ )
+ endif()
append_extra_translations("${target_name}" "${_arg_EXTRA_TRANSLATIONS}")
enable_pch(${target_name})
@@ -707,6 +779,16 @@ function(add_qtc_plugin target_name)
COMPONENT Devel EXCLUDE_FROM_ALL
OPTIONAL
)
+ get_target_property(target_suffix ${target_name} SUFFIX)
+ get_target_property(target_prefix ${target_name} PREFIX)
+ if (target_suffix STREQUAL "target_suffix-NOTFOUND")
+ set(target_suffix ${CMAKE_SHARED_LIBRARY_SUFFIX})
+ endif()
+ if (target_prefix STREQUAL "target_prefix-NOTFOUND")
+ set(target_prefix ${CMAKE_SHARED_LIBRARY_PREFIX})
+ endif()
+ update_cached_list(__QTC_INSTALLED_PLUGINS
+ "${plugin_dir}/${target_prefix}${target_name}${target_suffix}")
endif()
endfunction()
@@ -790,7 +872,7 @@ function(extend_qtc_plugin target_name)
endfunction()
function(add_qtc_executable name)
- cmake_parse_arguments(_arg "SKIP_INSTALL;SKIP_TRANSLATION"
+ cmake_parse_arguments(_arg "SKIP_INSTALL;SKIP_TRANSLATION;ALLOW_ASCII_CASTS"
"DESTINATION"
"DEFINES;DEPENDS;EXTRA_TRANSLATIONS;INCLUDES;SOURCES;PROPERTIES" ${ARGN})
@@ -798,6 +880,11 @@ function(add_qtc_executable name)
message(FATAL_ERROR "add_qtc_executable had unparsed arguments!")
endif()
+ set(default_defines_copy ${DEFAULT_DEFINES})
+ if (_arg_ALLOW_ASCII_CASTS)
+ list(REMOVE_ITEM default_defines_copy QT_NO_CAST_TO_ASCII QT_RESTRICTED_CAST_FROM_ASCII)
+ endif()
+
update_cached_list(__QTC_EXECUTABLES "${name}")
string(TOUPPER "BUILD_EXECUTABLE_${name}" _build_executable_var)
@@ -829,11 +916,9 @@ function(add_qtc_executable name)
endif()
endif()
- file(RELATIVE_PATH _RELATIVE_LIB_PATH "/${_EXECUTABLE_PATH}" "/${IDE_LIBRARY_PATH}")
-
add_executable("${name}" ${_arg_SOURCES})
target_include_directories("${name}" PRIVATE "${CMAKE_BINARY_DIR}/src" ${_arg_INCLUDES})
- target_compile_definitions("${name}" PRIVATE ${_arg_DEFINES} ${TEST_DEFINES} ${DEFAULT_DEFINES})
+ target_compile_definitions("${name}" PRIVATE ${default_defines_copy} ${TEST_DEFINES} ${_arg_DEFINES} )
target_link_libraries("${name}" PRIVATE ${_arg_DEPENDS} ${IMPLICIT_DEPENDS})
set(skip_translation OFF)
@@ -841,10 +926,20 @@ function(add_qtc_executable name)
set(skip_translation ON)
endif()
+ file(RELATIVE_PATH relative_lib_path "/${_EXECUTABLE_PATH}" "/${IDE_LIBRARY_PATH}")
+
+ set(build_rpath "${_RPATH_BASE}/${relative_lib_path}")
+ set(install_rpath "${_RPATH_BASE}/${relative_lib_path}")
+ if (NOT WIN32 AND NOT APPLE)
+ file(RELATIVE_PATH relative_qt_path "/${_EXECUTABLE_PATH}" "/${IDE_LIBRARY_BASE_PATH}/Qt/lib")
+ file(RELATIVE_PATH relative_plugins_path "/${_EXECUTABLE_PATH}" "/${IDE_PLUGIN_PATH}")
+ set(install_rpath "${install_rpath};${_RPATH_BASE}/${relative_qt_path};${_RPATH_BASE}/${relative_plugins_path}")
+ endif()
+
qtc_output_binary_dir(_output_binary_dir)
set_target_properties("${name}" PROPERTIES
- BUILD_RPATH "${_RPATH_BASE}/${_RELATIVE_LIB_PATH}"
- INSTALL_RPATH "${_RPATH_BASE}/${_RELATIVE_LIB_PATH}"
+ BUILD_RPATH "${build_rpath}"
+ INSTALL_RPATH "${install_rpath}"
RUNTIME_OUTPUT_DIRECTORY "${_output_binary_dir}/${_DESTINATION}"
QT_SKIP_TRANSLATION "${skip_translation}"
CXX_VISIBILITY_PRESET hidden
@@ -856,6 +951,50 @@ function(add_qtc_executable name)
if (NOT _arg_SKIP_INSTALL)
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()
@@ -871,6 +1010,15 @@ endfunction()
function(add_qtc_test name)
cmake_parse_arguments(_arg "GTEST" "" "DEFINES;DEPENDS;INCLUDES;SOURCES" ${ARGN})
+ foreach(dependency ${_arg_DEPENDS})
+ if (NOT TARGET ${dependency} AND NOT _arg_GTEST)
+ if (WITH_DEBUG_CMAKE)
+ message(STATUS "'${dependency}' is not a target")
+ endif()
+ return()
+ endif()
+ endforeach()
+
if ($_arg_UNPARSED_ARGUMENTS)
message(FATAL_ERROR "add_qtc_test had unparsed arguments!")
endif()
@@ -902,6 +1050,9 @@ function(add_qtc_test name)
endfunction()
function(finalize_qtc_gtest test_name)
+ if (NOT TARGET ${test_name})
+ return()
+ endif()
get_target_property(test_sources ${test_name} SOURCES)
include(GoogleTest)
gtest_add_tests(TARGET ${test_name} SOURCES ${test_sources} TEST_LIST test_list)
diff --git a/cmake/QtCreatorIDEBranding.cmake b/cmake/QtCreatorIDEBranding.cmake
index a4494c1b35..b8c8f560b8 100644
--- a/cmake/QtCreatorIDEBranding.cmake
+++ b/cmake/QtCreatorIDEBranding.cmake
@@ -1,9 +1,9 @@
#BINARY_ARTIFACTS_BRANCH = master
#PROJECT_USER_FILE_EXTENSION = .user
-set(IDE_VERSION "4.11.2") # The IDE version.
-set(IDE_VERSION_COMPAT "4.11.0") # The IDE Compatibility version.
-set(IDE_VERSION_DISPLAY "4.11.2") # The IDE display version.
+set(IDE_VERSION "4.11.82") # The IDE version.
+set(IDE_VERSION_COMPAT "4.11.82") # The IDE Compatibility version.
+set(IDE_VERSION_DISPLAY "4.12.0-beta1") # The IDE display version.
set(IDE_COPYRIGHT_YEAR "2020") # The IDE current copyright year.
set(IDE_SETTINGSVARIANT "QtProject") # The IDE settings variation.
@@ -12,3 +12,6 @@ set(IDE_DISPLAY_NAME "Qt Creator") # The IDE display name.
set(IDE_ID "qtcreator") # The IDE id (no spaces, lowercase!)
set(IDE_CASED_ID "QtCreator") # The cased IDE id (no spaces!)
set(IDE_BUNDLE_IDENTIFIER "org.qt-project.${IDE_ID}") # The macOS application bundle identifier.
+
+set(IDE_REVISION_URL_STR "https://code.qt.io/cgit/qt-creator/qt-creator.git/log/?id=%1")
+ # The revision url in the version dialog