tebako 0.5.0

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.
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: []