Skip to content

Commit cf8d4d3

Browse files
authored
Set hints to find the python version we actually want. (#508)
The comment in the commit explains the reasoning behind it. Signed-off-by: Chris Lalancette <[email protected]>
1 parent dc3df2f commit cf8d4d3

File tree

1 file changed

+16
-0
lines changed

1 file changed

+16
-0
lines changed

ament_cmake_core/cmake/core/python.cmake

+16
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,21 @@
1818
# find_package(Python3 3.8 REQUIRED)
1919
# find_package(ament_cmake REQUIRED)
2020
if(NOT TARGET Python3::Interpreter)
21+
# By default, without the settings below, find_package(Python3) will attempt
22+
# to find the newest python version it can, and additionally will find the
23+
# most specific version. For instance, on a system that has
24+
# /usr/bin/python3.10, /usr/bin/python3.11, and /usr/bin/python3, it will find
25+
# /usr/bin/python3.11, even if /usr/bin/python3 points to /usr/bin/python3.10.
26+
# The behavior we want is to prefer the "system" installed version unless the
27+
# user specifically tells us othewise through the Python3_EXECUTABLE hint.
28+
# Setting CMP0094 to NEW means that the search will stop after the first
29+
# python version is found. Setting Python3_FIND_UNVERSIONED_NAMES means that
30+
# the search will prefer /usr/bin/python3 over /usr/bin/python3.11. And that
31+
# latter functionality is only available in CMake 3.20 or later, so we need
32+
# at least that version.
33+
cmake_minimum_required(VERSION 3.20)
34+
cmake_policy(SET CMP0094 NEW)
35+
set(Python3_FIND_UNVERSIONED_NAMES FIRST)
36+
2137
find_package(Python3 REQUIRED COMPONENTS Interpreter)
2238
endif()

0 commit comments

Comments
 (0)