Generate a toolchain and convenience cmake wrapper

This gets us a step into the direction of convenience that qmake
offered:

    * QtBase is configured with a long command line (especially when
      cross-compiling)
    * Afterwards application developers (or other module builds) can
      just use qmake && make

By generating a toolchain file we can capture vcpkg and toolchain
chain-loading and a shell script can take care of providing the prefix
path.

Change-Id: Ided81f5432cab862306f2bea86cfe8e56adf71b0
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
This commit is contained in:
Simon Hausmann 2019-06-21 14:58:52 +02:00
parent a581f917e2
commit 2895f3ffaa
3 changed files with 49 additions and 0 deletions

3
bin/qt-cmake.in Executable file
View File

@ -0,0 +1,3 @@
#!/bin/sh
exec @CMAKE_COMMAND@ -DCMAKE_TOOLCHAIN_FILE=@CMAKE_INSTALL_PREFIX@/@__GlobalConfig_install_dir@/qt.toolchain.cmake $*

View File

@ -60,6 +60,34 @@ qt_install(FILES
COMPONENT Devel
)
# Generate toolchain file for convenience
if(QT_HOST_PATH)
get_filename_component(init_qt_host_path "${QT_HOST_PATH}" ABSOLUTE)
set(init_qt_host_path "set(QT_HOST_PATH \"${init_qt_host_path}\" CACHE PATH \"\" FORCE)")
endif()
if(CMAKE_TOOLCHAIN_FILE)
set(init_original_toolchain_file "set(qt_chainload_toolchain_file \"${CMAKE_TOOLCHAIN_FILE}\")")
endif()
if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
list(APPEND init_vcpkg "set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE \"${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}\")")
endif()
if(VCPKG_TARGET_TRIPLET)
list(APPEND init_vcpkg "set(VCPKG_TARGET_TRIPLET \"${VCPKG_TARGET_TRIPLET}\")")
endif()
string(REPLACE ";" "\n" init_vcpkg "${init_vcpkg}")
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/qt.toolchain.cmake.in" "${__GlobalConfig_build_dir}/qt.toolchain.cmake" @ONLY)
qt_install(FILES "${__GlobalConfig_build_dir}/qt.toolchain.cmake" DESTINATION "${__GlobalConfig_install_dir}" COMPONENT Devel)
# Also provide a convenience cmake wrapper
if(UNIX)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/bin/qt-cmake.in" "${QT_BUILD_DIR}/${INSTALL_BINDIR}/qt-cmake" @ONLY)
qt_install(PROGRAMS "${QT_BUILD_DIR}/bin/qt-cmake" DESTINATION "${INSTALL_BINDIR}")
endif()
## Library to hold global features:
## These features are stored and accessed via Qt::GlobalConfig, but the
## files always lived in Qt::Core, so we keep it that way

View File

@ -0,0 +1,18 @@
list(APPEND CMAKE_PREFIX_PATH "@CMAKE_INSTALL_PREFIX@")
list(APPEND CMAKE_FIND_ROOT_PATH "@CMAKE_INSTALL_PREFIX@")
@init_qt_host_path@
@init_original_toolchain_file@
@init_vcpkg@
if(qt_chainload_toolchain_file)
include("${qt_chainload_toolchain_file}")
unset(qt_chainload_toolchain_file)
endif()
if(QT_HOST_PATH)
list(APPEND CMAKE_PREFIX_PATH "${QT_HOST_PATH}")
list(APPEND CMAKE_FIND_ROOT_PATH "${QT_HOST_PATH}")
endif()