2009-09-04 15:28:18 +01:00
|
|
|
#!/usr/bin/ruby
|
|
|
|
require 'global'
|
2009-10-15 09:07:12 +01:00
|
|
|
|
|
|
|
require 'brew.h'
|
|
|
|
require 'brewkit'
|
|
|
|
require 'fileutils'
|
2009-09-04 15:28:18 +01:00
|
|
|
require 'formula'
|
2009-10-15 09:07:12 +01:00
|
|
|
require 'hardware'
|
2009-09-04 15:28:18 +01:00
|
|
|
require 'keg'
|
|
|
|
|
2009-09-16 19:29:43 +01:00
|
|
|
show_summary_heading = false
|
|
|
|
|
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
|
|
|
|
rationale = "This because the formula is already provided by OS X."
|
|
|
|
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:
|
|
|
|
|
|
|
|
brew link #{f.name}
|
2009-09-25 14:25:09 +02:00
|
|
|
EOS
|
2009-09-17 21:10:39 +01:00
|
|
|
end
|
|
|
|
|
2009-09-04 15:28:18 +01:00
|
|
|
|
2009-10-03 16:15:29 +01:00
|
|
|
def ENV_prepend key, value, separator = ' '
|
2009-09-21 20:22:09 +01:00
|
|
|
if ENV[key] and not ENV[key].empty?
|
2009-10-03 16:15:29 +01:00
|
|
|
ENV[key] = value+separator+ENV[key]
|
2009-09-21 20:22:09 +01:00
|
|
|
else
|
|
|
|
ENV[key] = value
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
def install f
|
|
|
|
f.deps.each do |dep|
|
|
|
|
dep = Formula.factory dep
|
|
|
|
if dep.keg_only?
|
2009-10-03 16:15:29 +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}"
|
|
|
|
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|
|
2009-09-04 15:28:18 +01:00
|
|
|
FileUtils.mv "#{file}.txt", file rescue nil
|
|
|
|
f.prefix.install file rescue nil
|
|
|
|
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?
|
|
|
|
|
|
|
|
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"
|
|
|
|
ohai e, e.inspect 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-16 19:28:42 +01: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"
|
2009-09-16 19:29:43 +01:00
|
|
|
show_summary_heading = true
|
2009-09-16 19:28:42 +01:00
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
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
|
|
|
|
begin
|
|
|
|
Keg.new(f.prefix).link
|
|
|
|
rescue Exception
|
|
|
|
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}'"
|
|
|
|
ohai e, e.inspect if ARGV.debug?
|
|
|
|
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
|
|
|
|
|
|
|
|
rescue Exception => e
|
|
|
|
#TODO propogate exception back to brew script
|
|
|
|
onoe e
|
|
|
|
puts e.backtrace
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
# 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 { install(Formula.factory($0)) }
|