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-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
|
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
|