aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike McQuaid2013-07-15 19:28:10 -0700
committerMike McQuaid2013-07-16 13:29:37 -0700
commit91c5c15a488ad46bf111c7c97c68574a59ac6fac (patch)
treefb789743999e66315634a503114be92828a79c44
parenta3ea2b566b12fb15da5270b3fb26f3f07dbb9780 (diff)
downloadbrew-91c5c15a488ad46bf111c7c97c68574a59ac6fac.tar.bz2
FormulaInstaller: move Cellar checks to module.
-rw-r--r--Library/Homebrew/formula_cellar_checks.rb89
-rw-r--r--Library/Homebrew/formula_installer.rb104
2 files changed, 106 insertions, 87 deletions
diff --git a/Library/Homebrew/formula_cellar_checks.rb b/Library/Homebrew/formula_cellar_checks.rb
new file mode 100644
index 000000000..c82b7acab
--- /dev/null
+++ b/Library/Homebrew/formula_cellar_checks.rb
@@ -0,0 +1,89 @@
+module FormulaCellarChecks
+ def check_PATH bin
+ # warn the user if stuff was installed outside of their PATH
+ return unless bin.directory?
+ return unless bin.children.length > 0
+
+ bin = (HOMEBREW_PREFIX/bin.basename).realpath
+ return if ORIGINAL_PATHS.include? bin
+
+ ["#{bin} is not in your PATH",
+ "You can amend this by altering your ~/.bashrc file"]
+ end
+
+ def check_manpages
+ # Check for man pages that aren't in share/man
+ return unless (f.prefix+'man').directory?
+
+ ['A top-level "man" directory was found.',
+ <<-EOS.undent
+ Homebrew requires that man pages live under share.
+ This can often be fixed by passing "--mandir=#{man}" to configure.
+ EOS
+ ]
+ end
+
+ def check_infopages
+ # Check for info pages that aren't in share/info
+ return unless (f.prefix+'info').directory?
+
+ ['A top-level "info" directory was found.',
+ <<-EOS.undent
+ Homebrew suggests that info pages live under share.
+ This can often be fixed by passing "--infodir=#{info}" to configure.
+ EOS
+ ]
+ end
+
+ def check_jars
+ return unless f.lib.directory?
+
+ jars = f.lib.children.select{|g| g.to_s =~ /\.jar$/}
+ return if jars.empty?
+
+ ['JARs were installed to "lib".',
+ <<-EOS.undent
+ Installing JARs to "lib" can cause conflicts between packages.
+ For Java software, it is typically better for the formula to
+ install to "libexec" and then symlink or wrap binaries into "bin".
+ "See "activemq", "jruby", etc. for examples."
+ "The offending files are:"
+ #{jars}
+ EOS
+ ]
+ end
+
+ def check_non_libraries
+ return unless f.lib.directory?
+
+ valid_extensions = %w(.a .dylib .framework .jnilib .la .o .so
+ .jar .prl .pm .sh)
+ non_libraries = f.lib.children.select do |g|
+ next if g.directory?
+ not valid_extensions.include? g.extname
+ end
+ return if non_libraries.empty?
+
+ ['Non-libraries were installed to "lib".',
+ <<-EOS.undent
+ Installing non-libraries to "lib" is bad practice.
+ The offending files are:
+ #{non_libraries}
+ EOS
+ ]
+ end
+
+ def check_non_executables bin
+ return unless bin.directory?
+
+ non_exes = bin.children.select { |g| g.directory? or not g.executable? }
+ return if non_exes.empty?
+
+ ["Non-executables were installed to \"#{bin}\".",
+ <<-EOS.undent
+ The offending files are:
+ #{non_exes}"
+ EOS
+ ]
+ end
+end
diff --git a/Library/Homebrew/formula_installer.rb b/Library/Homebrew/formula_installer.rb
index b24424164..efaa146a6 100644
--- a/Library/Homebrew/formula_installer.rb
+++ b/Library/Homebrew/formula_installer.rb
@@ -7,8 +7,11 @@ require 'tab'
require 'bottles'
require 'caveats'
require 'cleaner'
+require 'formula_cellar_checks'
class FormulaInstaller
+ include FormulaCellarChecks
+
attr_reader :f
attr_accessor :tab, :options, :ignore_deps
attr_accessor :show_summary_heading, :show_header
@@ -437,110 +440,37 @@ class FormulaInstaller
## checks
- def check_PATH bin
- # warn the user if stuff was installed outside of their PATH
- if bin.directory? and bin.children.length > 0
- bin = (HOMEBREW_PREFIX/bin.basename).realpath
- unless ORIGINAL_PATHS.include? bin
- opoo "#{bin} is not in your PATH"
- puts "You can amend this by altering your ~/.bashrc file"
- @show_summary_heading = true
- end
- end
- end
-
- def check_manpages
- # Check for man pages that aren't in share/man
- if (f.prefix+'man').directory?
- opoo 'A top-level "man" directory was found.'
- puts "Homebrew requires that man pages live under share."
- puts 'This can often be fixed by passing "--mandir=#{man}" to configure.'
- @show_summary_heading = true
- Homebrew.failed = true # fatal to Brew Bot
- end
- end
-
- def check_infopages
- # Check for info pages that aren't in share/info
- if (f.prefix+'info').directory?
- opoo 'A top-level "info" directory was found.'
- puts "Homebrew suggests that info pages live under share."
- puts 'This can often be fixed by passing "--infodir=#{info}" to configure.'
- @show_summary_heading = true
- end
- end
-
- def check_jars
- return unless f.lib.directory?
-
- jars = f.lib.children.select{|g| g.to_s =~ /\.jar$/}
- unless jars.empty?
- opoo 'JARs were installed to "lib".'
- puts "Installing JARs to \"lib\" can cause conflicts between packages."
- puts "For Java software, it is typically better for the formula to"
- puts "install to \"libexec\" and then symlink or wrap binaries into \"bin\"."
- puts "See \"activemq\", \"jruby\", etc. for examples."
- puts "The offending files are:"
- puts jars
- @show_summary_heading = true
- end
- end
-
- def check_non_libraries
- return unless f.lib.directory?
-
- valid_extensions = %w(.a .dylib .framework .jnilib .la .o .so
- .jar .prl .pm .sh)
- non_libraries = f.lib.children.select do |g|
- next if g.directory?
- not valid_extensions.include? g.extname
- end
-
- unless non_libraries.empty?
- opoo 'Non-libraries were installed to "lib".'
- puts "Installing non-libraries to \"lib\" is bad practice."
- puts "The offending files are:"
- puts non_libraries
- @show_summary_heading = true
- end
- end
-
- def check_non_executables bin
- non_exes = bin.children.select { |g| g.directory? or not g.executable? }
-
- unless non_exes.empty?
- opoo 'Non-executables were installed to "bin".'
- puts "Installing non-executables to \"bin\" is bad practice."
- puts "The offending files are:"
- puts non_exes
- @show_summary_heading = true
- Homebrew.failed = true # fatal to Brew Bot
- end
+ def print_check_output warning_and_description
+ return unless warning_and_description
+ warning, description = *warning_and_description
+ opoo warning
+ puts description
+ @show_summary_heading = true
end
def audit_bin
return unless f.bin.directory?
- check_PATH f.bin unless f.keg_only?
- check_non_executables f.bin
+ print_check_output(check_PATH(f.bin)) unless f.keg_only?
+ print_check_output(check_non_executables(f.bin))
end
def audit_sbin
return unless f.sbin.directory?
- check_PATH f.sbin unless f.keg_only?
- check_non_executables f.sbin
+ print_check_output(check_PATH(f.sbin)) unless f.keg_only?
+ print_check_output(check_non_executables(f.sbin))
end
def audit_lib
- check_jars
- check_non_libraries
+ print_check_output(check_jars)
+ print_check_output(check_non_libraries)
end
def audit_man
- check_manpages
+ print_check_output(check_manpages)
end
def audit_info
- check_infopages
+ print_check_output(check_infopages)
end
private