cmake: Workaround for buggy Qt 6.4.2 & 6.6.3

This commit is contained in:
Philippe Teuwen
2026-02-28 23:40:57 +01:00
parent 8fdf0ab66f
commit 4ec098ee9d
2 changed files with 44 additions and 3 deletions
+3 -3
View File
@@ -30,7 +30,7 @@ jobs:
run: sudo apt-get update
- name: Install dependencies
run: sudo apt-get install -yqq make autoconf build-essential ca-certificates pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev qt6-base-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev python3 python3-dev libpython3-all-dev liblua5.4-dev liblua5.4-0 lua5.4 sed libssl-dev libgd-dev
run: sudo apt-get install -yqq make build-essential ca-certificates pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev qt6-base-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev python3 python3-dev libpython3-all-dev liblua5.4-dev liblua5.4-0 lua5.4 sed libssl-dev libgd-dev
- name: Install Python dependencies
run: pip install -r tools/requirements.txt
@@ -60,7 +60,7 @@ jobs:
run: sudo apt-get update
- name: Install dependencies
run: sudo apt-get install -yqq make autoconf build-essential ca-certificates pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev qt6-base-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev python3 python3-dev libpython3-all-dev liblua5.4-dev liblua5.4-0 lua5.4 sed libssl-dev libgd-dev
run: sudo apt-get install -yqq make build-essential ca-certificates pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev qt6-base-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev python3 python3-dev libpython3-all-dev liblua5.4-dev liblua5.4-0 lua5.4 sed libssl-dev libgd-dev
- name: Install Python dependencies
run: pip install -r tools/requirements.txt
@@ -91,7 +91,7 @@ jobs:
run: sudo apt-get update
- name: Install dependencies
run: sudo apt-get install -yqq make autoconf build-essential ca-certificates pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev qt6-base-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev python3 python3-dev libpython3-all-dev liblua5.4-dev liblua5.4-0 lua5.4 sed libssl-dev libgd-dev
run: sudo apt-get install -yqq make build-essential ca-certificates pkg-config libreadline-dev gcc-arm-none-eabi libnewlib-dev qt6-base-dev libbz2-dev liblz4-dev libbluetooth-dev libpython3-dev python3 python3-dev libpython3-all-dev liblua5.4-dev liblua5.4-0 lua5.4 sed libssl-dev libgd-dev
- name: Install Python dependencies
run: pip install -r tools/requirements.txt
+41
View File
@@ -751,6 +751,47 @@ add_executable(proxmark3
${ADDITIONAL_SRC}
)
# Handle overlays.ui manually to apply the Qt6 setNum fix
if ((NOT SKIPQT EQUAL 1) AND Qt6_FOUND)
# Find the UIC tool
get_target_property(QT_UIC_EXECUTABLE Qt6::uic IMPORTED_LOCATION)
set(UI_OVERLAYS_INPUT ${PM3_ROOT}/client/src/ui/overlays.ui)
set(UI_OVERLAYS_OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ui/ui_overlays.h)
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/ui)
add_custom_command(
OUTPUT ${UI_OVERLAYS_OUTPUT}
COMMAND ${QT_UIC_EXECUTABLE} ${UI_OVERLAYS_INPUT} -o ${UI_OVERLAYS_OUTPUT}
# Fix bug in headers generated by some Qt6 versions (seen on 6.4.2 & 6.6.3):
# replace &QLabel::setNum with qOverload<int>(&QLabel::setNum)
COMMAND ${CMAKE_COMMAND}
-DFILE=${UI_OVERLAYS_OUTPUT}
-P ${CMAKE_CURRENT_BINARY_DIR}/fix_overlays.cmake
DEPENDS ${UI_OVERLAYS_INPUT}
COMMENT "UIC overlays.ui (with Qt6 setNum fix)"
)
# Write the sed-equivalent cmake script at configure time
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/fix_overlays.cmake [=[
file(READ "${FILE}" _content)
string(REPLACE
"&QLabel::setNum);"
"qOverload<int>(&QLabel::setNum));"
_content "${_content}")
file(WRITE "${FILE}" "${_content}")
]=])
# Add the generated header as a source so it gets built
# and tell AUTOUIC to skip the .ui file (we handle it ourselves)
set_property(SOURCE ${UI_OVERLAYS_INPUT} PROPERTY SKIP_AUTOUIC ON)
# Make proxmark3 depend on the generated header
target_sources(proxmark3 PRIVATE ${UI_OVERLAYS_OUTPUT})
target_include_directories(proxmark3 PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
endif()
target_compile_options(proxmark3 PUBLIC -Wall -Werror -O3)
if (EMBED_READLINE)
if (NOT SKIPREADLINE EQUAL 1)