irpack 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -57,10 +57,31 @@ module IRPack
57
57
  }.collect {|asm| asm.location }
58
58
  end
59
59
 
60
+ def ironruby_standard_library_version
61
+ ruby_context = binding.clr_member(:LocalScope).call.ruby_context
62
+ ruby_context.standard_library_version
63
+ end
64
+
65
+ def ironruby_library_path
66
+ ruby_context = binding.clr_member(:LocalScope).call.ruby_context
67
+ binpath = ENV[ruby_context.class.bin_dir_environment_variable] ||
68
+ File.dirname(System::Reflection::Assembly.get_entry_assembly.location)
69
+ File.expand_path(File.join(binpath, '..', 'Lib'))
70
+ end
71
+
72
+ def ironruby_libraries(dstpath='stdlib', srcpath=ironruby_library_path)
73
+ res = {}
74
+ Dir.glob(File.join(srcpath, "{ironruby,ruby/#{ironruby_standard_library_version}}", '**', '*')) do |fn|
75
+ res[fn] = fn.sub(/^#{srcpath}/, dstpath) if File.file?(fn)
76
+ end
77
+ res
78
+ end
79
+
60
80
  def pack(output_file, files, entry_file, opts={})
61
81
  opts = {
62
82
  :target => :exe,
63
83
  :compress => false,
84
+ :complete => false,
64
85
  :embed_references => true,
65
86
  :module_name => path_to_module_name(output_file)
66
87
  }.update(opts)
@@ -71,6 +92,7 @@ module IRPack
71
92
  references = opts[:references] || ironruby_assemblies
72
93
  compress = opts[:compress]
73
94
  pack_files = {}.merge(files)
95
+ pack_files = ironruby_libraries.merge(pack_files) if opts[:complete]
74
96
  if opts[:embed_references] then
75
97
  references.each do |asm|
76
98
  pack_files[asm] = File.basename(asm)
@@ -31,6 +31,7 @@ module IRPack
31
31
  :output_file,
32
32
  :target,
33
33
  :compress,
34
+ :complete,
34
35
  :embed_references,
35
36
  :entry_file,
36
37
  :files) do
@@ -40,6 +41,7 @@ module IRPack
40
41
  args.output_file = nil
41
42
  args.target = :exe
42
43
  args.compress = false
44
+ args.complete = false
43
45
  args.embed_references = true
44
46
  args.entry_file = nil
45
47
  args.files = {}
@@ -49,6 +51,7 @@ module IRPack
49
51
  opt.on('--window', 'Generate window app.') { args.target = :winexe }
50
52
  opt.on('--console', 'Generate console app.[default]') { args.target = :exe }
51
53
  opt.on('--compress', 'Compress package.') { args.compress = true }
54
+ opt.on('--complete', 'Embed all standard libraries.') { args.complete = true }
52
55
  opt.on('--no-embed', 'Do not embed IronRuby assemblies.') {|v| args.embed_references = v }
53
56
  opt.banner = "Usage: #{$0} [options] ENTRYFILE [EMBEDFILES...]"
54
57
  opt.parse!(argv)
@@ -79,6 +82,7 @@ module IRPack
79
82
  args.entry_file,
80
83
  :target => args.target,
81
84
  :compress => args.compress,
85
+ :complete => args.complete,
82
86
  :embed_references => args.embed_references)
83
87
  return 0
84
88
  end
@@ -178,6 +178,8 @@ module IRPack
178
178
  runtime_setup.LanguageSetups.Add(IronRuby.Ruby.CreateRubySetup());
179
179
  runtime_setup.Options["MainFile"] = entry_file;
180
180
  runtime_setup.Options["Arguments"] = args;
181
+ runtime_setup.Options["ApplicationBase"] = entry_path;
182
+ runtime_setup.Options["StandardLibrary"] = Path.Combine(entry_path, "stdlib");
181
183
  runtime_setup.HostType = typeof(IRHost);
182
184
  runtime_setup.HostArguments = new object[] { package };
183
185
  var engine = IronRuby.Ruby.GetEngine(IronRuby.Ruby.CreateRuntime(runtime_setup));
@@ -38,7 +38,7 @@ if not Dir.respond_to?(:mktmpdir) or
38
38
  begin
39
39
  block.call(path)
40
40
  ensure
41
- FileUtils.remove_entry(path)
41
+ FileUtils.remove_entry(path, true)
42
42
  end
