exerb 6.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/ChangeLog.ja.rd +305 -0
- data/README.en.txt +12 -0
- data/README.ja.html +143 -0
- data/README.ja.txt +6 -0
- data/README.md +50 -0
- data/Rakefile +205 -0
- data/bin/exerb +185 -0
- data/bin/mkexy +47 -0
- data/doc/LGPL +513 -0
- data/doc/class.ja.html +92 -0
- data/doc/command.ja.html +109 -0
- data/doc/core.ja.html +72 -0
- data/doc/example.ja.html +89 -0
- data/doc/faq.ja.html +59 -0
- data/doc/inside.ja.rd +404 -0
- data/doc/license.ja.html +62 -0
- data/doc/logo.gif +0 -0
- data/doc/misc.ja.html +72 -0
- data/doc/navi.gif +0 -0
- data/doc/recipe.ja.html +317 -0
- data/doc/style.css +187 -0
- data/doc/tutorial.ja.html +182 -0
- data/example/Makefile +54 -0
- data/example/cat_n.rb +14 -0
- data/example/exception.rb +9 -0
- data/example/ext/Win32API.so +0 -0
- data/example/ext/swin.so +0 -0
- data/example/msgbox.rb +14 -0
- data/example/rubytk.rb +22 -0
- data/example/runtime.ico +0 -0
- data/example/runtime.rb +19 -0
- data/example/vr/clipboard.rb +106 -0
- data/example/vr/compat/rubycompat.rb +18 -0
- data/example/vr/compat/vrcomctl.rb +12 -0
- data/example/vr/compat/vrcontrol.rb +50 -0
- data/example/vr/compat/vrmmedia.rb +24 -0
- data/example/vr/contrib/inifile.rb +116 -0
- data/example/vr/contrib/msgboxconst.rb +55 -0
- data/example/vr/contrib/toolbar.rb +371 -0
- data/example/vr/contrib/vrctlcolor.rb +110 -0
- data/example/vr/contrib/vrhotkey.rb +35 -0
- data/example/vr/contrib/vrlistviewex.rb +71 -0
- data/example/vr/contrib/vrstdscrollbar.rb +414 -0
- data/example/vr/contrib/vrwincomponent.rb +54 -0
- data/example/vr/dragdropformat.rb +209 -0
- data/example/vr/rscutil.rb +168 -0
- data/example/vr/sysmod.rb +249 -0
- data/example/vr/vractivex.rb +56 -0
- data/example/vr/vrclipboard.rb +53 -0
- data/example/vr/vrcomctl.rb +1819 -0
- data/example/vr/vrcontrol.rb +1374 -0
- data/example/vr/vrdde.rb +623 -0
- data/example/vr/vrddrop.rb +190 -0
- data/example/vr/vrdialog.rb +406 -0
- data/example/vr/vrhandler.rb +195 -0
- data/example/vr/vrlayout.old.rb +209 -0
- data/example/vr/vrlayout.rb +173 -0
- data/example/vr/vrlayout2.rb +340 -0
- data/example/vr/vrmargin.rb +141 -0
- data/example/vr/vrmgdlayout.rb +381 -0
- data/example/vr/vrmmedia.rb +287 -0
- data/example/vr/vrolednd.rb +192 -0
- data/example/vr/vrowndraw.rb +108 -0
- data/example/vr/vrrichedit.rb +366 -0
- data/example/vr/vrtimer.rb +148 -0
- data/example/vr/vrtooltip.rb +273 -0
- data/example/vr/vrtray.rb +143 -0
- data/example/vr/vrtvitem.rb +118 -0
- data/example/vr/vrtwopane.rb +223 -0
- data/example/vr/vruby.rb +1051 -0
- data/example/vr/winconst.rb +158 -0
- data/example/vruby.rb +38 -0
- data/exerb.gemspec +26 -0
- data/extconf.rb +7 -0
- data/lib/exerb/archive.rb +143 -0
- data/lib/exerb/config.rb +51 -0
- data/lib/exerb/error.rb +15 -0
- data/lib/exerb/executable.rb +68 -0
- data/lib/exerb/file_table.rb +189 -0
- data/lib/exerb/mkexy.rb +81 -0
- data/lib/exerb/name_table.rb +120 -0
- data/lib/exerb/recipe.rb +465 -0
- data/lib/exerb/resource.rb +190 -0
- data/lib/exerb/resource/base.rb +29 -0
- data/lib/exerb/resource/binary.rb +31 -0
- data/lib/exerb/resource/dialog.rb +30 -0
- data/lib/exerb/resource/group_icon.rb +85 -0
- data/lib/exerb/resource/icon.rb +52 -0
- data/lib/exerb/resource/version_info.rb +155 -0
- data/lib/exerb/resource_library.rb +120 -0
- data/lib/exerb/utility.rb +95 -0
- data/lib/exerb/utility2.rb +122 -0
- data/lib/exerb/version.rb +13 -0
- data/lib/exerb/win32/const/resource.rb +51 -0
- data/lib/exerb/win32/icon_file.rb +78 -0
- data/lib/exerb/win32/pe_file.rb +59 -0
- data/lib/exerb/win32/resource_directory.rb +105 -0
- data/lib/exerb/win32/resource_directory_root.rb +67 -0
- data/lib/exerb/win32/resource_entry.rb +98 -0
- data/lib/exerb/win32/struct/base.rb +43 -0
- data/lib/exerb/win32/struct/icon_dir_entry.rb +83 -0
- data/lib/exerb/win32/struct/icon_header.rb +43 -0
- data/lib/exerb/win32/struct/icon_res_entry.rb +48 -0
- data/lib/exerb/win32/struct/image_dos_header.rb +73 -0
- data/lib/exerb/win32/struct/image_file_header.rb +47 -0
- data/lib/exerb/win32/struct/image_nt_headers32.rb +53 -0
- data/lib/exerb/win32/struct/image_optional_header32.rb +107 -0
- data/lib/exerb/win32/struct/image_resource_data_entry.rb +45 -0
- data/lib/exerb/win32/struct/image_resource_directory.rb +47 -0
- data/lib/exerb/win32/struct/image_resource_directory_entry.rb +72 -0
- data/lib/exerb/win32/struct/image_section_header.rb +53 -0
- data/lib/exerb/win32/struct/version_info_block.rb +75 -0
- data/lib/exerb/win32/struct/vs_fixed_file_info.rb +62 -0
- data/src/exerb/cui.c +48 -0
- data/src/exerb/default.rb +1 -0
- data/src/exerb/exerb.c +877 -0
- data/src/exerb/exerb.h +92 -0
- data/src/exerb/gui.c +176 -0
- data/src/exerb/module.c +138 -0
- data/src/exerb/module.h +7 -0
- data/src/exerb/patch.c +27 -0
- data/src/exerb/resource.h +22 -0
- data/src/exerb/resource.rc +121 -0
- data/src/exerb/ruby.ico +0 -0
- data/src/exerb/utility.c +263 -0
- data/src/exerb/utility.h +33 -0
- data/test/alltests.rb +16 -0
- data/test/test-argv.rb +26 -0
- data/test/test-argv/test-argv.rb +9 -0
- data/test/test-argv/test-argv.ret +1 -0
- data/test/test-dollarzero.rb +26 -0
- data/test/test-dollarzero/test-dollarzero.rb +10 -0
- data/test/test-dollarzero/test-dollarzero.ret +2 -0
- data/test/test-dot.rb +26 -0
- data/test/test-dot/dot.dot.dot.rb +9 -0
- data/test/test-dot/dot.dot.rb +9 -0
- data/test/test-dot/test-dot.rb +13 -0
- data/test/test-dot/test-dot.ret +5 -0
- data/test/test-exitcode.rb +28 -0
- data/test/test-exitcode/test-exitcode.rb +9 -0
- data/test/test-kcode.rb +43 -0
- data/test/test-kcode/euc.rb +10 -0
- data/test/test-kcode/euc.ret +2 -0
- data/test/test-kcode/none.rb +10 -0
- data/test/test-kcode/none.ret +2 -0
- data/test/test-kcode/sjis.rb +10 -0
- data/test/test-kcode/sjis.ret +2 -0
- data/test/test-kcode/utf8.rb +10 -0
- data/test/test-kcode/utf8.ret +2 -0
- data/test/test-loadpath.rb +24 -0
- data/test/test-loadpath/test-loadpath.rb +9 -0
- data/test/test-nest.rb +18 -0
- data/test/test-nest/foo.rb +1 -0
- data/test/test-nest/foo/bar.rb +2 -0
- data/test/test-nest/foo/foo.rb +1 -0
- data/test/test-nest/test-nest.rb +1 -0
- data/test/test-nest/test-nest.ret +1 -0
- data/test/test-preload.rb +24 -0
- data/test/test-preload/test-preload.rb +9 -0
- data/test/test-regexp.rb +26 -0
- data/test/test-regexp/test-regexp.rb +23 -0
- data/test/test-regexp/test-regexp.ret +13 -0
- data/test/test-require1.rb +26 -0
- data/test/test-require1/require1.rb +9 -0
- data/test/test-require1/require2.rb +9 -0
- data/test/test-require1/require3.rb +9 -0
- data/test/test-require1/require4.rb +9 -0
- data/test/test-require1/require5.rb +9 -0
- data/test/test-require1/require6.rb +9 -0
- data/test/test-require1/test-require1.rb +41 -0
- data/test/test-require1/test-require1.ret +27 -0
- data/test/test-socket.rb +26 -0
- data/test/test-socket/test-socket.rb +7 -0
- data/test/test-socket/test-socket.ret +1 -0
- data/test/testcase.rb +66 -0
- data/vendor/mkexports.rb +167 -0
- metadata +352 -0
data/README.ja.txt
ADDED
data/README.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Exerb
|
|
2
|
+
|
|
3
|
+
Packaged ruby source files and required other (*.rb *.so *.dll) to a .exe file.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
1. install RubyInstaller's DevKit
|
|
9
|
+
|
|
10
|
+
from `http://rubyinstaller.org/add-ons/devkit` download and install
|
|
11
|
+
cd %DEVKITPATH% # install path, like c:/rbmingw
|
|
12
|
+
ruby dk.rb init
|
|
13
|
+
notepad config.yml # edit config file, set ruby installed path
|
|
14
|
+
ruby install
|
|
15
|
+
ruby -e "require 'devkit'; puts ENV\['RI_DEVKIT']" # test, ensure the path is %DEVKITPATH%
|
|
16
|
+
|
|
17
|
+
2. install gem
|
|
18
|
+
|
|
19
|
+
gem install exerb
|
|
20
|
+
|
|
21
|
+
## Usage
|
|
22
|
+
|
|
23
|
+
1. generate one or more ruby source files do some thing and test it
|
|
24
|
+
|
|
25
|
+
ruby r1.rb arg1 arg2 arg3
|
|
26
|
+
|
|
27
|
+
2. make exy file from ruby source file
|
|
28
|
+
|
|
29
|
+
mkexy -- r1.rb arg1 arg2 arg3 # or
|
|
30
|
+
ruby -r exerb/mkexy r1.rb arg1 arg2 arg3
|
|
31
|
+
|
|
32
|
+
3. check r1.exy file, check every required files.
|
|
33
|
+
can be change `general.core` to `cui/gui`, add `resource` , `path` section
|
|
34
|
+
more demo old_*.exy in example/ and test/ directory
|
|
35
|
+
|
|
36
|
+
4. generate exe file
|
|
37
|
+
|
|
38
|
+
exerb -v r1.exy
|
|
39
|
+
|
|
40
|
+
5. execute EXE file
|
|
41
|
+
|
|
42
|
+
r1.exe arg1 arg2 arg3 # can receive some result as ruby r1.rb arg1 arg2 arg3
|
|
43
|
+
|
|
44
|
+
## Contributing
|
|
45
|
+
|
|
46
|
+
1. Fork it ( https://github.com/[my-github-username]/exerb/fork )
|
|
47
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
|
48
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
|
49
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
|
50
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
begin
|
|
2
|
+
require 'devkit'
|
|
3
|
+
raise LoadError unless ENV['RI_DEVKIT'] # need RubyInstaller's DevKit, not devkit gem.
|
|
4
|
+
rescue LoadError
|
|
5
|
+
msg = "You need to install the devkit to compile exerb-mingw.\n"
|
|
6
|
+
msg << " http://rubyinstaller.org/add-ons/devkit/"
|
|
7
|
+
abort msg
|
|
8
|
+
end
|
|
9
|
+
require 'rbconfig'
|
|
10
|
+
require 'ostruct'
|
|
11
|
+
require 'rake/clean'
|
|
12
|
+
|
|
13
|
+
unless RUBY_VERSION >= "1.9.3"
|
|
14
|
+
fail "You need at least Ruby 1.9.3 to compile exerb-mingw."
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Include vendored scripts
|
|
18
|
+
$LOAD_PATH.unshift File.expand_path("../vendor", __FILE__)
|
|
19
|
+
require "mkexports"
|
|
20
|
+
|
|
21
|
+
EXERB_CFLAGS = "-DRUBY19 -DRUBY19_COMPILED_CODE"
|
|
22
|
+
|
|
23
|
+
C = OpenStruct.new
|
|
24
|
+
c = RbConfig::CONFIG
|
|
25
|
+
c['CFLAGS'] = ' -Wall -std=gnu99 -O3 -g -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Werror=pointer-arith -Werror=write-strings '
|
|
26
|
+
C.arch = c["arch"]
|
|
27
|
+
C.cc = "#{c['CC'] || 'gcc'}"
|
|
28
|
+
C.cflags = "#{c['CFLAGS'] || '-Os'}"
|
|
29
|
+
C.xcflags = "#{c['XCFLAGS'] || '-DRUBY_EXPORT'}"
|
|
30
|
+
C.exerb_cflags = EXERB_CFLAGS
|
|
31
|
+
C.cppflags = c['CPPFLAGS']
|
|
32
|
+
if c['rubyhdrdir']
|
|
33
|
+
C.incflags = "-I#{c['rubyhdrdir']}/#{c['arch']} -I#{c['rubyhdrdir']}" if c['rubyhdrdir']
|
|
34
|
+
else
|
|
35
|
+
C.incflags = "-I#{c['archdir']}"
|
|
36
|
+
end
|
|
37
|
+
C.ldflags = "-L#{c['libdir']}"
|
|
38
|
+
C.xldflags = "#{c['XLDFLAGS'] || '-Wl,--stack=0x02000000,--wrap=rb_require_safe,--wrap=rb_require'}"
|
|
39
|
+
C.rubylib = "#{c['LIBRUBYARG_STATIC']}"
|
|
40
|
+
C.libs = "#{c['LIBS']}"
|
|
41
|
+
C.ver = RUBY_VERSION.gsub('.','')
|
|
42
|
+
|
|
43
|
+
def make_resource(target, source, type)
|
|
44
|
+
file target => source do
|
|
45
|
+
mkdir_p File.dirname(target)
|
|
46
|
+
sh "windres -D#{type} #{source} #{target}"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def compile_c(target, source)
|
|
51
|
+
cmdline = "#{C.cc} #{C.cflags} #{C.xcflags} #{C.cppflags} #{C.incflags} -c -o #{target} #{source}"
|
|
52
|
+
file target => source do
|
|
53
|
+
mkdir_p File.dirname(target)
|
|
54
|
+
sh cmdline
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def link_cpp(target, options)
|
|
59
|
+
sources = options[:sources]
|
|
60
|
+
cc = 'gcc'
|
|
61
|
+
cflags = "#{C.cflags} #{C.xcflags} #{C.exerb_cflags} #{C.cppflags} #{C.incflags}"
|
|
62
|
+
ldflags = "#{C.ldflags} #{C.xldflags}"
|
|
63
|
+
dllflags = options[:isdll] ? "-shared" : ""
|
|
64
|
+
guiflags = options[:gui] ? "-mwindows" : ""
|
|
65
|
+
dldflags = options[:isdll] ? "-Wl,--enable-auto-image-base,--enable-auto-import,--export-all" : ""
|
|
66
|
+
impflags = options[:implib] ? "-Wl,--out-implib=#{options[:implib]}" : ""
|
|
67
|
+
rubylib = (options[:rubylib] || C.rubylib)
|
|
68
|
+
libs = C.libs
|
|
69
|
+
cmdline = "#{cc} #{cflags} #{ldflags} #{dllflags} #{guiflags} #{dldflags} #{impflags} -s -o #{target} #{sources.join(' ')} #{rubylib} #{libs}"
|
|
70
|
+
file target => sources + Array(options[:dependencies]) do
|
|
71
|
+
mkdir_p File.dirname(options[:implib]) if options[:implib]
|
|
72
|
+
mkdir_p File.dirname(target)
|
|
73
|
+
sh cmdline
|
|
74
|
+
sh "strip -R .reloc #{target}" unless options[:isdll]
|
|
75
|
+
end
|
|
76
|
+
file options[:implib] => target if options[:implib]
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
# FIXME: is not mapping all the exports
|
|
80
|
+
def make_def_proxy(target, source, proxy)
|
|
81
|
+
file target => source do
|
|
82
|
+
mkdir_p File.dirname(target)
|
|
83
|
+
File.open(target, "w") do |out|
|
|
84
|
+
File.open(source, "r").each_line do |line|
|
|
85
|
+
case line
|
|
86
|
+
when /\A\s*(LIBRARY|EXPORTS)/
|
|
87
|
+
out.puts line
|
|
88
|
+
when /\A(\s*)(\w+@\w+)=(rb_w32_\w+@.*)\Z/
|
|
89
|
+
out.puts "#{$1}#{$2} = #{proxy}.#{$3}"
|
|
90
|
+
when /\A(\s*)(\w+)=(rb_w32_\w+)\Z/
|
|
91
|
+
out.puts "#{$1}#{$2} = #{proxy}.#{$3}"
|
|
92
|
+
when /\A(\s*)(\w+@\w+)(\s+@.*)\Z/
|
|
93
|
+
out.puts "#{$1}#{$2} = #{proxy}.#{$2}#{$3}"
|
|
94
|
+
when /\A(\s*)(\w+)(\s+@.*)\Z/
|
|
95
|
+
out.puts "#{$1}#{$2} = #{proxy}.#{$2}#{$3}"
|
|
96
|
+
else
|
|
97
|
+
out.puts line
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
def make_def(target, source_lib)
|
|
105
|
+
file target => [source_lib] do
|
|
106
|
+
mkdir_p File.dirname(target)
|
|
107
|
+
|
|
108
|
+
puts "generating #{target}"
|
|
109
|
+
exports = Exports.extract([source_lib])
|
|
110
|
+
Exports.output(target) { |f| f.puts(*exports) }
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
def make_config(target, libruby_name, libruby_so)
|
|
115
|
+
file target do
|
|
116
|
+
puts "generating header #{target}"
|
|
117
|
+
File.open(target, "w") do |f|
|
|
118
|
+
f.write <<-EOH.gsub(/^\s+/, '')
|
|
119
|
+
#ifndef _EXERB_CONFIG_H_
|
|
120
|
+
#define _EXERB_CONFIG_H_
|
|
121
|
+
|
|
122
|
+
#define EXERB_LIBRUBY_NAME "#{libruby_name}"
|
|
123
|
+
#define EXERB_LIBRUBY_SO "#{libruby_so}"
|
|
124
|
+
|
|
125
|
+
#endif /* _EXERB_CONFIG_H_ */
|
|
126
|
+
EOH
|
|
127
|
+
end
|
|
128
|
+
end
|
|
129
|
+
CLEAN.include target
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
# Ruby 1.9.1 doesn't have SyncEnumerator
|
|
133
|
+
# This function is inspired by Python's zip
|
|
134
|
+
def zip(*enums)
|
|
135
|
+
r = block_given? ? nil : []
|
|
136
|
+
len = enums.collect { |x| x.size }.max
|
|
137
|
+
len.times do |i|
|
|
138
|
+
val = enums.collect { |x| x[i] }
|
|
139
|
+
if block_given?
|
|
140
|
+
yield val
|
|
141
|
+
else
|
|
142
|
+
r << val
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
r
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
exerb_dll_base = "exerb53"
|
|
149
|
+
exerb_config_header = "src/exerb/config.h"
|
|
150
|
+
file_resource_rc = "src/exerb/resource.rc"
|
|
151
|
+
file_resource_dll_o = "tmp/resource_dll.o"
|
|
152
|
+
file_resource_cui_o = "tmp/resource_cui.o"
|
|
153
|
+
file_resource_gui_o = "tmp/resource_gui.o"
|
|
154
|
+
file_exerb_def = "tmp/#{exerb_dll_base}.def"
|
|
155
|
+
file_exerb_lib = "tmp/#{exerb_dll_base}.dll.a"
|
|
156
|
+
file_exerb_rt_def = "tmp/#{exerb_dll_base}_rt.def"
|
|
157
|
+
file_exerb_dll = "data/exerb/#{exerb_dll_base}.dll"
|
|
158
|
+
file_ruby_cui = "data/exerb/ruby#{C.ver}c.exc"
|
|
159
|
+
file_ruby_cui_rt = "data/exerb/ruby#{C.ver}crt.exc"
|
|
160
|
+
file_ruby_gui = "data/exerb/ruby#{C.ver}g.exc"
|
|
161
|
+
file_ruby_gui_rt = "data/exerb/ruby#{C.ver}grt.exc"
|
|
162
|
+
|
|
163
|
+
lib_sources = Dir["src/exerb/{exerb,module,utility,patch}.c"]
|
|
164
|
+
dll_sources = [file_resource_dll_o]
|
|
165
|
+
cui_sources = ["src/exerb/cui.c", file_resource_cui_o]
|
|
166
|
+
gui_sources = ["src/exerb/gui.c", file_resource_gui_o]
|
|
167
|
+
|
|
168
|
+
make_resource file_resource_dll_o, file_resource_rc, "RUNTIME"
|
|
169
|
+
|
|
170
|
+
make_config exerb_config_header, c["RUBY_SO_NAME"], c["LIBRUBY_SO"]
|
|
171
|
+
|
|
172
|
+
make_def file_exerb_def, File.join(c["libdir"], c["LIBRUBY_A"])
|
|
173
|
+
make_def_proxy file_exerb_rt_def, file_exerb_def, exerb_dll_base
|
|
174
|
+
|
|
175
|
+
link_cpp file_exerb_dll, :sources => (dll_sources + lib_sources + [file_exerb_def]), :dependencies => exerb_config_header, :isdll => true, :implib => file_exerb_lib
|
|
176
|
+
|
|
177
|
+
make_resource file_resource_cui_o, file_resource_rc, "CUI"
|
|
178
|
+
link_cpp file_ruby_cui, :sources => (cui_sources + lib_sources + [file_exerb_def]), :dependencies => exerb_config_header
|
|
179
|
+
link_cpp file_ruby_cui_rt, :sources => (cui_sources + [file_exerb_lib]), :rubylib => "", :dependencies => exerb_config_header
|
|
180
|
+
|
|
181
|
+
make_resource file_resource_gui_o, file_resource_rc, "GUI"
|
|
182
|
+
link_cpp file_ruby_gui, :sources => (gui_sources + lib_sources + [file_exerb_def]), :gui => true, :dependencies => exerb_config_header
|
|
183
|
+
link_cpp file_ruby_gui_rt, :sources => (gui_sources + [file_exerb_lib]), :rubylib => "", :gui => true, :dependencies => exerb_config_header
|
|
184
|
+
|
|
185
|
+
task :rm_tmp do
|
|
186
|
+
FileUtils.rm_rf('tmp') if File.directory?('tmp')
|
|
187
|
+
end
|
|
188
|
+
|
|
189
|
+
desc "generate cui and gui exa data"
|
|
190
|
+
task :generate => [
|
|
191
|
+
file_ruby_cui,
|
|
192
|
+
file_ruby_cui_rt,
|
|
193
|
+
file_ruby_gui,
|
|
194
|
+
file_ruby_gui_rt,
|
|
195
|
+
:rm_tmp
|
|
196
|
+
]
|
|
197
|
+
|
|
198
|
+
desc "show infomation"
|
|
199
|
+
task :default do
|
|
200
|
+
puts "Please use 'gem' to build and install gem."
|
|
201
|
+
puts " This Rakefile used by generate data."
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
CLEAN.include('tmp')
|
|
205
|
+
CLOBBER.include('data')
|
data/bin/exerb
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
#! G:/Ruby193/bin/ruby.exe
|
|
2
|
+
|
|
3
|
+
#==============================================================================#
|
|
4
|
+
# $Id: exerb,v 1.36 2008/06/13 23:54:45 arton Exp $
|
|
5
|
+
#==============================================================================#
|
|
6
|
+
|
|
7
|
+
require 'getoptlong'
|
|
8
|
+
require 'exerb/version'
|
|
9
|
+
require 'exerb/config'
|
|
10
|
+
require 'exerb/recipe'
|
|
11
|
+
require 'exerb/executable'
|
|
12
|
+
|
|
13
|
+
#==============================================================================#
|
|
14
|
+
|
|
15
|
+
module ExerbCommand
|
|
16
|
+
|
|
17
|
+
OPTIONS = [
|
|
18
|
+
['--corename', '-c', GetoptLong::REQUIRED_ARGUMENT, 'specifies exerb-core by defined name.'],
|
|
19
|
+
['--corefile', '-C', GetoptLong::REQUIRED_ARGUMENT, 'specifies exerb-core by path.'],
|
|
20
|
+
['--outfile', '-o', GetoptLong::REQUIRED_ARGUMENT, 'specifies output file.'],
|
|
21
|
+
['--kcode', '-k', GetoptLong::REQUIRED_ARGUMENT, 'specifies character code-set. (none/euc/sjis/utf8)'],
|
|
22
|
+
['--archive', '-a', GetoptLong::NO_ARGUMENT, 'create an archive only.'],
|
|
23
|
+
['--verbose', '-v', GetoptLong::NO_ARGUMENT, 'enable verbose mode.'],
|
|
24
|
+
# ['--debug', '-g', GetoptLong::NO_ARGUMENT, 'enable debug mode.'],
|
|
25
|
+
['--execute', '-e', GetoptLong::NO_ARGUMENT, 'execute an executable file after creation.'],
|
|
26
|
+
['--config', '-i', GetoptLong::NO_ARGUMENT, 'display config information.'],
|
|
27
|
+
['--version', '-V', GetoptLong::NO_ARGUMENT, 'display version number.'],
|
|
28
|
+
['--help', '-h', GetoptLong::NO_ARGUMENT, 'display this information.'],
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
def self.main(argv)
|
|
32
|
+
options = self.parse_options(argv)
|
|
33
|
+
|
|
34
|
+
self.print_config_and_exit if options[:config]
|
|
35
|
+
self.print_version_and_exit if options[:version]
|
|
36
|
+
self.print_usage_and_exit if options[:help] || argv.size < 1
|
|
37
|
+
|
|
38
|
+
arg_fname = argv.shift
|
|
39
|
+
arg_kcode = options[:kcode]
|
|
40
|
+
arg_core = options[:corefile]
|
|
41
|
+
arg_core ||= Exerb::Utility.find_core_by_name(options[:corename], true) if options[:corename]
|
|
42
|
+
|
|
43
|
+
recipe =
|
|
44
|
+
if /\.rbw?$/i =~ arg_fname
|
|
45
|
+
path1 = File.expand_path('../../lib', __FILE__)
|
|
46
|
+
system(Gem.ruby, "-I#{path1}", "-rexerb/mkexy", arg_fname)
|
|
47
|
+
Exerb::Recipe.load(arg_fname.chomp(File.extname(arg_fname)) + '.exy')
|
|
48
|
+
else
|
|
49
|
+
Exerb::Recipe.load(arg_fname)
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# FIXME: arg priority
|
|
53
|
+
archive = recipe.create_archive(arg_kcode)
|
|
54
|
+
core_file = recipe.core_filepath(arg_core)
|
|
55
|
+
output_file = recipe.output_filepath(options[:outfile])
|
|
56
|
+
archive_file = recipe.archive_filepath(options[:outfile])
|
|
57
|
+
|
|
58
|
+
raise(Exerb::ExerbError, "a core file isn't specified") if core_file.nil?
|
|
59
|
+
raise(Exerb::ExerbError, "no such file -- #{core_file}") unless File.exist?(core_file)
|
|
60
|
+
raise(Exerb::ExerbError, "no such directory -- #{File.dirname(output_file)}") unless File.directory?(File.dirname(output_file))
|
|
61
|
+
|
|
62
|
+
if options[:verbose]
|
|
63
|
+
puts("Recipe File : #{arg_fname}")
|
|
64
|
+
puts("Core File : #{core_file}")
|
|
65
|
+
puts("Archive File : #{archive_file}") if options[:archive]
|
|
66
|
+
puts("Output File : #{output_file}")
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
if options[:archive]
|
|
70
|
+
archive.write_to_file(archive_file)
|
|
71
|
+
else
|
|
72
|
+
executable = Exerb::Executable.read(core_file)
|
|
73
|
+
executable.rsrc.add_archive(archive)
|
|
74
|
+
recipe.update_resource(executable.rsrc)
|
|
75
|
+
executable.write(output_file)
|
|
76
|
+
|
|
77
|
+
exec(File.expand_path(output_file)) if options[:execute]
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
exit(0)
|
|
81
|
+
rescue Exerb::ExerbError => e
|
|
82
|
+
STDERR.puts("exerb: #{e.message}")
|
|
83
|
+
exit(1)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def self.parse_options(argv)
|
|
87
|
+
options = {}
|
|
88
|
+
config = OPTIONS.collect { |ary| ary[0, 3] }
|
|
89
|
+
|
|
90
|
+
parser = GetoptLong.new
|
|
91
|
+
parser.set_options(*config)
|
|
92
|
+
parser.each_option { |name, argument|
|
|
93
|
+
options[name.sub(/^--/, '').intern] = argument
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
options[:archive] = !!options[:archive]
|
|
97
|
+
options[:verbose] = !!options[:verbose]
|
|
98
|
+
# options[:debug] = !!options[:debug]
|
|
99
|
+
options[:execute] = !!options[:execute]
|
|
100
|
+
options[:config] = !!options[:config]
|
|
101
|
+
options[:version] = !!options[:version]
|
|
102
|
+
options[:help] = !!options[:help]
|
|
103
|
+
|
|
104
|
+
return options
|
|
105
|
+
rescue GetoptLong::InvalidOption
|
|
106
|
+
exit(1)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def self.print_config_and_exit
|
|
110
|
+
puts "Exerb #{Exerb::VERSION}"
|
|
111
|
+
|
|
112
|
+
puts
|
|
113
|
+
puts "Search directories of Ruby library:"
|
|
114
|
+
$LOAD_PATH.each { |path| printf(" %s\n", File.expand_path(path)) }
|
|
115
|
+
|
|
116
|
+
puts
|
|
117
|
+
puts "Search directories of Exerb core:"
|
|
118
|
+
Exerb::CORE_PATH.each { |path| printf(" %s\n", File.expand_path(path)) }
|
|
119
|
+
|
|
120
|
+
name_max = Exerb::CORE_NAME.keys.collect { |name| name.size }.max
|
|
121
|
+
|
|
122
|
+
puts
|
|
123
|
+
puts "Defined names of Exerb core:"
|
|
124
|
+
Exerb::CORE_NAME.keys.sort.each { |name|
|
|
125
|
+
filename = Exerb::Utility.find_core_by_name(name)
|
|
126
|
+
message = (filename.nil? ? " (not found in search directories)" : "")
|
|
127
|
+
printf(" %s => %s%s\n", name.ljust(name_max), Exerb::CORE_NAME[name], message)
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
exit(1)
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
def self.print_version_and_exit
|
|
134
|
+
puts "Exerb #{Exerb::VERSION}"
|
|
135
|
+
exit(1)
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def self.print_usage_and_exit
|
|
139
|
+
puts("Exerb #{Exerb::VERSION}")
|
|
140
|
+
|
|
141
|
+
puts
|
|
142
|
+
puts("Usage: exerb [options] {script-file|recipe-file}")
|
|
143
|
+
|
|
144
|
+
puts
|
|
145
|
+
puts("Options:")
|
|
146
|
+
OPTIONS.each { |long, short, arg, comment|
|
|
147
|
+
printf(" %s %-10s %s\n", short, long, comment)
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
exit(1)
|
|
151
|
+
end
|
|
152
|
+
|
|
153
|
+
=begin
|
|
154
|
+
def self.make_filename(filename, extension)
|
|
155
|
+
return filename.sub(/(\.exr$|$)/i, '.' + extension)
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def self.select_core_file(options, recipe)
|
|
159
|
+
core_file = options[:corefile]
|
|
160
|
+
core_file ||= Exerb::Utility.find_core_by_name(options[:corename], true) if options[:corename]
|
|
161
|
+
core_file ||= recipe.corefile
|
|
162
|
+
core_file ||= Exerb::Utility.find_core_by_name('cui')
|
|
163
|
+
core_file ||= Exerb::Utility.find_core_by_name('gui')
|
|
164
|
+
core_file ||= raise(Exerb::ExerbError, "a core file isn't specified in the recipe file and command line options.")
|
|
165
|
+
|
|
166
|
+
return core_file
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
def self.select_out_file(options, recipe, recipe_file)
|
|
170
|
+
out_file = options[:outfile]
|
|
171
|
+
out_file ||= recipe.outfile
|
|
172
|
+
out_file ||= self.make_filename(recipe_file, 'exe')
|
|
173
|
+
|
|
174
|
+
return out_file
|
|
175
|
+
end
|
|
176
|
+
=end
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
#==============================================================================#
|
|
181
|
+
|
|
182
|
+
ExerbCommand.main(ARGV)
|
|
183
|
+
|
|
184
|
+
#==============================================================================#
|
|
185
|
+
#==============================================================================#
|
data/bin/mkexy
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
#! G:/Ruby193/bin/ruby.exe
|
|
2
|
+
|
|
3
|
+
#==============================================================================#
|
|
4
|
+
# $Id: mkexy,v 1.4 2008/06/13 23:54:45 arton Exp $
|
|
5
|
+
#==============================================================================#
|
|
6
|
+
|
|
7
|
+
require 'rubygems'
|
|
8
|
+
require 'optparse'
|
|
9
|
+
|
|
10
|
+
path1 = File.expand_path('../../lib', __FILE__)
|
|
11
|
+
ENV['old_exy'] = nil
|
|
12
|
+
ENV['exy_zipd'] = nil
|
|
13
|
+
|
|
14
|
+
OptionParser.new do |opts|
|
|
15
|
+
opts.banner = "MKEXY from ruby source file generate exy file\n\n" +
|
|
16
|
+
"Usage:\n" +
|
|
17
|
+
" mkexy [mkexy_options] [-- ruby_options] ruby_script ===(same as)\n" +
|
|
18
|
+
" ruby -r exerb/mkexy [ ruby_options] ruby_script\n"
|
|
19
|
+
|
|
20
|
+
opts.separator ""
|
|
21
|
+
opts.separator "mkexy specific options:"
|
|
22
|
+
|
|
23
|
+
opts.on("-o", "--old xxx.exy", "from old EXY file find core/resource/path info") do |exy|
|
|
24
|
+
ENV['old_exy'] = exy
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
opts.on("-c", "--compress", "use zlib deflate ruby source file") do |zipd|
|
|
28
|
+
ENV['exy_zipd'] = 'true'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
opts.on("-h", "--help", "Show this message") do |v|
|
|
32
|
+
puts opts
|
|
33
|
+
exit 0
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
opts.on("-v", "--version", "Show version") do |v|
|
|
37
|
+
require "#{path1}/exerb/version"
|
|
38
|
+
puts "mkexy version: #{Exerb::VERSION}"
|
|
39
|
+
exit 0
|
|
40
|
+
end
|
|
41
|
+
end.parse!
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
exec(Gem.ruby, *(["-I#{path1}", "-rexerb/mkexy"] + ARGV))
|
|
45
|
+
|
|
46
|
+
#==============================================================================#
|
|
47
|
+
#==============================================================================#
|