From 1f30bcf33618ca39c47dc1058529b55635e30aef Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 25 Jan 2021 11:12:37 +0100 Subject: Move build tools to libexec instead of the bin dir [ChangeLog][Build System] Tools that are called by the build system and are unlikely to be called by the user are now installed to the libexec directory. This is a step towards easier co-installability of different Qt versions. Pick-to: 6.1 Task-number: QTBUG-88791 Change-Id: Id19575b5ba27795f7715e4ea6a09391b26dd4942 Reviewed-by: Kai Koehne --- cmake/QtTargetHelpers.cmake | 2 +- mkspecs/features/moc.prf | 2 +- mkspecs/features/qlalr.prf | 2 +- mkspecs/features/qt_functions.prf | 21 +++++++++++++++++++-- mkspecs/features/qt_tracepoints.prf | 2 +- mkspecs/features/resources.prf | 2 +- mkspecs/features/uic.prf | 2 +- src/corelib/Qt6AndroidMacros.cmake | 2 +- src/gui/CMakeLists.txt | 2 +- src/tools/cmake_automoc_parser/CMakeLists.txt | 1 + src/tools/moc/CMakeLists.txt | 1 + src/tools/qlalr/CMakeLists.txt | 1 + src/tools/qvkgen/CMakeLists.txt | 1 + src/tools/rcc/CMakeLists.txt | 1 + src/tools/tracegen/CMakeLists.txt | 1 + src/tools/uic/CMakeLists.txt | 1 + tests/auto/tools/moc/tst_moc.cpp | 3 ++- .../testdata/quotedfilenames/quotedfilenames.pro | 2 +- tests/auto/tools/qmake/tst_qmake.cpp | 2 +- tests/auto/tools/rcc/tst_rcc.cpp | 2 +- tests/auto/tools/uic/tst_uic.cpp | 2 +- 21 files changed, 40 insertions(+), 15 deletions(-) diff --git a/cmake/QtTargetHelpers.cmake b/cmake/QtTargetHelpers.cmake index 45eb0c24e8..0caff0e484 100644 --- a/cmake/QtTargetHelpers.cmake +++ b/cmake/QtTargetHelpers.cmake @@ -504,7 +504,7 @@ function(qt_internal_create_tracepoints name tracepoints_file) if(NOT "${QT_HOST_PATH}" STREQUAL "") qt_path_join(tracegen "${QT_HOST_PATH}" - "${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_BINDIR}" + "${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_LIBEXECDIR}" "tracegen") else() set(tracegen "${QT_CMAKE_EXPORT_NAMESPACE}::tracegen") diff --git a/mkspecs/features/moc.prf b/mkspecs/features/moc.prf index 07f29b8feb..c5504b21b8 100644 --- a/mkspecs/features/moc.prf +++ b/mkspecs/features/moc.prf @@ -1,6 +1,6 @@ #global defaults -qtPrepareTool(QMAKE_MOC, moc) +qtPrepareLibExecTool(QMAKE_MOC, moc) isEmpty(MOC_DIR):MOC_DIR = . isEmpty(QMAKE_H_MOD_MOC):QMAKE_H_MOD_MOC = moc_ isEmpty(QMAKE_EXT_CPP_MOC):QMAKE_EXT_CPP_MOC = .moc diff --git a/mkspecs/features/qlalr.prf b/mkspecs/features/qlalr.prf index 54d8b583c6..cb12818e39 100644 --- a/mkspecs/features/qlalr.prf +++ b/mkspecs/features/qlalr.prf @@ -1,4 +1,4 @@ -qtPrepareTool(QMAKE_QLALR, qlalr) +qtPrepareLibExecTool(QMAKE_QLALR, qlalr) isEmpty(QLALR_DIR): QLALR_DIR = . diff --git a/mkspecs/features/qt_functions.prf b/mkspecs/features/qt_functions.prf index 7777e615bd..dd780ad556 100644 --- a/mkspecs/features/qt_functions.prf +++ b/mkspecs/features/qt_functions.prf @@ -83,11 +83,19 @@ defineTest(qtHaveModule) { return(false) } -# variable, default, [suffix for variable for system() use], [prepare primary variable for system() use] +# Arguments: +# variable, default, [suffix for variable for system() use], +# [prepare primary variable for system() use], +# [installation location; default: $$[QT_HOST_BINS]] defineTest(qtPrepareTool) { cmd = $$eval(QT_TOOL.$${2}.binary) isEmpty(cmd) { - cmd = $$[QT_HOST_BINS]/$$2 + isEmpty(5) { + instloc = $$[QT_HOST_BINS] + } else { + instloc = $$5 + } + cmd = $$instloc/$$2 exists($${cmd}.pl) { $${1}_EXE = $${cmd}.pl cmd = perl -w $$system_path($${cmd}.pl) @@ -123,6 +131,15 @@ defineTest(qtPrepareTool) { } } +# Prepare a tool that's not supposed to be called manually by users but by the build system. +# +# Forwards its arguments to qtPrepareTool but defaults the installation location to +# $$[QT_HOST_LIBEXECS] +defineTest(qtPrepareLibExecTool) { + isEmpty(instloc): instloc = "$$[QT_HOST_LIBEXECS]" + qtPrepareTool($$1, $$2, $$3, $$4, $$instloc) +} + # target variable, list of env var names, [non-empty: prepare for system(), not make] defineTest(qtAddToolEnv) { isEmpty(3): \ diff --git a/mkspecs/features/qt_tracepoints.prf b/mkspecs/features/qt_tracepoints.prf index 56d315e1cd..f115e9a115 100644 --- a/mkspecs/features/qt_tracepoints.prf +++ b/mkspecs/features/qt_tracepoints.prf @@ -8,7 +8,7 @@ # We mean it. # -qtPrepareTool(QMAKE_TRACEGEN, tracegen) +qtPrepareLibExecTool(QMAKE_TRACEGEN, tracegen) isEmpty(TRACEGEN_DIR): TRACEGEN_DIR = . diff --git a/mkspecs/features/resources.prf b/mkspecs/features/resources.prf index 151051163d..a9ef9a7155 100644 --- a/mkspecs/features/resources.prf +++ b/mkspecs/features/resources.prf @@ -1,4 +1,4 @@ -qtPrepareTool(QMAKE_RCC, rcc, _DEP) +qtPrepareLibExecTool(QMAKE_RCC, rcc, _DEP) isEmpty(QMAKE_MOD_RCC):QMAKE_MOD_RCC = qrc diff --git a/mkspecs/features/uic.prf b/mkspecs/features/uic.prf index a5df0c7e8d..fe9ad4b6c9 100644 --- a/mkspecs/features/uic.prf +++ b/mkspecs/features/uic.prf @@ -1,4 +1,4 @@ -qtPrepareTool(QMAKE_UIC, uic, _DEP) +qtPrepareLibExecTool(QMAKE_UIC, uic, _DEP) isEmpty(UI_DIR):UI_DIR = . isEmpty(QMAKE_MOD_UIC):QMAKE_MOD_UIC = ui_ diff --git a/src/corelib/Qt6AndroidMacros.cmake b/src/corelib/Qt6AndroidMacros.cmake index a71163d9f7..c520242d06 100644 --- a/src/corelib/Qt6AndroidMacros.cmake +++ b/src/corelib/Qt6AndroidMacros.cmake @@ -191,7 +191,7 @@ function(qt6_android_generate_deployment_settings target) " \"qml-importscanner-binary\" : \"${qml_importscanner_binary_path_native}\",\n") # Override rcc binary path - set(rcc_binary_path "${QT_HOST_PATH}/${QT6_HOST_INFO_BINDIR}/rcc") + set(rcc_binary_path "${QT_HOST_PATH}/${QT6_HOST_INFO_LIBEXECDIR}/rcc") if (WIN32) string(APPEND rcc_binary_path ".exe") endif() diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index 40c373c6d9..ab8bb47d53 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -889,7 +889,7 @@ if (QT_FEATURE_vulkan) if(NOT "${QT_HOST_PATH}" STREQUAL "") qt_path_join(qvkgen "${QT_HOST_PATH}" - "${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_BINDIR}" + "${QT${PROJECT_VERSION_MAJOR}_HOST_INFO_LIBEXECDIR}" "qvkgen") else() set(qvkgen "${QT_CMAKE_EXPORT_NAMESPACE}::qvkgen") diff --git a/src/tools/cmake_automoc_parser/CMakeLists.txt b/src/tools/cmake_automoc_parser/CMakeLists.txt index 31bef236e8..b5c4aba89c 100644 --- a/src/tools/cmake_automoc_parser/CMakeLists.txt +++ b/src/tools/cmake_automoc_parser/CMakeLists.txt @@ -5,6 +5,7 @@ qt_get_tool_target_name(target_name cmake_automoc_parser) qt_internal_add_tool(${target_name} BOOTSTRAP + INSTALL_DIR "${INSTALL_LIBEXECDIR}" TOOLS_TARGET Core # special case SOURCES main.cpp diff --git a/src/tools/moc/CMakeLists.txt b/src/tools/moc/CMakeLists.txt index 53fc4ff73b..09c4927a53 100644 --- a/src/tools/moc/CMakeLists.txt +++ b/src/tools/moc/CMakeLists.txt @@ -8,6 +8,7 @@ qt_get_tool_target_name(target_name moc) qt_internal_add_tool(${target_name} BOOTSTRAP TARGET_DESCRIPTION "Qt Meta Object Compiler" + INSTALL_DIR "${INSTALL_LIBEXECDIR}" TOOLS_TARGET Core # special case SOURCES cbordevice.h diff --git a/src/tools/qlalr/CMakeLists.txt b/src/tools/qlalr/CMakeLists.txt index b3dd7c28b7..1b28154695 100644 --- a/src/tools/qlalr/CMakeLists.txt +++ b/src/tools/qlalr/CMakeLists.txt @@ -7,6 +7,7 @@ qt_get_tool_target_name(target_name qlalr) qt_internal_add_tool(${target_name} TARGET_DESCRIPTION "Qt Look Ahead LR Parser Generator" + INSTALL_DIR "${INSTALL_LIBEXECDIR}" TOOLS_TARGET Core # special case SOURCES compress.cpp compress.h diff --git a/src/tools/qvkgen/CMakeLists.txt b/src/tools/qvkgen/CMakeLists.txt index a6d264d53e..75ea64fda6 100644 --- a/src/tools/qvkgen/CMakeLists.txt +++ b/src/tools/qvkgen/CMakeLists.txt @@ -7,6 +7,7 @@ qt_get_tool_target_name(target_name qvkgen) qt_internal_add_tool(${target_name} TARGET_DESCRIPTION "Qt Vulkan Header Generator" + INSTALL_DIR "${INSTALL_LIBEXECDIR}" TOOLS_TARGET Gui # special case SOURCES qvkgen.cpp diff --git a/src/tools/rcc/CMakeLists.txt b/src/tools/rcc/CMakeLists.txt index f9bb7025a2..8b0d9c8182 100644 --- a/src/tools/rcc/CMakeLists.txt +++ b/src/tools/rcc/CMakeLists.txt @@ -8,6 +8,7 @@ qt_get_tool_target_name(target_name rcc) qt_internal_add_tool(${target_name} BOOTSTRAP TARGET_DESCRIPTION "Qt Resource Compiler" + INSTALL_DIR "${INSTALL_LIBEXECDIR}" TOOLS_TARGET Core # special case SOURCES main.cpp diff --git a/src/tools/tracegen/CMakeLists.txt b/src/tools/tracegen/CMakeLists.txt index ac1e11c974..1404013d28 100644 --- a/src/tools/tracegen/CMakeLists.txt +++ b/src/tools/tracegen/CMakeLists.txt @@ -7,6 +7,7 @@ qt_get_tool_target_name(target_name tracegen) qt_internal_add_tool(${target_name} BOOTSTRAP + INSTALL_DIR "${INSTALL_LIBEXECDIR}" TOOLS_TARGET Core # special case SOURCES etw.cpp etw.h diff --git a/src/tools/uic/CMakeLists.txt b/src/tools/uic/CMakeLists.txt index afda54d179..73ea838b34 100644 --- a/src/tools/uic/CMakeLists.txt +++ b/src/tools/uic/CMakeLists.txt @@ -7,6 +7,7 @@ qt_get_tool_target_name(target_name uic) qt_internal_add_tool(${target_name} TARGET_DESCRIPTION "Qt User Interface Compiler" + INSTALL_DIR "${INSTALL_LIBEXECDIR}" TOOLS_TARGET Widgets # special case SOURCES cpp/cppwritedeclaration.cpp cpp/cppwritedeclaration.h diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 3a0eed0a64..8ce2382600 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -775,7 +775,8 @@ void tst_Moc::initTestCase() { QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath); QString qmake = QString("%1/qmake").arg(binpath); - m_moc = QString("%1/moc").arg(binpath); + QString libexecPath = QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath); + m_moc = QString("%1/moc").arg(libexecPath); const QString testHeader = QFINDTESTDATA("backslash-newlines.h"); QVERIFY(!testHeader.isEmpty()); diff --git a/tests/auto/tools/qmake/testdata/quotedfilenames/quotedfilenames.pro b/tests/auto/tools/qmake/testdata/quotedfilenames/quotedfilenames.pro index a4d20cc0f5..269014cc88 100644 --- a/tests/auto/tools/qmake/testdata/quotedfilenames/quotedfilenames.pro +++ b/tests/auto/tools/qmake/testdata/quotedfilenames/quotedfilenames.pro @@ -9,7 +9,7 @@ INCLUDEPATH += "include folder" RCCINPUT = "rc folder/test.qrc" RCCOUTPUT = "cpp folder/test.cpp" -qtPrepareTool(QMAKE_RCC, rcc) +qtPrepareLibExecTool(QMAKE_RCC, rcc) rcc_test.commands = $$QMAKE_RCC -o ${QMAKE_FILE_OUT} ${QMAKE_FILE_IN} rcc_test.output = $$RCCOUTPUT diff --git a/tests/auto/tools/qmake/tst_qmake.cpp b/tests/auto/tools/qmake/tst_qmake.cpp index 2c0eaa06aa..9ace0e1f3a 100644 --- a/tests/auto/tools/qmake/tst_qmake.cpp +++ b/tests/auto/tools/qmake/tst_qmake.cpp @@ -667,7 +667,7 @@ void tst_qmake::qinstall() // install an executable file { - const QString mocFilePath = QLibraryInfo::path(QLibraryInfo::BinariesPath) + const QString mocFilePath = QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath) + "/moc" #ifdef Q_OS_WIN + ".exe" diff --git a/tests/auto/tools/rcc/tst_rcc.cpp b/tests/auto/tools/rcc/tst_rcc.cpp index 108fd07b57..9b04987168 100644 --- a/tests/auto/tools/rcc/tst_rcc.cpp +++ b/tests/auto/tools/rcc/tst_rcc.cpp @@ -104,7 +104,7 @@ private: void tst_rcc::initTestCase() { - m_rcc = QLibraryInfo::path(QLibraryInfo::BinariesPath) + QLatin1String("/rcc"); + m_rcc = QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath) + QLatin1String("/rcc"); m_dataPath = QFINDTESTDATA("data"); QVERIFY(!m_dataPath.isEmpty()); diff --git a/tests/auto/tools/uic/tst_uic.cpp b/tests/auto/tools/uic/tst_uic.cpp index 1dfc572d1d..fb4441a02a 100644 --- a/tests/auto/tools/uic/tst_uic.cpp +++ b/tests/auto/tools/uic/tst_uic.cpp @@ -105,7 +105,7 @@ static const char versionRegexp[] = R"([*#][*#] Created by: Qt User Interface Compiler version \d{1,2}\.\d{1,2}\.\d{1,2})"; tst_uic::tst_uic() - : m_command(QLibraryInfo::path(QLibraryInfo::BinariesPath) + QLatin1String("/uic")) + : m_command(QLibraryInfo::path(QLibraryInfo::LibraryExecutablesPath) + QLatin1String("/uic")) , m_versionRegexp(QLatin1String(versionRegexp)) { } -- cgit v1.2.3