Uh oh!
There was an error while loading. Please reload this page.
This repository was archived by the owner on Mar 31, 2025. It is now read-only.
forked from zeek/cmake
- Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathFindPythonDev.cmake
More file actions
Latest commit
139 lines (124 loc) · 5.65 KB
/
Copy pathFindPythonDev.cmake
File metadata and controls
139 lines (124 loc) · 5.65 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
# - Try to find Python include dirs and libraries
#
# Usage of this module as follows:
#
# find_package(PythonDev)
#
# Variables used by this module, they can change the default behaviour and need
# to be set before calling find_package:
#
# PYTHON_EXECUTABLE If this is set to a path to a Python interpreter
# then this module attempts to infer the path to
# python-config from it
# PYTHON_CONFIG Set this variable to the location of python-config
# if the module has problems finding the proper
# installation path.
#
# Variables defined by this module:
#
# PYTHONDEV_FOUND System has Python dev headers/libraries
# PYTHON_INCLUDE_DIR The Python include directories.
# PYTHON_LIBRARIES The Python libraries and linker flags.
include(FindPackageHandleStandardArgs)
if ( CMAKE_CROSSCOMPILING )
find_package(PythonLibs)
if (PYTHON_INCLUDE_PATH ANDNOT PYTHON_INCLUDE_DIR)
set(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_PATH}")
endif ()
find_package_handle_standard_args(PythonDev DEFAULT_MSG
PYTHON_INCLUDE_DIR
PYTHON_LIBRARIES
)
return()
endif ()
if (PYTHON_EXECUTABLE)
# Get the real path so that we can reliably find the correct python-config
# (e.g. some systems may have a "python" symlink, but not a "python-config"
# symlink).
get_filename_component(PYTHON_EXECUTABLE"${PYTHON_EXECUTABLE}"REALPATH)
get_filename_component(PYTHON_EXECUTABLE_DIR"${PYTHON_EXECUTABLE}"DIRECTORY)
get_filename_component(PYTHON_EXECUTABLE_NAME"${PYTHON_EXECUTABLE}"NAME)
if ( EXISTS${PYTHON_EXECUTABLE}-config )
set(PYTHON_CONFIG ${PYTHON_EXECUTABLE}-config CACHEPATH""FORCE)
# Avoid assumption that python-config is associated with python3 if
# python3 co-exists in a directory that also contains python2 stuff
elseif ( EXISTS${PYTHON_EXECUTABLE_DIR}/python-config AND
NOTEXISTS${PYTHON_EXECUTABLE_DIR}/python2 AND
NOTEXISTS${PYTHON_EXECUTABLE_DIR}/python2.7 AND
NOTEXISTS${PYTHON_EXECUTABLE_DIR}/python2-config AND
NOTEXISTS${PYTHON_EXECUTABLE_DIR}/python2.7-config )
set(PYTHON_CONFIG ${PYTHON_EXECUTABLE_DIR}/python-config CACHEPATH""FORCE)
endif ()
else ()
find_program(PYTHON_CONFIGNAMES
python3-config
python3.9-config
python3.8-config
python3.7-config
python3.6-config
python3.5-config
python-config
)
endif ()
# The OpenBSD python packages have python-config's that don't reliably
# report linking flags that will work.
if (PYTHON_CONFIG ANDNOT${CMAKE_SYSTEM_NAME}STREQUAL"OpenBSD")
# Try `--ldflags --embed` first and fallback to `--ldflags` if it fails.
# Python 3.8+ introduced the `--embed` flag in relation to this:
# https://docs.python.org/3.8/whatsnew/3.8.html#debug-build-uses-the-same-abi-as-release-build
# Note that even if this FindPythonDev script could technically apply to
# either embedded or extension use cases, the `--embed` flag only adds
# a `-lpython` and it's generally safe to link libpython in both cases.
# The only downside to doing that against an extension when it's not
# strictly necessary is losing the ability to mix-and-match debug/release
# modes between Python and extensions and that's not a feature to typically
# care about.
execute_process(COMMAND"${PYTHON_CONFIG}"--ldflags--embed
RESULT_VARIABLE_python_config_result
OUTPUT_VARIABLEPYTHON_LIBRARIES
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
if ( NOT${_python_config_result}EQUAL 0 )
execute_process(COMMAND"${PYTHON_CONFIG}"--ldflags
RESULT_VARIABLE_python_config_result
OUTPUT_VARIABLEPYTHON_LIBRARIES
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
endif ()
string(STRIP"${PYTHON_LIBRARIES}" PYTHON_LIBRARIES)
execute_process(COMMAND"${PYTHON_CONFIG}"--includes
OUTPUT_VARIABLEPYTHON_INCLUDE_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_QUIET)
string(REGEXREPLACE"^[-I]""" PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}")
string(REGEXREPLACE"[ ]-I"" " PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_DIR}")
separate_arguments(PYTHON_INCLUDE_DIR)
find_package_handle_standard_args(PythonDev DEFAULT_MSG
PYTHON_CONFIG
PYTHON_INCLUDE_DIR
PYTHON_LIBRARIES
)
else ()
if ( ${CMAKE_VERSION}VERSION_LESS"3.12.0" )
find_package(PythonLibs)
if ( PYTHON_INCLUDE_PATH ANDNOT PYTHON_INCLUDE_DIR )
set(PYTHON_INCLUDE_DIR "${PYTHON_INCLUDE_PATH}")
endif ()
else ()
# Expect this branch to be used mostly in macOS where the system
# default Python 3 installation is not easily/consistently detected
# by CMake. CMake 3.12+ is required, but it's expected that macOS
# users are getting a recent version from homebrew/etc anyway.
find_package(Python3COMPONENTSDevelopment)
if ( Python3_INCLUDE_DIRS ANDNOT PYTHON_INCLUDE_DIR )
set(PYTHON_INCLUDE_DIR "${Python3_INCLUDE_DIRS}")
endif ()
if ( Python3_LIBRARIES ANDNOT PYTHON_LIBRARIES )
set(PYTHON_LIBRARIES "${Python3_LIBRARIES}")
endif ()
endif ()
find_package_handle_standard_args(PythonDev DEFAULT_MSG
PYTHON_INCLUDE_DIR
PYTHON_LIBRARIES
)
endif ()