ocra 1.1.0 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,11 @@
1
+ === 1.1.1
2
+
3
+ * Fixed duplicate entries in the RUBYLIB environment variable.
4
+
5
+ * Another slight fix for relative load paths.
6
+
7
+ * RUBYOPT is now set to the value it had when OCRA was invoked.
8
+
1
9
  === 1.1.0
2
10
 
3
11
  * Added an icon to the executable. Can be replaced from a .ico file
data/Rakefile CHANGED
@@ -8,13 +8,15 @@ Hoe.new('ocra', Ocra::VERSION) do |p|
8
8
  p.developer('Lars Christensen', 'larsch@belunktum.dk')
9
9
  end
10
10
 
11
- task :stub do
11
+ task :build_stub do
12
12
  sh "mingw32-make -C src"
13
13
  cp 'src/stub.exe', 'share/ocra/stub.exe'
14
14
  cp 'src/stubw.exe', 'share/ocra/stubw.exe'
15
15
  cp 'src/edicon.exe', 'share/ocra/edicon.exe'
16
16
  end
17
17
 
18
+ file 'share/ocra/stub.exe' => :build_stub
19
+
18
20
  task :test => :stub
19
21
 
20
22
  task :standalone => [ 'bin/ocrasa.rb' ]
@@ -61,6 +63,9 @@ end
61
63
  task :clean do
62
64
  rm_rf Dir.glob("bin/*.exe")
63
65
  sh "mingw32-make -C src clean"
66
+ rm_f 'share/ocra/stub.exe'
67
+ rm_f 'share/ocra/stubw.exe'
68
+ rm_f 'share/ocra/edicon.exe'
64
69
  end
65
70
 
66
71
  task :test_standalone => :standalone do
@@ -69,4 +74,43 @@ task :test_standalone => :standalone do
69
74
  ENV['TESTED_OCRA'] = nil
70
75
  end
71
76
 
77
+ def each_ruby_version
78
+ root = "h:/appl"
79
+ Dir.glob(File.join(root, 'ruby-*','bin')).each do |path|
80
+ path.tr!('/','\\')
81
+ pathenv = ENV['PATH']
82
+ ENV['PATH'] = path
83
+ begin
84
+ yield
85
+ ensure
86
+ ENV['PATH'] = pathenv
87
+ end
88
+ end
89
+ end
90
+
91
+ task :setup_all_ruby do
92
+ ENV['RUBYOPT'] = nil
93
+ rubygemszip = "rubygems-1.3.4.zip"
94
+ rubygemsdir = rubygemszip.gsub(/\.zip$/,'')
95
+ sh "unzip rubygems-1.3.4.zip"
96
+ begin
97
+ cd "rubygems-1.3.4" do
98
+ each_ruby_version do
99
+ system("ruby -v")
100
+ system("ruby setup.rb")
101
+ system("gem install win32-api")
102
+ end
103
+ end
104
+ ensure
105
+ rm_rf "rubygems-1.3.4"
106
+ end
107
+ end
108
+
109
+ task :test_all_ruby do
110
+ each_ruby_version do
111
+ system("ruby -v")
112
+ system("ruby test/test_ocra.rb")
113
+ end
114
+ end
115
+
72
116
  # vim: syntax=Ruby
data/bin/ocra.rb CHANGED
@@ -10,7 +10,7 @@ module Ocra
10
10
  OP_DECOMPRESS_LZMA = 4
11
11
  OP_SETENV = 5
12
12
 
13
- VERSION = "1.1.0"
13
+ VERSION = "1.1.1"
14
14
 
15
15
  IGNORE_MODULES = /^enumerator.so$/
16
16
 
@@ -171,7 +171,7 @@ EOF
171
171
 
172
172
  def Ocra.find_load_path(paths, path)
173
173
  if path[1,1] == ":"
174
- rps = paths.map {|p| relative_path(p, path) }
174
+ rps = paths.map {|p| relative_path(File.expand_path(p), path) }
175
175
  rps.zip(paths).sort_by {|x| x[0].size }.first[1]
176
176
  else
177
177
  candidates = paths.select { |p| File.exist?(File.expand_path(path, p)) }
