ocra 1.1.4 → 1.1.5.pre1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +19 -0
- data/README.txt +2 -1
- data/Rakefile +2 -2
- data/bin/ocra +85 -4
- data/lib/ocra.rb +1 -1
- data/share/ocra/edicon.exe +0 -0
- data/share/ocra/stub.exe +0 -0
- data/share/ocra/stubw.exe +0 -0
- data/test/test_ocra.rb +9 -0
- metadata +12 -9
data/History.txt
CHANGED
@@ -1,3 +1,22 @@
|
|
1
|
+
=== 1.1.5
|
2
|
+
|
3
|
+
* Ignore console events (Ctrl-C, Ctrl-Break). Ruby process handles
|
4
|
+
them anyway and exist, allowing the stub to clean up temporary
|
5
|
+
files.
|
6
|
+
|
7
|
+
* Temporary memory used for decompression is now freed before the ruby
|
8
|
+
interpreter is launched by the stub.
|
9
|
+
|
10
|
+
* Progress dialog is no longer displayed when removing temporary
|
11
|
+
files.
|
12
|
+
|
13
|
+
* Now includes most files from any require'd Rubygem (Now works with
|
14
|
+
mime-types, oledb and other gems that load additional data files
|
15
|
+
from the Gem installation). Some files are still ignored
|
16
|
+
(e.g. Readme's). Use "--no-gem-filter" to make Ocra unconditionally
|
17
|
+
include all files listed in the Gem specification (Thanks to Jorge
|
18
|
+
L. Cangas for patch & ideas).
|
19
|
+
|
1
20
|
=== 1.1.4
|
2
21
|
|
3
22
|
* The tempdir marker is now pretty-printed as "<tempdir>" in the
|
data/README.txt
CHANGED
data/Rakefile
CHANGED
@@ -29,7 +29,7 @@ standalone_zip = "bin/ocrasa-#{ENV['VERSION']}.zip"
|
|
29
29
|
|
30
30
|
file standalone_zip => 'bin/ocrasa.rb' do
|
31
31
|
chdir 'bin' do
|
32
|
-
|
32
|
+
sh "zip", "ocrasa-#{ENV['VERSION']}.zip", "ocrasa.rb"
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -128,7 +128,7 @@ task :list_all_rubies do
|
|
128
128
|
end
|
129
129
|
|
130
130
|
task :release_docs => :redocs do
|
131
|
-
sh "pscp -r doc/* ocra.rubyforge.org:/var/www/gforge-projects/ocra"
|
131
|
+
sh "pscp -r doc/* larsch@ocra.rubyforge.org:/var/www/gforge-projects/ocra"
|
132
132
|
end
|
133
133
|
|
134
134
|
|
data/bin/ocra
CHANGED
@@ -9,11 +9,25 @@ module Ocra
|
|
9
9
|
OP_CREATE_PROCESS = 3
|
10
10
|
OP_DECOMPRESS_LZMA = 4
|
11
11
|
OP_SETENV = 5
|
12
|
+
OP_POST_CREATE_PROCESS = 6
|
12
13
|
|
13
|
-
VERSION = "1.1.
|
14
|
+
VERSION = "1.1.5.pre1"
|
14
15
|
|
15
16
|
IGNORE_MODULES = /^enumerator.so$/
|
16
17
|
|
18
|
+
IGNORE_GEMFILES = %r{(
|
19
|
+
# Auxiliary files in the root of the gem
|
20
|
+
^(History|Install|Manifest|README|Licen[sc]e).(txt|rdoc)$ |
|
21
|
+
# Installation files in the root of the gem
|
22
|
+
^(Rakefile|setup.rb|extconf.rb)$ |
|
23
|
+
# Documentation/test directories in the root of the gem
|
24
|
+
^(doc|ext|examples|test|tests|benchmarks)\/ |
|
25
|
+
# Directories anywhere
|
26
|
+
(^|\/)(\.autotest|\.svn\.cvs)(\/|$) |
|
27
|
+
# Unlikely extensions
|
28
|
+
\.(rdoc)$/
|
29
|
+
)}xi
|
30
|
+
|
17
31
|
PATH_SEPARATOR = /[\/\\]/
|
18
32
|
|
19
33
|
TEMPDIR_MARKER = "\xFF"
|
@@ -29,6 +43,8 @@ module Ocra
|
|
29
43
|
attr_accessor :quiet
|
30
44
|
attr_accessor :autodll
|
31
45
|
attr_accessor :show_warnings
|
46
|
+
attr_accessor :gem_filter
|
47
|
+
|
32
48
|
attr_reader :lzmapath
|
33
49
|
attr_reader :ediconpath
|
34
50
|
attr_reader :stubimage
|
@@ -71,6 +87,7 @@ module Ocra
|
|
71
87
|
quiet = false
|
72
88
|
autodll = true
|
73
89
|
show_warnings = true
|
90
|
+
gem_filter = true
|
74
91
|
|
75
92
|
usage = <<EOF
|
76
93
|
ocra [options] script.rb
|
@@ -84,6 +101,7 @@ ocra [options] script.rb
|
|
84
101
|
--no-autoload Don't load/include script.rb's autoloads
|
85
102
|
--icon <ico> Replace icon with a custom one
|
86
103
|
--version Display version number
|
104
|
+
--no-gem-filter Don't filter uncommon files from gems (readme's, etc.)
|
87
105
|
EOF
|
88
106
|
|
89
107
|
while arg = argv.shift
|
@@ -110,6 +128,8 @@ EOF
|
|
110
128
|
exit
|
111
129
|
when /\A--no-warnings\z/
|
112
130
|
show_warnings = false
|
131
|
+
when /\A--no-gem-filter\z/
|
132
|
+
gem_filter = false
|
113
133
|
when /\A--help\z/, /\A--/
|
114
134
|
puts usage
|
115
135
|
exit
|
@@ -133,6 +153,7 @@ EOF
|
|
133
153
|
@autodll = autodll
|
134
154
|
@files = files
|
135
155
|
@show_warnings = show_warnings
|
156
|
+
@gem_filter = gem_filter
|
136
157
|
end
|
137
158
|
|
138
159
|
def Ocra.init(argv)
|
@@ -223,6 +244,50 @@ EOF
|
|
223
244
|
instsitelibdir = sitelibdir[exec_prefix.size+1..-1]
|
224
245
|
|
225
246
|
load_path = []
|
247
|
+
|
248
|
+
# Detect loaded gems and add additional gem files to the
|
249
|
+
# executable. Ruby 1.8 provides Gem.loaded_specs to detect gems,
|
250
|
+
# but this is empty with Ruby 1.9. So instead, we look for any
|
251
|
+
# loaded file from a gem path.
|
252
|
+
if defined?(Gem)
|
253
|
+
gems = []
|
254
|
+
features_from_gems = []
|
255
|
+
features.each do |filename|
|
256
|
+
if filename !~ /^[a-z]:/i
|
257
|
+
filename = find_load_path($:, filename)
|
258
|
+
next if filename.nil? # Could be enumerator.so
|
259
|
+
end
|
260
|
+
Gem.path.each do |gempath|
|
261
|
+
geminstallpath = File.join(gempath, "gems")
|
262
|
+
if subpath?(filename, geminstallpath)
|
263
|
+
gemlocalpath = filename[geminstallpath.size+1..-1]
|
264
|
+
fullgemname = gemlocalpath.split('/')[0]
|
265
|
+
gems << [gempath, fullgemname]
|
266
|
+
features_from_gems << filename
|
267
|
+
end
|
268
|
+
end
|
269
|
+
end
|
270
|
+
gems.sort!.uniq!
|
271
|
+
gem_files = []
|
272
|
+
gems.each do |gempath, fullgemname|
|
273
|
+
gemspecpath = File.join(gempath, "specifications", fullgemname + ".gemspec")
|
274
|
+
gemspecs << gemspecpath
|
275
|
+
spec = Gem::Specification.load(gemspecpath)
|
276
|
+
|
277
|
+
# Get list of files
|
278
|
+
files = spec.files
|
279
|
+
# Filter out some unlikely files (Readme, etc.)
|
280
|
+
files = files.select { |filename| filename !~ IGNORE_GEMFILES } if Ocra.gem_filter
|
281
|
+
# Find the full path
|
282
|
+
files = files.map { |file| File.join(gempath, "gems", fullgemname, file) }
|
283
|
+
|
284
|
+
gem_files += files
|
285
|
+
end
|
286
|
+
gem_files.sort!.uniq!
|
287
|
+
features -= features_from_gems
|
288
|
+
else
|
289
|
+
gem_files = []
|
290
|
+
end
|
226
291
|
|
227
292
|
# Find loaded files
|
228
293
|
libs = []
|
@@ -255,6 +320,18 @@ EOF
|
|
255
320
|
end
|
256
321
|
end
|
257
322
|
|
323
|
+
# Add files from Gems
|
324
|
+
gem_files.each do |gemfile|
|
325
|
+
if subpath?(gemfile, exec_prefix)
|
326
|
+
libs << [ gemfile, relative_path(exec_prefix, gemfile) ]
|
327
|
+
elsif defined?(Gem) and gemhome = Gem.path.find { |pth| subpath?(gemfile, pth) }
|
328
|
+
targetpath = File.join("gemhome", relative_path(gemhome, fullpath))
|
329
|
+
libs << [ gemfile, targetpath ]
|
330
|
+
else
|
331
|
+
raise "Don't know where to put #{gemfile}"
|
332
|
+
end
|
333
|
+
end
|
334
|
+
|
258
335
|
# Detect additional DLLs
|
259
336
|
dlls = Ocra.autodll ? LibraryDetector.detect_dlls : []
|
260
337
|
|
@@ -310,8 +387,8 @@ EOF
|
|
310
387
|
Ocra.extra_dlls.each do |dll|
|
311
388
|
sb.createfile(File.join(bindir, dll), File.join("bin", dll).tr('/','\\'))
|
312
389
|
end
|
313
|
-
|
314
|
-
# Add
|
390
|
+
|
391
|
+
# Add gemspec files
|
315
392
|
gemspecs.each do |gemspec|
|
316
393
|
if subpath?(gemspec, exec_prefix)
|
317
394
|
path = gemspec[exec_prefix.size+1..-1]
|
@@ -335,7 +412,7 @@ EOF
|
|
335
412
|
sb.setenv('GEM_PATH', "#{TEMPDIR_MARKER}\\gemhome")
|
336
413
|
|
337
414
|
# Launch the script
|
338
|
-
sb.
|
415
|
+
sb.postcreateprocess(TEMPDIR_MARKER + "\\bin\\" + rubyexe, "#{rubyexe} \"\xff\\src\\" + File.basename(Ocra.files[0]) + "\"")
|
339
416
|
|
340
417
|
puts "=== Compressing" unless Ocra.quiet or not Ocra.lzma_mode
|
341
418
|
end
|
@@ -450,6 +527,10 @@ EOF
|
|
450
527
|
puts "l #{showtempdir image} #{showtempdir cmdline}" unless Ocra.quiet
|
451
528
|
@of << [OP_CREATE_PROCESS, image, cmdline].pack("VZ*Z*")
|
452
529
|
end
|
530
|
+
def postcreateprocess(image, cmdline)
|
531
|
+
puts "p #{showtempdir image} #{showtempdir cmdline}" unless Ocra.quiet
|
532
|
+
@of << [OP_POST_CREATE_PROCESS, image, cmdline].pack("VZ*Z*")
|
533
|
+
end
|
453
534
|
def setenv(name, value)
|
454
535
|
puts "e #{name} #{showtempdir value}" unless Ocra.quiet
|
455
536
|
@of << [OP_SETENV, name, value].pack("VZ*Z*")
|
data/lib/ocra.rb
CHANGED
data/share/ocra/edicon.exe
CHANGED
Binary file
|
data/share/ocra/stub.exe
CHANGED
Binary file
|
data/share/ocra/stubw.exe
CHANGED
Binary file
|
data/test/test_ocra.rb
CHANGED
@@ -120,6 +120,15 @@ class TestOcra < Test::Unit::TestCase
|
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
|
+
# Should be able to build executables with LZMA compression
|
124
|
+
def test_lzma
|
125
|
+
with_fixture 'helloworld' do
|
126
|
+
assert system("ruby", ocra, "helloworld.rb", "--quiet", "--lzma")
|
127
|
+
assert File.exist?("helloworld.exe")
|
128
|
+
assert system("helloworld.exe")
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
123
132
|
# Test that executables can writing a file to the current working
|
124
133
|
# directory.
|
125
134
|
def test_writefile
|
metadata
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ocra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: -769618389
|
5
|
+
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 1
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
|
9
|
+
- 5
|
10
|
+
- pre1
|
11
|
+
version: 1.1.5.pre1
|
11
12
|
platform: ruby
|
12
13
|
authors:
|
13
14
|
- Lars Christensen
|
@@ -15,7 +16,7 @@ autorequire:
|
|
15
16
|
bindir: bin
|
16
17
|
cert_chain: []
|
17
18
|
|
18
|
-
date: 2010-08-
|
19
|
+
date: 2010-08-15 00:00:00 +02:00
|
19
20
|
default_executable:
|
20
21
|
dependencies:
|
21
22
|
- !ruby/object:Gem::Dependency
|
@@ -99,12 +100,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
99
100
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
100
101
|
none: false
|
101
102
|
requirements:
|
102
|
-
- - "
|
103
|
+
- - ">"
|
103
104
|
- !ruby/object:Gem::Version
|
104
|
-
hash:
|
105
|
+
hash: 25
|
105
106
|
segments:
|
106
|
-
-
|
107
|
-
|
107
|
+
- 1
|
108
|
+
- 3
|
109
|
+
- 1
|
110
|
+
version: 1.3.1
|
108
111
|
requirements: []
|
109
112
|
|
110
113
|
rubyforge_project: ocra
|