| 
									
										
										
										
											2016-07-04 14:03:03 +01:00
										 |  |  | #:  * `install` [`--debug`] [`--env=`<std>|<super>] [`--ignore-dependencies`] [`--only-dependencies`] [`--cc=`<compiler>] [`--build-from-source`] [`--devel`|`--HEAD`] [`--keep-tmp`] <formula>: | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2016-05-08 20:39:22 -06:00
										 |  |  | #:    in several different ways. See [SPECIFYING FORMULAE][]. | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #: | 
					
						
							|  |  |  | #:    If `--debug` is passed and brewing fails, open an interactive debugging | 
					
						
							|  |  |  | #:    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. | 
					
						
							|  |  |  | #: | 
					
						
							| 
									
										
										
										
											2016-05-06 12:02:13 -07:00
										 |  |  | #:    If `--build-from-source` or `-s` is passed, compile the specified <formula> from | 
					
						
							|  |  |  | #:    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
										 |  |  | #: | 
					
						
							| 
									
										
										
										
											2016-04-08 16:28:43 +02:00
										 |  |  | #:  * `install` `--interactive` [`--git`] <formula>: | 
					
						
							|  |  |  | #:    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. | 
					
						
							|  |  |  | #: | 
					
						
							|  |  |  | #:    If `--git` is passed, Homebrew will create a Git repository, useful for | 
					
						
							|  |  |  | #:    creating patches to the software. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-06-16 13:36:17 -05:00
										 |  |  | require "blacklist" | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2015-12-02 14:35:42 +08:00
										 |  |  |         tap = Tap.fetch($1, $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| | 
					
						
							| 
									
										
										
										
											2015-03-05 15:36:40 +00:00
										 |  |  |           cmd = "brew", "cask", "install", c, *args | 
					
						
							| 
									
										
										
										
											2014-11-28 15:02:42 +00:00
										 |  |  |           ohai cmd.join " " | 
					
						
							| 
									
										
										
										
											2014-12-26 15:39:34 -05:00
										 |  |  |           system(*cmd) | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							|  |  |  |           opoo "#{f.full_name} is a keg-only and another version is linked to opt." | 
					
						
							|  |  |  |           puts "Use `brew install --force` if you want to install this version" | 
					
						
							|  |  |  |         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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           msg = "#{f.full_name}-#{installed_version} already installed" | 
					
						
							|  |  |  |           linked_not_equals_installed = f.linked_version != installed_version | 
					
						
							|  |  |  |           if f.linked? && linked_not_equals_installed | 
					
						
							|  |  |  |             msg << ", however linked version is #{f.linked_version}" | 
					
						
							|  |  |  |             opoo msg | 
					
						
							|  |  |  |             puts "You can use `brew switch #{f} #{installed_version}` to link this version." | 
					
						
							|  |  |  |           elsif !f.linked? || f.keg_only? | 
					
						
							|  |  |  |             msg << ", it's just not linked." | 
					
						
							|  |  |  |             opoo msg | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             opoo msg | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         elsif !f.any_version_installed? && old_formula = f.old_installed_formulae.first | 
					
						
							|  |  |  |           msg = "#{old_formula.full_name}-#{old_formula.installed_version} already installed" | 
					
						
							|  |  |  |           if !old_formula.linked? && !old_formula.keg_only? | 
					
						
							|  |  |  |             msg << ", it's just not linked." | 
					
						
							| 
									
										
										
										
											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. | 
					
						
							|  |  |  |           opoo "#{f.oldname} already installed, it's just not migrated" | 
					
						
							|  |  |  |           puts "You can migrate formula with `brew migrate #{f}`" | 
					
						
							|  |  |  |           puts "Or you can force install it with `brew install #{f} --force`" | 
					
						
							| 
									
										
										
										
											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) | 
					
						
							|  |  |  |         tab.installed_on_request = true | 
					
						
							|  |  |  |         tab.write | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-31 18:33:39 -05:00
										 |  |  |       formulae.each { |f| install_formula(f) } | 
					
						
							| 
									
										
										
										
											2016-04-16 21:07:07 +02:00
										 |  |  |     rescue FormulaClassUnavailableError => e | 
					
						
							|  |  |  |       # 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 | 
					
						
							| 
									
										
										
										
											2015-03-11 16:36:36 +08:00
										 |  |  |       if (blacklist = blacklisted?(e.name)) | 
					
						
							|  |  |  |         ofail "#{e.message}\n#{blacklist}" | 
					
						
							| 
									
										
										
										
											2016-08-10 19:37:35 +10:00
										 |  |  |       elsif e.name == "updog" | 
					
						
							|  |  |  |         ofail "What's updog?" | 
					
						
							| 
									
										
										
										
											2015-03-11 16:36:36 +08:00
										 |  |  |       else | 
					
						
							|  |  |  |         ofail e.message | 
					
						
							|  |  |  |         query = query_regexp(e.name) | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04: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:" | 
					
						
							| 
									
										
										
										
											2016-10-02 07:57:21 +02:00
										 |  |  |           puts formulae_search_results | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04:00
										 |  |  |           puts "To install it, run:\n  brew install #{formulae_search_results.first}" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           puts "These similarly named formulae were found:" | 
					
						
							| 
									
										
										
										
											2016-10-02 20:39:43 +02:00
										 |  |  |           puts Formatter.columns(formulae_search_results) | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04:00
										 |  |  |           puts "To install one of them, run (for example):\n  brew install #{formulae_search_results.first}" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-17 11:31:54 -07:00
										 |  |  |         ohai "Searching taps..." | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04:00
										 |  |  |         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:" | 
					
						
							| 
									
										
										
										
											2016-10-02 07:57:21 +02:00
										 |  |  |           puts taps_search_results | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04:00
										 |  |  |           puts "To install it, run:\n  brew install #{taps_search_results.first}" | 
					
						
							|  |  |  |         else | 
					
						
							|  |  |  |           puts "These formulae were found in taps:" | 
					
						
							| 
									
										
										
										
											2016-10-02 20:39:43 +02:00
										 |  |  |           puts Formatter.columns(taps_search_results) | 
					
						
							| 
									
										
										
										
											2015-10-13 11:56:39 -04:00
										 |  |  |           puts "To install one of them, run (for example):\n  brew install #{taps_search_results.first}" | 
					
						
							|  |  |  |         end | 
					
						
							| 
									
										
										
										
											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.build_from_source    = ARGV.build_from_source? || ARGV.build_all_from_source? | 
					
						
							|  |  |  |     fi.force_bottle         = ARGV.force_bottle? | 
					
						
							|  |  |  |     fi.interactive          = ARGV.interactive? | 
					
						
							|  |  |  |     fi.git                  = ARGV.git? | 
					
						
							|  |  |  |     fi.verbose              = ARGV.verbose? | 
					
						
							|  |  |  |     fi.quieter              = ARGV.quieter? | 
					
						
							|  |  |  |     fi.debug                = ARGV.debug? | 
					
						
							| 
									
										
										
										
											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 |