#! /usr/bin/env ruby

dirname, basename = File.split File.expand_path(__FILE__)

libidr = 'lib'
bindir = 'bin'
gem_home = 'gem_home'

rails_root = File.expand_path File.join(dirname, '../../../')
bj = File.join rails_root, 'script', 'bj'

gems = %w[ attributes arrayfields main systemu orderedhash bj ]

# in the plugin dir... 
Dir.chdir dirname do
  puts "in #{ dirname }..."

  # install gems locally
  puts "installing #{ gems.join ' ' }..."
  spawn "gem install #{ gems.join ' ' } --install-dir=#{ gem_home } --remote --force --include-dependencies --no-wrappers"
  puts "."

=begin
=end
  # copy libs over to libdir
  glob = File.join gem_home, "gems/*/lib/*"
  entries = Dir.glob glob
  entries.each do |entry|
    next if entry =~ %r/-\d+\.\d+\.\d+\.rb$/
    src, dst = entry, libidr
    puts "#{ src } -->> #{ dst }..."
    FileUtils.cp_r src, dst 
    puts "."
  end

  # copy bins over to bindir 
  glob = File.join gem_home, "gems/*/bin/*"
  entries = Dir.glob glob
  entries.each do |entry|
    next if entry =~ %r/-\d+\.\d+\.\d+\.rb$/
    src, dst = entry, bindir
    puts "#{ src } -->> #{ dst }..."
    FileUtils.cp_r src, dst 
    puts "."
  end

=begin
  # copy gem_home/bj-x.x.x/bin/bj to rails_root/script/bj
  glob = File.join gem_home, "gems/bj-*/bin/*"
  srcs = Dir.glob glob
  srcs.each do |src|
    basename = File.basename src
    dst = File.join rails_root, 'script', basename 
    puts "#{ src } -->> #{ dst }..."
    FileUtils.cp_r src, dst
    File.chmod 0755, dst
    puts "."
  end
=end

  # install bin/bj to script/bj
  src, dst = File.join(bindir, "bj"), File.join(rails_root, "script", "bj") 
  puts "#{ src } -->> #{ dst }..."
  FileUtils.cp src, dst
  File.chmod 0755, dst
  puts "."

  # kill all the local gems
  FileUtils.rm_rf gem_home

  # dump help
  puts("=" * 79)
  ruby = which_ruby
  system "#{ ruby } #{ bj.inspect } '--help'"
end



BEGIN {
  require 'fileutils'
  require 'rbconfig'

  def spawn command
    oe = `#{ command } 2>&1`
    raise "command <#{ command }> failed with <#{ $?.inspect }>" unless $?.exitstatus == 0
    oe
  end

  def which_ruby
    c = ::Config::CONFIG
    ruby = File::join(c['bindir'], c['ruby_install_name']) << c['EXEEXT']
    raise "ruby @ #{ ruby } not executable!?" unless test(?e, ruby)
    ruby
  end
}