From 81bf8a168ada914ec47ca5b37a9fe44f8d797fea Mon Sep 17 00:00:00 2001 From: Adam Vandenberg Date: Sun, 10 Nov 2013 12:51:24 -0800 Subject: [PATCH] audit generic binary names Binaries with names like 'run' or 'service' are likely to conflict. Warn about these and suggest a libexec-style install instead. --- Library/Homebrew/cmd/audit.rb | 2 ++ Library/Homebrew/formula_cellar_checks.rb | 17 +++++++++++++++++ Library/Homebrew/formula_installer.rb | 2 ++ 3 files changed, 21 insertions(+) diff --git a/Library/Homebrew/cmd/audit.rb b/Library/Homebrew/cmd/audit.rb index 10b37e57a6..80c2e45e55 100644 --- a/Library/Homebrew/cmd/audit.rb +++ b/Library/Homebrew/cmd/audit.rb @@ -562,7 +562,9 @@ class FormulaAuditor audit_check_output(check_jars) audit_check_output(check_non_libraries) audit_check_output(check_non_executables(f.bin)) + audit_check_output(check_generic_executables(f.bin)) audit_check_output(check_non_executables(f.sbin)) + audit_check_output(check_generic_executables(f.sbin)) end def audit diff --git a/Library/Homebrew/formula_cellar_checks.rb b/Library/Homebrew/formula_cellar_checks.rb index f123a85cc9..b1b52b28a5 100644 --- a/Library/Homebrew/formula_cellar_checks.rb +++ b/Library/Homebrew/formula_cellar_checks.rb @@ -89,4 +89,21 @@ module FormulaCellarChecks EOS ] end + + def check_generic_executables bin + return unless bin.directory? + generics = bin.children.select { |g| g.to_s =~ /\/(run|service)$/} + return if generics.empty? + + ["Generic binaries were installed to \"#{bin}\".", + <<-EOS.undent + Binaries with generic names are likely to conflict with other software, + and suggest that this software should be installed to "libexec" and + then symlinked as needed. + + The offending files are: + #{generics * "\n "} + EOS + ] + end end diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb index 5870ceeff0..1f2f99875d 100644 --- a/Library/Homebrew/formula_installer.rb +++ b/Library/Homebrew/formula_installer.rb @@ -499,11 +499,13 @@ class FormulaInstaller def audit_bin print_check_output(check_PATH(f.bin)) unless f.keg_only? print_check_output(check_non_executables(f.bin)) + print_check_output(check_generic_executables(f.bin)) end def audit_sbin print_check_output(check_PATH(f.sbin)) unless f.keg_only? print_check_output(check_non_executables(f.sbin)) + print_check_output(check_generic_executables(f.sbin)) end def audit_lib