#!/usr/bin/env ruby
require 'ostruct';

$CONFIG = OpenStruct.new
$CONFIG.root = File.dirname(__FILE__)
$CONFIG.frameworks = "#{$CONFIG.root}/Frameworks"

class Framework
  attr_reader :libs,:id
  def initialize(framework)
    @path = "#{$CONFIG.frameworks}/#{framework}.framework/Versions/Current/#{framework}"
    reload
    puts @libs.inspect
  end
  
  def id=(name)
    system(
      "install_name_tool",
      "-id",
      name,
      @path)
    reload
  end

  def get_install_name(lib)
    return @libs[lib]
  end

  def set_install_name(lib,val)
    puts "lib=#{lib}/#{@libs[lib]}, val=#{val}"
    system(
      "install_name_tool",
      "-change",
      @libs[lib],
      val,
      @path)
    reload
  end

  private
  def reload
    @libs = IO.popen("otool -L '#{@path}'") { |fh|
      fh.readline
      if fh.readline =~ /([^(]*)/
        @id = $1.strip
      else
        raise "Unable to read otool of framework (#{@path})"
      end
      fh.inject({}) { |coll,line|
        if line =~ /(\w+)\.framework/
          name = $1
          if line =~ /([^(]*)/
            coll.update(name => $1.strip)
          else
            raise "Unable to read otool of framework (#{@path})"
          end
        end
        coll
      }
    }.freeze
  end
end

def create_frameworks
  ["WebKit","WebCore","JavaScriptCore"].map { |name|
    Framework.new(name)
  }
end

def localize_install_names
  wk_fr, wc_fr, js_fr = create_frameworks
  wk_id, wc_id, js_id = "gwt/WebKit.framework", "gwt/WebCore.framework", "gwt/JavaScriptCore.framework"

  js_fr.id = js_id

  wc_fr.id = wc_id
  wc_fr.set_install_name "JavaScriptCore", js_id

  wk_fr.id = wk_id
  wk_fr.set_install_name "JavaScriptCore", js_id
  wk_fr.set_install_name "WebCore", wc_id
end

localize_install_names