@@ -292,8 +292,8 @@ EOF
292
292
  end
293
293
 
294
294
  # Set environment variable
295
- sb.setenv('RUBYOPT', '')
296
- sb.setenv('RUBYLIB', load_path.join(';'))
295
+ sb.setenv('RUBYOPT', ENV['RUBYOPT'] || '')
296
+ sb.setenv('RUBYLIB', load_path.uniq.join(';'))
297
297
 
298
298
  # Launch the script
299
299
  sb.createprocess("bin\\" + rubyexe, "#{rubyexe} \xff\\src\\" + Ocra.files[0])
@@ -307,7 +307,7 @@ EOF
307
307
  def LibraryDetector.loaded_dlls
308
308
  begin
309
309
  require 'rubygems'
310
- gem 'win32-api', '>=1.4.0'
310
+ gem 'win32-api', '>=1.2.0'
311
311
  require 'win32/api'
312
312
  rescue Exception => e
313
313
  puts "=== ERROR: Failed to load the win32-api gem. Install win32-api or use --no-autodll."
@@ -435,8 +435,10 @@ if File.basename(__FILE__) == File.basename($0)
435
435
  ARGV.clear
436
436
 
437
437
  at_exit do
438
- Ocra.build_exe
439
- exit(0)
438
+ if $!.nil?
439
+ Ocra.build_exe
440
+ exit(0)
441
+ end
440
442
  end
441
443
 
442
444
  puts "=== Loading script to check dependencies" unless Ocra.quiet
data/lib/ocra.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class Ocra
2
- VERSION = '1.1.0'
2
+ VERSION = '1.1.1'
3
3
  end
Binary file
data/share/ocra/stub.exe CHANGED
Binary file
data/share/ocra/stubw.exe CHANGED
Binary file
data/test/test_ocra.rb CHANGED
@@ -1,16 +1,36 @@
1
1
  require "test/unit"
2
- require "ocra"
3
2
  require "tmpdir"
4
3
  require "fileutils"
5
4
  require "rbconfig"
5
+
6
+ begin
7
+ require "rubygems"
8
+ gem 'win32-api', '>=1.2.0'
9
+ require "win32/api"
10
+ $have_win32_api = true
11
+ rescue LoadError => e
12
+ $have_win32_api = false
13
+ end
14
+
6
15
  include FileUtils
7
16
 
8
17
  class TestOcra < Test::Unit::TestCase
9
18
 
19
+ # Default arguments for invoking OCRA when running tests.
10
20
  DefaultArgs = [ '--quiet', '--no-lzma' ]
21
+ DefaultArgs.push '--no-autodll' if not $have_win32_api
11
22
 
23
+ # Name of the tested ocra script.
12
24
  TESTED_OCRA = ENV['TESTED_OCRA'] || 'ocra.rb'
13
25
 
26
+ # Root of OCRA.
27
+ OcraRoot = File.expand_path(File.join(File.dirname(__FILE__), '..'))
28
+
29
+ # Path to test fixtures.
30
+ FixturePath = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures'))
31
+
32
+ attr_reader :ocra
33
+
14
34
  def initialize(*args)
15
35
  super(*args)
16
36
  @testnum = 0
@@ -18,30 +38,24 @@ class TestOcra < Test::Unit::TestCase
18
38
  ENV['RUBYOPT'] = ""
19
39
  end
20
40
 
21
- def ocra
22
- @ocra
23
- end
24
-
25
- OcraRoot = File.expand_path(File.join(File.dirname(__FILE__), '..'))
26
-
27
- FixturePath = File.expand_path(File.join(File.dirname(__FILE__), 'fixtures'))
28
-
29
41
  # Sets up an directory with a copy of a fixture and yields to the
30
42
  # block, then cleans up everything. A fixture here is a hierachy of
31
43
  # files located in test/fixtures.
32
44
  def with_fixture(name)
33
45
  path = File.join(FixturePath, name)
34
- FileUtils.cp_r path, '.'
46
+ cp_r path, '.'
35
47
  begin
36
48
  cd name do
37
49
  yield
38
50
  end
39
51
  ensure
