Skip to content

Commit db3300a

Browse files
authored
Refactor library name handling for ABI3 support
1 parent 285528f commit db3300a

File tree

1 file changed

+21
-9
lines changed

1 file changed

+21
-9
lines changed

bazel/repo_rules/get_local_runtime_info.py

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,16 @@ def _search_library_names(
141141
lib_names.append(f"{prefix}python{version}{abi_flags}{shlib_suffix}")
142142

143143
# Also search for the abi3 libraries.
144-
lib_names.append(f"{prefix}python{sys.version_info.major}{shlib_suffix}")
144+
abi3_lib_names = [f"{prefix}python{sys.version_info.major}{shlib_suffix}"]
145145
if abi_flags:
146-
lib_names.append(
146+
abi3_lib_names.append(
147147
f"{prefix}python{sys.version_info.major}{abi_flags}{shlib_suffix}"
148148
)
149+
for x in lib_names:
150+
if x and version in x:
151+
abi3_lib_names.append(x.replace(version, f"{sys.version_info.major}"))
152+
153+
lib_names.extend(abi3_lib_names)
149154
return list(dict.fromkeys(k for k in lib_names if k))
150155

151156

@@ -170,6 +175,19 @@ def _get_python_library_info(base_executable) -> dict[str, Any]:
170175
config_vars.get, version, abi_flags, shlib_suffix
171176
)
172177

178+
abi3_libraries = {
179+
f"libpython{sys.version_info.major}{abi_flags}.dynlib",
180+
f"libpython{sys.version_info.major}{abi_flags}.so.1.0",
181+
f"libpython{sys.version_info.major}{abi_flags}.so",
182+
f"python{sys.version_info.major}{abi_flags}.dll",
183+
f"python{sys.version_info.major}{abi_flags}.dynlib",
184+
f"libpython{sys.version_info.major}.dynlib",
185+
f"libpython{sys.version_info.major}.so.1.0",
186+
f"libpython{sys.version_info.major}.so",
187+
f"python{sys.version_info.major}.dll",
188+
f"python{sys.version_info.major}.dynlib",
189+
}
190+
173191
# Found libraries
174192
static_libraries: dict[str, None] = {}
175193
dynamic_libraries: dict[str, None] = {}
@@ -180,13 +198,7 @@ def _get_python_library_info(base_executable) -> dict[str, Any]:
180198
for root_dir in search_directories:
181199
for libname in search_libnames:
182200
composed_path = os.path.join(root_dir, libname)
183-
is_abi3_file = os.path.basename(composed_path) in (
184-
"libpython3.dynlib",
185-
"libpython3.so.1.0",
186-
"libpython3.so",
187-
"python3.dll",
188-
"python3.dynlib",
189-
)
201+
is_abi3_file = os.path.basename(composed_path) in abi3_libraries
190202

191203
# Check whether the library exists and add it to the appropriate list.
192204
if os.path.exists(composed_path) or os.path.isdir(composed_path):

0 commit comments

Comments
 (0)