| 
									
										
										
										
											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 | 
					
						
							|  |  |  |   <<-EOS
 | 
					
						
							| 
									
										
										
										
											2011-03-15 22:02:14 -07:00
										 |  |  | This formula is keg-only, so it was not symlinked into #{HOMEBREW_PREFIX}. | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-03-15 22:02:14 -07:00
										 |  |  | #{f.keg_only?} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Generally there are no consequences of this for you. | 
					
						
							|  |  |  | If you build your own software and it requires this formula, you'll need | 
					
						
							|  |  |  | to add its lib & include paths to your build variables: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   LDFLAGS="$LDFLAGS #{f.lib}" | 
					
						
							|  |  |  |   CPPFLAGS="$CPPFLAGS #{f.include}" | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  |   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' | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     require 'compatibility' | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-13 13:50:44 +00:00
										 |  |  | ORIGINAL_PATHS = ENV['PATH'].split(':').map{ |p| File.expand_path p } | 
					
						
							|  |  |  | HOMEBREW_BIN = (HOMEBREW_PREFIX+'bin').to_s | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-21 20:22:09 +01:00
										 |  |  | def install f | 
					
						
							| 
									
										
										
										
											2009-10-26 18:13:38 +00:00
										 |  |  |   show_summary_heading = false | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-13 13:50:44 +00:00
										 |  |  |   # we must do this or tools like pkg-config won't get found by configure scripts etc. | 
					
						
							|  |  |  |   ENV.prepend 'PATH', HOMEBREW_BIN, ':' unless ORIGINAL_PATHS.include? HOMEBREW_BIN | 
					
						
							| 
									
										
										
										
											2010-12-15 22:45:18 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   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-08-20 10:01:49 -07:00
										 |  |  |         interactive_shell f | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |         nil | 
					
						
							|  |  |  |       elsif ARGV.include? '--help' | 
					
						
							|  |  |  |         system './configure --help' | 
					
						
							|  |  |  |         exit $? | 
					
						
							|  |  |  |       else | 
					
						
							|  |  |  |         f.prefix.mkpath | 
					
						
							|  |  |  |         beginning=Time.now | 
					
						
							|  |  |  |         f.install | 
					
						
							| 
									
										
										
										
											2010-08-21 11:45:08 -07:00
										 |  |  |         FORMULA_META_FILES.each do |filename| | 
					
						
							|  |  |  |           next if File.directory? filename | 
					
						
							|  |  |  |           target_file = filename | 
					
						
							|  |  |  |           target_file = "#{filename}.txt" if File.exists? "#{filename}.txt" | 
					
						
							|  |  |  |           # Some software symlinks these files (see help2man.rb) | 
					
						
							|  |  |  |           target_file = Pathname.new(target_file).resolved_path | 
					
						
							|  |  |  |           f.prefix.install target_file => filename 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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-05-10 00:19:14 +01:00
										 |  |  |   keg = Keg.new f.prefix | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   begin | 
					
						
							|  |  |  |     keg.fix_install_names | 
					
						
							|  |  |  |   rescue Exception => e | 
					
						
							|  |  |  |     onoe "Failed to fix install names" | 
					
						
							|  |  |  |     puts "The formula built, but you may encounter issues using it or linking other" | 
					
						
							|  |  |  |     puts "formula against it." | 
					
						
							|  |  |  |     ohai e, e.backtrace if ARGV.debug? | 
					
						
							|  |  |  |     show_summary_heading = true | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   begin | 
					
						
							| 
									
										
										
										
											2010-09-11 20:22:54 +01:00
										 |  |  |     require 'cleaner' | 
					
						
							|  |  |  |     Cleaner.new f | 
					
						
							| 
									
										
										
										
											2009-09-04 15:28:18 +01:00
										 |  |  |   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 | 
					
						
							|  |  |  |     [f.bin, f.sbin].each do |bin| | 
					
						
							|  |  |  |       if bin.directory? | 
					
						
							|  |  |  |         bin = File.expand_path bin | 
					
						
							| 
									
										
										
										
											2011-02-13 13:50:44 +00:00
										 |  |  |         unless ORIGINAL_PATHS.include? HOMEBREW_BIN | 
					
						
							|  |  |  |           opoo "#{HOMEBREW_BIN} is not in your PATH" | 
					
						
							| 
									
										
										
										
											2010-05-02 18:12:48 -07:00
										 |  |  |           puts "You can amend this by altering your ~/.bashrc file" | 
					
						
							|  |  |  |           show_summary_heading = true | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-21 12:18:17 -07:00
										 |  |  |     # Check for man pages that aren't in share/man | 
					
						
							| 
									
										
										
										
											2010-12-31 11:00:15 -08:00
										 |  |  |     if (f.prefix+'man').exist? | 
					
						
							| 
									
										
										
										
											2010-05-31 12:06:52 -07:00
										 |  |  |       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-10-03 20:23:51 -07:00
										 |  |  |     # Check for info pages that aren't in share/info | 
					
						
							|  |  |  |     if (f.prefix+'info').exist? | 
					
						
							|  |  |  |       opoo 'A top-level "info" folder was found.' | 
					
						
							|  |  |  |       puts "Homebrew suggests that info pages live under share." | 
					
						
							|  |  |  |       puts 'This can often be fixed by passing "--infodir=#{info}" to configure.' | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-08-21 12:18:17 -07:00
										 |  |  |     # Check for Jars in lib | 
					
						
							| 
									
										
										
										
											2010-08-21 14:11:55 -07:00
										 |  |  |     if File.exist?(f.lib) | 
					
						
							|  |  |  |       unless f.lib.children.select{|g| g.to_s =~ /\.jar$/}.empty? | 
					
						
							|  |  |  |         opoo 'JARs were installed to "lib".' | 
					
						
							|  |  |  |         puts "Installing JARs to \"lib\" can cause conflicts between packages." | 
					
						
							|  |  |  |         puts "For Java software, it is typically better for the formula to" | 
					
						
							|  |  |  |         puts "install to \"libexec\" and then symlink or wrap binaries into \"bin\"." | 
					
						
							|  |  |  |         puts "See \"activemq\", \"jruby\", etc. for examples." | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2010-08-21 12:18:17 -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 | 
					
						
							| 
									
										
										
										
											2010-05-10 00:19:14 +01:00
										 |  |  |       keg.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" | 
					
						
							| 
									
										
										
										
											2010-05-10 00:19:14 +01:00
										 |  |  |       puts "The formula built, but is not symlinked into #{HOMEBREW_PREFIX}" | 
					
						
							| 
									
										
										
										
											2009-09-17 21:10:39 +01:00
										 |  |  |       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 |