From 2895f3ffaa632f129232f70564a16f202ead0bda Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 21 Jun 2019 14:58:52 +0200 Subject: 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 --- cmake/QtBaseGlobalTargets.cmake | 28 ++++++++++++++++++++++++++++ cmake/qt.toolchain.cmake.in | 18 ++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 cmake/qt.toolchain.cmake.in (limited to 'cmake') diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake index 5bb0925f5b..34f2cfe635 100644 --- a/cmake/QtBaseGlobalTargets.cmake +++ b/cmake/QtBaseGlobalTargets.cmake @@ -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 diff --git a/cmake/qt.toolchain.cmake.in b/cmake/qt.toolchain.cmake.in new file mode 100644 index 0000000000..d816e1dcc9 --- /dev/null +++ b/cmake/qt.toolchain.cmake.in @@ -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() -- cgit v1.2.3