| #!/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 |