| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  | module FormulaCellarChecks | 
					
						
							|  |  |  |   def check_PATH bin | 
					
						
							|  |  |  |     # warn the user if stuff was installed outside of their PATH | 
					
						
							|  |  |  |     return unless bin.directory? | 
					
						
							|  |  |  |     return unless bin.children.length > 0
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-17 09:34:43 -07:00
										 |  |  |     prefix_bin = (HOMEBREW_PREFIX/bin.basename) | 
					
						
							|  |  |  |     return unless prefix_bin.directory? | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-17 09:34:43 -07:00
										 |  |  |     prefix_bin = prefix_bin.realpath | 
					
						
							|  |  |  |     return if ORIGINAL_PATHS.include? prefix_bin | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ["#{prefix_bin} is not in your PATH", | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       "You can amend this by altering your ~/.bashrc file"] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def check_manpages | 
					
						
							|  |  |  |     # Check for man pages that aren't in share/man | 
					
						
							|  |  |  |     return unless (f.prefix+'man').directory? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ['A top-level "man" directory was found.', | 
					
						
							|  |  |  |       <<-EOS.undent
 | 
					
						
							|  |  |  |         Homebrew requires that man pages live under share. | 
					
						
							| 
									
										
										
										
											2013-07-17 11:21:58 -05:00
										 |  |  |         This can often be fixed by passing "--mandir=\#{man}" to configure. | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def check_infopages | 
					
						
							|  |  |  |     # Check for info pages that aren't in share/info | 
					
						
							|  |  |  |     return unless (f.prefix+'info').directory? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ['A top-level "info" directory was found.', | 
					
						
							|  |  |  |       <<-EOS.undent
 | 
					
						
							|  |  |  |         Homebrew suggests that info pages live under share. | 
					
						
							| 
									
										
										
										
											2013-07-17 11:21:58 -05:00
										 |  |  |         This can often be fixed by passing "--infodir=\#{info}" to configure. | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def check_jars | 
					
						
							|  |  |  |     return unless f.lib.directory? | 
					
						
							| 
									
										
										
										
											2014-05-21 10:54:24 -05:00
										 |  |  |     jars = f.lib.children.select { |g| g.extname == ".jar" } | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |     return if jars.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-16 20:50:34 -07:00
										 |  |  |     ["JARs were installed to \"#{f.lib}\".", | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       <<-EOS.undent
 | 
					
						
							|  |  |  |         Installing JARs to "lib" can cause conflicts between packages. | 
					
						
							|  |  |  |         For Java software, it is typically better for the formula to | 
					
						
							|  |  |  |         install to "libexec" and then symlink or wrap binaries into "bin". | 
					
						
							| 
									
										
										
										
											2013-08-05 13:31:35 -07:00
										 |  |  |         See "activemq", "jruby", etc. for examples. | 
					
						
							|  |  |  |         The offending files are: | 
					
						
							| 
									
										
										
										
											2013-10-19 21:25:31 -05:00
										 |  |  |           #{jars * "\n          "} | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def check_non_libraries | 
					
						
							|  |  |  |     return unless f.lib.directory? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     valid_extensions = %w(.a .dylib .framework .jnilib .la .o .so
 | 
					
						
							|  |  |  |                           .jar .prl .pm .sh) | 
					
						
							|  |  |  |     non_libraries = f.lib.children.select do |g| | 
					
						
							|  |  |  |       next if g.directory? | 
					
						
							|  |  |  |       not valid_extensions.include? g.extname | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     return if non_libraries.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-07-16 20:50:34 -07:00
										 |  |  |     ["Non-libraries were installed to \"#{f.lib}\".", | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2013-10-19 21:30:57 -05:00
										 |  |  |         Installing non-libraries to "lib" is discouraged. | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |         The offending files are: | 
					
						
							| 
									
										
										
										
											2013-10-19 21:25:31 -05:00
										 |  |  |           #{non_libraries * "\n          "} | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def check_non_executables bin | 
					
						
							|  |  |  |     return unless bin.directory? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     non_exes = bin.children.select { |g| g.directory? or not g.executable? } | 
					
						
							|  |  |  |     return if non_exes.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ["Non-executables were installed to \"#{bin}\".", | 
					
						
							|  |  |  |       <<-EOS.undent
 | 
					
						
							|  |  |  |         The offending files are: | 
					
						
							| 
									
										
										
										
											2013-10-19 21:25:31 -05:00
										 |  |  |           #{non_exes * "\n          "} | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  |       EOS | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-11-10 12:51:24 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   def check_generic_executables bin | 
					
						
							|  |  |  |     return unless bin.directory? | 
					
						
							| 
									
										
										
										
											2014-05-21 09:03:51 -07:00
										 |  |  |     generic_names = %w[run service start stop] | 
					
						
							| 
									
										
										
										
											2014-05-21 10:54:24 -05:00
										 |  |  |     generics = bin.children.select { |g| generic_names.include? g.basename.to_s } | 
					
						
							| 
									
										
										
										
											2013-11-10 12:51:24 -08:00
										 |  |  |     return if generics.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ["Generic binaries were installed to \"#{bin}\".", | 
					
						
							|  |  |  |       <<-EOS.undent
 | 
					
						
							|  |  |  |         Binaries with generic names are likely to conflict with other software, | 
					
						
							|  |  |  |         and suggest that this software should be installed to "libexec" and | 
					
						
							|  |  |  |         then symlinked as needed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The offending files are: | 
					
						
							|  |  |  |           #{generics * "\n          "} | 
					
						
							|  |  |  |       EOS | 
					
						
							|  |  |  |     ] | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2013-07-15 19:28:10 -07:00
										 |  |  | end |