From bb7b22838aee5db1f8faaad10d744a9de745e057 Mon Sep 17 00:00:00 2001 From: Gabriel Ferreira Date: Wed, 18 Jun 2025 10:34:37 +0200 Subject: [PATCH] build: Use Python venv by default --- .../ns3-check-dependencies.cmake | 21 +++++++++++++++++++ build-support/macros-and-definitions.cmake | 9 ++------ 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/build-support/custom-modules/ns3-check-dependencies.cmake b/build-support/custom-modules/ns3-check-dependencies.cmake index d7dbd631f..4630c8666 100644 --- a/build-support/custom-modules/ns3-check-dependencies.cmake +++ b/build-support/custom-modules/ns3-check-dependencies.cmake @@ -40,6 +40,27 @@ function(check_deps missing_deps) ) if(NOT (${return_code} EQUAL 0)) list(APPEND local_missing_deps ${package}) + else() + # To make sure CMake import files can be found from venv site packages, we + # manually add them to CMAKE_PREFIX_PATH + execute_process( + COMMAND + ${Python3_EXECUTABLE} -c + "import os; import ${package}; print(os.path.abspath(os.path.dirname(${package}.__file__)))" + OUTPUT_VARIABLE venv_site_packages_path + ) + # Remove newlines (\n, \r, \r\n) + string(REGEX REPLACE "[\r\n]+$" "" venv_site_packages_path + "${venv_site_packages_path}" + ) + if(EXISTS ${venv_site_packages_path}) + if(NOT (DEFINED CMAKE_PREFIX_PATH)) + set(CMAKE_PREFIX_PATH "" PARENT_SCOPE) + endif() + set(CMAKE_PREFIX_PATH "${CMAKE_PREFIX_PATH};${venv_site_packages_path}" + PARENT_SCOPE + ) + endif() endif() endforeach() diff --git a/build-support/macros-and-definitions.cmake b/build-support/macros-and-definitions.cmake index 672fa37ab..430304fd3 100644 --- a/build-support/macros-and-definitions.cmake +++ b/build-support/macros-and-definitions.cmake @@ -628,16 +628,11 @@ macro(process_options) set(Python3_FOUND FALSE) set(Python3_INCLUDE_DIRS) set(Python3_Interpreter_FOUND FALSE) + set(Python3_FIND_VIRTUALENV FIRST) if(${NS3_PYTHON_BINDINGS}) find_package(Python3 COMPONENTS Interpreter Development) else() - # If Python was not set yet, use the version found by check_deps - check_deps(python3_deps EXECUTABLES python3) - if(python3_deps) - message(FATAL_ERROR "Python3 was not found") - else() - set(Python3_EXECUTABLE ${PYTHON3}) - endif() + find_package(Python3 COMPONENTS Interpreter) endif() # Check if both Python interpreter and development libraries were found