From 478f5fcde66a49b710c427447916a0ee0e4d9e0a Mon Sep 17 00:00:00 2001 From: Alexey Edelev Date: Mon, 5 Jul 2021 13:28:58 +0200 Subject: [PATCH] Fix the detection of platform definitions directory Platform definition directory is defined when building qtbase. Depending on the build type (prefixed/non-prefixed) it should point: - To the source directory when building prefixed qtbase. - To the installation directory of the prefixed qtbase when building consumer projects. - To the build directory of non-prefixed qtbase when building non-prefixed qtbase or consumer projects. TODO: It is desirable to move the logic asssociated with Qt platform definition to the qt_internal_setup_public_platform_target function. Pick-to: 6.1 6.2 Fixes: QTBUG-94973 Change-Id: I8530613f9b2029834c66206bbdf02475528a4640 Reviewed-by: Alexandru Croitor --- cmake/QtBuild.cmake | 56 ++++++++++++++++------------- cmake/QtPlatformTargetHelpers.cmake | 2 +- 2 files changed, 33 insertions(+), 25 deletions(-) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index 2b88456878f..e04069c6487 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -372,30 +372,39 @@ else() set(QT_QMAKE_HOST_MKSPEC "${QT_QMAKE_TARGET_MKSPEC}") endif() -# Platform definition dir provided by user on command line. -# Derive the absolute one relative to the current source dir. -if(QT_PLATFORM_DEFINITION_DIR) - set(QT_DEFAULT_PLATFORM_DEFINITION_DIR "${QT_PLATFORM_DEFINITION_DIR}") - get_filename_component( - QT_DEFAULT_PLATFORM_DEFINITION_DIR_ABSOLUTE - "${QT_PLATFORM_DEFINITION_DIR}" - ABSOLUTE) -elseif(QT_QMAKE_TARGET_MKSPEC) - # Used by consumers of prefix builds via INSTALL_INTERFACE (relative path). - set(QT_DEFAULT_PLATFORM_DEFINITION_DIR "${INSTALL_MKSPECSDIR}/${QT_QMAKE_TARGET_MKSPEC}") - # Used by qtbase itself and consumers of non-prefix builds via BUILD_INTERFACE (absolute path). - set(QT_DEFAULT_PLATFORM_DEFINITION_DIR_ABSOLUTE "${QT_MKSPECS_DIR}/${QT_QMAKE_TARGET_MKSPEC}") +# Used by consumers of prefix builds via INSTALL_INTERFACE (relative path). +set(QT_DEFAULT_PLATFORM_DEFINITION_DIR "${INSTALL_MKSPECSDIR}/${QT_QMAKE_TARGET_MKSPEC}") - if(NOT EXISTS "${QT_DEFAULT_PLATFORM_DEFINITION_DIR_ABSOLUTE}") - file(GLOB known_platforms - LIST_DIRECTORIES true - RELATIVE "${QT_MKSPECS_DIR}" - "${QT_MKSPECS_DIR}/*" - ) - list(JOIN known_platforms "\n " known_platforms) - message(FATAL_ERROR "Unknown platform ${QT_QMAKE_TARGET_MKSPEC}\n\ +# Used by qtbase in prefix builds via BUILD_INTERFACE +set(QT_PLATFORM_DEFINITION_BUILD_INTERFACE_BASE_DIR + "${CMAKE_CURRENT_LIST_DIR}/../mkspecs/" +) + +# Used by qtbase and consumers in non-prefix builds via BUILD_INTERFACE +if(NOT QT_WILL_INSTALL) + set(QT_PLATFORM_DEFINITION_BUILD_INTERFACE_BASE_DIR + "${CMAKE_BINARY_DIR}/${INSTALL_MKSPECSDIR}" + ) +endif() + +get_filename_component(QT_PLATFORM_DEFINITION_BUILD_INTERFACE_DIR + "${QT_PLATFORM_DEFINITION_BUILD_INTERFACE_BASE_DIR}/${QT_QMAKE_TARGET_MKSPEC}" + ABSOLUTE +) +set(QT_PLATFORM_DEFINITION_BUILD_INTERFACE_DIR + "${QT_PLATFORM_DEFINITION_BUILD_INTERFACE_DIR}" + CACHE INTERNAL "Path to directory that contains qplatformdefs.h" +) + +if(NOT EXISTS "${QT_MKSPECS_DIR}/${QT_QMAKE_TARGET_MKSPEC}") + file(GLOB known_platforms + LIST_DIRECTORIES true + RELATIVE "${QT_MKSPECS_DIR}" + "${QT_MKSPECS_DIR}/*" + ) + list(JOIN known_platforms "\n " known_platforms) + message(FATAL_ERROR "Unknown platform ${QT_QMAKE_TARGET_MKSPEC}\n\ Known platforms:\n ${known_platforms}") - endif() endif() if(NOT DEFINED QT_DEFAULT_PLATFORM_DEFINITIONS) @@ -406,8 +415,7 @@ set(QT_PLATFORM_DEFINITIONS ${QT_DEFAULT_PLATFORM_DEFINITIONS} CACHE STRING "Qt platform specific pre-processor defines") set(QT_PLATFORM_DEFINITION_DIR "${QT_DEFAULT_PLATFORM_DEFINITION_DIR}" CACHE PATH "Path to directory that contains qplatformdefs.h") -set(QT_PLATFORM_DEFINITION_DIR_ABSOLUTE "${QT_DEFAULT_PLATFORM_DEFINITION_DIR_ABSOLUTE}" - CACHE INTERNAL "Path to directory that contains qplatformdefs.h") + set(QT_NAMESPACE "" CACHE STRING "Qt Namespace") include(QtGlobalStateHelpers) diff --git a/cmake/QtPlatformTargetHelpers.cmake b/cmake/QtPlatformTargetHelpers.cmake index 0ff8761f33b..b98894829f5 100644 --- a/cmake/QtPlatformTargetHelpers.cmake +++ b/cmake/QtPlatformTargetHelpers.cmake @@ -7,7 +7,7 @@ function(qt_internal_setup_public_platform_target) add_library(${INSTALL_CMAKE_NAMESPACE}::Platform ALIAS Platform) target_include_directories(Platform INTERFACE - $ + $ $ $ $