mirror of
https://github.com/python/cpython.git
synced 2025-10-13 10:23:28 +00:00
bpo-43690: stable_abi.py no longer parses macros (GH-25136)
The stable_abi.py script no longer parse macros. Macro targets can be static inline functions which are not part of the stable ABI, only part of the limited C API. Run "make regen-limited-abi" to exclude PyType_HasFeature from Doc/data/stable_abi.dat.
This commit is contained in:
parent
baf10da750
commit
61092a99c4
2 changed files with 1 additions and 33 deletions
|
@ -616,7 +616,6 @@ PyType_GetFlags
|
||||||
PyType_GetModule
|
PyType_GetModule
|
||||||
PyType_GetModuleState
|
PyType_GetModuleState
|
||||||
PyType_GetSlot
|
PyType_GetSlot
|
||||||
PyType_HasFeature
|
|
||||||
PyType_IsSubtype
|
PyType_IsSubtype
|
||||||
PyType_Modified
|
PyType_Modified
|
||||||
PyType_Ready
|
PyType_Ready
|
||||||
|
|
|
@ -112,11 +112,10 @@ def generate_limited_api_symbols(args):
|
||||||
stable_data, stable_exported_data, stable_functions = get_limited_api_definitions(
|
stable_data, stable_exported_data, stable_functions = get_limited_api_definitions(
|
||||||
headers
|
headers
|
||||||
)
|
)
|
||||||
macros = get_limited_api_macros(headers)
|
|
||||||
|
|
||||||
stable_symbols = {
|
stable_symbols = {
|
||||||
symbol
|
symbol
|
||||||
for symbol in (stable_functions | stable_exported_data | stable_data | macros)
|
for symbol in (stable_functions | stable_exported_data | stable_data)
|
||||||
if symbol.startswith("Py") and symbol in available_symbols
|
if symbol.startswith("Py") and symbol in available_symbols
|
||||||
}
|
}
|
||||||
with open(args.output_file, "w") as output_file:
|
with open(args.output_file, "w") as output_file:
|
||||||
|
@ -128,36 +127,6 @@ def generate_limited_api_symbols(args):
|
||||||
output_file.write(f"{symbol}\n")
|
output_file.write(f"{symbol}\n")
|
||||||
|
|
||||||
|
|
||||||
def get_limited_api_macros(headers):
|
|
||||||
"""Run the preprocesor over all the header files in "Include" setting
|
|
||||||
"-DPy_LIMITED_API" to the correct value for the running version of the interpreter
|
|
||||||
and extracting all macro definitions (via adding -dM to the compiler arguments).
|
|
||||||
"""
|
|
||||||
|
|
||||||
preprocesor_output_with_macros = subprocess.check_output(
|
|
||||||
sysconfig.get_config_var("CC").split()
|
|
||||||
+ [
|
|
||||||
# Prevent the expansion of the exported macros so we can capture them later
|
|
||||||
"-DSIZEOF_WCHAR_T=4", # The actual value is not important
|
|
||||||
f"-DPy_LIMITED_API={sys.version_info.major << 24 | sys.version_info.minor << 16}",
|
|
||||||
"-I.",
|
|
||||||
"-I./Include",
|
|
||||||
"-dM",
|
|
||||||
"-E",
|
|
||||||
]
|
|
||||||
+ [str(file) for file in headers],
|
|
||||||
text=True,
|
|
||||||
stderr=subprocess.DEVNULL,
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
|
||||||
target
|
|
||||||
for _, target in re.findall(
|
|
||||||
r"#define (\w+)\s*(?:\(.*?\))?\s+(\w+)", preprocesor_output_with_macros
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def get_limited_api_definitions(headers):
|
def get_limited_api_definitions(headers):
|
||||||
"""Run the preprocesor over all the header files in "Include" setting
|
"""Run the preprocesor over all the header files in "Include" setting
|
||||||
"-DPy_LIMITED_API" to the correct value for the running version of the interpreter.
|
"-DPy_LIMITED_API" to the correct value for the running version of the interpreter.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue