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
|
2010-10-30 21:44:54 -07:00
|
|
|
rationale = "Mac OS X already provides this program and installing another version in\nparallel can cause all kinds of trouble."
|
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
|
2010-11-09 13:00:33 +00:00
|
|
|
This formula is keg-only. This means it is not symlinked into #{HOMEBREW_PREFIX}.
|
2010-10-30 21:44:54 -07:00
|
|
|
#{rationale}
|
2009-09-17 21:10:39 +01:00
|
|
|
|
2010-10-30 21:44:54 -07: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-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
|
|
|
|
2009-09-21 20:22:09 +01:00
|
|
|
def install f
|
2009-10-26 18:13:38 +00:00
|
|
|
show_summary_heading = false
|
|
|
|
|
2010-12-15 22:45:18 +01:00
|
|
|
paths = ENV['PATH'].split(':').map{ |p| File.expand_path p }
|
|
|
|
rootbin = (HOMEBREW_PREFIX+'bin').to_s
|
|
|
|
unless paths.include? rootbin
|
|
|
|
ENV.prepend 'PATH', rootbin, ':'
|
|
|
|
end
|
|
|
|
|
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
|
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?
|
2010-11-09 13:00:33 +00:00
|
|
|
rootbin = (HOMEBREW_PREFIX/bin.basename).to_s
|
2010-05-02 18:12:48 -07:00
|
|
|
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-08-21 12:18:17 -07:00
|
|
|
# Check for man pages that aren't in share/man
|
2010-11-09 13:00:33 +00: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
|