MCPcopy Create free account
hub / github.com/apache/cloudberry / process_binary

Function process_binary

devops/tools/elf_rockylinux_dependency_analyzer.py:186–235  ·  view source on GitHub ↗
(binary_path)

Source from the content-addressed store, hash-verified

184 print("\nSPECIAL CASES: None found")
185
186def process_binary(binary_path):
187 print(f"Binary: {binary_path}\n")
188 print("Libraries and their corresponding packages:")
189 packages, special_cases, missing_libraries = [], [], []
190 known_special_cases = ['linux-vdso.so.1', 'ld-linux-x86-64.so.2']
191 ldd_output = run_command(['ldd', binary_path])
192 if ldd_output is None:
193 return packages, special_cases, missing_libraries
194 for line in ldd_output.splitlines():
195 if any(special in line for special in known_special_cases):
196 continue
197 parts = line.split('=>')
198 lib_name = parts[0].strip()
199 if "not found" in line:
200 missing_libraries.append(lib_name)
201 print(f"MISSING: {line.strip()}")
202 else:
203 if len(parts) > 1:
204 lib_path = parts[1].split()[0]
205 if lib_path != "not":
206 package_info = get_package_info(lib_path)
207 if package_info:
208 print(f"{lib_path} => {package_info[1]}")
209 packages.append(package_info)
210 else:
211 if os.path.exists(lib_path):
212 special_case = f"{lib_path} is a custom or non-RPM library"
213 special_cases.append(special_case)
214 print(f"{lib_path} => Custom or non-RPM library")
215 else:
216 special_case = f"{lib_path} is not found and might be a special case"
217 special_cases.append(special_case)
218 print(f"{lib_path} => Not found, might be a special case")
219 else:
220 special_case = f"{line.strip()} is a special case or built-in library"
221 special_cases.append(special_case)
222 print(f"{line.strip()} => Special case or built-in library")
223 else:
224 special_case = f"{line.strip()} is a special case or built-in library"
225 special_cases.append(special_case)
226 print(f"{line.strip()} => Special case or built-in library")
227 if special_cases:
228 print(f"Special cases found for {binary_path}:")
229 for case in special_cases:
230 print(f" - {case}")
231 else:
232 print(f"No special cases found for {binary_path}")
233 print_summary(packages, special_cases, missing_libraries, binary_path)
234 print("-------------------------------------------")
235 return packages, special_cases, missing_libraries
236
237def is_elf_binary(file_path):
238 file_output = run_command(['file', file_path])

Callers 1

analyze_pathFunction · 0.70

Calls 7

stripMethod · 0.80
appendMethod · 0.80
existsMethod · 0.80
run_commandFunction · 0.70
get_package_infoFunction · 0.70
print_summaryFunction · 0.70
printFunction · 0.50

Tested by

no test coverage detected