LinkageChecker: Report linkage of unwanted system libraries [Linux]

gcc and glibc are implicit dependencies on Linux.
No other linkage to system libraries is expected or desired.
This commit is contained in:
Shaun Jackman 2018-09-05 15:29:42 -07:00
parent 88bf60d589
commit 5cbddd2aca
3 changed files with 40 additions and 0 deletions

View File

@ -0,0 +1 @@
require "extend/os/linux/linkage_checker" if OS.linux?

View File

@ -0,0 +1,32 @@
class LinkageChecker
# Libraries provided by glibc and gcc.
SYSTEM_LIBRARY_WHITELIST = %w[
ld-linux-x86-64.so.2
libanl.so.1
libc.so.6
libcrypt.so.1
libdl.so.2
libm.so.6
libmvec.so.1
libnsl.so.1
libpthread.so.0
libresolv.so.2
librt.so.1
libutil.so.1
libgcc_s.so.1
libgomp.so.1
libstdc++.so.6
].freeze
def check_dylibs(rebuild_cache:)
generic_check_dylibs(rebuild_cache: rebuild_cache)
# glibc and gcc are implicit dependencies.
# No other linkage to system libraries is expected or desired.
@unwanted_system_dylibs = @system_dylibs.reject do |s|
SYSTEM_LIBRARY_WHITELIST.include? File.basename(s)
end
@undeclared_deps -= ["gcc", "glibc"]
end
end

View File

@ -19,6 +19,7 @@ class LinkageChecker
@indirect_deps = []
@undeclared_deps = []
@unnecessary_deps = []
@unwanted_system_dylibs = []
@version_conflict_deps = []
check_dylibs(rebuild_cache: rebuild_cache)
@ -33,6 +34,7 @@ class LinkageChecker
display_items "Broken dependencies", @broken_deps
display_items "Undeclared dependencies with linkage", @undeclared_deps
display_items "Dependencies with no linkage", @unnecessary_deps
display_items "Unwanted system libraries", @unwanted_system_dylibs
end
def display_reverse_output
@ -51,6 +53,7 @@ class LinkageChecker
def display_test_output(puts_output: true)
display_items "Missing libraries", @broken_dylibs, puts_output: puts_output
display_items "Broken dependencies", @broken_deps, puts_output: puts_output
display_items "Unwanted system libraries", @unwanted_system_dylibs, puts_output: puts_output
display_items "Conflicting libraries", @version_conflict_deps, puts_output: puts_output
puts "No broken library linkage" unless broken_library_linkage?
end
@ -58,6 +61,7 @@ class LinkageChecker
def broken_library_linkage?
!@broken_dylibs.empty? ||
!@broken_deps.empty? ||
!@unwanted_system_dylibs.empty? ||
!@version_conflict_deps.empty?
end
@ -139,6 +143,7 @@ class LinkageChecker
store&.update!(keg_files_dylibs: keg_files_dylibs)
end
alias generic_check_dylibs check_dylibs
def check_formula_deps
filter_out = proc do |dep|
@ -244,3 +249,5 @@ class LinkageChecker
opoo "Formula unavailable: #{keg.name}"
end
end
require "extend/os/linkage_checker"