tebako 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +7 -0
  2. data/CMakeLists.txt +694 -0
  3. data/Gemfile +35 -0
  4. data/README.adoc +389 -0
  5. data/Rakefile +33 -0
  6. data/bin/console +15 -0
  7. data/bin/setup +8 -0
  8. data/cmake/copy_dir.cmake +29 -0
  9. data/cmake/def_tty_colours.cmake +19 -0
  10. data/common.env +6 -0
  11. data/exe/tebako +31 -0
  12. data/include/tebako/tebako-fs.h +40 -0
  13. data/include/tebako/tebako-main.h +40 -0
  14. data/lib/cli.rb +28 -0
  15. data/lib/tebako/cli.rb +137 -0
  16. data/lib/tebako/cli_helpers.rb +147 -0
  17. data/lib/tebako/error.rb +39 -0
  18. data/lib/tebako/packager/pass1.rb +155 -0
  19. data/lib/tebako/packager/pass2.rb +374 -0
  20. data/lib/tebako/packager.rb +210 -0
  21. data/lib/tebako/version.rb +30 -0
  22. data/resources/tebako-fs.cpp.in +37 -0
  23. data/resources/tebako-version.h.in +37 -0
  24. data/src/tebako-main.cpp +188 -0
  25. data/tebako.gemspec +63 -0
  26. data/tests/scripts/cross-tests.sh +34 -0
  27. data/tests/scripts/functional-tests.sh +335 -0
  28. data/tests/test-00/test.rb +4 -0
  29. data/tests/test-01/tebako-test-run.rb +5 -0
  30. data/tests/test-09/tebako-test-0.0.1.gem +0 -0
  31. data/tests/test-11/bin/tebako-test-run.rb +10 -0
  32. data/tests/test-11/lib/tebako-test.rb +20 -0
  33. data/tests/test-11/tebako-test.gemspec +15 -0
  34. data/tests/test-12/tebako-test-a.gemspec +15 -0
  35. data/tests/test-12/tebako-test-b.gemspec +15 -0
  36. data/tests/test-13/bin/tebako-test-run.rb +10 -0
  37. data/tests/test-13/lib/tebako-test.rb +20 -0
  38. data/tests/test-13/tebako-test.gemspec +15 -0
  39. data/tests/test-15/Gemfile +8 -0
  40. data/tests/test-15/Rakefile +4 -0
  41. data/tests/test-15/bin/tebako-test-run.rb +10 -0
  42. data/tests/test-15/lib/tebako/bundle/test/version.rb +9 -0
  43. data/tests/test-15/lib/tebako/bundle/test.rb +29 -0
  44. data/tests/test-15/tebako-bundle-test.gemspec +30 -0
  45. data/tests/test-16/Gemfile +8 -0
  46. data/tests/test-16/Rakefile +4 -0
  47. data/tests/test-16/bin/tebako-test-run.rb +10 -0
  48. data/tests/test-16/lib/tebako/bundle/test/version.rb +9 -0
  49. data/tests/test-16/lib/tebako/bundle/test.rb +29 -0
  50. data/tests/test-16/tebako-bundle-test.gemspec +24 -0
  51. data/tests/test-18/Gemfile +5 -0
  52. data/tests/test-18/tebako-test-run.rb +12 -0
  53. data/tests/test-19/Gemfile +6 -0
  54. data/tests/test-19/tebako-test-run.rb +11 -0
  55. data/tests-2/fixtures/gems-bundler/Gemfile +4 -0
  56. data/tests-2/fixtures/gems-bundler/gems-bundler.rb +34 -0
  57. data/tests-2/fixtures/gems-byebug/Gemfile +5 -0
  58. data/tests-2/fixtures/gems-byebug/gems-byebug.rb +31 -0
  59. data/tests-2/fixtures/gems-expressir/Gemfile +7 -0
  60. data/tests-2/fixtures/gems-expressir/gems-expressir.rb +33 -0
  61. data/tests-2/fixtures/gems-libmspack/Gemfile +5 -0
  62. data/tests-2/fixtures/gems-libmspack/gems-libmspack.rb +91 -0
  63. data/tests-2/fixtures/gems-sassc/Gemfile +6 -0
  64. data/tests-2/fixtures/gems-sassc/base_style/all.scss +1 -0
  65. data/tests-2/fixtures/gems-sassc/base_style/reset.scss +100 -0
  66. data/tests-2/fixtures/gems-sassc/gems-sassc.rb +129 -0
  67. data/tests-2/fixtures/gems-seven-zip/Gemfile +7 -0
  68. data/tests-2/fixtures/gems-seven-zip/gems-seven-zip.rb +53 -0
  69. data/tests-2/fixtures/launcher-coreincl/launcher-coreincl.rb +29 -0
  70. data/tests-2/fixtures/launcher-package/launcher-package.rb +29 -0
  71. data/tests-2/fixtures/launcher-pwd/launcher-pwd.rb +28 -0
  72. data/tests-2/fixtures/launcher-stdinredir/input.txt +1 -0
  73. data/tests-2/fixtures/launcher-stdinredir/launcher-stdinredir.rb +31 -0
  74. data/tests-2/fixtures/launcher-stdoutredir/launcher-stdoutredir.rb +28 -0
  75. data/tests-2/fixtures/patches-dir/level-1/level-2/file-1.txt +1 -0
  76. data/tests-2/fixtures/patches-dir/level-1/level-2/file-2.txt +1 -0
  77. data/tests-2/fixtures/patches-dir/level-1/level-2/file-3.txt +1 -0
  78. data/tests-2/fixtures/patches-dir/patches-dir.rb +154 -0
  79. data/tests-2/fixtures/patches-io-and-file/level-1/level-2/file-1.txt +1 -0
  80. data/tests-2/fixtures/patches-io-and-file/level-1/level-2/file-2.txt +2 -0
  81. data/tests-2/fixtures/patches-io-and-file/level-1/level-2/file-3.txt +1 -0
  82. data/tests-2/fixtures/patches-io-and-file/level-1/link-3 +1 -0
  83. data/tests-2/fixtures/patches-io-and-file/patches-io-and-file.rb +87 -0
  84. data/tests-2/fixtures/patches-main/patches-main.rb +6 -0
  85. data/tests-2/tebako-test.rb +312 -0
  86. metadata +170 -0
