Merge pull request #12225 from carlocab/two-level
mac/formula_cellar_checks: check for flat namespace libraries
This commit is contained in:
commit
556b8f16c6
@ -88,12 +88,38 @@ module FormulaCellarChecks
|
||||
end
|
||||
end
|
||||
|
||||
def check_flat_namespace(formula)
|
||||
return unless formula.prefix.directory?
|
||||
return if formula.tap.present? && tap_audit_exception(:flat_namespace_allowlist, formula.name)
|
||||
|
||||
keg = Keg.new(formula.prefix)
|
||||
flat_namespace_files = keg.mach_o_files.reject do |file|
|
||||
next true unless file.dylib?
|
||||
|
||||
macho = MachO.open(file)
|
||||
if MachO::Utils.fat_magic?(macho.magic)
|
||||
macho.machos.map(&:header).all? { |h| h.flag? :MH_TWOLEVEL }
|
||||
else
|
||||
macho.header.flag? :MH_TWOLEVEL
|
||||
end
|
||||
end
|
||||
return if flat_namespace_files.empty?
|
||||
|
||||
<<~EOS
|
||||
Libraries were compiled with a flat namespace.
|
||||
This can cause linker errors due to name collisions, and
|
||||
is often due to a bug in detecting the macOS version.
|
||||
#{flat_namespace_files * "\n "}
|
||||
EOS
|
||||
end
|
||||
|
||||
def audit_installed
|
||||
generic_audit_installed
|
||||
problem_if_output(check_shadowed_headers)
|
||||
problem_if_output(check_openssl_links)
|
||||
problem_if_output(check_python_framework_links(formula.lib))
|
||||
check_linkage
|
||||
problem_if_output(check_flat_namespace(formula))
|
||||
end
|
||||
|
||||
def valid_library_extension?(filename)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user