43
43
  end
44
44
  end
@@ -39,6 +39,7 @@ class TC_ApplicationArguments < Test::Unit::TestCase
39
39
  argv = ['entry.rb']
40
40
  args = IRPack::Application::Arguments.parse!(argv)
41
41
  assert(!args.compress)
42
+ assert(!args.complete)
42
43
  assert(args.embed_references)
43
44
  assert_equal(:exe, args.target)
44
45
  assert_equal(File.expand_path('entry.exe'), File.expand_path(args.output_file))
@@ -77,6 +78,12 @@ class TC_ApplicationArguments < Test::Unit::TestCase
77
78
  assert(args.compress)
78
79
  end
79
80
 
81
+ def test_parse_complete
82
+ argv = ['--complete', 'entry.rb']
83
+ args = IRPack::Application::Arguments.parse!(argv)
84
+ assert(args.complete)
85
+ end
86
+
80
87
  def test_parse_basedir
81
88
  argv = [
82
89
  '-b', 'foo/bar',
@@ -46,6 +46,27 @@ class TC_IRPack < Test::Unit::TestCase
46
46
  end
47
47
  end
48
48
 
49
+ def test_ironruby_library_path_with_env
50
+ ENV['IRONRUBY_11'] = 'c:/foo/bar/bin'
51
+ assert_equal('c:/foo/bar/Lib', IRPack.ironruby_library_path)
52
+ end
53
+
54
+ def test_ironruby_library_path_without_env
55
+ ENV['IRONRUBY_11'] = nil
56
+ binpath = File.dirname(System::Reflection::Assembly.get_entry_assembly.location)
57
+ assert_equal(File.expand_path(File.join(binpath, '../Lib')), IRPack.ironruby_library_path)
58
+ end
59
+
60
+ def test_ironruby_libraries
61
+ libs = IRPack.ironruby_libraries
62
+ assert(libs.size>0)
63
+ libs.each do |src, dst|
64
+ assert_match(/^stdlib\/((ruby\/1\.9\.1|ironruby)\/.+)/, dst)
65
+ assert_match(/#{$1}$/, src)
66
+ assert(File.file?(src))
67
+ end
68
+ end
69
+
49
70
  def test_pack
50
71
  entry = Tempfile.open(File.basename(__FILE__)) do |f|
51
72
  f.write <<-RB
@@ -71,5 +92,22 @@ class TC_IRPack < Test::Unit::TestCase
71
92
  assert_equal(File.expand_path(outfile), IRPack.pack(outfile, files, 'entry.rb'))
72
93
  assert_equal('Hello World!', `#{outfile}`.chomp)
73
94
  end
95
+
96
+ def test_pack_with_complete
97
+ entry = Tempfile.open(File.basename(__FILE__)) do |f|
98
+ f.write <<-RB
99
+ require 'stringio'
100
+ io = StringIO.new('Hello')
101
+ puts io.read
102
+ RB
103
+ f.path
104
+ end
105
+ files = {
106
+ entry => 'entry.rb',
107
+ }
108
+ outfile = tempfilename('.exe')
109
+ assert_equal(File.expand_path(outfile), IRPack.pack(outfile, files, 'entry.rb', complete: true))
110
+ assert_equal('Hello', `#{outfile}`.chomp)
111
+ end
74
112
  end
75
113
 
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: irpack
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.2.3
5
+ version: 0.2.4
6
6
  platform: ruby
7
7
  authors:
8
8
  - kumaryu
@@ -10,7 +10,8 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-08-04 00:00:00 Z
13
+ date: 2011-10-22 00:00:00 +09:00
14
+ default_executable:
14
15
  dependencies: []
15
16
 
16
17
  description: |
@@ -41,6 +42,7 @@ files:
41
42
  - test/test_missing.rb
42
43
  - test/test_packager.rb
43
44
  - test/utils.rb
45
+ has_rdoc: true
44
46
  homepage: http://github.com/kumaryu/irpack
45
47
  licenses: []
46
48
 
@@ -64,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
64
66
  requirements:
65
67
  - none
66
68
  rubyforge_project:
67
- rubygems_version: 1.8.5
69
+ rubygems_version: 1.6.2
68
70
  signing_key:
69
71
  specification_version: 3
70
72
  summary: Generate a standalone executable file from IronRuby scripts.