2
0
mirror of https://github.com/boostorg/python.git synced 2026-01-19 04:22:16 +00:00
Files
python/.github/get-py-env.py
Neil Schemenauer e89f86b74f Update Linux CI scripts, more Python versions.
Update scripts to use actions/setup-python to install different Python
versions.  Add run-faber.sh and get-py-env.py scripts.  Add
test-ubuntu-py-ver.yml CI script to test with different Python versions.
2025-12-02 08:19:45 -05:00

66 lines
1.8 KiB
Python
Executable File

#!/usr/bin/env python3
#
# Determine info about the Python install and write shell code to stdout, to
# set env variables. This will set the variables PY_LDFLAGS, PY_CFLAGS and
# PY_INC_PATH.
#
# The python3-config tool is used as the source of this info. In theory we
# could use sysconfig as well but the setup-python action from github appears
# to patch python3-config but not patch the sysconfig info.
#
# Usage:
# eval $(python3 get-py-env.py)
import os
import re
import subprocess
def get_output(cmd):
rv = subprocess.run(
cmd,
capture_output=True, # Capture stdout and stderr
text=True, # Decode output as text (UTF-8)
check=True, # Raise an error if the command fails
)
return rv.stdout
def extract_flags(cmd, prefix):
flags = []
for part in get_output(cmd).split():
part = part.strip()
if part.startswith(prefix):
flags.append(part)
return ' '.join(flags)
def find_python_h():
"""Find the include path that has Python.h contained inside.
We could use INCLUDEPY from sysconfig but github patches
python3-config but not the sysconfig info (after moving the
install).
"""
c_flags = extract_flags(['python3-config', '--cflags'], '-I')
for part in c_flags.split():
m = re.search(r'-I(\S+)', part)
if not m:
continue
inc_path = m.group(1)
if os.path.exists(os.path.join(inc_path, 'Python.h')):
return inc_path
raise SystemExit('cannot find Python.h')
def main():
ld_flags = extract_flags(['python3-config', '--ldflags'], '-L')
c_flags = extract_flags(['python3-config', '--cflags'], '-I')
include_path = find_python_h()
print(f'PY_LDFLAGS="{ld_flags}"')
print(f'PY_CFLAGS="{c_flags}"')
print(f'PY_INC_PATH="{include_path}"')
if __name__ == '__main__':
main()