| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  | #!/usr/bin/ruby | 
					
						
							|  |  |  | require 'global' | 
					
						
							| 
									
										
										
										
											2009-10-15 09:07:12 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  | def text_for_keg_only_formula f | 
					
						
							| 
									
										
										
										
											2009-10-12 20:48:00 +01:00
										 |  |  |   if f.keg_only? == :provided_by_osx | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  |     rationale = "This is because the formula is already provided by OS X." | 
					
						
							| 
									
										
										
										
											2009-10-12 20:48:00 +01:00
										 |  |  |   elsif f.keg_only?.kind_of? String | 
					
						
							| 
									
										
										
										
											2009-09-30 17:18:40 +01:00
										 |  |  |     rationale = "The formula provides the following rationale:\n\n#{f.keg_only?.chomp}" | 
					
						
							|  |  |  |   else | 
					
						
							|  |  |  |     rationale = "The formula didn't provide any rationale for this." | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  |   <<-EOS
 | 
					
						
							|  |  |  | #{f.name} is keg-only. This means it is not symlinked into Homebrew's | 
					
						
							| 
									
										
										
										
											2009-09-30 17:18:40 +01:00
										 |  |  | prefix. #{rationale} | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | Generally there are no consequences of this for you, however if you build your | 
					
						
							|  |  |  | own software and it requires this formula, you may want to run this command to | 
					
						
							|  |  |  | link it into the Homebrew prefix: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  |     brew link #{f.name} | 
					
						
							|  |  |  |   EOS | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  | end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  | # I like this little at all, but see no alternative seeing as the formula | 
					
						
							|  |  |  | # rb file has to be the running script to allow it to use __END__ and DATA | 
					
						
							|  |  |  | at_exit do | 
					
						
							|  |  |  |   begin | 
					
						
							| 
									
										
										
										
											2009-11-12 01:34:48 +00:00
										 |  |  |     raise $! if $! # an exception was already thrown when parsing the formula | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  |     require 'extend/ENV' | 
					
						
							|  |  |  |     require 'fileutils' | 
					
						
							|  |  |  |     require 'hardware' | 
					
						
							|  |  |  |     require 'keg' | 
					
						
							|  |  |  |     require 'brew.h.rb' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     ENV.extend(HomebrewEnvExtension) | 
					
						
							|  |  |  |     ENV.setup_build_environment | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     install(Formula.factory($0)) | 
					
						
							|  |  |  |   rescue Exception => e | 
					
						
							|  |  |  |     if ENV['HOMEBREW_ERROR_PIPE'] | 
					
						
							|  |  |  |       pipe = IO.new(ENV['HOMEBREW_ERROR_PIPE'].to_i, 'w') | 
					
						
							|  |  |  |       Marshal.dump(e, pipe) | 
					
						
							|  |  |  |       pipe.close | 
					
						
							|  |  |  |       exit! 1
 | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       onoe e | 
					
						
							|  |  |  |       puts e.backtrace | 
					
						
							|  |  |  |       exit! 2
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-21 20:22:09 +01:00
										 |  |  | def install f | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  |   show_summary_heading = false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-07-20 08:49:42 -07:00
										 |  |  |   f.deps.uniq.each do |dep| | 
					
						
							| 
									
										
										
										
											2009-09-21 20:22:09 +01:00
										 |  |  |     dep = Formula.factory dep | 
					
						
							|  |  |  |     if dep.keg_only? | 
					
						
							| 
									
										
										
										
											2009-10-15 12:36:09 +01:00
										 |  |  |       ENV.prepend 'LDFLAGS', "-L#{dep.lib}" | 
					
						
							|  |  |  |       ENV.prepend 'CPPFLAGS', "-I#{dep.include}" | 
					
						
							|  |  |  |       ENV.prepend 'PATH', "#{dep.bin}", ':' | 
					
						
							|  |  |  |       ENV.prepend 'PKG_CONFIG_PATH', dep.lib+'pkgconfig', ':' | 
					
						
							| 
									
										
										
										
											2009-09-21 20:22:09 +01:00
										 |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-15 09:08:26 +01:00
										 |  |  |   if ARGV.verbose? | 
					
						
							|  |  |  |     ohai "Build Environment" | 
					
						
							| 
									
										
										
										
											2010-04-07 21:01:12 -07:00
										 |  |  |     dump_build_env ENV | 
					
						
							| 
									
										
										
										
											2009-10-15 09:08:26 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-21 20:22:09 +01:00
										 |  |  |   build_time = nil | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   begin | 
					
						
							|  |  |  |     f.brew do | 
					
						
							|  |  |  |       if ARGV.flag? '--interactive' | 
					
						
							|  |  |  |         ohai "Entering interactive mode" | 
					
						
							|  |  |  |         puts "Type `exit' to return and finalize the installation" | 
					
						
							|  |  |  |         puts "Install to this prefix: #{f.prefix}" | 
					
						
							| 
									
										
										
										
											2010-04-07 16:45:31 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |         if ARGV.flag? '--git' | 
					
						
							|  |  |  |           system "git init" | 
					
						
							|  |  |  |           system "git add -A" | 
					
						
							|  |  |  |           puts "This folder is now a git repo. Make your changes and then use:" | 
					
						
							|  |  |  |           puts "  git diff | pbcopy" | 
					
						
							|  |  |  |           puts "to copy the diff to the clipboard." | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-06-11 17:18:05 -07:00
										 |  |  |         ENV['HOMEBREW_DEBUG_INSTALL'] = f.name | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |         interactive_shell | 
					
						
							|  |  |  |         nil | 
					
						
							|  |  |  |       elsif ARGV.include? '--help' | 
					
						
							|  |  |  |         system './configure --help' | 
					
						
							|  |  |  |         exit $? | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         f.prefix.mkpath | 
					
						
							|  |  |  |         beginning=Time.now | 
					
						
							|  |  |  |         f.install | 
					
						
							| 
									
										
										
										
											2009-09-30 17:45:14 +01:00
										 |  |  |         FORMULA_META_FILES.each do |file| | 
					
						
							| 
									
										
										
										
											2010-06-17 16:29:57 -07:00
										 |  |  |           next if File.directory? file | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |           FileUtils.mv "#{file}.txt", file rescue nil | 
					
						
							|  |  |  |           f.prefix.install file rescue nil | 
					
						
							| 
									
										
										
										
											2010-04-03 11:17:30 -07:00
										 |  |  |           (f.prefix+file).chmod 0644 rescue nil | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2009-09-16 19:29:43 +01:00
										 |  |  |         build_time = Time.now-beginning | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   rescue Exception | 
					
						
							|  |  |  |     if f.prefix.directory? | 
					
						
							|  |  |  |       f.prefix.rmtree | 
					
						
							|  |  |  |       f.prefix.parent.rmdir_if_possible | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |     raise | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-16 19:29:43 +01:00
										 |  |  |   if f.caveats | 
					
						
							|  |  |  |     ohai "Caveats", f.caveats | 
					
						
							|  |  |  |     show_summary_heading = true | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   ohai 'Finishing up' if ARGV.verbose? | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   begin | 
					
						
							|  |  |  |     clean f | 
					
						
							|  |  |  |   rescue Exception => e | 
					
						
							|  |  |  |     opoo "The cleaning step did not complete successfully" | 
					
						
							|  |  |  |     puts "Still, the installation was successful, so we will link it into your prefix" | 
					
						
							| 
									
										
										
										
											2009-10-23 16:05:16 +01:00
										 |  |  |     ohai e, e.backtrace if ARGV.debug? | 
					
						
							| 
									
										
										
										
											2009-09-16 19:29:43 +01:00
										 |  |  |     show_summary_heading = true | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   raise "Nothing was installed to #{f.prefix}" unless f.installed? | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  |   if f.keg_only? | 
					
						
							| 
									
										
										
										
											2009-09-25 14:25:09 +02:00
										 |  |  |     ohai 'Caveats', text_for_keg_only_formula(f) | 
					
						
							| 
									
										
										
										
											2009-09-16 19:29:43 +01:00
										 |  |  |     show_summary_heading = true | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  |   else | 
					
						
							| 
									
										
										
										
											2010-05-02 18:12:48 -07:00
										 |  |  |     # warn the user if stuff was installed outside of their PATH | 
					
						
							|  |  |  |     paths = ENV['PATH'].split(':').collect{|p| File.expand_path p} | 
					
						
							|  |  |  |     [f.bin, f.sbin].each do |bin| | 
					
						
							|  |  |  |       if bin.directory? | 
					
						
							|  |  |  |         rootbin = (HOMEBREW_PREFIX+bin.basename).to_s | 
					
						
							|  |  |  |         bin = File.expand_path bin | 
					
						
							|  |  |  |         unless paths.include? rootbin | 
					
						
							|  |  |  |           opoo "#{rootbin} is not in your PATH" | 
					
						
							|  |  |  |           puts "You can amend this by altering your ~/.bashrc file" | 
					
						
							|  |  |  |           show_summary_heading = true | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-31 12:06:52 -07:00
										 |  |  |     # Check for possibly misplaced folders | 
					
						
							|  |  |  |     if (f.prefix+'man').exist? | 
					
						
							|  |  |  |       opoo 'A top-level "man" folder was found.' | 
					
						
							|  |  |  |       puts "Homebrew requires that man pages live under share." | 
					
						
							| 
									
										
										
										
											2010-07-20 20:52:01 -07:00
										 |  |  |       puts 'This can often be fixed by passing "--mandir=#{man}" to configure.' | 
					
						
							| 
									
										
										
										
											2010-05-31 12:06:52 -07:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-02 18:12:48 -07:00
										 |  |  |     # link from Cellar to Prefix | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  |     begin | 
					
						
							|  |  |  |       Keg.new(f.prefix).link | 
					
						
							| 
									
										
										
										
											2009-10-23 16:05:16 +01:00
										 |  |  |     rescue Exception => e | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  |       onoe "The linking step did not complete successfully" | 
					
						
							|  |  |  |       puts "The package built, but is not symlinked into #{HOMEBREW_PREFIX}" | 
					
						
							|  |  |  |       puts "You can try again using `brew link #{f.name}'" | 
					
						
							| 
									
										
										
										
											2010-08-15 17:17:59 -07:00
										 |  |  |       if ARGV.debug? | 
					
						
							|  |  |  |         ohai e, e.backtrace | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         onoe e | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  |       show_summary_heading = true | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-16 19:29:43 +01:00
										 |  |  |   ohai "Summary" if ARGV.verbose? or show_summary_heading | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   print "#{f.prefix}: #{f.prefix.abv}" | 
					
						
							|  |  |  |   print ", built in #{pretty_duration build_time}" if build_time | 
					
						
							|  |  |  |   puts | 
					
						
							|  |  |  | end |