| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  | # Never `require` anything in this file (except English). It needs to be able to | 
					
						
							|  |  |  | # work as the first item in `brew.rb` so we can load gems with Bundler when | 
					
						
							|  |  |  | # needed before anything else is loaded (e.g. `json`). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | require "English" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2020-01-01 15:47:06 +00:00
										 |  |  |   # Keep in sync with the Gemfile.lock's BUNDLED WITH. | 
					
						
							| 
									
										
										
										
											2020-09-20 03:18:58 +02:00
										 |  |  |   HOMEBREW_BUNDLER_VERSION = "1.17.3" | 
					
						
							| 
									
										
										
										
											2020-01-01 15:47:06 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def ruby_bindir | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  |     "#{RbConfig::CONFIG["prefix"]}/bin" | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |   def gem_user_bindir | 
					
						
							| 
									
										
										
										
											2019-04-18 17:43:33 +09:00
										 |  |  |     require "rubygems" | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  |     "#{Gem.user_dir}/bin" | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def ohai_if_defined(message) | 
					
						
							|  |  |  |     if defined?(ohai) | 
					
						
							|  |  |  |       ohai message | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       puts "==> #{message}" | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def odie_if_defined(message) | 
					
						
							|  |  |  |     if defined?(odie) | 
					
						
							|  |  |  |       odie message | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       $stderr.puts "Error: #{message}" | 
					
						
							|  |  |  |       exit 1
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def setup_gem_environment!(gem_home: nil, gem_bindir: nil) | 
					
						
							| 
									
										
										
										
											2020-06-03 10:02:46 +01:00
										 |  |  |     require "rubygems" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |     # Match where our bundler gems are. | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     gem_home ||= "#{ENV["HOMEBREW_LIBRARY"]}/Homebrew/vendor/bundle/ruby/#{RbConfig::CONFIG["ruby_version"]}" | 
					
						
							|  |  |  |     ENV["GEM_HOME"] = gem_home | 
					
						
							| 
									
										
										
										
											2020-06-03 10:02:46 +01:00
										 |  |  |     ENV["GEM_PATH"] = "#{ENV["GEM_HOME"]}:#{Gem.default_dir}" | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-05 15:30:50 +02:00
										 |  |  |     # Set TMPDIR so Xcode's `make` doesn't fall back to `/var/tmp/`, | 
					
						
							|  |  |  |     # which may be not user-writable. | 
					
						
							|  |  |  |     ENV["TMPDIR"] = ENV["HOMEBREW_TEMP"] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |     # Make RubyGems notice environment changes. | 
					
						
							|  |  |  |     Gem.clear_paths | 
					
						
							|  |  |  |     Gem::Specification.reset | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Add necessary Ruby and Gem binary directories to PATH. | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     gem_bindir ||= Gem.bindir | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |     paths = ENV["PATH"].split(":") | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     paths.unshift(gem_bindir) unless paths.include?(gem_bindir) | 
					
						
							| 
									
										
										
										
											2020-04-05 15:38:10 +01:00
										 |  |  |     paths.unshift(ruby_bindir) unless paths.include?(ruby_bindir) | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |     ENV["PATH"] = paths.compact.join(":") | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-28 08:31:18 +00:00
										 |  |  |   def install_gem!(name, version: nil, setup_gem_environment: true) | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     setup_gem_environment! if setup_gem_environment | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |     return unless Gem::Specification.find_all_by_name(name, version).empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     ohai_if_defined "Installing '#{name}' gem" | 
					
						
							| 
									
										
										
										
											2020-06-04 11:36:58 +05:30
										 |  |  |     # document: [] , is equivalent to --no-document | 
					
						
							|  |  |  |     Gem.install name, version, document: [] | 
					
						
							|  |  |  |   rescue Gem::UnsatisfiableDependencyError | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     odie_if_defined "failed to install the '#{name}' gem." | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-28 08:31:18 +00:00
										 |  |  |   def install_gem_setup_path!(name, version: nil, executable: name, setup_gem_environment: true) | 
					
						
							|  |  |  |     install_gem!(name, version: version, setup_gem_environment: setup_gem_environment) | 
					
						
							| 
									
										
										
										
											2019-10-30 13:49:17 +00:00
										 |  |  |     return if find_in_path(executable) | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     odie_if_defined <<~EOS | 
					
						
							|  |  |  |       the '#{name}' gem is installed but couldn't find '#{executable}' in the PATH: | 
					
						
							| 
									
										
										
										
											2019-04-01 16:02:13 -04:00
										 |  |  |         #{ENV["PATH"]} | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-30 13:49:17 +00:00
										 |  |  |   def find_in_path(executable) | 
					
						
							|  |  |  |     ENV["PATH"].split(":").find do |path| | 
					
						
							|  |  |  |       File.executable?("#{path}/#{executable}") | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |   def install_bundler! | 
					
						
							| 
									
										
										
										
											2019-04-18 17:43:33 +09:00
										 |  |  |     require "rubygems" | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |     setup_gem_environment!(gem_home: Gem.user_dir, gem_bindir: gem_user_bindir) | 
					
						
							| 
									
										
										
										
											2020-01-01 15:47:06 +00:00
										 |  |  |     install_gem_setup_path!( | 
					
						
							|  |  |  |       "bundler", | 
					
						
							|  |  |  |       version:               HOMEBREW_BUNDLER_VERSION, | 
					
						
							|  |  |  |       executable:            "bundle", | 
					
						
							|  |  |  |       setup_gem_environment: false, | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def install_bundler_gems! | 
					
						
							|  |  |  |     install_bundler! | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-21 15:41:42 +00:00
										 |  |  |     ENV["BUNDLE_GEMFILE"] = "#{ENV["HOMEBREW_LIBRARY"]}/Homebrew/Gemfile" | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |     @bundle_installed ||= begin | 
					
						
							| 
									
										
										
										
											2019-11-01 17:04:27 +00:00
										 |  |  |       bundle = "#{find_in_path(:bundle)}/bundle" | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |       bundle_check_output = `#{bundle} check 2>&1` | 
					
						
							| 
									
										
										
										
											2019-10-04 09:19:02 +02:00
										 |  |  |       bundle_check_failed = !$CHILD_STATUS.success? | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |       # for some reason sometimes the exit code lies so check the output too. | 
					
						
							|  |  |  |       if bundle_check_failed || bundle_check_output.include?("Install missing gems") | 
					
						
							| 
									
										
										
										
											2019-02-26 22:13:00 +00:00
										 |  |  |         unless system bundle, "install" | 
					
						
							|  |  |  |           odie_if_defined <<~EOS | 
					
						
							|  |  |  |             failed to run `#{bundle} install`! | 
					
						
							|  |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2019-02-20 12:28:59 +00:00
										 |  |  |       else | 
					
						
							|  |  |  |         true | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     setup_gem_environment! | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |