yuzu/externals/vcpkg/ports/qtinterfaceframework/49b44d4.diff
2022-07-23 03:01:36 +02:00

149 lines
6.7 KiB
Diff
Executable File

From 49b44d45c9eb5b5b98697f9ebb74204d45f0db38 Mon Sep 17 00:00:00 2001
From: Dominik Holland <dominik.holland@qt.io>
Date: Wed, 06 Apr 2022 15:43:23 +0200
Subject: [PATCH] ifcodegen: Add a fallback mechanism for too recent python packages
After the virtualenv is created the generator is now verified to be
working correctly. In case the generator doesn't work, an error
message is shown, which suggests to reconfigure with
-DQT_USE_MINIMAL_QFACE_PACKAGES=TRUE
The new option will install the minimum required dependencies for
qface.
Fixes: QTBUG-102348
Pick-to: 6.2 6.3
Change-Id: I59aca5848da8928e94c0d33a108735847d9260a2
---
diff --git a/src/tools/ifcodegen/CMakeLists.txt b/src/tools/ifcodegen/CMakeLists.txt
index 2d9e3a4..317d77f 100644
--- a/src/tools/ifcodegen/CMakeLists.txt
+++ b/src/tools/ifcodegen/CMakeLists.txt
@@ -22,11 +22,13 @@
if ("${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows")
set(VIRTUALENV_ACTIVATE ${VIRTUALENV_PATH}/Scripts/activate.bat)
set(VIRTUALENV_ACTIVATE_COMMAND ${VIRTUALENV_ACTIVATE})
+ set(VIRTUALENV_PYTHON ${VIRTUALENV_PATH}/Scripts/python.exe)
set(IFCODEGEN_BIN ${VIRTUALENV_PATH}/Scripts/qface.exe)
set(DEPLOY_VIRTUALENV ${CMAKE_CURRENT_SOURCE_DIR}/deploy-virtualenv.bat)
else()
set(VIRTUALENV_ACTIVATE ${VIRTUALENV_PATH}/bin/activate)
set(VIRTUALENV_ACTIVATE_COMMAND . ${VIRTUALENV_ACTIVATE})
+ set(VIRTUALENV_PYTHON ${VIRTUALENV_PATH}/bin/python)
set(IFCODEGEN_BIN ${VIRTUALENV_PATH}/bin/qface)
set(DEPLOY_VIRTUALENV ${CMAKE_CURRENT_SOURCE_DIR}/deploy-virtualenv.sh)
endif()
@@ -63,6 +65,15 @@
# someone is working on the qface sources
file(GLOB_RECURSE IFCODEGEN_SOURCE_FILES ${IFCODEGEN_SOURCE_DIR}/*.py)
+ # If the upstream python packages introduce a regression this option can be used to install
+ # the minimum version for all required python package and produce a working setup
+ # Those packages might be outdated and may contain security holes, but they are known to be
+ # working.
+ set(INSTALL_MINIMAL_QFACE_PACKAGES_COMMAND)
+ if (QT_USE_MINIMAL_QFACE_PACKAGES)
+ set(INSTALL_MINIMAL_QFACE_PACKAGES_COMMAND COMMAND pip3 install -r ${IFCODEGEN_SOURCE_DIR}/requirements_minimal.txt)
+ endif()
+
# On the CI we use the special wheel folder when available to not download all packages again on each build
set(PYTHON3_WHEEL_CACHE "$ENV{PYTHON3_WHEEL_CACHE}" CACHE PATH "Python3 wheel cache")
if (EXISTS "${PYTHON3_WHEEL_CACHE}")
@@ -74,6 +85,7 @@
add_custom_command(OUTPUT ${IFCODEGEN_BIN}
COMMAND ${VIRTUALENV_ACTIVATE_COMMAND}
+ ${INSTALL_MINIMAL_QFACE_PACKAGES_COMMAND}
COMMAND ${PIP3_INSTALL_COMMAND}
DEPENDS ${VIRTUALENV_ACTIVATE}
${IFCODEGEN_SOURCE_DIR}/requirements.txt
@@ -82,16 +94,23 @@
)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
- ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
COMMAND ${DEPLOY_VIRTUALENV} qtif_qface_virtualenv
COMMAND ${CMAKE_COMMAND} -E touch .stamp-deploy_virtualenv
- COMMAND ${CMAKE_COMMAND} -E touch .stamp-cmake-rerun
DEPENDS ${IFCODEGEN_BIN}
)
+ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/.stamp-generator-verified
+ ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
+ COMMAND ${VIRTUALENV_PYTHON} ${CMAKE_CURRENT_SOURCE_DIR}/verify_generator.py
+ COMMAND ${CMAKE_COMMAND} -E touch .stamp-generator-verified
+ COMMAND ${CMAKE_COMMAND} -E touch .stamp-cmake-rerun
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
+ COMMENT "Verifying generator"
+ )
+
# main target which just relies on the stamp file to be uptodate
add_custom_target(ifcodegen ALL
- DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
+ DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-generator-verified
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
)
# Create the rerun cmake stamp file here to be able to add cmake configure dependency
@@ -109,6 +128,7 @@
#####################################################################
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_CLEAN_FILES
+ ${CMAKE_CURRENT_BINARY_DIR}/.stamp-generator-verified
${CMAKE_CURRENT_BINARY_DIR}/.stamp-deploy_virtualenv
${CMAKE_CURRENT_BINARY_DIR}/.stamp-cmake-rerun
${VIRTUALENV_PATH}
diff --git a/src/tools/ifcodegen/verify_generator.py b/src/tools/ifcodegen/verify_generator.py
new file mode 100755
index 0000000..c3f85d6
--- /dev/null
+++ b/src/tools/ifcodegen/verify_generator.py
@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+#############################################################################
+##
+## Copyright (C) 2022 The Qt Company Ltd.
+## Contact: https://www.qt.io/licensing/
+##
+## This file is part of the QtInterfaceFramework module of the Qt Toolkit.
+##
+## $QT_BEGIN_LICENSE:GPL-EXCEPT$
+## Commercial License Usage
+## Licensees holding valid commercial Qt licenses may use this file in
+## accordance with the commercial license agreement provided with the
+## Software or, alternatively, in accordance with the terms contained in
+## a written agreement between you and The Qt Company. For licensing terms
+## and conditions see https://www.qt.io/terms-conditions. For further
+## information use the contact form at https://www.qt.io/contact-us.
+##
+## GNU General Public License Usage
+## Alternatively, this file may be used under the terms of the GNU
+## General Public License version 3 as published by the Free Software
+## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+## included in the packaging of this file. Please review the following
+## information to ensure the GNU General Public License requirements will
+## be met: https://www.gnu.org/licenses/gpl-3.0.html.
+##
+## $QT_END_LICENSE$
+##
+#############################################################################
+
+try:
+ import generate
+except Exception as e:
+ raise SystemExit("""
+ Verifying the generator failed!
+
+ This might be caused by a too recent python version or
+ too recent python packages. You can try installing older
+ python packages by running configure again with the the
+ following option:
+
+ -DQT_USE_MINIMAL_QFACE_PACKAGES=TRUE
+
+ The python error was:
+
+ {}
+ """.format(e))