 c5520d0050
			
		
	
	
		c5520d0050
		
	
	
	
	
		
			
			This is in part designed to handle situations described in https://github.com/Homebrew/legacy-homebrew/issues/42273 where we tell someone to install a special dependency, but because we (rightly, IMO) resolve special dependencies first users can end up being told to execute a command on a tool that isn't yet installed and isn't immediately obvious how to install it. In the situation raised there, with the `sile` formula people are being told to `luarocks install xyz` but we hadn't installed Lua for them first, so they just get a `command not found: luarocks` message. Perhaps it should be obvious enough how to install said tools by looking at the formula's dependencies, but it's not a huge burden on us to make life easier than that. Shuffled over from https://github.com/Homebrew/legacy-homebrew/pull/42576.
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "requirement"
 | |
| 
 | |
| class LanguageModuleRequirement < Requirement
 | |
|   fatal true
 | |
| 
 | |
|   def initialize(language, module_name, import_name = nil)
 | |
|     @language = language
 | |
|     @module_name = module_name
 | |
|     @import_name = import_name || module_name
 | |
|     super([language, module_name, import_name])
 | |
|   end
 | |
| 
 | |
|   satisfy(:build_env => false) { quiet_system(*the_test) }
 | |
| 
 | |
|   def message
 | |
|     s = <<-EOS.undent
 | |
|       Unsatisfied dependency: #{@module_name}
 | |
|       Homebrew does not provide special #{@language.to_s.capitalize} dependencies; install with:
 | |
|         `#{command_line} #{@module_name}`
 | |
|     EOS
 | |
| 
 | |
|     unless [:python, :perl, :ruby].include? @language
 | |
|       s += <<-EOS.undent
 | |
| 
 | |
|       You may need to: `brew install #{@language}`
 | |
| 
 | |
|       EOS
 | |
|     end
 | |
| 
 | |
|     s
 | |
|   end
 | |
| 
 | |
|   def the_test
 | |
|     case @language
 | |
|     when :lua then %W[/usr/bin/env luarocks-5.2 show #{@import_name}]
 | |
|     when :lua51 then %W[/usr/bin/env luarocks-5.1 show #{@import_name}]
 | |
|     when :perl then %W[/usr/bin/env perl -e use\ #{@import_name}]
 | |
|     when :python then %W[/usr/bin/env python -c import\ #{@import_name}]
 | |
|     when :python3 then %W[/usr/bin/env python3 -c import\ #{@import_name}]
 | |
|     when :ruby then %W[/usr/bin/env ruby -rubygems -e require\ '#{@import_name}']
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def command_line
 | |
|     case @language
 | |
|     when :lua     then "luarocks-5.2 install"
 | |
|     when :lua51   then "luarocks-5.1 install"
 | |
|     when :perl    then "cpan -i"
 | |
|     when :python  then "pip install"
 | |
|     when :python3 then "pip3 install"
 | |
|     when :ruby    then "gem install"
 | |
|     end
 | |
|   end
 | |
| end
 |