2019-06-26 10:39:05 +00:00
|
|
|
@init_platform@
|
|
|
|
|
2019-06-21 12:58:52 +00:00
|
|
|
@init_qt_host_path@
|
|
|
|
|
|
|
|
@init_original_toolchain_file@
|
|
|
|
|
|
|
|
@init_vcpkg@
|
|
|
|
|
2020-06-02 16:06:37 +00:00
|
|
|
if(__qt_chainload_toolchain_file)
|
|
|
|
get_filename_component(__qt_chainload_toolchain_file_real_path
|
|
|
|
"${__qt_chainload_toolchain_file}" REALPATH)
|
|
|
|
if(__qt_chainload_toolchain_file_real_path STREQUAL CMAKE_CURRENT_LIST_FILE)
|
|
|
|
message(FATAL_ERROR
|
|
|
|
"Woah, the Qt toolchain file tried to include itself recusively! '${__qt_chainload_toolchain_file}' "
|
|
|
|
"Make sure to remove qtbase/CMakeCache.txt and reconfigure qtbase with 'cmake' "
|
|
|
|
"rather than 'qt-cmake', and then you can reconfigure your own project."
|
|
|
|
)
|
|
|
|
else()
|
|
|
|
include("${__qt_chainload_toolchain_file}")
|
|
|
|
endif()
|
|
|
|
unset(__qt_chainload_toolchain_file)
|
2019-06-21 12:58:52 +00:00
|
|
|
endif()
|
|
|
|
|
CMake: Make build system of installed Qt more relocatable
Aka handle CMAKE_INSTALL_PREFIX in a more relocatable way.
The following story inspired this change.
If a user wants to build a Qt repo into a different install prefix
than the usual Qt one, this will fail configuration because we
look for various things like syncqt, qdoc, etc relative to
CMAKE_INSTALL_PREFIX, which will now point to a different location
where none of the above tools are located.
The intent for such a use case is to support building Qt packages with
Conan, which sets a random install prefix when configuring a repo.
The idea is to derive the qt prefix dynamically from the
QtBuildInternals package location. Essentially it's a reverse relative
path from the QtBuildInternalsConfig.cmake file to the install prefix
that was specified when initially configuring qtbase.
Once the dynamic prefix is computed (so we know where the possibly
relocated Qt is), we can find tools like syncqt and qdoc.
This is an initial attempt to support a use case like that.
More design work will probably needed in case if tools / libs need to
be found in a location different than the Qt install prefix (so
support for multiple install prefixes / search paths).
An example of such a case would be when building qtdeclarative and
qtquickcontrols2 as Conan packages in one go. Most likely the
qmltyperegistrar tool will be located in the random install prefix
set by Conan, so building qtquickcontrols2 might fail due to not
finding the tool in the original Qt install prefix.
As to the implementation details, the change does the following:
- Dynamically computes and sets the
QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX variable when
find_package()'ing QtBuildInternals. It's an absolute path
pointing to where the relocated Qt is.
- When building qtbase this variable is not yet available (due
to QtBuildInternalsExtra not existing), in that case we set
the variable to the absolute path of CMAKE_INSTALL_PREFIX
(but only for the initial qtbase configuration).
- Remove QT_BUILD_INTERNALS_ORIGINAL_INSTALL_PREFIX which was used
for standalone tests purposes. It's not needed now that we compute
the location of the Qt prefix dynamically.
- The Unixy qt-cmake and qt-cmake-private shell scripts now
use a relative path to find the toolchain file we created.
- The toolchain file also dynamically computes the location of the Qt
packages, and adds them to CMAKE_PREFIX_PATH.
- A lot of existing CMAKE_INSTALL_PREFIX uses are replaced with
QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX. This includes finding
tool locations, mkspecs dir, path environment setup for tools, etc.
- Some places still use CMAKE_PREFIX_PATH in the following cases
- When determining paths while configuring qtbase (valid cases)
- When I wasn't sure what the behavior should be, so I left them
as-is (an example is documentation generation, do we want to
install it into the random Conan prefix, or into the main prefix?
Currently it installs in the random prefix).
Note that relocating a Qt installation does not work for non-prefix /
non-installed builds, due to hardcoded paths to include directories
and libraries in generated FooTargets.cmake files.
Task-number: QTBUG-83999
Change-Id: I87d6558729db93121b1715771034b03ce3295923
Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io>
2020-05-05 08:30:35 +00:00
|
|
|
# Compute dynamically the Qt installation prefix from the location of this file. This allows
|
|
|
|
# the usage of the toolchain file when the Qt installation is relocated.
|
|
|
|
get_filename_component(QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX
|
|
|
|
${CMAKE_CURRENT_LIST_DIR}/../@qt_path_from_cmake_config_dir_to_prefix@
|
|
|
|
ABSOLUTE)
|
|
|
|
|
|
|
|
list(PREPEND CMAKE_PREFIX_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}")
|
|
|
|
list(PREPEND CMAKE_FIND_ROOT_PATH "${QT_TOOLCHAIN_RELOCATABLE_INSTALL_PREFIX}")
|
2020-02-26 09:12:08 +00:00
|
|
|
|
2019-06-21 12:58:52 +00:00
|
|
|
if(QT_HOST_PATH)
|
|
|
|
list(APPEND CMAKE_PREFIX_PATH "${QT_HOST_PATH}")
|
|
|
|
list(APPEND CMAKE_FIND_ROOT_PATH "${QT_HOST_PATH}")
|
|
|
|
endif()
|