in scripts/elf_rockylinux_dependency_analyzer.py [0:0]
def process_binary(binary_path):
print(f"Binary: {binary_path}\n")
print("Libraries and their corresponding packages:")
packages, special_cases, missing_libraries = [], [], []
known_special_cases = ['linux-vdso.so.1', 'ld-linux-x86-64.so.2']
ldd_output = run_command(['ldd', binary_path])
if ldd_output is None:
return packages, special_cases, missing_libraries
for line in ldd_output.splitlines():
if any(special in line for special in known_special_cases):
continue
parts = line.split('=>')
lib_name = parts[0].strip()
if "not found" in line:
missing_libraries.append(lib_name)
print(f"MISSING: {line.strip()}")
else:
if len(parts) > 1:
lib_path = parts[1].split()[0]
if lib_path != "not":
package_info = get_package_info(lib_path)
if package_info:
print(f"{lib_path} => {package_info[1]}")
packages.append(package_info)
else:
if os.path.exists(lib_path):
special_case = f"{lib_path} is a custom or non-RPM library"
special_cases.append(special_case)
print(f"{lib_path} => Custom or non-RPM library")
else:
special_case = f"{lib_path} is not found and might be a special case"
special_cases.append(special_case)
print(f"{lib_path} => Not found, might be a special case")
else:
special_case = f"{line.strip()} is a special case or built-in library"
special_cases.append(special_case)
print(f"{line.strip()} => Special case or built-in library")
else:
special_case = f"{line.strip()} is a special case or built-in library"
special_cases.append(special_case)
print(f"{line.strip()} => Special case or built-in library")
if special_cases:
print(f"Special cases found for {binary_path}:")
for case in special_cases:
print(f" - {case}")
else:
print(f"No special cases found for {binary_path}")
print_summary(packages, special_cases, missing_libraries, binary_path)
print("-------------------------------------------")
return packages, special_cases, missing_libraries