Index: lib/MsgUtils/CMakeLists.txt =================================================================== diff -u -re3aaafd456d2a3b791400e90fbc380372da56ff9 -r8514ea389887a4d513837691cc1f9ef79ab48396 --- lib/MsgUtils/CMakeLists.txt (.../CMakeLists.txt) (revision e3aaafd456d2a3b791400e90fbc380372da56ff9) +++ lib/MsgUtils/CMakeLists.txt (.../CMakeLists.txt) (revision 8514ea389887a4d513837691cc1f9ef79ab48396) @@ -11,74 +11,18 @@ find_package(Protobuf REQUIRED) find_package(absl REQUIRED) -find_package(Python3 REQUIRED COMPONENTS Interpreter) find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Core) find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Network SerialBus) set(MSGUTILS_SCRIPTS_DIR ${CMAKE_SOURCE_DIR}/scripts/MsgUtils) -# Create a build-local venv so pip install works on distros that enforce PEP 668 -# (Debian/Ubuntu with Python 3.11+, etc.) without polluting system or user site-packages. -set(MSGUTILS_VENV_DIR ${CMAKE_CURRENT_BINARY_DIR}/msgutils-venv) -set(MSGUTILS_PYTHON ${MSGUTILS_VENV_DIR}/bin/python) -# Probe pip inside the venv — a half-created venv missing python3-venv has python but no pip. -execute_process( - COMMAND ${MSGUTILS_PYTHON} -m pip --version - RESULT_VARIABLE _venv_pip_ok - OUTPUT_QUIET - ERROR_QUIET -) -if(NOT _venv_pip_ok EQUAL 0) - message(STATUS "Creating msgutils Python venv at ${MSGUTILS_VENV_DIR}") - file(REMOVE_RECURSE ${MSGUTILS_VENV_DIR}) - execute_process( - COMMAND ${Python3_EXECUTABLE} -m venv ${MSGUTILS_VENV_DIR} - RESULT_VARIABLE _venv_result - OUTPUT_VARIABLE _venv_output - ERROR_VARIABLE _venv_output - ) - if(NOT _venv_result EQUAL 0 OR NOT EXISTS ${MSGUTILS_PYTHON}) - message(FATAL_ERROR - "Failed to create venv at ${MSGUTILS_VENV_DIR}.\n" - "Install the venv module (e.g. 'sudo apt install python3-venv' or 'python3-full' on Debian/Ubuntu, " - "matching your Python version).\n" - "Output:\n${_venv_output}") - endif() - # Verify pip is actually usable in the new venv. - execute_process( - COMMAND ${MSGUTILS_PYTHON} -m pip --version - RESULT_VARIABLE _venv_pip_ok - OUTPUT_QUIET - ERROR_QUIET - ) - if(NOT _venv_pip_ok EQUAL 0) - message(FATAL_ERROR - "Venv at ${MSGUTILS_VENV_DIR} was created but pip is not available inside it. " - "Install the matching python3-venv package and reconfigure.") - endif() -endif() - +# The project-wide venv ({CMAKE_BINARY_DIR}/.venv) is set up by +# cmake/PythonVenv.cmake at the top level; ${PROJECT_PYTHON} resolves to its +# interpreter. We install the msgutils package editable so the generator +# scripts below can `import msgutils` regardless of how they're invoked. include(cmake/MsgUtils.cmake) +register_python_package(${MSGUTILS_SCRIPTS_DIR}) -# Upgrade pip to ensure pyproject.toml-based editable installs are supported (requires pip >= 21.3). -execute_process( - COMMAND ${MSGUTILS_PYTHON} -m pip install --upgrade pip --quiet - RESULT_VARIABLE _pip_upgrade_result -) -if(NOT _pip_upgrade_result EQUAL 0) - message(FATAL_ERROR "Failed to upgrade pip in msgutils venv (pip returned ${_pip_upgrade_result})") -endif() - -# install the Python package in editable mode so that the generated protobuf files can be imported by the Python scripts -# without needing to be copied to the Python package directory -execute_process( - COMMAND ${MSGUTILS_PYTHON} -m pip install -e ${MSGUTILS_SCRIPTS_DIR} --quiet - RESULT_VARIABLE _pip_result -) -if(NOT _pip_result EQUAL 0) - message(FATAL_ERROR "Failed to install msgutils Python package (pip returned ${_pip_result})") -endif() - # set(DENALI_MSG_CSV ${CMAKE_CURRENT_SOURCE_DIR}/../../data/FW_Messages_List.csv) set(LEAHI_MSG_CSV ${CMAKE_CURRENT_SOURCE_DIR}/../../data/Leahi_Staging_FW_Messages_List.csv) set(LEAHI_MSG_CONF ${CMAKE_CURRENT_SOURCE_DIR}/../../data/LeahiUnhandled.conf)