| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | require "keg" | 
					
						
							|  |  |  | require "language/python" | 
					
						
							|  |  |  | require "formula" | 
					
						
							|  |  |  | require "version" | 
					
						
							| 
									
										
										
										
											2016-07-29 20:31:32 -06:00
										 |  |  | require "development_tools" | 
					
						
							| 
									
										
										
										
											2016-08-10 23:19:09 -07:00
										 |  |  | require "utils/shell" | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							|  |  |  |   module Diagnostic | 
					
						
							| 
									
										
										
										
											2016-09-29 11:28:01 +01:00
										 |  |  |     def self.missing_deps(ff, hide = nil) | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       missing = {} | 
					
						
							|  |  |  |       ff.each do |f| | 
					
						
							| 
									
										
										
										
											2016-10-05 20:56:07 +01:00
										 |  |  |         missing_dependencies = f.missing_dependencies(hide: hide) | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-05 20:56:07 +01:00
										 |  |  |         unless missing_dependencies.empty? | 
					
						
							|  |  |  |           yield f.full_name, missing_dependencies if block_given? | 
					
						
							|  |  |  |           missing[f.full_name] = missing_dependencies | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |       missing | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class Volumes | 
					
						
							|  |  |  |       def initialize | 
					
						
							|  |  |  |         @volumes = get_mounts | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def which(path) | 
					
						
							|  |  |  |         vols = get_mounts path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # no volume found | 
					
						
							| 
									
										
										
										
											2016-09-20 20:50:29 +02:00
										 |  |  |         return -1 if vols.empty? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         vol_index = @volumes.index(vols[0]) | 
					
						
							|  |  |  |         # volume not found in volume list | 
					
						
							| 
									
										
										
										
											2016-09-20 20:50:29 +02:00
										 |  |  |         return -1 if vol_index.nil? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         vol_index | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def get_mounts(path = nil) | 
					
						
							|  |  |  |         vols = [] | 
					
						
							|  |  |  |         # get the volume of path, if path is nil returns all volumes | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         args = %w[/bin/df -P] | 
					
						
							|  |  |  |         args << path if path | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Utils.popen_read(*args) do |io| | 
					
						
							|  |  |  |           io.each_line do |line| | 
					
						
							|  |  |  |             case line.chomp | 
					
						
							|  |  |  |               # regex matches: /dev/disk0s2   489562928 440803616  48247312    91%    / | 
					
						
							|  |  |  |             when /^.+\s+[0-9]+\s+[0-9]+\s+[0-9]+\s+[0-9]{1,3}%\s+(.+)/ | 
					
						
							|  |  |  |               vols << $1 | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         vols | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     class Checks | 
					
						
							|  |  |  |       ############# HELPERS | 
					
						
							|  |  |  |       # Finds files in HOMEBREW_PREFIX *and* /usr/local. | 
					
						
							|  |  |  |       # Specify paths relative to a prefix eg. "include/foo.h". | 
					
						
							|  |  |  |       # Sets @found for your convenience. | 
					
						
							|  |  |  |       def find_relative_paths(*relative_paths) | 
					
						
							|  |  |  |         @found = [HOMEBREW_PREFIX, "/usr/local"].uniq.inject([]) do |found, prefix| | 
					
						
							|  |  |  |           found + relative_paths.map { |f| File.join(prefix, f) }.select { |f| File.exist? f } | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-21 14:36:11 +02:00
										 |  |  |       def inject_file_list(list, string) | 
					
						
							| 
									
										
										
										
											2016-11-13 23:36:04 +01:00
										 |  |  |         list.inject(string) { |acc, elem| acc << "  #{elem}\n" } | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  |       ############# END HELPERS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 09:11:06 +01:00
										 |  |  |       def development_tools_checks | 
					
						
							| 
									
										
										
										
											2016-07-04 18:35:03 +01:00
										 |  |  |         %w[
 | 
					
						
							|  |  |  |           check_for_installed_developer_tools | 
					
						
							| 
									
										
										
										
											2016-11-05 10:38:39 -04:00
										 |  |  |         ].freeze | 
					
						
							| 
									
										
										
										
											2016-07-04 18:35:03 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-07 09:11:06 +01:00
										 |  |  |       def fatal_development_tools_checks | 
					
						
							|  |  |  |         %w[
 | 
					
						
							| 
									
										
										
										
											2016-11-05 10:38:39 -04:00
										 |  |  |         ].freeze | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-11-05 10:39:00 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |       def build_error_checks | 
					
						
							|  |  |  |         (development_tools_checks + %w[
 | 
					
						
							|  |  |  |         ]).freeze | 
					
						
							| 
									
										
										
										
											2016-09-07 09:11:06 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-04 18:35:03 +01:00
										 |  |  |       def check_for_installed_developer_tools | 
					
						
							|  |  |  |         return if DevelopmentTools.installed? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           No developer tools installed. | 
					
						
							| 
									
										
										
										
											2016-07-16 21:03:12 +01:00
										 |  |  |           #{DevelopmentTools.installation_instructions} | 
					
						
							| 
									
										
										
										
											2016-07-04 18:35:03 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-01 14:55:45 +02:00
										 |  |  |       # See https://github.com/Homebrew/legacy-homebrew/pull/9986 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       def check_path_for_trailing_slashes | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         all_paths = ENV["PATH"].split(File::PATH_SEPARATOR) | 
					
						
							|  |  |  |         bad_paths = all_paths.select { |p| p[-1..-1] == "/" } | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         return if bad_paths.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         inject_file_list bad_paths, <<-EOS.undent
 | 
					
						
							|  |  |  |           Some directories in your path end in a slash. | 
					
						
							|  |  |  |           Directories in your path should not end in a slash. This can break other | 
					
						
							|  |  |  |           doctor checks. The following directories should be edited: | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       # Anaconda installs multiple system & brew dupes, including OpenSSL, Python, | 
					
						
							|  |  |  |       # sqlite, libpng, Qt, etc. Regularly breaks compile on Vim, MacVim and others. | 
					
						
							|  |  |  |       # Is flagged as part of the *-config script checks below, but people seem | 
					
						
							|  |  |  |       # to ignore those as warnings rather than extremely likely breakage. | 
					
						
							|  |  |  |       def check_for_anaconda | 
					
						
							|  |  |  |         return unless which("anaconda") | 
					
						
							|  |  |  |         return unless which("python") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         anaconda_directory = which("anaconda").realpath.dirname | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         python_binary = Utils.popen_read which("python"), "-c", "import sys; sys.stdout.write(sys.executable)" | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         python_directory = Pathname.new(python_binary).realpath.dirname | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Only warn if Python lives with Anaconda, since is most problematic case. | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless python_directory == anaconda_directory | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Anaconda is known to frequently break Homebrew builds, including Vim and | 
					
						
							|  |  |  |           MacVim, due to bundling many duplicates of system and Homebrew-available | 
					
						
							|  |  |  |           tools. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           If you encounter a build failure please temporarily remove Anaconda | 
					
						
							|  |  |  |           from your $PATH and attempt the build again prior to reporting the | 
					
						
							|  |  |  |           failure to us. Thanks! | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def __check_stray_files(dir, pattern, white_list, message) | 
					
						
							|  |  |  |         return unless File.directory?(dir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         files = Dir.chdir(dir) do | 
					
						
							|  |  |  |           Dir[pattern].select { |f| File.file?(f) && !File.symlink?(f) } - Dir.glob(white_list) | 
					
						
							|  |  |  |         end.map { |file| File.join(dir, file) } | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if files.empty? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         inject_file_list(files, message) | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_stray_dylibs | 
					
						
							|  |  |  |         # Dylibs which are generally OK should be added to this list, | 
					
						
							|  |  |  |         # with a short description of the software they come with. | 
					
						
							|  |  |  |         white_list = [ | 
					
						
							|  |  |  |           "libfuse.2.dylib", # MacFuse | 
					
						
							|  |  |  |           "libfuse_ino64.2.dylib", # MacFuse | 
					
						
							|  |  |  |           "libmacfuse_i32.2.dylib", # OSXFuse MacFuse compatibility layer | 
					
						
							|  |  |  |           "libmacfuse_i64.2.dylib", # OSXFuse MacFuse compatibility layer | 
					
						
							|  |  |  |           "libosxfuse_i32.2.dylib", # OSXFuse | 
					
						
							|  |  |  |           "libosxfuse_i64.2.dylib", # OSXFuse | 
					
						
							| 
									
										
										
										
											2016-02-20 19:24:30 +00:00
										 |  |  |           "libosxfuse.2.dylib", # OSXFuse | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           "libTrAPI.dylib", # TrAPI / Endpoint Security VPN | 
					
						
							|  |  |  |           "libntfs-3g.*.dylib", # NTFS-3G | 
					
						
							|  |  |  |           "libntfs.*.dylib", # NTFS-3G | 
					
						
							|  |  |  |           "libublio.*.dylib", # NTFS-3G | 
					
						
							|  |  |  |           "libUFSDNTFS.dylib", # Paragon NTFS | 
					
						
							|  |  |  |           "libUFSDExtFS.dylib", # Paragon ExtFS | 
					
						
							| 
									
										
										
										
											2016-11-04 14:35:54 +00:00
										 |  |  |           "libecomlodr.dylib", # Symantec Endpoint Protection | 
					
						
							|  |  |  |           "libsymsea.*.dylib", # Symantec Endpoint Protection | 
					
						
							| 
									
										
										
										
											2016-11-04 12:18:23 -04:00
										 |  |  |           "sentinel.dylib", # SentinelOne | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         __check_stray_files "/usr/local/lib", "*.dylib", white_list, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unbrewed dylibs were found in /usr/local/lib. | 
					
						
							|  |  |  |           If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |           building Homebrew formulae, and may need to be deleted. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unexpected dylibs: | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_stray_static_libs | 
					
						
							|  |  |  |         # Static libs which are generally OK should be added to this list, | 
					
						
							|  |  |  |         # with a short description of the software they come with. | 
					
						
							|  |  |  |         white_list = [ | 
					
						
							|  |  |  |           "libsecurity_agent_client.a", # OS X 10.8.2 Supplemental Update | 
					
						
							|  |  |  |           "libsecurity_agent_server.a", # OS X 10.8.2 Supplemental Update | 
					
						
							|  |  |  |           "libntfs-3g.a", # NTFS-3G | 
					
						
							|  |  |  |           "libntfs.a", # NTFS-3G | 
					
						
							|  |  |  |           "libublio.a", # NTFS-3G | 
					
						
							| 
									
										
										
										
											2016-11-04 14:35:54 +00:00
										 |  |  |           "libappfirewall.a", # Symantec Endpoint Protection | 
					
						
							|  |  |  |           "libautoblock.a", # Symantec Endpoint Protection | 
					
						
							|  |  |  |           "libautosetup.a", # Symantec Endpoint Protection | 
					
						
							|  |  |  |           "libconnectionsclient.a", # Symantec Endpoint Protection | 
					
						
							|  |  |  |           "liblocationawareness.a", # Symantec Endpoint Protection | 
					
						
							|  |  |  |           "libpersonalfirewall.a", # Symantec Endpoint Protection | 
					
						
							|  |  |  |           "libtrustedcomponents.a", # Symantec Endpoint Protection | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         __check_stray_files "/usr/local/lib", "*.a", white_list, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unbrewed static libraries were found in /usr/local/lib. | 
					
						
							|  |  |  |           If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |           building Homebrew formulae, and may need to be deleted. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unexpected static libraries: | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_stray_pcs | 
					
						
							|  |  |  |         # Package-config files which are generally OK should be added to this list, | 
					
						
							|  |  |  |         # with a short description of the software they come with. | 
					
						
							|  |  |  |         white_list = [ | 
					
						
							|  |  |  |           "fuse.pc", # OSXFuse/MacFuse | 
					
						
							|  |  |  |           "macfuse.pc", # OSXFuse MacFuse compatibility layer | 
					
						
							|  |  |  |           "osxfuse.pc", # OSXFuse | 
					
						
							|  |  |  |           "libntfs-3g.pc", # NTFS-3G | 
					
						
							|  |  |  |           "libublio.pc", # NTFS-3G | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         __check_stray_files "/usr/local/lib/pkgconfig", "*.pc", white_list, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unbrewed .pc files were found in /usr/local/lib/pkgconfig. | 
					
						
							|  |  |  |           If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |           building Homebrew formulae, and may need to be deleted. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unexpected .pc files: | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_stray_las | 
					
						
							|  |  |  |         white_list = [ | 
					
						
							|  |  |  |           "libfuse.la", # MacFuse | 
					
						
							|  |  |  |           "libfuse_ino64.la", # MacFuse | 
					
						
							|  |  |  |           "libosxfuse_i32.la", # OSXFuse | 
					
						
							|  |  |  |           "libosxfuse_i64.la", # OSXFuse | 
					
						
							| 
									
										
										
										
											2016-02-20 19:24:30 +00:00
										 |  |  |           "libosxfuse.la", # OSXFuse | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           "libntfs-3g.la", # NTFS-3G | 
					
						
							|  |  |  |           "libntfs.la", # NTFS-3G | 
					
						
							|  |  |  |           "libublio.la", # NTFS-3G | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         __check_stray_files "/usr/local/lib", "*.la", white_list, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unbrewed .la files were found in /usr/local/lib. | 
					
						
							|  |  |  |           If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |           building Homebrew formulae, and may need to be deleted. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unexpected .la files: | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_stray_headers | 
					
						
							|  |  |  |         white_list = [ | 
					
						
							|  |  |  |           "fuse.h", # MacFuse | 
					
						
							|  |  |  |           "fuse/**/*.h", # MacFuse | 
					
						
							|  |  |  |           "macfuse/**/*.h", # OSXFuse MacFuse compatibility layer | 
					
						
							|  |  |  |           "osxfuse/**/*.h", # OSXFuse | 
					
						
							|  |  |  |           "ntfs/**/*.h", # NTFS-3G | 
					
						
							|  |  |  |           "ntfs-3g/**/*.h", # NTFS-3G | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         __check_stray_files "/usr/local/include", "**/*.h", white_list, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unbrewed header files were found in /usr/local/include. | 
					
						
							|  |  |  |           If you didn't put them there on purpose they could cause problems when | 
					
						
							|  |  |  |           building Homebrew formulae, and may need to be deleted. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Unexpected header files: | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_broken_symlinks | 
					
						
							|  |  |  |         broken_symlinks = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         Keg::PRUNEABLE_DIRECTORIES.each do |d| | 
					
						
							|  |  |  |           next unless d.directory? | 
					
						
							|  |  |  |           d.find do |path| | 
					
						
							|  |  |  |             if path.symlink? && !path.resolved_path_exists? | 
					
						
							|  |  |  |               broken_symlinks << path | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         return if broken_symlinks.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         inject_file_list broken_symlinks, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Broken symlinks were found. Remove them with `brew prune`: | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 13:08:02 +01:00
										 |  |  |       def check_tmpdir_sticky_bit | 
					
						
							|  |  |  |         world_writable = HOMEBREW_TEMP.stat.mode & 0777 == 0777
 | 
					
						
							|  |  |  |         return if !world_writable || HOMEBREW_TEMP.sticky? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 13:08:02 +01:00
										 |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           #{HOMEBREW_TEMP} is world-writable but does not have the sticky bit set. | 
					
						
							|  |  |  |           Please execute `sudo chmod +t #{HOMEBREW_TEMP}` in your Terminal. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_access_homebrew_repository | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if HOMEBREW_REPOSITORY.writable_real? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-03-21 16:28:49 +00:00
										 |  |  |           #{HOMEBREW_REPOSITORY} is not writable. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-10 12:31:11 +01:00
										 |  |  |           You should change the ownership and permissions of #{HOMEBREW_REPOSITORY} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           back to your user account. | 
					
						
							|  |  |  |             sudo chown -R $(whoami) #{HOMEBREW_REPOSITORY} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 13:08:02 +01:00
										 |  |  |       def check_access_prefix_directories | 
					
						
							| 
									
										
										
										
											2016-09-09 08:06:37 +01:00
										 |  |  |         not_writable_dirs = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-15 09:20:39 +01:00
										 |  |  |         Keg::ALL_TOP_LEVEL_DIRECTORIES.each do |dir| | 
					
						
							| 
									
										
										
										
											2016-09-09 08:06:37 +01:00
										 |  |  |           path = HOMEBREW_PREFIX/dir | 
					
						
							|  |  |  |           next unless path.exist? | 
					
						
							|  |  |  |           next if path.writable_real? | 
					
						
							|  |  |  |           not_writable_dirs << path | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return if not_writable_dirs.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           The following directories are not writable: | 
					
						
							|  |  |  |           #{not_writable_dirs.join("\n")} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 13:08:02 +01:00
										 |  |  |           This can happen if you "sudo make install" software that isn't managed | 
					
						
							|  |  |  |           by Homebrew. If a formula tries to write a file to this directory, the | 
					
						
							|  |  |  |           install will fail during the link step. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-09 08:06:37 +01:00
										 |  |  |           You should change the ownership and permissions of these directories. | 
					
						
							|  |  |  |           back to your user account. | 
					
						
							|  |  |  |             sudo chown -R $(whoami) #{not_writable_dirs.join(" ")} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_access_site_packages | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless Language::Python.homebrew_site_packages.exist? | 
					
						
							|  |  |  |         return if Language::Python.homebrew_site_packages.writable_real? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           #{Language::Python.homebrew_site_packages} isn't writable. | 
					
						
							|  |  |  |           This can happen if you "sudo pip install" software that isn't managed | 
					
						
							|  |  |  |           by Homebrew. If you install a formula with Python modules, the install | 
					
						
							|  |  |  |           will fail during the link step. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-10 12:31:11 +01:00
										 |  |  |           You should change the ownership and permissions of #{Language::Python.homebrew_site_packages} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           back to your user account. | 
					
						
							|  |  |  |             sudo chown -R $(whoami) #{Language::Python.homebrew_site_packages} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-11 22:52:21 +00:00
										 |  |  |       def check_access_lock_dir | 
					
						
							|  |  |  |         return unless HOMEBREW_LOCK_DIR.exist? | 
					
						
							|  |  |  |         return if HOMEBREW_LOCK_DIR.writable_real? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           #{HOMEBREW_LOCK_DIR} isn't writable. | 
					
						
							|  |  |  |           Homebrew writes lock files to this location. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           You should change the ownership and permissions of #{HOMEBREW_LOCK_DIR} | 
					
						
							|  |  |  |           back to your user account. | 
					
						
							|  |  |  |             sudo chown -R $(whoami) #{HOMEBREW_LOCK_DIR} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       def check_access_logs | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless HOMEBREW_LOGS.exist? | 
					
						
							|  |  |  |         return if HOMEBREW_LOGS.writable_real? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           #{HOMEBREW_LOGS} isn't writable. | 
					
						
							|  |  |  |           Homebrew writes debugging logs to this location. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-10 12:31:11 +01:00
										 |  |  |           You should change the ownership and permissions of #{HOMEBREW_LOGS} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           back to your user account. | 
					
						
							|  |  |  |             sudo chown -R $(whoami) #{HOMEBREW_LOGS} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_access_cache | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless HOMEBREW_CACHE.exist? | 
					
						
							|  |  |  |         return if HOMEBREW_CACHE.writable_real? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           #{HOMEBREW_CACHE} isn't writable. | 
					
						
							|  |  |  |           This can happen if you run `brew install` or `brew fetch` as another user. | 
					
						
							|  |  |  |           Homebrew caches downloaded files to this location. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-10 12:31:11 +01:00
										 |  |  |           You should change the ownership and permissions of #{HOMEBREW_CACHE} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           back to your user account. | 
					
						
							|  |  |  |             sudo chown -R $(whoami) #{HOMEBREW_CACHE} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_access_cellar | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless HOMEBREW_CELLAR.exist? | 
					
						
							|  |  |  |         return if HOMEBREW_CELLAR.writable_real? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           #{HOMEBREW_CELLAR} isn't writable. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-10 12:31:11 +01:00
										 |  |  |           You should change the ownership and permissions of #{HOMEBREW_CELLAR} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           back to your user account. | 
					
						
							|  |  |  |             sudo chown -R $(whoami) #{HOMEBREW_CELLAR} | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 00:19:46 +00:00
										 |  |  |       def check_multiple_cellars | 
					
						
							|  |  |  |         return if HOMEBREW_PREFIX.to_s == HOMEBREW_REPOSITORY.to_s | 
					
						
							|  |  |  |         return unless (HOMEBREW_REPOSITORY/"Cellar").exist? | 
					
						
							|  |  |  |         return unless (HOMEBREW_PREFIX/"Cellar").exist? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           You have multiple Cellars. | 
					
						
							|  |  |  |           You should delete #{HOMEBREW_REPOSITORY}/Cellar: | 
					
						
							|  |  |  |             rm -rf #{HOMEBREW_REPOSITORY}/Cellar | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       def check_homebrew_prefix | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if HOMEBREW_PREFIX.to_s == "/usr/local" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-26 16:32:48 +00:00
										 |  |  |         # Allow our Jenkins CI tests to live outside of /usr/local. | 
					
						
							|  |  |  |         if ENV["JENKINS_HOME"] && | 
					
						
							|  |  |  |            ENV["GIT_URL"].to_s.start_with?("https://github.com/Homebrew/brew") | 
					
						
							|  |  |  |           return | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-10-02 17:30:08 +01:00
										 |  |  |           Your Homebrew's prefix is not /usr/local. | 
					
						
							|  |  |  |           You can install Homebrew anywhere you want but some bottles (binary packages) | 
					
						
							|  |  |  |           can only be used with a /usr/local prefix and some formulae (packages) | 
					
						
							|  |  |  |           may not build correctly with a non-/usr/local prefix. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_user_path_1 | 
					
						
							|  |  |  |         $seen_prefix_bin = false | 
					
						
							|  |  |  |         $seen_prefix_sbin = false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         message = "" | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-22 16:31:19 +01:00
										 |  |  |         paths(ENV["HOMEBREW_PATH"]).each do |p| | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           case p | 
					
						
							|  |  |  |           when "/usr/bin" | 
					
						
							|  |  |  |             unless $seen_prefix_bin | 
					
						
							|  |  |  |               # only show the doctor message if there are any conflicts | 
					
						
							|  |  |  |               # rationale: a default install should not trigger any brew doctor messages | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |               conflicts = Dir["#{HOMEBREW_PREFIX}/bin/*"] | 
					
						
							|  |  |  |                           .map { |fn| File.basename fn } | 
					
						
							|  |  |  |                           .select { |bn| File.exist? "/usr/bin/#{bn}" } | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |               unless conflicts.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |                 message = inject_file_list conflicts, <<-EOS.undent
 | 
					
						
							|  |  |  |                   /usr/bin occurs before #{HOMEBREW_PREFIX}/bin | 
					
						
							|  |  |  |                   This means that system-provided programs will be used instead of those | 
					
						
							|  |  |  |                   provided by Homebrew. The following tools exist at both paths: | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |                 EOS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |                 message += <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |                   Consider setting your PATH so that #{HOMEBREW_PREFIX}/bin | 
					
						
							|  |  |  |                   occurs before /usr/bin. Here is a one-liner: | 
					
						
							| 
									
										
										
										
											2017-04-22 16:28:07 +01:00
										 |  |  |                     #{Utils::Shell.prepend_path_in_profile("#{HOMEBREW_PREFIX}/bin")} | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |                 EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |               end | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           when "#{HOMEBREW_PREFIX}/bin" | 
					
						
							|  |  |  |             $seen_prefix_bin = true | 
					
						
							|  |  |  |           when "#{HOMEBREW_PREFIX}/sbin" | 
					
						
							|  |  |  |             $seen_prefix_sbin = true | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         message unless message.empty? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_user_path_2 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if $seen_prefix_bin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Homebrew's bin was not found in your PATH. | 
					
						
							|  |  |  |           Consider setting the PATH for example like so | 
					
						
							| 
									
										
										
										
											2017-04-22 16:28:07 +01:00
										 |  |  |             #{Utils::Shell.prepend_path_in_profile("#{HOMEBREW_PREFIX}/bin")} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_user_path_3 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if $seen_prefix_sbin | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         # Don't complain about sbin not being in the path if it doesn't exist | 
					
						
							|  |  |  |         sbin = (HOMEBREW_PREFIX+"sbin") | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |         return unless sbin.directory? && !sbin.children.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Homebrew's sbin was not found in your PATH but you have installed | 
					
						
							|  |  |  |           formulae that put executables in #{HOMEBREW_PREFIX}/sbin. | 
					
						
							|  |  |  |           Consider setting the PATH for example like so | 
					
						
							| 
									
										
										
										
											2017-04-22 16:28:07 +01:00
										 |  |  |             #{Utils::Shell.prepend_path_in_profile("#{HOMEBREW_PREFIX}/sbin")} | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_user_curlrc | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         curlrc_found = %w[CURL_HOME HOME].any? do |var| | 
					
						
							|  |  |  |           ENV[var] && File.exist?("#{ENV[var]}/.curlrc") | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless curlrc_found | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           You have a curlrc file | 
					
						
							|  |  |  |           If you have trouble downloading packages with Homebrew, then maybe this | 
					
						
							|  |  |  |           is the problem? If the following command doesn't work, then try removing | 
					
						
							|  |  |  |           your curlrc: | 
					
						
							| 
									
										
										
										
											2016-09-17 03:21:51 +02:00
										 |  |  |             curl #{Formatter.url("https://github.com")} | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_which_pkg_config | 
					
						
							|  |  |  |         binary = which "pkg-config" | 
					
						
							|  |  |  |         return if binary.nil? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         mono_config = Pathname.new("/usr/bin/pkg-config") | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         if mono_config.exist? && mono_config.realpath.to_s.include?("Mono.framework") | 
					
						
							|  |  |  |           <<-EOS.undent
 | 
					
						
							|  |  |  |             You have a non-Homebrew 'pkg-config' in your PATH: | 
					
						
							|  |  |  |               /usr/bin/pkg-config => #{mono_config.realpath} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             This was most likely created by the Mono installer. `./configure` may | 
					
						
							|  |  |  |             have problems finding brew-installed packages using this other pkg-config. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             Mono no longer installs this file as of 3.0.4. You should | 
					
						
							|  |  |  |             `sudo rm /usr/bin/pkg-config` and upgrade to the latest version of Mono. | 
					
						
							|  |  |  |           EOS | 
					
						
							|  |  |  |         elsif binary.to_s != "#{HOMEBREW_PREFIX}/bin/pkg-config" | 
					
						
							|  |  |  |           <<-EOS.undent
 | 
					
						
							|  |  |  |             You have a non-Homebrew 'pkg-config' in your PATH: | 
					
						
							|  |  |  |               #{binary} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             `./configure` may have problems finding brew-installed packages using | 
					
						
							|  |  |  |             this other pkg-config. | 
					
						
							|  |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_gettext | 
					
						
							|  |  |  |         find_relative_paths("lib/libgettextlib.dylib", | 
					
						
							|  |  |  |                             "lib/libintl.dylib", | 
					
						
							|  |  |  |                             "include/libintl.h") | 
					
						
							|  |  |  |         return if @found.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Our gettext formula will be caught by check_linked_keg_only_brews | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |         gettext = begin | 
					
						
							| 
									
										
										
										
											2016-09-17 17:01:04 +01:00
										 |  |  |           Formulary.factory("gettext") | 
					
						
							|  |  |  |         rescue | 
					
						
							|  |  |  |           nil | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         homebrew_owned = @found.all? do |path| | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Pathname.new(path).realpath.to_s.start_with? "#{HOMEBREW_CELLAR}/gettext" | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if gettext && gettext.linked_keg.directory? && homebrew_owned | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         inject_file_list @found, <<-EOS.undent
 | 
					
						
							|  |  |  |           gettext files detected at a system prefix. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           These files can cause compilation and link failures, especially if they | 
					
						
							|  |  |  |           are compiled with improper architectures. Consider removing these files: | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_iconv | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         find_relative_paths("lib/libiconv.dylib", "include/iconv.h") | 
					
						
							|  |  |  |         return if @found.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |         libiconv = begin | 
					
						
							| 
									
										
										
										
											2016-09-17 17:01:04 +01:00
										 |  |  |           Formulary.factory("libiconv") | 
					
						
							|  |  |  |         rescue | 
					
						
							|  |  |  |           nil | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         if libiconv && libiconv.linked_keg.directory? | 
					
						
							|  |  |  |           unless libiconv.keg_only? | 
					
						
							|  |  |  |             <<-EOS.undent
 | 
					
						
							|  |  |  |               A libiconv formula is installed and linked. | 
					
						
							|  |  |  |               This will break stuff. For serious. Unlink it. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |             EOS | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         else | 
					
						
							|  |  |  |           inject_file_list @found, <<-EOS.undent
 | 
					
						
							|  |  |  |             libiconv files detected at a system prefix other than /usr.
 | 
					
						
							|  |  |  |             Homebrew doesn't provide a libiconv formula, and expects to link against | 
					
						
							|  |  |  |             the system version in /usr. libiconv in other prefixes can cause
 | 
					
						
							|  |  |  |             compile or link failure, especially if compiled with improper | 
					
						
							| 
									
										
										
										
											2016-09-18 19:57:19 +01:00
										 |  |  |             architectures. macOS itself never installs anything to /usr/local so | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             it was either installed by a user or some other third party software. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             tl;dr: delete these files: | 
					
						
							|  |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_config_scripts | 
					
						
							|  |  |  |         return unless HOMEBREW_CELLAR.exist? | 
					
						
							|  |  |  |         real_cellar = HOMEBREW_CELLAR.realpath | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         scripts = [] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         whitelist = %W[
 | 
					
						
							|  |  |  |           /usr/bin /usr/sbin | 
					
						
							|  |  |  |           /usr/X11/bin /usr/X11R6/bin /opt/X11/bin | 
					
						
							|  |  |  |           #{HOMEBREW_PREFIX}/bin #{HOMEBREW_PREFIX}/sbin | 
					
						
							|  |  |  |           /Applications/Server.app/Contents/ServerRoot/usr/bin | 
					
						
							|  |  |  |           /Applications/Server.app/Contents/ServerRoot/usr/sbin | 
					
						
							|  |  |  |         ].map(&:downcase) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-22 16:31:19 +01:00
										 |  |  |         paths(ENV["HOMEBREW_PATH"]).each do |p| | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           next if whitelist.include?(p.downcase) || !File.directory?(p) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           realpath = Pathname.new(p).realpath.to_s | 
					
						
							|  |  |  |           next if realpath.start_with?(real_cellar.to_s, HOMEBREW_CELLAR.to_s) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           scripts += Dir.chdir(p) { Dir["*-config"] }.map { |c| File.join(p, c) } | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return if scripts.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         inject_file_list scripts, <<-EOS.undent
 | 
					
						
							|  |  |  |           "config" scripts exist outside your system or Homebrew directories. | 
					
						
							|  |  |  |           `./configure` scripts often look for *-config scripts to determine if | 
					
						
							|  |  |  |           software packages are installed, and what additional flags to use when | 
					
						
							|  |  |  |           compiling and linking. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Having additional scripts in your path can confuse software installed via | 
					
						
							|  |  |  |           Homebrew if the config script overrides a system or Homebrew provided | 
					
						
							|  |  |  |           script of the same name. We found the following "config" scripts: | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-21 09:07:04 +02:00
										 |  |  |       def check_dyld_vars | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         dyld_vars = ENV.keys.grep(/^DYLD_/) | 
					
						
							|  |  |  |         return if dyld_vars.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         values = dyld_vars.map { |var| "#{var}: #{ENV.fetch(var)}" } | 
					
						
							|  |  |  |         message = inject_file_list values, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Setting DYLD_* vars can break dynamic linking. | 
					
						
							|  |  |  |           Set variables: | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         if dyld_vars.include? "DYLD_INSERT_LIBRARIES" | 
					
						
							|  |  |  |           message += <<-EOS.undent
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             Setting DYLD_INSERT_LIBRARIES can cause Go builds to fail. | 
					
						
							|  |  |  |             Having this set is common if you use this software: | 
					
						
							| 
									
										
										
										
											2017-03-12 19:44:01 +00:00
										 |  |  |               #{Formatter.url("https://asepsis.binaryage.com/")} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         message | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-13 16:31:12 +02:00
										 |  |  |       def check_ssl_cert_file | 
					
						
							|  |  |  |         return unless ENV.key?("SSL_CERT_FILE") | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Setting SSL_CERT_FILE can break downloading files; if that happens | 
					
						
							|  |  |  |           you should unset it before running Homebrew. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Homebrew uses the system curl which uses system certificates by | 
					
						
							|  |  |  |           default. Setting SSL_CERT_FILE makes it use an outdated OpenSSL, which | 
					
						
							|  |  |  |           does not support modern OpenSSL certificate stores. | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       def check_for_symlinked_cellar | 
					
						
							|  |  |  |         return unless HOMEBREW_CELLAR.exist? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless HOMEBREW_CELLAR.symlink? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Symlinked Cellars can cause problems. | 
					
						
							|  |  |  |           Your Homebrew Cellar is a symlink: #{HOMEBREW_CELLAR} | 
					
						
							|  |  |  |                           which resolves to: #{HOMEBREW_CELLAR.realpath} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           The recommended Homebrew installations are either: | 
					
						
							|  |  |  |           (A) Have Cellar be a real directory inside of your HOMEBREW_PREFIX | 
					
						
							|  |  |  |           (B) Symlink "bin/brew" into your prefix, but don't symlink "Cellar". | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Older installations of Homebrew may have created a symlinked Cellar, but this can | 
					
						
							|  |  |  |           cause problems when two formula install to locations that are mapped on top of each | 
					
						
							|  |  |  |           other during the linking step. | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_multiple_volumes | 
					
						
							|  |  |  |         return unless HOMEBREW_CELLAR.exist? | 
					
						
							|  |  |  |         volumes = Volumes.new | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # Find the volumes for the TMP folder & HOMEBREW_CELLAR | 
					
						
							|  |  |  |         real_cellar = HOMEBREW_CELLAR.realpath | 
					
						
							|  |  |  |         where_cellar = volumes.which real_cellar | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         begin | 
					
						
							| 
									
										
										
										
											2016-10-09 14:33:04 +01:00
										 |  |  |           tmp = Pathname.new(Dir.mktmpdir("doctor", HOMEBREW_TEMP)) | 
					
						
							|  |  |  |           begin | 
					
						
							|  |  |  |             real_tmp = tmp.realpath.parent | 
					
						
							|  |  |  |             where_tmp = volumes.which real_tmp | 
					
						
							|  |  |  |           ensure | 
					
						
							|  |  |  |             Dir.delete tmp | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         rescue | 
					
						
							|  |  |  |           return | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-10-09 14:33:04 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if where_cellar == where_tmp | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Your Cellar and TEMP directories are on different volumes. | 
					
						
							| 
									
										
										
										
											2016-09-18 19:57:19 +01:00
										 |  |  |           macOS won't move relative symlinks across volumes unless the target file already | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           exists. Brews known to be affected by this are Git and Narwhal. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           You should set the "HOMEBREW_TEMP" environmental variable to a suitable | 
					
						
							|  |  |  |           directory on the same volume as your Cellar. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_filesystem_case_sensitive | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         dirs_to_check = [ | 
					
						
							|  |  |  |           HOMEBREW_PREFIX, | 
					
						
							|  |  |  |           HOMEBREW_REPOSITORY, | 
					
						
							|  |  |  |           HOMEBREW_CELLAR, | 
					
						
							|  |  |  |           HOMEBREW_TEMP, | 
					
						
							|  |  |  |         ] | 
					
						
							|  |  |  |         case_sensitive_dirs = dirs_to_check.select do |dir| | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           # We select the dir as being case-sensitive if either the UPCASED or the | 
					
						
							|  |  |  |           # downcased variant is missing. | 
					
						
							|  |  |  |           # Of course, on a case-insensitive fs, both exist because the os reports so. | 
					
						
							|  |  |  |           # In the rare situation when the user has indeed a downcased and an upcased | 
					
						
							|  |  |  |           # dir (e.g. /TMP and /tmp) this check falsely thinks it is case-insensitive | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           # but we don't care because: 1. there is more than one dir checked, 2. the | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           # check is not vital and 3. we would have to touch files otherwise. | 
					
						
							|  |  |  |           upcased = Pathname.new(dir.to_s.upcase) | 
					
						
							|  |  |  |           downcased = Pathname.new(dir.to_s.downcase) | 
					
						
							|  |  |  |           dir.exist? && !(upcased.exist? && downcased.exist?) | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         end | 
					
						
							|  |  |  |         return if case_sensitive_dirs.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         volumes = Volumes.new | 
					
						
							|  |  |  |         case_sensitive_vols = case_sensitive_dirs.map do |case_sensitive_dir| | 
					
						
							|  |  |  |           volumes.get_mounts(case_sensitive_dir) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         case_sensitive_vols.uniq! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           The filesystem on #{case_sensitive_vols.join(",")} appears to be case-sensitive. | 
					
						
							| 
									
										
										
										
											2016-09-18 19:57:19 +01:00
										 |  |  |           The default macOS filesystem is case-insensitive. Please report any apparent problems. | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-13 02:57:35 +02:00
										 |  |  |       def check_git_version | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         # https://help.github.com/articles/https-cloning-errors | 
					
						
							| 
									
										
										
										
											2016-06-13 02:57:35 +02:00
										 |  |  |         return unless Utils.git_available? | 
					
						
							| 
									
										
										
										
											2017-03-28 12:05:06 -04:00
										 |  |  |         return unless Version.create(Utils.git_version) < Version.create("1.8.5") | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         git = Formula["git"] | 
					
						
							|  |  |  |         git_upgrade_cmd = git.any_version_installed? ? "upgrade" : "install" | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-06-13 02:57:35 +02:00
										 |  |  |           An outdated version (#{Utils.git_version}) of Git was detected in your PATH. | 
					
						
							| 
									
										
										
										
											2017-03-28 12:05:06 -04:00
										 |  |  |           Git 1.8.5 or newer is required to perform checkouts over HTTPS from GitHub and | 
					
						
							|  |  |  |           to support the 'git -C <path>' option. | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Please upgrade: | 
					
						
							|  |  |  |             brew #{git_upgrade_cmd} git | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_git | 
					
						
							| 
									
										
										
										
											2016-06-13 02:57:35 +02:00
										 |  |  |         return if Utils.git_available? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Git could not be found in your PATH. | 
					
						
							|  |  |  |           Homebrew uses Git for several internal functions, and some formulae use Git | 
					
						
							|  |  |  |           checkouts instead of stable tarballs. You may want to install Git: | 
					
						
							|  |  |  |             brew install git | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_git_newline_settings | 
					
						
							|  |  |  |         return unless Utils.git_available? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-26 13:35:36 -05:00
										 |  |  |         autocrlf = HOMEBREW_REPOSITORY.cd { `git config --get core.autocrlf`.chomp } | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless autocrlf == "true" | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Suspicious Git newline settings found. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           The detected Git newline settings will cause checkout problems: | 
					
						
							|  |  |  |             core.autocrlf = #{autocrlf} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           If you are not routinely dealing with Windows-based projects, | 
					
						
							|  |  |  |           consider removing these by running: | 
					
						
							|  |  |  |             git config --global core.autocrlf input | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-26 20:28:11 +01:00
										 |  |  |       def check_brew_git_origin | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         return if !Utils.git_available? || !(HOMEBREW_REPOSITORY/".git").exist? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-02 09:44:48 +02:00
										 |  |  |         origin = HOMEBREW_REPOSITORY.git_origin | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         if origin.nil? | 
					
						
							|  |  |  |           <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2017-03-26 20:28:11 +01:00
										 |  |  |             Missing Homebrew/brew git origin remote. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             Without a correctly configured origin, Homebrew won't update | 
					
						
							|  |  |  |             properly. You can solve this by adding the Homebrew remote: | 
					
						
							| 
									
										
										
										
											2017-03-26 20:28:11 +01:00
										 |  |  |               git -C "#{HOMEBREW_REPOSITORY}" remote add origin #{Formatter.url("https://github.com/Homebrew/brew.git")} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2017-03-28 19:44:30 +01:00
										 |  |  |         elsif origin !~ %r{Homebrew/brew(\.git|/)?$} | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2017-03-26 20:28:11 +01:00
										 |  |  |             Suspicious Homebrew/brew git origin remote found. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             With a non-standard origin, Homebrew won't pull updates from | 
					
						
							|  |  |  |             the main repository. The current git origin is: | 
					
						
							|  |  |  |               #{origin} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             Unless you have compelling reasons, consider setting the | 
					
						
							| 
									
										
										
										
											2017-03-26 20:28:11 +01:00
										 |  |  |             origin remote to point at the main repository by running: | 
					
						
							|  |  |  |               git -C "#{HOMEBREW_REPOSITORY}" remote add origin #{Formatter.url("https://github.com/Homebrew/brew.git")} | 
					
						
							|  |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_coretap_git_origin | 
					
						
							|  |  |  |         coretap_path = CoreTap.instance.path | 
					
						
							|  |  |  |         return if !Utils.git_available? || !(coretap_path/".git").exist? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         origin = coretap_path.git_origin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if origin.nil? | 
					
						
							|  |  |  |           <<-EOS.undent
 | 
					
						
							|  |  |  |             Missing #{CoreTap.instance} git origin remote. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             Without a correctly configured origin, Homebrew won't update | 
					
						
							|  |  |  |             properly. You can solve this by adding the Homebrew remote: | 
					
						
							|  |  |  |               git -C "#{coretap_path}" remote add origin #{Formatter.url("https://github.com/Homebrew/homebrew-core.git")} | 
					
						
							|  |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2017-03-28 19:44:30 +01:00
										 |  |  |         elsif origin !~ %r{Homebrew/homebrew-core(\.git|/)?$} | 
					
						
							| 
									
										
										
										
											2017-03-26 20:28:11 +01:00
										 |  |  |           <<-EOS.undent
 | 
					
						
							|  |  |  |             Suspicious #{CoreTap.instance} git origin remote found. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             With a non-standard origin, Homebrew won't pull updates from | 
					
						
							|  |  |  |             the main repository. The current git origin is: | 
					
						
							|  |  |  |               #{origin} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             Unless you have compelling reasons, consider setting the | 
					
						
							|  |  |  |             origin remote to point at the main repository by running: | 
					
						
							|  |  |  |               git -C "#{coretap_path}" remote add origin #{Formatter.url("https://github.com/Homebrew/homebrew-core.git")} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def __check_linked_brew(f) | 
					
						
							|  |  |  |         f.installed_prefixes.each do |prefix| | 
					
						
							|  |  |  |           prefix.find do |src| | 
					
						
							|  |  |  |             next if src == prefix | 
					
						
							|  |  |  |             dst = HOMEBREW_PREFIX + src.relative_path_from(prefix) | 
					
						
							|  |  |  |             return true if dst.symlink? && src == dst.resolved_path | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         false | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_linked_keg_only_brews | 
					
						
							|  |  |  |         return unless HOMEBREW_CELLAR.exist? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         linked = Formula.installed.select do |f| | 
					
						
							|  |  |  |           f.keg_only? && __check_linked_brew(f) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         return if linked.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         inject_file_list linked.map(&:full_name), <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Some keg-only formula are linked into the Cellar. | 
					
						
							|  |  |  |           Linking a keg-only formula, such as gettext, into the cellar with | 
					
						
							|  |  |  |           `brew link <formula>` will cause other formulae to detect them during | 
					
						
							|  |  |  |           the `./configure` step. This may cause problems when compiling those | 
					
						
							|  |  |  |           other formulae. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           Binaries provided by keg-only formulae may override system binaries | 
					
						
							|  |  |  |           with other strange results. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           You may wish to `brew unlink` these brews: | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_other_frameworks | 
					
						
							|  |  |  |         # Other frameworks that are known to cause problems when present | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         frameworks_to_check = %w[
 | 
					
						
							|  |  |  |           expat.framework | 
					
						
							|  |  |  |           libexpat.framework | 
					
						
							|  |  |  |           libcurl.framework | 
					
						
							|  |  |  |         ] | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |         frameworks_found = frameworks_to_check | 
					
						
							|  |  |  |                            .map { |framework| "/Library/Frameworks/#{framework}" } | 
					
						
							|  |  |  |                            .select { |framework| File.exist? framework } | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if frameworks_found.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         inject_file_list frameworks_found, <<-EOS.undent
 | 
					
						
							|  |  |  |           Some frameworks can be picked up by CMake's build system and likely | 
					
						
							|  |  |  |           cause the build to fail. To compile CMake, you may wish to move these | 
					
						
							|  |  |  |           out of the way: | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_tmpdir | 
					
						
							|  |  |  |         tmpdir = ENV["TMPDIR"] | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if tmpdir.nil? || File.directory?(tmpdir) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           TMPDIR #{tmpdir.inspect} doesn't exist. | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_missing_deps | 
					
						
							|  |  |  |         return unless HOMEBREW_CELLAR.exist? | 
					
						
							|  |  |  |         missing = Set.new | 
					
						
							|  |  |  |         Homebrew::Diagnostic.missing_deps(Formula.installed).each_value do |deps| | 
					
						
							|  |  |  |           missing.merge(deps) | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if missing.empty? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Some installed formula are missing dependencies. | 
					
						
							|  |  |  |           You should `brew install` the missing dependencies: | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             brew install #{missing.sort_by(&:full_name) * " "} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |           Run `brew missing` for more details. | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_git_status | 
					
						
							|  |  |  |         return unless Utils.git_available? | 
					
						
							|  |  |  |         HOMEBREW_REPOSITORY.cd do | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           return if `git status --untracked-files=all --porcelain -- Library/Homebrew/ 2>/dev/null`.chomp.empty? | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           You have uncommitted modifications to Homebrew | 
					
						
							|  |  |  |           If this is a surprise to you, then you should stash these modifications. | 
					
						
							|  |  |  |           Stashing returns Homebrew to a pristine state but can be undone | 
					
						
							|  |  |  |           should you later need to do so for some reason. | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |             cd #{HOMEBREW_LIBRARY} && git stash && git clean -d -f | 
					
						
							|  |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_enthought_python | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless which "enpkg" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Enthought Python was found in your PATH. | 
					
						
							|  |  |  |           This can cause build problems, as this software installs its own | 
					
						
							|  |  |  |           copies of iconv and libxml2 into directories that are picked up by | 
					
						
							|  |  |  |           other build systems. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_library_python | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless File.exist?("/Library/Frameworks/Python.framework") | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Python is installed at /Library/Frameworks/Python.framework | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           Homebrew only supports building against the System-provided Python or a | 
					
						
							|  |  |  |           brewed Python. In particular, Pythons installed to /Library can interfere
 | 
					
						
							|  |  |  |           with other software installs. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_old_homebrew_share_python_in_path | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         message = "" | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         ["", "3"].map do |suffix| | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |           next unless paths.include?((HOMEBREW_PREFIX/"share/python#{suffix}").to_s) | 
					
						
							|  |  |  |           message += <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |               #{HOMEBREW_PREFIX}/share/python#{suffix} is not needed in PATH. | 
					
						
							| 
									
										
										
										
											2016-09-17 15:17:27 +01:00
										 |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         unless message.empty? | 
					
						
							|  |  |  |           message += <<-EOS.undent
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             Formerly homebrew put Python scripts you installed via `pip` or `pip3` | 
					
						
							|  |  |  |             (or `easy_install`) into that directory above but now it can be removed | 
					
						
							|  |  |  |             from your PATH variable. | 
					
						
							|  |  |  |             Python scripts will now install into #{HOMEBREW_PREFIX}/bin. | 
					
						
							|  |  |  |             You can delete anything, except 'Extras', from the #{HOMEBREW_PREFIX}/share/python | 
					
						
							|  |  |  |             (and #{HOMEBREW_PREFIX}/share/python3) dir and install affected Python packages | 
					
						
							|  |  |  |             anew with `pip install --upgrade`. | 
					
						
							|  |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         message unless message.empty? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_bad_python_symlink | 
					
						
							|  |  |  |         return unless which "python" | 
					
						
							|  |  |  |         `python -V 2>&1` =~ /Python (\d+)\./ | 
					
						
							|  |  |  |         # This won't be the right warning if we matched nothing at all | 
					
						
							|  |  |  |         return if $1.nil? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return if $1 == "2" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           python is symlinked to python#{$1} | 
					
						
							|  |  |  |           This will confuse build scripts and in general lead to subtle breakage. | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_non_prefixed_coreutils | 
					
						
							| 
									
										
										
										
											2016-01-27 00:54:46 +01:00
										 |  |  |         coreutils = Formula["coreutils"] | 
					
						
							|  |  |  |         return unless coreutils.any_version_installed? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         gnubin = %W[#{coreutils.opt_libexec}/gnubin #{coreutils.libexec}/gnubin] | 
					
						
							|  |  |  |         return if (paths & gnubin).empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Putting non-prefixed coreutils in your path can cause gmp builds to fail. | 
					
						
							| 
									
										
										
										
											2016-01-27 00:54:46 +01:00
										 |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-04-25 17:58:50 +01:00
										 |  |  |       rescue FormulaUnavailableError | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_non_prefixed_findutils | 
					
						
							| 
									
										
										
										
											2016-01-27 00:54:46 +01:00
										 |  |  |         findutils = Formula["findutils"] | 
					
						
							|  |  |  |         return unless findutils.any_version_installed? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         gnubin = %W[#{findutils.opt_libexec}/gnubin #{findutils.libexec}/gnubin] | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         default_names = Tab.for_name("findutils").with? "default-names" | 
					
						
							| 
									
										
										
										
											2016-01-27 00:54:46 +01:00
										 |  |  |         return if !default_names && (paths & gnubin).empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           Putting non-prefixed findutils in your path can cause python builds to fail. | 
					
						
							| 
									
										
										
										
											2016-01-27 00:54:46 +01:00
										 |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-04-25 17:58:50 +01:00
										 |  |  |       rescue FormulaUnavailableError | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_pydistutils_cfg_in_home | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless File.exist? "#{ENV["HOME"]}/.pydistutils.cfg" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           A .pydistutils.cfg file was found in $HOME, which may cause Python | 
					
						
							|  |  |  |           builds to fail. See: | 
					
						
							| 
									
										
										
										
											2016-09-17 03:21:51 +02:00
										 |  |  |             #{Formatter.url("https://bugs.python.org/issue6138")} | 
					
						
							|  |  |  |             #{Formatter.url("https://bugs.python.org/issue4655")} | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_unlinked_but_not_keg_only | 
					
						
							|  |  |  |         unlinked = Formula.racks.reject do |rack| | 
					
						
							| 
									
										
										
										
											2016-09-15 18:28:42 +01:00
										 |  |  |           if !(HOMEBREW_LINKED_KEGS/rack.basename).directory? | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |             begin | 
					
						
							|  |  |  |               Formulary.from_rack(rack).keg_only? | 
					
						
							|  |  |  |             rescue FormulaUnavailableError, TapFormulaAmbiguityError, TapFormulaWithOldnameAmbiguityError | 
					
						
							|  |  |  |               false | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             true | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end.map(&:basename) | 
					
						
							|  |  |  |         return if unlinked.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         inject_file_list unlinked, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           You have unlinked kegs in your Cellar | 
					
						
							|  |  |  |           Leaving kegs unlinked can lead to build-trouble and cause brews that depend on | 
					
						
							|  |  |  |           those kegs to fail to run properly once built. Run `brew link` on these: | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_old_env_vars | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         return unless ENV["HOMEBREW_KEEP_INFO"] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |           `HOMEBREW_KEEP_INFO` is no longer used | 
					
						
							|  |  |  |           info files are no longer deleted by default; you may | 
					
						
							|  |  |  |           remove this environment variable. | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |         EOS | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_pth_support | 
					
						
							|  |  |  |         homebrew_site_packages = Language::Python.homebrew_site_packages | 
					
						
							|  |  |  |         return unless homebrew_site_packages.directory? | 
					
						
							|  |  |  |         return if Language::Python.reads_brewed_pth_files?("python") != false | 
					
						
							|  |  |  |         return unless Language::Python.in_sys_path?("python", homebrew_site_packages) | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         user_site_packages = Language::Python.user_site_packages "python" | 
					
						
							|  |  |  |         <<-EOS.undent
 | 
					
						
							|  |  |  |           Your default Python does not recognize the Homebrew site-packages | 
					
						
							|  |  |  |           directory as a special site-packages directory, which means that .pth | 
					
						
							|  |  |  |           files will not be followed. This means you will not be able to import | 
					
						
							|  |  |  |           some modules after installing them with Homebrew, like wxpython. To fix | 
					
						
							|  |  |  |           this for the current user, you can run: | 
					
						
							|  |  |  |             mkdir -p #{user_site_packages} | 
					
						
							|  |  |  |             echo 'import site; site.addsitedir("#{homebrew_site_packages}")' >> #{user_site_packages}/homebrew.pth | 
					
						
							|  |  |  |         EOS | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       def check_for_external_cmd_name_conflict | 
					
						
							|  |  |  |         cmds = paths.flat_map { |p| Dir["#{p}/brew-*"] }.uniq | 
					
						
							|  |  |  |         cmds = cmds.select { |cmd| File.file?(cmd) && File.executable?(cmd) } | 
					
						
							|  |  |  |         cmd_map = {} | 
					
						
							|  |  |  |         cmds.each do |cmd| | 
					
						
							|  |  |  |           cmd_name = File.basename(cmd, ".rb") | 
					
						
							|  |  |  |           cmd_map[cmd_name] ||= [] | 
					
						
							|  |  |  |           cmd_map[cmd_name] << cmd | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         cmd_map.reject! { |_cmd_name, cmd_paths| cmd_paths.size == 1 } | 
					
						
							|  |  |  |         return if cmd_map.empty? | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         message = "You have external commands with conflicting names.\n" | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |         cmd_map.each do |cmd_name, cmd_paths| | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  |           message += inject_file_list cmd_paths, <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |             Found command `#{cmd_name}` in following places: | 
					
						
							|  |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-04-06 05:08:53 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |         message | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 01:53:05 +00:00
										 |  |  |       def check_for_tap_ruby_files_locations | 
					
						
							|  |  |  |         bad_tap_files = {} | 
					
						
							|  |  |  |         Tap.each do |tap| | 
					
						
							|  |  |  |           unused_formula_dirs = tap.potential_formula_dirs - [tap.formula_dir] | 
					
						
							|  |  |  |           unused_formula_dirs.each do |dir| | 
					
						
							|  |  |  |             next unless dir.exist? | 
					
						
							|  |  |  |             dir.children.each do |path| | 
					
						
							|  |  |  |               next unless path.extname == ".rb" | 
					
						
							|  |  |  |               bad_tap_files[tap] ||= [] | 
					
						
							|  |  |  |               bad_tap_files[tap] << path | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         return if bad_tap_files.empty? | 
					
						
							|  |  |  |         bad_tap_files.keys.map do |tap| | 
					
						
							|  |  |  |           <<-EOS.undent
 | 
					
						
							|  |  |  |             Found Ruby file outside #{tap} tap formula directory | 
					
						
							|  |  |  |             (#{tap.formula_dir}): | 
					
						
							|  |  |  |               #{bad_tap_files[tap].join("\n  ")} | 
					
						
							|  |  |  |           EOS | 
					
						
							|  |  |  |         end.join("\n") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |       def all | 
					
						
							|  |  |  |         methods.map(&:to_s).grep(/^check_/) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end # end class Checks | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2016-04-25 17:58:50 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | require "extend/os/diagnostic" |