Resolve QT_INSTALL_TRANSLATIONS via CMAKE_PREFIX_PATH if it is relative

The variables provided by Qt 6 might just contain a relative path. This
change adds an extra function resolve these via CMAKE_PREFIX_PATH and
CMAKE_FIND_ROOT_PATH.
This commit is contained in:
Martchus 2020-11-11 18:51:19 +01:00
parent d80302d20d
commit 9bc3555c99
2 changed files with 36 additions and 1 deletions

View File

@ -227,7 +227,7 @@ option(BUILTIN_TRANSLATIONS_OF_QT "enables/disables built-in translations of Qt
# determine relevant Qt translation files
set(QT_TRANSLATION_FILES)
set(QT_TRANSLATION_SEARCH_PATHS)
query_qmake_variable(QT_INSTALL_TRANSLATIONS)
query_qmake_variable_path(QT_INSTALL_TRANSLATIONS)
if (QT_INSTALL_TRANSLATIONS)
list(APPEND QT_TRANSLATION_SEARCH_PATHS "${QT_INSTALL_TRANSLATIONS}")
endif ()

View File

@ -160,3 +160,38 @@ function (query_qmake_variable QMAKE_VARIABLE)
PARENT_SCOPE)
message(STATUS "Qt variable ${QMAKE_VARIABLE} queried from qmake: ${${QMAKE_VARIABLE}}")
endfunction ()
# define function to make Qt variable available, resolving relative paths via CMAKE_FIND_ROOT_PATH
function (query_qmake_variable_path QMAKE_VARIABLE)
# query the variable itself
query_qmake_variable("${QMAKE_VARIABLE}")
set(VARIABLE_VALUE "${${QMAKE_VARIABLE}}")
if (NOT VARIABLE_VALUE)
message(WARNING "Unable to resolve Qt variable ${QMAKE_VARIABLE}: it is empty")
return()
endif ()
# pass the variable as-is if it points to an existing dir/file
if (EXISTS "${VARIABLE_VALUE}")
get_filename_component(VARIABLE_VALUE "${VARIABLE_VALUE}" REALPATH)
message(STATUS "Qt variable ${QMAKE_VARIABLE} resolved to path: ${VARIABLE_VALUE}")
set("${QMAKE_VARIABLE}" "${VARIABLE_VALUE}" PARENT_SCOPE)
return()
endif ()
# assume VARIABLE_VALUE is relative within CMAKE_FIND_ROOT_PATH, e.g. QT_INSTALL_TRANSLATIONS might be
# set to "share/qt6/translations"
foreach (ROOT_PATH ${CMAKE_FIND_ROOT_PATH} "")
foreach (PREFIX_PATH ${CMAKE_PREFIX_PATH} "")
string(JOIN "/" FULL_PATH ${ROOT_PATH} ${PREFIX_PATH} ${VARIABLE_VALUE})
if (EXISTS "${FULL_PATH}")
set("${QMAKE_VARIABLE}" "${FULL_PATH}" PARENT_SCOPE)
message(STATUS "Qt variable ${QMAKE_VARIABLE} resolved to path: ${FULL_PATH}")
return()
else ()
list(APPEND CHECKED_PATHS "${FULL_PATH}")
endif ()
endforeach()
endforeach ()
message(WARNING "Unable to resolve Qt variable ${QMAKE_VARIABLE} to an existing path, was checking for: ${CHECKED_PATHS}")
endfunction ()