mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Patch by Google Inc. [ruby-core:45073]. * configure.in (RUBY_NACL): New M4 func to configure variables for NaCl. (RUBY_NACL_CHECK_PEPPER_TYPES): New M4 func to check the old names of Pepper interface types. (BTESTRUBY): New variable to specify which ruby should be run on "make btest". NaCl can run the built binary by sel_ldr, but it need rbconfig.rb. So this variable is distinguished from $MINIRUBY. * thread_pthread.c: Disabled some features on NaCl. * io.c: ditto. * process.c: ditto. * signal.c: ditto. * file.c: ditto. * missing/flock.c: ditto. * nacl/pepper_main.c: An example implementation of Pepper application that embeds Ruby. * nacl/example.html: An example of web page that uses the Pepper application. * nacl/nacl-config.rb: Detects variants of NaCl SDK. * nacl/GNUmakefile.in: Makefile template for NaCl specific build process. * nacl/package.rb: script for packaging a NaCl-Ruby embedding application. * nacl/reate_nmf.rb: Wrapper script of create_nmf.py * dln.c (dln_load): Added a hack to call on NaCl. * util.c (ruby_getcwd): Path to the current directort is not available on NaCl. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@35672 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			109 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
#!/usr/bin/ruby
 | 
						|
# Copyright:: Copyright 2012 Google Inc.
 | 
						|
# License:: All Rights Reserved.
 | 
						|
# Original Author:: Yugui Sonoda (mailto:yugui@google.com)
 | 
						|
#
 | 
						|
# Generates a runnable package of the pepper API example.
 | 
						|
 | 
						|
require File.join(File.dirname(__FILE__), 'nacl-config')
 | 
						|
require 'json'
 | 
						|
require 'find'
 | 
						|
require 'fileutils'
 | 
						|
 | 
						|
include NaClConfig
 | 
						|
 | 
						|
class Installation
 | 
						|
  include NaClConfig
 | 
						|
 | 
						|
  SRC_DIRS = [ Dir.pwd, HOST_LIB ]
 | 
						|
 | 
						|
  def initialize(destdir)
 | 
						|
    @destdir = destdir
 | 
						|
    @manifest = {
 | 
						|
      "files" => {}
 | 
						|
    }
 | 
						|
    ruby_libs.each do |path|
 | 
						|
      raise "Collision of #{path}" if @manifest['files'].key? path
 | 
						|
      @manifest['files'][path] = {
 | 
						|
        ARCH => {
 | 
						|
          "url" => path
 | 
						|
        }
 | 
						|
      }
 | 
						|
      if path[/\.so$/]
 | 
						|
        alternate_path = path.gsub('/', "_")
 | 
						|
        raise "Collision of #{alternate_path}" if @manifest['files'].key? alternate_path
 | 
						|
        @manifest['files'][alternate_path] = {
 | 
						|
          ARCH => {
 | 
						|
            "url" => path
 | 
						|
          }
 | 
						|
        }
 | 
						|
      end
 | 
						|
    end
 | 
						|
  end
 | 
						|
 | 
						|
  def manifest
 | 
						|
    @manifest.dup
 | 
						|
  end
 | 
						|
 | 
						|
  def install_program(basename)
 | 
						|
    do_install_binary(basename, File.join(@destdir, "bin", ARCH))
 | 
						|
    @manifest["program"] = {
 | 
						|
      ARCH => {
 | 
						|
        "url" => File.join("bin", ARCH, basename)
 | 
						|
      }
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  def install_library(name, basename)
 | 
						|
    do_install_binary(basename, File.join(@destdir, "lib", ARCH))
 | 
						|
    @manifest["files"][name] = {
 | 
						|
      ARCH => {
 | 
						|
        "url" => File.join("lib", ARCH, basename)
 | 
						|
      }
 | 
						|
    }
 | 
						|
  end
 | 
						|
 | 
						|
  private
 | 
						|
  def do_install_binary(basename, dest_dir)
 | 
						|
    full_path = nil
 | 
						|
    catch(:found) {
 | 
						|
      SRC_DIRS.each do |path|
 | 
						|
        full_path = File.join(path, basename)
 | 
						|
        if File.exist? full_path
 | 
						|
          throw :found
 | 
						|
        end
 | 
						|
      end
 | 
						|
      raise Errno::ENOENT, "No such file to install: %s" % basename
 | 
						|
    }
 | 
						|
    FileUtils.mkdir_p dest_dir
 | 
						|
    system("#{INSTALL_PROGRAM} #{full_path} #{dest_dir}")
 | 
						|
  end
 | 
						|
 | 
						|
  def ruby_libs
 | 
						|
    Find.find(RbConfig::CONFIG['rubylibdir']).select{|path| File.file?(path) }.map{|path| path.sub("#{@destdir}/", "") }
 | 
						|
  end
 | 
						|
end
 | 
						|
 | 
						|
def install(destdir)
 | 
						|
  inst = Installation.new(destdir)
 | 
						|
  manifest = JSON.parse(File.read("pepper-ruby.nmf"))
 | 
						|
 | 
						|
  program = File.basename(manifest['program'][ARCH]['url'])
 | 
						|
  inst.install_program(program)
 | 
						|
 | 
						|
  manifest['files'].each do |name, attr|
 | 
						|
    inst.install_library(name, File.basename(attr[ARCH]["url"]))
 | 
						|
  end
 | 
						|
 | 
						|
  File.open(File.join(destdir, "ruby.nmf"), "w") {|f|
 | 
						|
    f.puts JSON.pretty_generate(inst.manifest)
 | 
						|
  }
 | 
						|
end
 | 
						|
 | 
						|
def main
 | 
						|
  install(ARGV[0])
 | 
						|
end
 | 
						|
 | 
						|
if __FILE__ == $0
 | 
						|
  main()
 | 
						|
end
 |