diff options
author | Kevin Funk <kevin.funk@kdab.com> | 2019-06-06 22:25:05 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2019-06-14 10:16:40 +0000 |
commit | 7559d508d1993dd90a4939441eaf353d55462ae5 (patch) | |
tree | 469dbc57536008520bf2b6f74d0c275a817c2802 /cmake | |
parent | cfcd50875b84273942709f224a1cf37fa70b41b7 (diff) |
cmake: Make CMake superbuilds work
In case of a CMake superbuild, the actual install root in a non-prefix
build is the top-level build directory (not $TOP_BUILDDIR/qtbase anymore).
This is more in line how CMake lays out things by default.
Task-number: QTBUG-75582
Change-Id: I4e1744b5c877508fedc33e237eec28cb7436010b
Reviewed-by: Qt CMake Build Bot
Reviewed-by: Alexandru Croitor <alexandru.croitor@qt.io>
Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
Diffstat (limited to 'cmake')
-rw-r--r-- | cmake/QtBaseGlobalTargets.cmake | 10 | ||||
-rw-r--r-- | cmake/QtBuild.cmake | 25 |
2 files changed, 21 insertions, 14 deletions
diff --git a/cmake/QtBaseGlobalTargets.cmake b/cmake/QtBaseGlobalTargets.cmake index 6c5c7e1951..ac039cb4d0 100644 --- a/cmake/QtBaseGlobalTargets.cmake +++ b/cmake/QtBaseGlobalTargets.cmake @@ -4,7 +4,7 @@ add_library(Qt::Platform ALIAS Platform) target_include_directories(Platform INTERFACE $<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/${QT_PLATFORM_DEFINITION_DIR}> - $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> + $<BUILD_INTERFACE:${QT_BUILD_DIR}/include> $<INSTALL_INTERFACE:${INSTALL_DATADIR}/${QT_PLATFORM_DEFINITION_DIR}> $<INSTALL_INTERFACE:${INSTALL_INCLUDEDIR}> ) @@ -65,8 +65,8 @@ qt_install(FILES ## files always lived in Qt::Core, so we keep it that way add_library(GlobalConfig INTERFACE) target_include_directories(GlobalConfig INTERFACE - $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> - $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include/QtCore> + $<BUILD_INTERFACE:${QT_BUILD_DIR}/include> + $<BUILD_INTERFACE:${QT_BUILD_DIR}/include/QtCore> $<INSTALL_INTERFACE:include> $<INSTALL_INTERFACE:include/QtCore> ) @@ -84,8 +84,8 @@ add_library(Qt::GlobalConfig ALIAS GlobalConfig) add_library(GlobalConfigPrivate INTERFACE) target_link_libraries(GlobalConfigPrivate INTERFACE GlobalConfig) target_include_directories(GlobalConfigPrivate INTERFACE - $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include/QtCore/${PROJECT_VERSION}> - $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include/QtCore/${PROJECT_VERSION}/QtCore> + $<BUILD_INTERFACE:${QT_BUILD_DIR}/include/QtCore/${PROJECT_VERSION}> + $<BUILD_INTERFACE:${QT_BUILD_DIR}/include/QtCore/${PROJECT_VERSION}/QtCore> $<INSTALL_INTERFACE:include/QtCore/${PROJECT_VERSION}> $<INSTALL_INTERFACE:include/QtCore/${PROJECT_VERSION}/QtCore> ) diff --git a/cmake/QtBuild.cmake b/cmake/QtBuild.cmake index 9f358d164d..f69c5f5f21 100644 --- a/cmake/QtBuild.cmake +++ b/cmake/QtBuild.cmake @@ -272,6 +272,10 @@ endfunction() # cmake_install.cmake file with an empty one. This means we will always replace the file on # every reconfiguration, but not when doing null builds. function(remove_install_target) + if (TARGET remove_cmake_install) + return() # target was already created + endif() + set(file_in "${CMAKE_BINARY_DIR}/.remove_cmake_install_in.txt") set(file_generated "${CMAKE_BINARY_DIR}/.remove_cmake_install_generated.txt") set(cmake_install_file "${CMAKE_BINARY_DIR}/cmake_install.cmake") @@ -943,20 +947,24 @@ function(qt_install_injections module build_dir install_dir) # # ${some_prefix}'s value depends on the build type. # If doing a prefix build, it should point to - # ${current_repo_build_dir} which is ${qtdeclarative_build_dir}. + # the current repo's build dir which is ${qtdeclarative_build_dir}. # If doing a non-prefix build, it should point to - # ${qtbase_build_dir}. + # qtbase's build dir. # # In the code below, ${some_prefix} == ${build_dir}. set(lower_case_forwarding_header_path "${build_dir}/${INSTALL_INCLUDEDIR}/${module}") if(destinationdir) string(APPEND lower_case_forwarding_header_path "/${destinationdir}") endif() - set(current_repo_build_dir "${PROJECT_BINARY_DIR}") + if (IS_ABSOLUTE "${file}") + set(file_path "${file}") + else() + set(file_path "${PROJECT_BINARY_DIR}/${file}") + endif() file(RELATIVE_PATH relpath "${lower_case_forwarding_header_path}" - "${current_repo_build_dir}/${file}") + "${file_path}") set(main_contents "#include \"${relpath}\"") file(GENERATE OUTPUT "${lower_case_forwarding_header_path}/${original_file_name}" CONTENT "${main_contents}") @@ -966,7 +974,7 @@ function(qt_install_injections module build_dir install_dir) # will be a no-op. qt_path_join(install_destination ${install_dir} ${INSTALL_INCLUDEDIR} ${module} ${destinationdir}) - qt_install(FILES ${current_repo_build_dir}/${file} + qt_install(FILES ${file_path} DESTINATION ${install_destination} RENAME ${destinationname} OPTIONAL) @@ -1137,7 +1145,7 @@ function(add_qt_module target) qt_autogen_tools_initial_setup(${target}) set(_public_includes - $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> + $<BUILD_INTERFACE:${QT_BUILD_DIR}/include> $<BUILD_INTERFACE:${module_include_dir}> ) if(NOT arg_NO_MODULE_HEADERS) @@ -1489,7 +1497,7 @@ function(add_qt_plugin target) "${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_CURRENT_BINARY_DIR}" # For the syncqt headers - $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> + $<BUILD_INTERFACE:${QT_BUILD_DIR}/include> ${arg_INCLUDE_DIRECTORIES} PUBLIC_INCLUDE_DIRECTORIES ${arg_PUBLIC_INCLUDE_DIRECTORIES} LIBRARIES ${arg_LIBRARIES} Qt::PlatformPluginInternal @@ -2055,7 +2063,6 @@ function(qt_compute_injection_forwarding_header target) get_filename_component(file_name "${arg_SOURCE}" NAME) set(source_absolute_path "${CMAKE_CURRENT_BINARY_DIR}/${arg_SOURCE}") - file(RELATIVE_PATH relpath "${CMAKE_BINARY_DIR}" "${source_absolute_path}") if (arg_PRIVATE) set(fwd "${PROJECT_VERSION}/${module}/private/${file_name}") @@ -2063,7 +2070,7 @@ function(qt_compute_injection_forwarding_header target) set(fwd "${file_name}") endif() - string(APPEND ${arg_OUT_VAR} " ${relpath}:${fwd}") + string(APPEND ${arg_OUT_VAR} " ${source_absolute_path}:${fwd}") set(${arg_OUT_VAR} ${${arg_OUT_VAR}} PARENT_SCOPE) endfunction() |