| 
									
										
										
										
											2017-07-11 23:43:28 +02:00
										 |  |  | #:  * `install` [`--debug`] [`--env=`(`std`|`super`)] [`--ignore-dependencies`|`--only-dependencies`] [`--cc=`<compiler>] [`--build-from-source`|`--force-bottle`] [`--devel`|`--HEAD`] [`--keep-tmp`] [`--build-bottle`] <formula> [<options> ...]: | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #:    Install <formula>. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    <formula> is usually the name of the formula to install, but it can be specified | 
					
						
							| 
									
										
										
										
											2017-06-04 11:12:56 +01:00
										 |  |  | #:    in several different ways. See [SPECIFYING FORMULAE](#specifying-formulae). | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #: | 
					
						
							| 
									
										
										
										
											2017-04-02 10:14:21 +01:00
										 |  |  | #:    If `--debug` (or `-d`) is passed and brewing fails, open an interactive debugging | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #:    session with access to IRB or a shell inside the temporary build directory. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--env=std` is passed, use the standard build environment instead of superenv. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--env=super` is passed, use superenv even if the formula specifies the | 
					
						
							|  |  |  | #:    standard build environment. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--ignore-dependencies` is passed, skip installing any dependencies of | 
					
						
							|  |  |  | #:    any kind. If they are not already present, the formula will probably fail | 
					
						
							|  |  |  | #:    to install. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--only-dependencies` is passed, install the dependencies with specified | 
					
						
							|  |  |  | #:    options but do not install the specified formula. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--cc=`<compiler> is passed, attempt to compile using <compiler>. | 
					
						
							|  |  |  | #:    <compiler> should be the name of the compiler's executable, for instance | 
					
						
							|  |  |  | #:    `gcc-4.2` for Apple's GCC 4.2, or `gcc-4.9` for a Homebrew-provided GCC | 
					
						
							|  |  |  | #:    4.9. | 
					
						
							|  |  |  | #: | 
					
						
							| 
									
										
										
										
											2017-04-02 10:14:21 +01:00
										 |  |  | #:    If `--build-from-source` (or `-s`) is passed, compile the specified <formula> from | 
					
						
							| 
									
										
										
										
											2016-05-06 12:02:13 -07:00
										 |  |  | #:    source even if a bottle is provided. Dependencies will still be installed | 
					
						
							|  |  |  | #:    from bottles if they are available. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `HOMEBREW_BUILD_FROM_SOURCE` is set, regardless of whether `--build-from-source` was | 
					
						
							|  |  |  | #:    passed, then both <formula> and the dependencies installed as part of this process | 
					
						
							|  |  |  | #:    are built from source even if bottles are available. | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #: | 
					
						
							| 
									
										
										
										
											2017-01-02 16:05:14 +00:00
										 |  |  | #:    If `--force-bottle` is passed, install from a bottle if it exists for the | 
					
						
							|  |  |  | #:    current or newest version of macOS, even if it would not normally be used | 
					
						
							|  |  |  | #:    for installation. | 
					
						
							|  |  |  | #: | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #:    If `--devel` is passed, and <formula> defines it, install the development version. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--HEAD` is passed, and <formula> defines it, install the HEAD version, | 
					
						
							|  |  |  | #:    aka master, trunk, unstable. | 
					
						
							|  |  |  | #: | 
					
						
							| 
									
										
										
										
											2016-05-18 23:43:42 -07:00
										 |  |  | #:    If `--keep-tmp` is passed, the temporary files created during installation | 
					
						
							|  |  |  | #:    are not deleted. | 
					
						
							| 
									
										
										
										
											2016-04-10 22:53:56 -04:00
										 |  |  | #: | 
					
						
							| 
									
										
										
										
											2017-03-05 21:45:15 -05:00
										 |  |  | #:    If `--build-bottle` is passed, prepare the formula for eventual bottling | 
					
						
							|  |  |  | #:    during installation. | 
					
						
							|  |  |  | #: | 
					
						
							| 
									
										
										
										
											2017-07-11 23:43:28 +02:00
										 |  |  | #:    Installation options specific to <formula> may be appended to the command, | 
					
						
							|  |  |  | #:    and can be listed with `brew options` <formula>. | 
					
						
							|  |  |  | #: | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #:  * `install` `--interactive` [`--git`] <formula>: | 
					
						
							| 
									
										
										
										
											2017-04-02 10:14:21 +01:00
										 |  |  | #:    If `--interactive` (or `-i`) is passed, download and patch <formula>, then | 
					
						
							|  |  |  | #:    open a shell. This allows the user to run `./configure --help` and | 
					
						
							|  |  |  | #:    otherwise determine how to turn the software package into a Homebrew | 
					
						
							|  |  |  | #:    formula. | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #: | 
					
						
							| 
									
										
										
										
											2017-04-02 10:14:21 +01:00
										 |  |  | #:    If `--git` (or `-g`) is passed, Homebrew will create a Git repository, useful for | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #:    creating patches to the software. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-18 17:02:08 +02:00
										 |  |  | require "missing_formula" | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  | require "diagnostic" | 
					
						
							| 
									
										
										
										
											2014-06-16 13:36:17 -05:00
										 |  |  | require "cmd/search" | 
					
						
							|  |  |  | require "formula_installer" | 
					
						
							| 
									
										
										
										
											2015-12-19 19:10:22 +08:00
										 |  |  | require "tap" | 
					
						
							| 
									
										
										
										
											2014-06-16 13:36:17 -05:00
										 |  |  | require "hardware" | 
					
						
							| 
									
										
										
										
											2016-07-29 20:31:32 -06:00
										 |  |  | require "development_tools" | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-18 22:41:47 -05:00
										 |  |  | module Homebrew | 
					
						
							| 
									
										
										
										
											2016-09-26 01:44:51 +02:00
										 |  |  |   module_function | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   def install | 
					
						
							| 
									
										
										
										
											2012-02-04 00:01:29 -06:00
										 |  |  |     raise FormulaUnspecifiedError if ARGV.named.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     if ARGV.include? "--head" | 
					
						
							| 
									
										
										
										
											2014-02-11 21:25:26 -08:00
										 |  |  |       raise "Specify `--HEAD` in uppercase to build from trunk." | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-10 10:24:56 +01:00
										 |  |  |     unless ARGV.force? | 
					
						
							|  |  |  |       ARGV.named.each do |name| | 
					
						
							|  |  |  |         next if File.exist?(name) | 
					
						
							| 
									
										
										
										
											2016-10-19 11:56:40 -04:00
										 |  |  |         if name !~ HOMEBREW_TAP_FORMULA_REGEX && name !~ HOMEBREW_CASK_TAP_CASK_REGEX | 
					
						
							| 
									
										
										
										
											2016-09-10 10:24:56 +01:00
										 |  |  |           next | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-06-10 20:23:20 +03:00
										 |  |  |         tap = Tap.fetch(Regexp.last_match(1), Regexp.last_match(2)) | 
					
						
							| 
									
										
										
										
											2015-11-09 07:25:26 -08:00
										 |  |  |         tap.install unless tap.installed? | 
					
						
							| 
									
										
										
										
											2013-10-21 04:25:24 +01:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-09-10 10:24:56 +01:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-11-09 12:57:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-21 15:46:57 +01:00
										 |  |  |     begin | 
					
						
							| 
									
										
										
										
											2014-10-31 18:33:39 -05:00
										 |  |  |       formulae = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-05 22:01:32 +08:00
										 |  |  |       unless ARGV.casks.empty? | 
					
						
							| 
									
										
										
										
											2015-03-05 15:36:40 +00:00
										 |  |  |         args = [] | 
					
						
							|  |  |  |         args << "--force" if ARGV.force? | 
					
						
							|  |  |  |         args << "--debug" if ARGV.debug? | 
					
						
							|  |  |  |         args << "--verbose" if ARGV.verbose? | 
					
						
							| 
									
										
										
										
											2014-11-28 15:02:42 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         ARGV.casks.each do |c| | 
					
						
							| 
									
										
										
										
											2017-06-02 22:17:18 +01:00
										 |  |  |           ohai "brew cask install #{c} #{args.join " "}" | 
					
						
							|  |  |  |           system("#{HOMEBREW_PREFIX}/bin/brew", "cask", "install", c, *args) | 
					
						
							| 
									
										
										
										
											2014-11-28 15:02:42 +00:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-06-29 14:09:57 -04:00
										 |  |  |       # if the user's flags will prevent bottle only-installations when no | 
					
						
							|  |  |  |       # developer tools are available, we need to stop them early on | 
					
						
							| 
									
										
										
										
											2016-07-06 11:07:24 +01:00
										 |  |  |       FormulaInstaller.prevent_build_flags unless DevelopmentTools.installed? | 
					
						
							| 
									
										
										
										
											2015-06-29 14:09:57 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-21 15:46:57 +01:00
										 |  |  |       ARGV.formulae.each do |f| | 
					
						
							| 
									
										
										
										
											2015-01-12 23:03:38 +00:00
										 |  |  |         # head-only without --HEAD is an error | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |         if !ARGV.build_head? && f.stable.nil? && f.devel.nil? | 
					
						
							| 
									
										
										
										
											2014-10-20 03:02:32 -05:00
										 |  |  |           raise <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2015-05-27 21:00:09 +08:00
										 |  |  |           #{f.full_name} is a head-only formula | 
					
						
							|  |  |  |           Install with `brew install --HEAD #{f.full_name}` | 
					
						
							| 
									
										
										
										
											2014-08-21 15:46:57 +01:00
										 |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2014-06-16 13:38:14 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-12 23:03:38 +00:00
										 |  |  |         # devel-only without --devel is an error | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |         if !ARGV.build_devel? && f.stable.nil? && f.head.nil? | 
					
						
							| 
									
										
										
										
											2015-01-15 23:59:55 -05:00
										 |  |  |           raise <<-EOS.undent
 | 
					
						
							| 
									
										
										
										
											2015-05-27 21:00:09 +08:00
										 |  |  |           #{f.full_name} is a devel-only formula | 
					
						
							|  |  |  |           Install with `brew install --devel #{f.full_name}` | 
					
						
							| 
									
										
										
										
											2015-01-15 23:59:55 -05:00
										 |  |  |           EOS | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |         if ARGV.build_stable? && f.stable.nil? | 
					
						
							| 
									
										
										
										
											2015-05-27 21:00:09 +08:00
										 |  |  |           raise "#{f.full_name} has no stable download, please choose --devel or --HEAD" | 
					
						
							| 
									
										
										
										
											2015-01-12 23:03:38 +00:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # --HEAD, fail with no head defined | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |         if ARGV.build_head? && f.head.nil? | 
					
						
							| 
									
										
										
										
											2015-05-27 21:00:09 +08:00
										 |  |  |           raise "No head is defined for #{f.full_name}" | 
					
						
							| 
									
										
										
										
											2014-08-21 15:46:57 +01:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2014-10-31 18:33:39 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-01-12 23:03:38 +00:00
										 |  |  |         # --devel, fail with no devel defined | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |         if ARGV.build_devel? && f.devel.nil? | 
					
						
							| 
									
										
										
										
											2015-05-27 21:00:09 +08:00
										 |  |  |           raise "No devel block is defined for #{f.full_name}" | 
					
						
							| 
									
										
										
										
											2015-01-05 02:36:03 +00:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |         installed_head_version = f.latest_head_version | 
					
						
							|  |  |  |         new_head_installed = installed_head_version && | 
					
						
							|  |  |  |                              !f.head_version_outdated?(installed_head_version, fetch_head: ARGV.fetch_head?) | 
					
						
							|  |  |  |         prefix_installed = f.prefix.exist? && !f.prefix.children.empty? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if f.keg_only? && f.any_version_installed? && f.optlinked? && !ARGV.force? | 
					
						
							|  |  |  |           # keg-only install is only possible when no other version is | 
					
						
							|  |  |  |           # linked to opt, because installing without any warnings can break | 
					
						
							|  |  |  |           # dependencies. Therefore before performing other checks we need to be | 
					
						
							|  |  |  |           # sure --force flag is passed. | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |           if f.outdated? | 
					
						
							|  |  |  |             optlinked_version = Keg.for(f.opt_prefix).version | 
					
						
							|  |  |  |             onoe <<-EOS.undent
 | 
					
						
							|  |  |  |               #{f.full_name} #{optlinked_version} is already installed | 
					
						
							|  |  |  |               To upgrade to #{f.version}, run `brew upgrade #{f.name}` | 
					
						
							|  |  |  |             EOS | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             opoo <<-EOS.undent
 | 
					
						
							|  |  |  |               #{f.full_name} #{f.pkg_version} is already installed | 
					
						
							|  |  |  |             EOS | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |         elsif (ARGV.build_head? && new_head_installed) || prefix_installed | 
					
						
							|  |  |  |           # After we're sure that --force flag is passed for linked to opt | 
					
						
							|  |  |  |           # keg-only we need to be sure that the version we're attempting to | 
					
						
							|  |  |  |           # install is not already installed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           installed_version = if ARGV.build_head? | 
					
						
							|  |  |  |             f.latest_head_version | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             f.pkg_version | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |           msg = "#{f.full_name} #{installed_version} is already installed" | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |           linked_not_equals_installed = f.linked_version != installed_version | 
					
						
							|  |  |  |           if f.linked? && linked_not_equals_installed | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |             msg = <<-EOS.undent
 | 
					
						
							|  |  |  |               #{msg} | 
					
						
							|  |  |  |               The currently linked version is #{f.linked_version} | 
					
						
							|  |  |  |               You can use `brew switch #{f} #{installed_version}` to link this version. | 
					
						
							|  |  |  |             EOS | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |           elsif !f.linked? || f.keg_only? | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |             msg = <<-EOS.undent
 | 
					
						
							|  |  |  |               #{msg}, it's just not linked. | 
					
						
							|  |  |  |               You can use `brew link #{f}` to link this version. | 
					
						
							|  |  |  |             EOS | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |           opoo msg | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |         elsif !f.any_version_installed? && old_formula = f.old_installed_formulae.first | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |           msg = "#{old_formula.full_name} #{old_formula.installed_version} already installed" | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |           if !old_formula.linked? && !old_formula.keg_only? | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |             msg = <<-EOS.undent
 | 
					
						
							|  |  |  |               #{msg}, it's just not linked. | 
					
						
							|  |  |  |               You can use `brew link #{old_formula.full_name}` to link this version. | 
					
						
							|  |  |  |             EOS | 
					
						
							| 
									
										
										
										
											2016-09-15 16:01:59 +01:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2014-10-31 18:33:39 -05:00
										 |  |  |           opoo msg | 
					
						
							| 
									
										
										
										
											2016-06-27 17:38:03 +03:00
										 |  |  |         elsif f.migration_needed? && !ARGV.force? | 
					
						
							| 
									
										
										
										
											2015-08-25 15:38:25 +02:00
										 |  |  |           # Check if the formula we try to install is the same as installed | 
					
						
							|  |  |  |           # but not migrated one. If --force passed then install anyway. | 
					
						
							| 
									
										
										
										
											2017-05-27 10:15:37 +01:00
										 |  |  |           opoo <<-EOS.undent
 | 
					
						
							|  |  |  |             #{f.oldname} already installed, it's just not migrated | 
					
						
							|  |  |  |             You can migrate formula with `brew migrate #{f}` | 
					
						
							|  |  |  |             Or you can force install it with `brew install #{f} --force` | 
					
						
							|  |  |  |           EOS | 
					
						
							| 
									
										
										
										
											2014-10-31 18:33:39 -05:00
										 |  |  |         else | 
					
						
							| 
									
										
										
										
											2016-10-22 01:56:01 +03:00
										 |  |  |           # If none of the above is true and the formula is linked, then | 
					
						
							|  |  |  |           # FormulaInstaller will handle this case. | 
					
						
							| 
									
										
										
										
											2014-10-31 18:33:39 -05:00
										 |  |  |           formulae << f | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2017-01-09 21:09:31 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         # Even if we don't install this formula mark it as no longer just | 
					
						
							|  |  |  |         # installed as a dependency. | 
					
						
							|  |  |  |         next unless f.opt_prefix.directory? | 
					
						
							|  |  |  |         keg = Keg.new(f.opt_prefix.resolved_path) | 
					
						
							|  |  |  |         tab = Tab.for_keg(keg) | 
					
						
							| 
									
										
										
										
											2017-04-02 17:02:56 +01:00
										 |  |  |         unless tab.installed_on_request | 
					
						
							|  |  |  |           tab.installed_on_request = true | 
					
						
							|  |  |  |           tab.write | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											2014-06-16 13:38:14 -05:00
										 |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-21 15:46:57 +01:00
										 |  |  |       perform_preinstall_checks | 
					
						
							| 
									
										
										
										
											2014-03-15 10:40:18 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-29 11:25:21 +01:00
										 |  |  |       formulae.each do |f| | 
					
						
							|  |  |  |         Migrator.migrate_if_needed(f) | 
					
						
							|  |  |  |         install_formula(f) | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2017-04-18 08:43:39 +01:00
										 |  |  |     rescue FormulaUnreadableError, FormulaClassUnavailableError, | 
					
						
							|  |  |  |            TapFormulaUnreadableError, TapFormulaClassUnavailableError => e | 
					
						
							| 
									
										
										
										
											2016-04-16 21:07:07 +02:00
										 |  |  |       # Need to rescue before `FormulaUnavailableError` (superclass of this) | 
					
						
							|  |  |  |       # is handled, as searching for a formula doesn't make sense here (the | 
					
						
							|  |  |  |       # formula was found, but there's a problem with its implementation). | 
					
						
							|  |  |  |       ofail e.message | 
					
						
							| 
									
										
										
										
											2013-10-30 12:33:20 -07:00
										 |  |  |     rescue FormulaUnavailableError => e | 
					
						
							| 
									
										
										
										
											2017-03-22 21:55:29 +00:00
										 |  |  |       if e.name == "updog" | 
					
						
							| 
									
										
										
										
											2016-08-10 19:37:35 +10:00
										 |  |  |         ofail "What's updog?" | 
					
						
							| 
									
										
										
										
											2017-03-22 21:55:29 +00:00
										 |  |  |         return | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-12-25 18:54:08 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-22 21:55:29 +00:00
										 |  |  |       ofail e.message | 
					
						
							|  |  |  |       if (reason = Homebrew::MissingFormula.reason(e.name)) | 
					
						
							|  |  |  |         $stderr.puts reason | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-22 21:55:29 +00:00
										 |  |  |       query = query_regexp(e.name) | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-22 21:55:29 +00:00
										 |  |  |       ohai "Searching for similarly named formulae..." | 
					
						
							|  |  |  |       formulae_search_results = search_formulae(query) | 
					
						
							|  |  |  |       case formulae_search_results.length | 
					
						
							|  |  |  |       when 0
 | 
					
						
							|  |  |  |         ofail "No similarly named formulae found." | 
					
						
							|  |  |  |       when 1
 | 
					
						
							|  |  |  |         puts "This similarly named formula was found:" | 
					
						
							|  |  |  |         puts formulae_search_results | 
					
						
							|  |  |  |         puts "To install it, run:\n  brew install #{formulae_search_results.first}" | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         puts "These similarly named formulae were found:" | 
					
						
							|  |  |  |         puts Formatter.columns(formulae_search_results) | 
					
						
							|  |  |  |         puts "To install one of them, run (for example):\n  brew install #{formulae_search_results.first}" | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-15 19:54:05 -04:00
										 |  |  |       # Do not search taps if the formula name is qualified | 
					
						
							| 
									
										
										
										
											2017-04-17 14:56:04 +01:00
										 |  |  |       return if e.name.include?("/") | 
					
						
							| 
									
										
										
										
											2017-03-22 21:55:29 +00:00
										 |  |  |       ohai "Searching taps..." | 
					
						
							|  |  |  |       taps_search_results = search_taps(query) | 
					
						
							|  |  |  |       case taps_search_results.length | 
					
						
							|  |  |  |       when 0
 | 
					
						
							|  |  |  |         ofail "No formulae found in taps." | 
					
						
							|  |  |  |       when 1
 | 
					
						
							|  |  |  |         puts "This formula was found in a tap:" | 
					
						
							|  |  |  |         puts taps_search_results | 
					
						
							|  |  |  |         puts "To install it, run:\n  brew install #{taps_search_results.first}" | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         puts "These formulae were found in taps:" | 
					
						
							|  |  |  |         puts Formatter.columns(taps_search_results) | 
					
						
							|  |  |  |         puts "To install one of them, run (for example):\n  brew install #{taps_search_results.first}" | 
					
						
							| 
									
										
										
										
											2015-03-11 16:36:36 +08:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2013-09-05 12:24:21 -07:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-09 12:57:41 +00:00
										 |  |  |   def check_ppc | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     case Hardware::CPU.type | 
					
						
							| 
									
										
										
										
											2016-07-08 20:52:07 +01:00
										 |  |  |     when :ppc | 
					
						
							| 
									
										
										
										
											2010-11-09 13:00:33 +00:00
										 |  |  |       abort <<-EOS.undent
 | 
					
						
							|  |  |  |         Sorry, Homebrew does not support your computer's CPU architecture. | 
					
						
							| 
									
										
										
										
											2012-12-27 21:54:54 -04:00
										 |  |  |         For PPC support, see: https://github.com/mistydemeo/tigerbrew | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |       EOS | 
					
						
							| 
									
										
										
										
											2010-11-09 13:00:33 +00:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2010-11-09 12:57:41 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-11-09 12:57:41 +00:00
										 |  |  |   def check_writable_install_location | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     raise "Cannot write to #{HOMEBREW_CELLAR}" if HOMEBREW_CELLAR.exist? && !HOMEBREW_CELLAR.writable_real? | 
					
						
							|  |  |  |     raise "Cannot write to #{HOMEBREW_PREFIX}" unless HOMEBREW_PREFIX.writable_real? || HOMEBREW_PREFIX.to_s == "/usr/local" | 
					
						
							| 
									
										
										
										
											2010-11-09 12:57:41 +00:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-04 18:35:03 +01:00
										 |  |  |   def check_development_tools | 
					
						
							| 
									
										
										
										
											2016-01-04 23:14:58 +01:00
										 |  |  |     checks = Diagnostic::Checks.new | 
					
						
							| 
									
										
										
										
											2016-11-05 10:40:23 -04:00
										 |  |  |     checks.fatal_development_tools_checks.each do |check| | 
					
						
							| 
									
										
										
										
											2012-08-31 10:20:20 -04:00
										 |  |  |       out = checks.send(check) | 
					
						
							| 
									
										
										
										
											2016-09-07 09:11:06 +01:00
										 |  |  |       next if out.nil? | 
					
						
							| 
									
										
										
										
											2016-11-05 10:40:23 -04:00
										 |  |  |       ofail out | 
					
						
							| 
									
										
										
										
											2016-08-30 03:57:07 +01:00
										 |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-11-05 10:40:23 -04:00
										 |  |  |     exit 1 if Homebrew.failed? | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-15 10:57:03 +01:00
										 |  |  |   def check_cellar | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |     FileUtils.mkdir_p HOMEBREW_CELLAR unless File.exist? HOMEBREW_CELLAR | 
					
						
							| 
									
										
										
										
											2011-09-15 10:57:03 +01:00
										 |  |  |   rescue | 
					
						
							|  |  |  |     raise <<-EOS.undent
 | 
					
						
							|  |  |  |       Could not create #{HOMEBREW_CELLAR} | 
					
						
							|  |  |  |       Check you have permission to write to #{HOMEBREW_CELLAR.parent} | 
					
						
							|  |  |  |     EOS | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-08-23 23:30:52 +01:00
										 |  |  |   def perform_preinstall_checks | 
					
						
							| 
									
										
										
										
											2010-11-09 12:57:41 +00:00
										 |  |  |     check_ppc | 
					
						
							|  |  |  |     check_writable_install_location | 
					
						
							| 
									
										
										
										
											2016-07-04 18:35:03 +01:00
										 |  |  |     check_development_tools if DevelopmentTools.installed? | 
					
						
							| 
									
										
										
										
											2011-09-15 10:57:03 +01:00
										 |  |  |     check_cellar | 
					
						
							| 
									
										
										
										
											2011-08-23 23:30:52 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-11-09 12:57:41 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-08-03 13:09:07 +01:00
										 |  |  |   def install_formula(f) | 
					
						
							| 
									
										
										
										
											2014-10-19 13:54:00 +01:00
										 |  |  |     f.print_tap_action | 
					
						
							| 
									
										
										
										
											2016-11-12 12:31:35 +00:00
										 |  |  |     build_options = f.build | 
					
						
							| 
									
										
										
										
											2014-10-19 13:54:00 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-01-08 19:54:32 -06:00
										 |  |  |     fi = FormulaInstaller.new(f) | 
					
						
							| 
									
										
										
										
											2016-11-12 12:31:35 +00:00
										 |  |  |     fi.options              = build_options.used_options | 
					
						
							|  |  |  |     fi.invalid_option_names = build_options.invalid_option_names | 
					
						
							|  |  |  |     fi.ignore_deps          = ARGV.ignore_deps? | 
					
						
							|  |  |  |     fi.only_deps            = ARGV.only_deps? | 
					
						
							|  |  |  |     fi.build_bottle         = ARGV.build_bottle? | 
					
						
							|  |  |  |     fi.interactive          = ARGV.interactive? | 
					
						
							|  |  |  |     fi.git                  = ARGV.git? | 
					
						
							| 
									
										
										
										
											2014-03-04 14:06:25 -06:00
										 |  |  |     fi.prelude | 
					
						
							| 
									
										
										
										
											2013-01-08 19:54:32 -06:00
										 |  |  |     fi.install | 
					
						
							|  |  |  |     fi.finish | 
					
						
							|  |  |  |   rescue FormulaInstallationAlreadyAttemptedError | 
					
						
							|  |  |  |     # We already attempted to install f as part of the dependency tree of | 
					
						
							|  |  |  |     # another formula. In that case, don't generate an error, just move on. | 
					
						
							| 
									
										
										
										
											2014-03-15 10:40:18 -05:00
										 |  |  |   rescue CannotInstallFormulaError => e | 
					
						
							|  |  |  |     ofail e.message | 
					
						
							| 
									
										
										
										
											2013-01-08 19:54:32 -06:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  | end |