@@ -0,0 +1,312 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Copyright (c) 2021-2023 [Ribose Inc](https://www.ribose.com).
5
+ # All rights reserved.
6
+ # This file is a part of tebako
7
+ #
8
+ # Redistribution and use in source and binary forms, with or without
9
+ # modification, are permitted provided that the following conditions
10
+ # are met:
11
+ # 1. Redistributions of source code must retain the above copyright
12
+ # notice, this list of conditions and the following disclaimer.
13
+ # 2. Redistributions in binary form must reproduce the above copyright
14
+ # notice, this list of conditions and the following disclaimer in the
15
+ # documentation and/or other materials provided with the distribution.
16
+ #
17
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18
+ # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
21
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
+ # POSSIBILITY OF SUCH DAMAGE.
28
+
29
+ require "English"
30
+ require "tmpdir"
31
+ require "fileutils"
32
+ require "rbconfig"
33
+ require "pathname"
34
+ require "rubygems"
35
+ require "open3"
36
+ require "minitest/autorun"
37
+
38
+ # Tebako test set
39
+ # rubocop:disable Metrics/ClassLength
40
+ class TebakoTest < MiniTest::Test
41
+ # Path to test fixtures.
42
+ FixturePath = File.expand_path(File.join(File.dirname(__FILE__), "fixtures"))
43
+ Prefix = File.expand_path(File.join(File.dirname(__FILE__), ".."))
44
+ Tebako = File.join(Prefix, "exe", "tebako")
45
+
46
+ def initialize(*args)
47
+ super(*args)
48
+ @testnum = 0
49
+ end
50
+
51
+ # Sets up temporary environment variables and yields to the
52
+ # block. When the block exits, the environment variables are set
53
+ # back to their original values.
54
+ def with_env(hash)
55
+ old = {}
56
+ hash.each do |k, v|
57
+ old[k] = ENV.fetch(k, nil)
58
+ ENV[k] = v
59
+ end
60
+ begin
61
+ yield
62
+ ensure
63
+ hash.each { |k, _v| ENV[k] = old[k] }
64
+ end
65
+ end
66
+
67
+ # Sets up an directory with a copy of a fixture and yields to the
68
+ # block, then cleans up everything. A fixture here is a hierachy of
69
+ # files located in test/fixtures.
70
+ def with_fixture(name, target_path = nil, &block)
71
+ path = File.join(FixturePath, name)
72
+ with_tmpdir([], target_path) do |tmpdirname|
73
+ FileUtils.cp_r path, tmpdirname
74
+ FileUtils.cd tmpdirname, &block
75
+ end
76
+ end
77
+
78
+ # Creates temporary dir, copies files to it, cleans everything when the business is finished
79
+ def with_tmpdir(files = [], path = nil)
80
+ tempdirname = path || File.join("/tmp", "tebako-test-#{$PROCESS_ID}-#{rand 2**32}").tr("\\", "/")
81
+ FileUtils.mkdir_p tempdirname
82
+ begin
83
+ FileUtils.cp files, tempdirname
84
+ yield(tempdirname)
85
+ ensure
86
+ FileUtils.rm_rf tempdirname
87
+ end
88
+ end
89
+
90
+ # Create a pristine environment to test built executables. Files are
91
+ # copied and the PATH environment is set to the minimal.
92
+ # yeilds the name for pristine temp dir (as opposed to temp dir used for packaging)
93
+ def pristine_env(*files)
94
+ with_tmpdir files do |tempdirname|
95
+ with_env "PATH" => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:" do
96
+ yield(tempdirname)
97
+ end
98
+ end
99
+ end
100
+
101
+ def ruby_ver
102
+ ENV.fetch("RUBY_VER", "3.0.6")
103
+ end
104
+
105
+ # Run 'tebako press ...'
106
+ def press(tebako, name, package, prefix)
107
+ cmd = "#{tebako} press -R #{ruby_ver} -o #{package} -e #{name}.rb -r #{name} -p '#{prefix}'"
108
+ out, st = Open3.capture2e(cmd)
109
+ if st.exitstatus != 0
110
+ puts "\"cmd\" failed with status #{st.exitstatus}"
111
+ puts out
112
+ end
113
+ assert_equal 0, st.exitstatus
114
+ assert File.exist?(package)
115
+ end
116
+
117
+ # A kind of standart creates names - tmp dir with fixture - press sequence
118
+ def with_fixture_press_and_env(name)
119
+ package = "#{name}-package"
120
+ with_fixture name do
121
+ press(Tebako, name, package, Prefix)
122
+ pristine_env package do |tempdirname|
123
+ yield "#{tempdirname}/#{package}"
124
+ end
125
+ end
126
+ end
127
+
128
+ # Specified gems should be automatically included and usable in packaged app
129
+ def test_216_byebug
130
+ name = "gems-byebug"
131
+ with_fixture_press_and_env name do |package|
132
+ out, st = Open3.capture2(package)
133
+ assert_equal 0, st.exitstatus
134
+ assert_equal out, "Hello! Byebug welcomes you to the magic world of ruby gems.\n"
135
+ end
136
+ end
137
+
138
+ # Specified gems should be automatically included and usable in packaged app
139
+ def test_215_expressir
140
+ name = "gems-expressir"
141
+ with_fixture_press_and_env name do |package|
142
+ out, st = Open3.capture2(package)
143
+ assert_equal 0, st.exitstatus
144
+ assert_match(/Hello! Expressir gem welcomes you to the magic world of ruby gems./, out)
145
+ end
146
+ end
147
+
148
+ # Specified gems should be automatically included and usable in packaged app
149
+ def test_214_sassc
150
+ name = "gems-sassc"
151
+ with_fixture_press_and_env name do |package|
152
+ out, st = Open3.capture2(package)
153
+ assert_equal 0, st.exitstatus
154
+ assert_match(/Hello! SassC gem welcomes you to the magic world of ruby gems./, out)
155
+ end
156
+ end
157
+
158
+ # Specified gems should be automatically included and usable in packaged app
159
+ def test_213_libmspack
160
+ name = "gems-libmspack"
161
+ with_fixture_press_and_env name do |package|
162
+ out, st = Open3.capture2(package)
163
+ assert_equal 0, st.exitstatus
164
+ assert_match(/Hello! libmspack welcomes you to the magic world of ruby gems./, out)
165
+ end
166
+ end
167
+
168
+ # Specified gems should be automatically included and usable in packaged app
169
+ def test_212_seven_zip
170
+ name = "gems-seven-zip"
171
+ with_fixture_press_and_env name do |package|
172
+ out, st = Open3.capture2(package)
173
+ assert_equal 0, st.exitstatus
174
+ assert_match(/Hello! SevenZipRuby welcomes you to the magic world of ruby gems/, out)
175
+ end
176
+ end
177
+
178
+ # Specified gems should be automatically included and usable in packaged app
179
+ def test_211_bundler
180
+ name = "gems-bundler"
181
+ with_fixture_press_and_env name do |package|
182
+ out, st = Open3.capture2(package)
183
+ assert_equal 0, st.exitstatus
184
+ assert_equal out, "Hello! Bundler welcomes you to the magic world of ruby gems.\n"
185
+ end
186
+ end
187
+
188
+ # Test io.c and file.c patching
189
+ def test_122_io_and_file
190
+ name = "patches-io-and-file"
191
+ with_fixture_press_and_env name do |package|
192
+ _, st = Open3.capture2(package)
193
+ assert_equal 0, st.exitstatus
194
+ end
195
+ end
196
+
197
+ # Test dir.c patching
198
+ def test_122_dir
199
+ name = "patches-dir"
200
+ FileUtils.mkdir_p File.join(FixturePath, name, "level-1/level-2/level-3")
201
+ with_fixture_press_and_env name do |package|
202
+ _, st = Open3.capture2(package)
203
+ assert_equal 0, st.exitstatus
204
+ end
205
+ end
206
+
207
+ # Test main.c patching as relates to scrip argument handling
208
+ # Test that scripts can exit with a specific exit status code
209
+ def test_121_main
210
+ name = "patches-main"
211
+ with_fixture_press_and_env name do |package|
212
+ _, st = Open3.capture2("#{package} foo \"bar baz \\\"quote\\\"\"")
213
+ assert_equal 5, st.exitstatus
214
+ end
215
+ end
216
+
217
+ # Test:
218
+ # -- that executable can write a file to the current working directory (io.c, file.c patching)
219
+ # -- short options without whitespaces
220
+ def test_105_launcher_pwd
221
+ name = "launcher-pwd"
222
+ with_fixture_press_and_env name do |package|
223
+ _, st = Open3.capture2(package.to_s)
224
+ assert_equal 0, st.exitstatus
225
+ assert File.exist?("output.txt")
226
+ assert_equal "output", File.read("output.txt")
227
+ end
228
+ end
229
+
230
+ # Test that executable can use ruby standard libraries (i.e. cgi)
231
+ def test_104_launcher_coreincl
232
+ name = "launcher-coreincl"
233
+ with_fixture_press_and_env name do |package|
234
+ _, st = Open3.capture2(package)
235
+ assert_equal 0, st.exitstatus
236
+ assert File.exist?("output.txt")
237
+ assert_equal "3 &lt; 5", File.read("output.txt")
238
+ end
239
+ end
240
+
241
+ # Test that the standard output from a script can be redirected to a file.
242
+ def test_103_launcher_stdoutredir
243
+ name = "launcher-stdoutredir"
244
+ with_fixture_press_and_env name do |package|
245
+ system("#{package} > output.txt")
246
+ assert File.exist?("output.txt")
247
+ o = File.read("output.txt")
248
+ assert ["Hello, World!\n", "Hello, World!\r\n"].include?(o)
249
+ end
250
+ end
251
+
252
+ # Test that the standard input to a script can be redirected from a file.
253
+ def test_102_launcher_stdinredir
254
+ name = "launcher-stdinredir"
255
+ package = "#{name}-package"
256
+ with_fixture name do
257
+ press(Tebako, name, package, Prefix)
258
+ pristine_env package, "#{name}/input.txt" do |tempdirname|
259
+ _, st = Open3.capture2("#{tempdirname}/#{package} < #{tempdirname}/input.txt")
260
+ assert_equal 104, st.exitstatus
261
+ end
262
+ end
263
+ end
264
+
265
+ # Test :
266
+ # -- that we can build and run executables.
267
+ # -- short options with whitespaces
268
+ # -- that we are linking to known set of shared libraries (https://github.com/tamatebako/tebako/issues/42)
269
+
270
+ def expected_libs
271
+ if RbConfig::CONFIG["target_os"] =~ /darwin/
272
+ ["Security.framework", "Foundation.framework", "CoreFoundation.framework", "libSystem",
273
+ "libc++", "launcher-package-package:"]
274
+ # This is the test program itself: 'launcher-package-package:'
275
+ elsif RbConfig::CONFIG["target_os"] =~ /linux-musl/
276
+ ["libc.musl-x86_64.so", "ld-musl-x86_64.so"]
277
+ else # linux-gnu assumed
278
+ ["linux-vdso.so", "libpthread.so", "libdl.so", "libc.so", "ld-linux-", "libm.so",
279
+ "librt.so", "libgcc_s.so"]
280
+ end
281
+ end
282
+
283
+ def actual_libs(package)
284
+ out, st = if RbConfig::CONFIG["host_os"] =~ /darwin/
285
+ Open3.capture2("otool -L #{package}")
286
+ else # linux assumed
287
+ Open3.capture2("ldd #{package}")
288
+ end
289
+ assert_equal 0, st.exitstatus
290
+ out.lines.map(&:strip)
291
+ end
292
+
293
+ def check_libs(package)
294
+ l = actual_libs(package.to_s)
295
+ l.delete_if { |ln| expected_libs.any? { |lib| ln.include?(lib) } }
296
+ assert_equal 0, l.size, "Unexpected references to shared libraries #{l}"
297
+ end
298
+
299
+ def test_101_launcher
300
+ name = "launcher-package"
301
+ package = "#{name}-package"
302
+ with_fixture name do
303
+ press(Tebako, name, package, Prefix)
304
+ pristine_env package do |tempdirname|
305
+ _, st = Open3.capture2("#{tempdirname}/#{package}")
306
+ assert_equal 0, st.exitstatus
307
+ check_libs(package.to_s)
308
+ end
309
+ end
310
+ end
311
+ end
312
+ # rubocop:enable Metrics/ClassLength
metadata ADDED
@@ -0,0 +1,170 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tebako
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ platform: ruby
6
+ authors:
7
+ - Ribose Inc.
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: yaml
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.1
41
+ description: |
42
+ Tebako is an executable packager. It packages a set of files into a single
43
+ executable binary that allows a user to run a selected file from the
44
+ packaged software as if it is a mounted filesystem.
45
+ email:
46
+ - open.source@ribose.com
47
+ executables:
48
+ - tebako
49
+ extensions: []
50
+ extra_rdoc_files: []
51
+ files:
52
+ - CMakeLists.txt
53
+ - Gemfile
54
+ - README.adoc
55
+ - Rakefile
56
+ - bin/console
57
+ - bin/setup
58
+ - cmake/copy_dir.cmake
59
+ - cmake/def_tty_colours.cmake
60
+ - common.env
61
+ - exe/tebako
62
+ - include/tebako/tebako-fs.h
63
+ - include/tebako/tebako-main.h
64
+ - lib/cli.rb
65
+ - lib/tebako/cli.rb
66
+ - lib/tebako/cli_helpers.rb
67
+ - lib/tebako/error.rb
68
+ - lib/tebako/packager.rb
69
+ - lib/tebako/packager/pass1.rb
70
+ - lib/tebako/packager/pass2.rb
71
+ - lib/tebako/version.rb
72
+ - resources/tebako-fs.cpp.in
73
+ - resources/tebako-version.h.in
74
+ - src/tebako-main.cpp
75
+ - tebako.gemspec
76
+ - tests-2/fixtures/gems-bundler/Gemfile
77
+ - tests-2/fixtures/gems-bundler/gems-bundler.rb
78
+ - tests-2/fixtures/gems-byebug/Gemfile
79
+ - tests-2/fixtures/gems-byebug/gems-byebug.rb
80
+ - tests-2/fixtures/gems-expressir/Gemfile
81
+ - tests-2/fixtures/gems-expressir/gems-expressir.rb
82
+ - tests-2/fixtures/gems-libmspack/Gemfile
83
+ - tests-2/fixtures/gems-libmspack/gems-libmspack.rb
84
+ - tests-2/fixtures/gems-sassc/Gemfile
85
+ - tests-2/fixtures/gems-sassc/base_style/all.scss
86
+ - tests-2/fixtures/gems-sassc/base_style/reset.scss
87
+ - tests-2/fixtures/gems-sassc/gems-sassc.rb
88
+ - tests-2/fixtures/gems-seven-zip/Gemfile
89
+ - tests-2/fixtures/gems-seven-zip/gems-seven-zip.rb
90
+ - tests-2/fixtures/launcher-coreincl/launcher-coreincl.rb
91
+ - tests-2/fixtures/launcher-package/launcher-package.rb
92
+ - tests-2/fixtures/launcher-pwd/launcher-pwd.rb
93
+ - tests-2/fixtures/launcher-stdinredir/input.txt
94
+ - tests-2/fixtures/launcher-stdinredir/launcher-stdinredir.rb
95
+ - tests-2/fixtures/launcher-stdoutredir/launcher-stdoutredir.rb
96
+ - tests-2/fixtures/patches-dir/level-1/level-2/file-1.txt
97
+ - tests-2/fixtures/patches-dir/level-1/level-2/file-2.txt
98
+ - tests-2/fixtures/patches-dir/level-1/level-2/file-3.txt
99
+ - tests-2/fixtures/patches-dir/patches-dir.rb
100
+ - tests-2/fixtures/patches-io-and-file/level-1/level-2/file-1.txt
101
+ - tests-2/fixtures/patches-io-and-file/level-1/level-2/file-2.txt
102
+ - tests-2/fixtures/patches-io-and-file/level-1/level-2/file-3.txt
103
+ - tests-2/fixtures/patches-io-and-file/level-1/link-3
104
+ - tests-2/fixtures/patches-io-and-file/patches-io-and-file.rb
105
+ - tests-2/fixtures/patches-main/patches-main.rb
106
+ - tests-2/tebako-test.rb
107
+ - tests/scripts/cross-tests.sh
108
+ - tests/scripts/functional-tests.sh
109
+ - tests/test-00/test.rb
110
+ - tests/test-01/tebako-test-run.rb
111
+ - tests/test-09/tebako-test-0.0.1.gem
112
+ - tests/test-11/bin/tebako-test-run.rb
113
+ - tests/test-11/lib/tebako-test.rb
114
+ - tests/test-11/tebako-test.gemspec
115
+ - tests/test-12/tebako-test-a.gemspec
116
+ - tests/test-12/tebako-test-b.gemspec
117
+ - tests/test-13/bin/tebako-test-run.rb
118
+ - tests/test-13/lib/tebako-test.rb
119
+ - tests/test-13/tebako-test.gemspec
120
+ - tests/test-15/Gemfile
121
+ - tests/test-15/Rakefile
122
+ - tests/test-15/bin/tebako-test-run.rb
123
+ - tests/test-15/lib/tebako/bundle/test.rb
124
+ - tests/test-15/lib/tebako/bundle/test/version.rb
125
+ - tests/test-15/tebako-bundle-test.gemspec
126
+ - tests/test-16/Gemfile
127
+ - tests/test-16/Rakefile
128
+ - tests/test-16/bin/tebako-test-run.rb
129
+ - tests/test-16/lib/tebako/bundle/test.rb
130
+ - tests/test-16/lib/tebako/bundle/test/version.rb
131
+ - tests/test-16/tebako-bundle-test.gemspec
132
+ - tests/test-18/Gemfile
133
+ - tests/test-18/tebako-test-run.rb
134
+ - tests/test-19/Gemfile
135
+ - tests/test-19/tebako-test-run.rb
136
+ homepage: https://github.com/tamatebako/tebako
137
+ licenses:
138
+ - BSD-2-Clause
139
+ metadata:
140
+ homepage_uri: https://github.com/tamatebako/tebako
141
+ source_code_uri: https://github.com/tamatebako/tebako
142
+ post_install_message:
143
+ rdoc_options: []
144
+ require_paths:
145
+ - cmake
146
+ - exe
147
+ - ext
148
+ - include
149
+ - lib
150
+ - resources
151
+ - src
152
+ - tools/ci-scripts
153
+ - tools/cmake-scripts
154
+ - tools/includes
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: 2.7.0
160
+ required_rubygems_version: !ruby/object:Gem::Requirement
161
+ requirements:
162
+ - - ">="
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
165
+ requirements: []
166
+ rubygems_version: 3.4.10
167
+ signing_key:
168
+ specification_version: 4
169
+ summary: Packager for Ruby executables
170
+ test_files: []