40
- rm_rf 'name'
52
+ rm_rf name
41
53
  end
42
54
  end
43
55
 
44
- # Sets up temporary environment variable and yields to the block.
56
+ # Sets up temporary environment variables and yields to the
57
+ # block. When the block exits, the environment variables are set
58
+ # back to their original values.
45
59
  def with_env(hash)
46
60
  old = {}
47
61
  hash.each do |k,v|
@@ -57,6 +71,8 @@ class TestOcra < Test::Unit::TestCase
57
71
  end
58
72
  end
59
73
 
74
+ # Test setup method. Creates a tempory directory to work in and
75
+ # changes to it.
60
76
  def setup
61
77
  @testnum += 1
62
78
  @tempdirname = ".ocratest-#{$$}-#{@testnum}"
@@ -64,11 +80,13 @@ class TestOcra < Test::Unit::TestCase
64
80
  Dir.chdir @tempdirname
65
81
  end
66
82
 
83
+ # Test cleanup method. Exits the temporary directory and deletes it.
67
84
  def teardown
68
85
  Dir.chdir '..'
69
86
  FileUtils.rm_rf @tempdirname
70
87
  end
71
-
88
+
89
+ # Hello world test. Test that we can build and run executables.
72
90
  def test_helloworld
73
91
  with_fixture 'helloworld' do
74
92
  assert system("ruby", ocra, "helloworld.rb", *DefaultArgs)
@@ -77,6 +95,8 @@ class TestOcra < Test::Unit::TestCase
77
95
  end
78
96
  end
79
97
 
98
+ # Test that executables can writing a file to the current working
99
+ # directory.
80
100
  def test_writefile
81
101
  with_fixture 'writefile' do
82
102
  assert system("ruby", ocra, "writefile.rb", *DefaultArgs)
@@ -87,6 +107,7 @@ class TestOcra < Test::Unit::TestCase
87
107
  end
88
108
  end
89
109
 
110
+ # Test that scripts can exit with a specific exit status code.
90
111
  def test_exitstatus
91
112
  with_fixture 'exitstatus' do
92
113
  assert system("ruby", ocra, "exitstatus.rb", *DefaultArgs)
@@ -95,6 +116,7 @@ class TestOcra < Test::Unit::TestCase
95
116
  end
96
117
  end
97
118
 
119
+ # Test that arguments are passed correctly to scripts.
98
120
  def test_arguments
99
121
  with_fixture 'arguments' do
100
122
  assert system("ruby", ocra, "arguments.rb", *DefaultArgs)
@@ -104,6 +126,8 @@ class TestOcra < Test::Unit::TestCase
104
126
  end
105
127
  end
106
128
 
129
+ # Test that the standard output from a script can be redirected to a
130
+ # file.
107
131
  def test_stdout_redir
108
132
  with_fixture 'stdoutredir' do
109
133
  assert system("ruby", ocra, "stdoutredir.rb", *DefaultArgs)
@@ -114,6 +138,8 @@ class TestOcra < Test::Unit::TestCase
114
138
  end
115
139
  end
116
140
 
141
+ # Test that the standard input to a script can be redirected from a
142
+ # file.
117
143
  def test_stdin_redir
118
144
  with_fixture 'stdinredir' do
119
145
  assert system("ruby", ocra, "stdinredir.rb", *DefaultArgs)
@@ -123,9 +149,19 @@ class TestOcra < Test::Unit::TestCase
123
149
  end
124
150
  end
125
151
 
152
+ # Test that executables can include dll's using the --dll
153
+ # option. Sets PATH=. while running the executable so that it can't
154
+ # find the DLL from the Ruby installation.
126
155
  def test_gdbmdll
156
+ args = DefaultArgs.dup
157
+ if not $have_win32_api
158
+ gdbmdll = Dir.glob(File.join(RbConfig::CONFIG['bindir'], 'gdbm*.dll'))[0]
159
+ return if gdbmdll.nil?
160
+ args.push '--dll', File.basename(gdbmdll)
161
+ end
162
+
127
163
  with_fixture 'gdbmdll' do
