diff --git a/CMakeLists.txt b/CMakeLists.txt index 8e497e6c443b..6b1ec98761ac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -121,6 +121,10 @@ if(CMAKE_USE_LIBBPF_PACKAGE) find_package(LibBpf) endif() +if(NOT PYTHON_CMD) + set(PYTHON_CMD "python3") +endif() + if(NOT PYTHON_ONLY) find_package(LLVM REQUIRED CONFIG) message(STATUS "Found LLVM: ${LLVM_INCLUDE_DIRS} ${LLVM_PACKAGE_VERSION} (Use LLVM_ROOT envronment variable for another version of LLVM)") @@ -234,5 +238,8 @@ if(NOT TARGET uninstall) IMMEDIATE @ONLY) add_custom_target(uninstall - COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/CmakeUninstall.cmake) + COMMAND ${CMAKE_COMMAND} -DPYTHON_CMD=\"${PYTHON_CMD}\" + -DREVISION=${REVISION} + -P ${CMAKE_CURRENT_BINARY_DIR}/CmakeUninstall.cmake + ) endif() diff --git a/cmake/CmakeUninstall.cmake.in b/cmake/CmakeUninstall.cmake.in index a2178cb04ee1..c79e80df1498 100644 --- a/cmake/CmakeUninstall.cmake.in +++ b/cmake/CmakeUninstall.cmake.in @@ -26,4 +26,11 @@ endforeach() endfunction() UninstallManifest("@CMAKE_BINARY_DIR@/install_manifest.txt") -UninstallManifest("@CMAKE_BINARY_DIR@/install_manifest_python_bcc.txt") + +if(EXISTS "/etc/debian_version") + set(PY_PIP_ARGS "--break-system-packages") +endif() +foreach(PY_CMD ${PYTHON_CMD}) + message(STATUS "Uninstall python-bcc for ${PY_CMD}.") + execute_process(COMMAND ${PY_CMD} -m pip uninstall -y ${PY_PIP_ARGS} bcc==${REVISION}) +endforeach() diff --git a/src/python/CMakeLists.txt b/src/python/CMakeLists.txt index 7f5b103e9abe..05d937316973 100644 --- a/src/python/CMakeLists.txt +++ b/src/python/CMakeLists.txt @@ -1,14 +1,6 @@ # Copyright (c) PLUMgrid, Inc. # Licensed under the Apache License, Version 2.0 (the "License") -if(NOT PYTHON_CMD) - set(PYTHON_CMD "python3") -endif() - -if(EXISTS "/etc/debian_version" AND NOT PY_SKIP_DEB_LAYOUT) - set(PYTHON_FLAGS "${PYTHON_FLAGS} --install-layout deb") -endif() - file(GLOB_RECURSE PYTHON_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/*.py) file(GLOB_RECURSE PYTHON_INCLUDES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} @@ -27,13 +19,13 @@ foreach(PY_CMD ${PYTHON_CMD}) configure_file(${PY_INC} ${PY_DIRECTORY}/${PY_INC_REPLACED} @ONLY) endforeach() - set(PIP_INSTALLABLE "${PY_DIRECTORY}/dist/bcc-${REVISION}.tar.gz") + set(PIP_INSTALLABLE "${PY_DIRECTORY}/dist/bcc-${REVISION}-py3-none-any.whl") add_custom_command( OUTPUT ${PIP_INSTALLABLE} - COMMAND ${PY_CMD} setup.py sdist + COMMAND ${PY_CMD} -m build --wheel ${PY_DIRECTORY} WORKING_DIRECTORY ${PY_DIRECTORY} DEPENDS ${PYTHON_SOURCES} ${PYTHON_INCLUDES} - COMMENT "Building sdist for ${PY_CMD}" + COMMENT "Building ${PIP_INSTALLABLE} for ${PY_CMD}" ) add_custom_target(bcc_py_${PY_CMD_ESCAPED} ALL DEPENDS ${PIP_INSTALLABLE}) @@ -41,10 +33,11 @@ foreach(PY_CMD ${PYTHON_CMD}) set(PYTHON_PREFIX ${CMAKE_INSTALL_PREFIX}) endif() + message(STATUS "Install ${PIP_INSTALLABLE} for ${PY_CMD}.") install( CODE " execute_process( - COMMAND ${PY_CMD} setup.py install -f ${PYTHON_FLAGS} --prefix=${PYTHON_PREFIX} --record ${CMAKE_BINARY_DIR}/install_manifest_python_bcc.txt - WORKING_DIRECTORY ${PY_DIRECTORY})" + COMMAND ${PY_CMD} -m pip install --force-reinstall --prefix=${PYTHON_PREFIX} ${PIP_INSTALLABLE} + WORKING_DIRECTORY ${PY_DIRECTORY})" COMPONENT python) endforeach()