From 350210774e4789dc429b8eb3768d37f5144a6ed3 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Tue, 22 Apr 2025 11:47:45 +0100 Subject: [PATCH 1/3] test: Treat executable paths in tests consistently When using multi-config CMake generators, executable paths include per-config subdirectories, which require special handling in tests. Using dedicated environment variables to specify executable paths works well in such scenarios. However, the `util_test_runner` test sets these variables for the `util/test_runner.py` script unconditionally, which diverges from the approach used when running `functional/test_runner.py`. This change makes the usage of the aforementioned environment variables uniform. --- .github/workflows/ci.yml | 2 ++ cmake/tests.cmake | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1dff87ad238..35789efbfdf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -242,6 +242,8 @@ jobs: working-directory: build env: QT_PLUGIN_PATH: '${{ github.workspace }}\build\vcpkg_installed\x64-windows\Qt6\plugins' + BITCOINUTIL: '${{ github.workspace }}\build\bin\Release\bitcoin-util.exe' + BITCOINTX: '${{ github.workspace }}\build\bin\Release\bitcoin-tx.exe' run: | ctest --output-on-failure --stop-on-failure -j $NUMBER_OF_PROCESSORS -C Release diff --git a/cmake/tests.cmake b/cmake/tests.cmake index 27913298001..c1d9bb31cf4 100644 --- a/cmake/tests.cmake +++ b/cmake/tests.cmake @@ -4,7 +4,7 @@ if(TARGET bitcoin-util AND TARGET bitcoin-tx AND PYTHON_COMMAND) add_test(NAME util_test_runner - COMMAND ${CMAKE_COMMAND} -E env BITCOINUTIL=$ BITCOINTX=$ ${PYTHON_COMMAND} ${PROJECT_BINARY_DIR}/test/util/test_runner.py + COMMAND ${PYTHON_COMMAND} ${PROJECT_BINARY_DIR}/test/util/test_runner.py ) endif() From 274a89e052328e8dd0350f4e0846c149ceca6c7d Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Wed, 12 Feb 2025 12:39:18 +0000 Subject: [PATCH 2/3] cmake, refactor: Switch to `Python3::Interpreter` imported target Imported targets are more robust than using variables. --- CMakeLists.txt | 4 +--- cmake/module/Maintenance.cmake | 10 +++++----- cmake/tests.cmake | 8 ++++---- src/qt/CMakeLists.txt | 2 +- 4 files changed, 11 insertions(+), 13 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index b272658177f..f1572446bce 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -588,9 +588,7 @@ set(Python3_FIND_FRAMEWORK LAST CACHE STRING "") set(Python3_FIND_UNVERSIONED_NAMES FIRST CACHE STRING "") mark_as_advanced(Python3_FIND_FRAMEWORK Python3_FIND_UNVERSIONED_NAMES) find_package(Python3 3.10 COMPONENTS Interpreter) -if(Python3_EXECUTABLE) - set(PYTHON_COMMAND ${Python3_EXECUTABLE}) -else() +if(NOT TARGET Python3::Interpreter) list(APPEND configure_warnings "Minimum required Python not found. Utils and rpcauth tests are disabled." ) diff --git a/cmake/module/Maintenance.cmake b/cmake/module/Maintenance.cmake index 4103c9b6383..b9960c67e1c 100644 --- a/cmake/module/Maintenance.cmake +++ b/cmake/module/Maintenance.cmake @@ -19,7 +19,7 @@ function(setup_split_debug_script) endfunction() function(add_maintenance_targets) - if(NOT PYTHON_COMMAND) + if(NOT TARGET Python3::Interpreter) return() endif() @@ -31,13 +31,13 @@ function(add_maintenance_targets) add_custom_target(check-symbols COMMAND ${CMAKE_COMMAND} -E echo "Running symbol and dynamic library checks..." - COMMAND ${PYTHON_COMMAND} ${PROJECT_SOURCE_DIR}/contrib/devtools/symbol-check.py ${executables} + COMMAND Python3::Interpreter ${PROJECT_SOURCE_DIR}/contrib/devtools/symbol-check.py ${executables} VERBATIM ) add_custom_target(check-security COMMAND ${CMAKE_COMMAND} -E echo "Checking binary security..." - COMMAND ${PYTHON_COMMAND} ${PROJECT_SOURCE_DIR}/contrib/devtools/security-check.py ${executables} + COMMAND Python3::Interpreter ${PROJECT_SOURCE_DIR}/contrib/devtools/security-check.py ${executables} VERBATIM ) endfunction() @@ -99,7 +99,7 @@ function(add_macos_deploy_target) if(CMAKE_HOST_APPLE) add_custom_command( OUTPUT ${PROJECT_BINARY_DIR}/${osx_volname}.zip - COMMAND ${PYTHON_COMMAND} ${PROJECT_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} ${osx_volname} -translations-dir=${QT_TRANSLATIONS_DIR} -zip + COMMAND Python3::Interpreter ${PROJECT_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} ${osx_volname} -translations-dir=${QT_TRANSLATIONS_DIR} -zip DEPENDS ${PROJECT_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt VERBATIM ) @@ -112,7 +112,7 @@ function(add_macos_deploy_target) else() add_custom_command( OUTPUT ${PROJECT_BINARY_DIR}/dist/${macos_app}/Contents/MacOS/Bitcoin-Qt - COMMAND OBJDUMP=${CMAKE_OBJDUMP} ${PYTHON_COMMAND} ${PROJECT_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} ${osx_volname} -translations-dir=${QT_TRANSLATIONS_DIR} + COMMAND ${CMAKE_COMMAND} -E env OBJDUMP=${CMAKE_OBJDUMP} $ ${PROJECT_SOURCE_DIR}/contrib/macdeploy/macdeployqtplus ${macos_app} ${osx_volname} -translations-dir=${QT_TRANSLATIONS_DIR} DEPENDS ${PROJECT_BINARY_DIR}/${macos_app}/Contents/MacOS/Bitcoin-Qt VERBATIM ) diff --git a/cmake/tests.cmake b/cmake/tests.cmake index c1d9bb31cf4..e0bb729ba17 100644 --- a/cmake/tests.cmake +++ b/cmake/tests.cmake @@ -2,14 +2,14 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit/. -if(TARGET bitcoin-util AND TARGET bitcoin-tx AND PYTHON_COMMAND) +if(TARGET bitcoin-util AND TARGET bitcoin-tx AND TARGET Python3::Interpreter) add_test(NAME util_test_runner - COMMAND ${PYTHON_COMMAND} ${PROJECT_BINARY_DIR}/test/util/test_runner.py + COMMAND Python3::Interpreter ${PROJECT_BINARY_DIR}/test/util/test_runner.py ) endif() -if(PYTHON_COMMAND) +if(TARGET Python3::Interpreter) add_test(NAME util_rpcauth_test - COMMAND ${PYTHON_COMMAND} ${PROJECT_BINARY_DIR}/test/util/rpcauth-test.py + COMMAND Python3::Interpreter ${PROJECT_BINARY_DIR}/test/util/rpcauth-test.py ) endif() diff --git a/src/qt/CMakeLists.txt b/src/qt/CMakeLists.txt index 7379a1f328e..98346f86b7b 100644 --- a/src/qt/CMakeLists.txt +++ b/src/qt/CMakeLists.txt @@ -348,7 +348,7 @@ else() get_translatable_sources(qt_translatable_sources src/qt) file(GLOB ui_files ${CMAKE_CURRENT_SOURCE_DIR}/forms/*.ui) add_custom_target(translate - COMMAND ${CMAKE_COMMAND} -E env XGETTEXT=${XGETTEXT_EXECUTABLE} COPYRIGHT_HOLDERS=${COPYRIGHT_HOLDERS} ${Python3_EXECUTABLE} ${PROJECT_SOURCE_DIR}/share/qt/extract_strings_qt.py ${translatable_sources} + COMMAND ${CMAKE_COMMAND} -E env XGETTEXT=${XGETTEXT_EXECUTABLE} COPYRIGHT_HOLDERS=${COPYRIGHT_HOLDERS} $ ${PROJECT_SOURCE_DIR}/share/qt/extract_strings_qt.py ${translatable_sources} COMMAND Qt6::lupdate -no-obsolete -I ${PROJECT_SOURCE_DIR}/src -locations relative ${CMAKE_CURRENT_SOURCE_DIR}/bitcoinstrings.cpp ${ui_files} ${qt_translatable_sources} -ts ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts COMMAND Qt6::lconvert -drop-translations -o ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf -i ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.ts COMMAND ${SED_EXECUTABLE} -i.old -e "s|source-language=\"en\" target-language=\"en\"|source-language=\"en\"|" -e "/<\\/target>/d" ${CMAKE_CURRENT_SOURCE_DIR}/locale/bitcoin_en.xlf From fee2ccfb67ef6e8d71cc056f4b9d1201415c7fa2 Mon Sep 17 00:00:00 2001 From: Hennadii Stepanov <32963518+hebasto@users.noreply.github.com> Date: Wed, 12 Feb 2025 12:39:30 +0000 Subject: [PATCH 3/3] cmake, test: Disable tests instead of ignoring them --- cmake/tests.cmake | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/cmake/tests.cmake b/cmake/tests.cmake index e0bb729ba17..7bab6a0c45f 100644 --- a/cmake/tests.cmake +++ b/cmake/tests.cmake @@ -2,14 +2,16 @@ # Distributed under the MIT software license, see the accompanying # file COPYING or https://opensource.org/license/mit/. -if(TARGET bitcoin-util AND TARGET bitcoin-tx AND TARGET Python3::Interpreter) - add_test(NAME util_test_runner - COMMAND Python3::Interpreter ${PROJECT_BINARY_DIR}/test/util/test_runner.py - ) -endif() +add_test(NAME util_test_runner + COMMAND Python3::Interpreter ${PROJECT_BINARY_DIR}/test/util/test_runner.py +) +set_tests_properties(util_test_runner PROPERTIES + DISABLED $,$,$>> +) -if(TARGET Python3::Interpreter) - add_test(NAME util_rpcauth_test - COMMAND Python3::Interpreter ${PROJECT_BINARY_DIR}/test/util/rpcauth-test.py - ) -endif() +add_test(NAME util_rpcauth_test + COMMAND Python3::Interpreter ${PROJECT_BINARY_DIR}/test/util/rpcauth-test.py +) +set_tests_properties(util_rpcauth_test PROPERTIES + DISABLED $> +)