128
- assert system("ruby", ocra, "gdbmdll.rb", *DefaultArgs)
164
+ assert system("ruby", ocra, "gdbmdll.rb", *args)
129
165
  with_env 'PATH' => '.' do
130
166
  system("gdbmdll.exe")
131
167
  assert_equal 104, $?.exitstatus
@@ -133,6 +169,9 @@ class TestOcra < Test::Unit::TestCase
133
169
  end
134
170
  end
135
171
 
172
+ # Test that scripts can require a file relative to the location of
173
+ # the script and that such files are correctly added to the
174
+ # executable.
136
175
  def test_relative_require
137
176
  with_fixture 'relativerequire' do
138
177
  assert system("ruby", ocra, "relativerequire.rb", *DefaultArgs)
@@ -158,7 +197,9 @@ class TestOcra < Test::Unit::TestCase
158
197
  # ignored by Ocra (a warning may be logged).
159
198
  def test_autoload_missing
160
199
  with_fixture 'autoloadmissing' do
161
- assert system("ruby", ocra, "autoloadmissing.rb", *DefaultArgs)
200
+ args = DefaultArgs.dup
201
+ args.push '--no-warnings'
202
+ assert system("ruby", ocra, "autoloadmissing.rb", *args)
162
203
  assert File.exist?("autoloadmissing.exe")
163
204
  assert system("autoloadmissing.exe")
164
205
  end
@@ -251,10 +292,12 @@ class TestOcra < Test::Unit::TestCase
251
292
  end
252
293
  end
253
294
 
295
+ # Test that ocra.rb accepts --version and outputs the version number.
254
296
  def test_version
255
297
  assert_match(/^Ocra \d+(\.\d)+$/, `ruby #{ocra} --version`)
256
298
  end
257
299
 
300
+ # Test that ocra.rb accepts --icon.
258
301
  def test_icon
259
302
  with_fixture 'helloworld' do
260
303
  icofile = File.join(OcraRoot, 'src', 'vit-ruby.ico')
@@ -264,6 +307,8 @@ class TestOcra < Test::Unit::TestCase
264
307
  end
265
308
  end
266
309
 
310
+ # Test that additional non-script files can be added to the
311
+ # executable and used by the script.
267
312
  def test_resource
268
313
  with_fixture 'resource' do
269
314
  assert system("ruby", ocra, "resource.rb", "resource.txt", "res/resource.txt", *DefaultArgs)
@@ -271,5 +316,25 @@ class TestOcra < Test::Unit::TestCase
271
316
  assert system("resource.exe")
272
317
  end
273
318
  end
274
- end
275
319
 
320
+ # Test that when exceptions are thrown, no executable will be built.
321
+ def test_exception
322
+ with_fixture 'exception' do
323
+ system("ruby \"#{ocra}\" exception.rb #{DefaultArgs.join(' ')} 2>NUL")
324
+ assert $?.exitstatus != 0
325
+ assert !File.exist?("exception.exe")
326
+ end
327
+ end
328
+
329
+ # Test that the RUBYOPT environment variable is preserved.
330
+ def test_rubyopt
331
+ with_fixture 'environment' do
332
+ with_env "RUBYOPT" => "-rtime" do
333
+ assert system("ruby", ocra, "environment.rb", *DefaultArgs)
334
+ assert system("environment.exe")
335
+ env = Marshal.load(File.open("environment", "rb") { |f| f.read })
336
+ assert_equal "-rtime", env['RUBYOPT']
337
+ end
338
+ end
339
+ end
340
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ocra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lars Christensen
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-05-27 00:00:00 +02:00
12
+ date: 2009-06-01 00:00:00 +02:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 1.10.0
23
+ version: 1.12.2
24
24
  version:
25
25
  description: |-
26
26
  OCRA (One-Click Ruby Application) builds Windows executables from Ruby
@@ -74,7 +74,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
74
74
  requirements: []
75
75
 
76
76
  rubyforge_project: ocra
77
- rubygems_version: 1.3.3
77
+ rubygems_version: 1.3.4
78
78
  signing_key:
79
79
  specification_version: 3
80
80
  summary: OCRA (One-Click Ruby Application) builds Windows executables from Ruby source code