tebako 0.12.12 → 0.12.13

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: cbeaa96ed5adc8b64a5b45221d29cbb3f5b54fda39a1cf6d8c5c5b2783325d1a
4
- data.tar.gz: d9caebc260d253d3331ceb1a8fdc44fa54afcd7e206039a10c41fad015bc0564
3
+ metadata.gz: ca21b853dda6d1726e193f4cda4adb7211e7c9d0d94177c664e5a2de496c9477
4
+ data.tar.gz: 9b62c855391c75aeb28f9fa2756cab09947a4e74ac4634b72c325e7f8b2afb88
5
5
  SHA512:
6
- metadata.gz: 2677f3e56a34f9733010fcc991c20bbd82ba4568f48a00128e0da4e143ff53193d6208d049af068143f91c85d32f06a0ea9d9529ac54505fe18f38f1746a15d5
7
- data.tar.gz: 1acc1c09d10b14f8bcf10f4a121d00dec596e797b733d40ada3e8a376c910b32ab1e8e24834addda583319fc62720db8debaa1ed75b8ebe79b52e331bc8febcf
6
+ metadata.gz: a7fd732e6afbda66288b24a464f89c005d16110d186861e6e1eba1768863594fdbc81287cdae35abdb0b2a56ea34fff38a0a194c9888b9b809e5cfd710081f85
7
+ data.tar.gz: '08d20603581360ecbca566fd31d9a8a6b640afc9dbef2af7c73e53b74fa218d800a696b0def74e72f3d56542b01176a0b89092dbd34452332e913d44275c1ee0'
data/README.adoc CHANGED
@@ -104,7 +104,7 @@ higher.
104
104
  | 2.7.8 | Linux, macOS
105
105
  | 3.0.7 | Linux, macOS
106
106
  | 3.1.6 | Linux, macOS, Windows
107
- | 3.2.{4,5,6} | Linux, macOS, Windows
107
+ | 3.2.{4,5,6,7} | Linux, macOS, Windows
108
108
  | 3.3.{3,4,5,6,7} | Linux, macOS, Windows
109
109
  | 3.4.1 | Linux, macOS, Windows
110
110
 
@@ -781,7 +781,7 @@ the Tebako root folder (see details: <<root-folder-selection>>)
781
781
 
782
782
  `Ruby`::
783
783
  this parameter defines Ruby version that will be packaged (optional, defaults to
784
- `3.2.6`)
784
+ `3.3.7`)
785
785
 
786
786
  `project-root`::
787
787
  a folder at the host source file system where project files are located.
@@ -1092,7 +1092,7 @@ specified in Gemfile.
1092
1092
  | The version specified by `--Ruby` option if it is supported and satisfies Gemfile requirement; error otherwise
1093
1093
  | The minimal supported Ruby version that satisfies Gemfile requirement; error otherwise
1094
1094
  | *Not specified*
1095
- | The version specified by `--Ruby` option if it is supported; error otherwise | Default Tebako Ruby version (3.2.6).
1095
+ | The version specified by `--Ruby` option if it is supported; error otherwise | Default Tebako Ruby version (3.3.7).
1096
1096
 
1097
1097
  |===
1098
1098
 
@@ -68,7 +68,7 @@ module Tebako
68
68
  def deploy
69
69
  BuildHelpers.with_env(deploy_env) do
70
70
  update_rubygems
71
- system("#{gem_command} env") if @verbose
71
+ system("#{@gem_command} env") if @verbose
72
72
  install_gem("tebako-runtime")
73
73
  install_gem("bundler", @bundler_version) if @needs_bundler
74
74
  deploy_solution
@@ -236,7 +236,7 @@ module Tebako
236
236
  def msys_patches
237
237
  pm = msys_base_patches
238
238
 
239
- if @ruby_ver.ruby337?
239
+ if @ruby_ver.ruby3x7?
240
240
  # ....................................................
241
241
  # RUBY_EXTERN shall be extern for static build but is set to __declspec(dllimport) for encodin libarary
242
242
  pm.store("include/ruby/onigmo.h", INCLUDE_RUBY_ONIGMO_H_PATCH)
@@ -35,16 +35,6 @@ require_relative "patch_buildsystem"
35
35
  module Tebako
36
36
  # Packager module
37
37
  module Packager
38
- class << self
39
- def crt_pass2_patch(ostype, deps_lib_dir, ruby_ver)
40
- scmb = ScenarioManagerBase.new(ostype)
41
- if scmb.msys?
42
- Pass2MSysPatch.new(ostype, deps_lib_dir, ruby_ver)
43
- else
44
- Pass2NonMSysPatch.new(ostype, deps_lib_dir, ruby_ver)
45
- end
46
- end
47
- end
48
38
  # Ruby patching definitions (pass2)
49
39
  class Pass2Patch < Patch
50
40
  def initialize(ostype, deps_lib_dir, ruby_ver)
@@ -62,6 +52,12 @@ module Tebako
62
52
  pm
63
53
  end
64
54
 
55
+ protected
56
+
57
+ def io_c_patch
58
+ PatchHelpers.patch_c_file_pre("/* define system APIs */")
59
+ end
60
+
65
61
  private
66
62
 
67
63
  include Tebako::Packager::PatchBuildsystem
@@ -88,17 +84,6 @@ module Tebako
88
84
  patch
89
85
  end
90
86
 
91
- def io_c_msys_patch
92
- patch = @ruby_ver.ruby32? ? IO_C_MSYS_PATCH : IO_C_MSYS_PATCH_PRE_32
93
- patch.merge(IO_C_MSYS_BASE_PATCH)
94
- end
95
-
96
- def io_c_patch
97
- patch = PatchHelpers.patch_c_file_pre("/* define system APIs */")
98
- patch.merge!(io_c_msys_patch) if @scmb.msys?
99
- patch
100
- end
101
-
102
87
  def util_c_patch
103
88
  if @ruby_ver.ruby31?
104
89
  PatchHelpers.patch_c_file_post("#endif /* !HAVE_GNU_QSORT_R */")
@@ -140,69 +125,6 @@ module Tebako
140
125
  end
141
126
  end
142
127
 
143
- # Msys Pass2 patches
144
- class Pass2MSysPatch < Pass2Patch
145
- def patch_map
146
- pm = super
147
- pm.merge!(msys_patches)
148
- pm.store("config.status", get_config_status_patch(@ostype, @deps_lib_dir, @ruby_ver))
149
- pm
150
- end
151
-
152
- private
153
-
154
- include Tebako::Packager::PatchBuildsystem
155
- include Tebako::Packager::PatchLiterals
156
-
157
- # Other MSYS (GNUMakefile) specific patches
158
- # - The same issue with libraries as for Makefile above
159
- # - 'Kill' ruby.exp regeneration on pass2
160
- # since we want to use output from pass1 for implib generation
161
- # [VERY UGLY HACK]
162
- # - Introduce LIBRUBY dependency on static extensions
163
- # This is an addition to COMMON_MK_PATCH specified above
164
- def gnumakefile_in_patch_p2 # rubocop:disable Metrics/MethodLength
165
- objext = @ruby_ver.ruby32? ? "$(OBJEXT)" : "@OBJEXT@"
166
-
167
- {
168
- "$(Q) $(DLLWRAP) \\" => GNUMAKEFILE_IN_DLLTOOL_SUBST,
169
-
170
- "--output-exp=$(RUBY_EXP) \\" => "# tebako patched --output-exp=$(RUBY_EXP) \\",
171
-
172
- "--export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)" =>
173
- "# tebako patched --export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)",
174
-
175
- "@rm -f $(PROGRAM)" => "# tebako patched @rm -f $(PROGRAM)",
176
-
177
- " $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)" =>
178
- "# tebako patched $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)",
179
-
180
- "$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.#{objext}" =>
181
- "$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.#{objext} $(WINMAINOBJ) # tebako patched",
182
-
183
- "RUBYDEF = $(DLL_BASE_NAME).def" => GNUMAKEFILE_IN_WINMAIN_SUBST,
184
-
185
- "$(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@" =>
186
- "$(WINMAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) -o $@ # tebako patched",
187
-
188
- "$(RUBY_EXP): $(LIBRUBY_A)" => "dummy.exp: $(LIBRUBY_A) # tebako patched",
189
-
190
- "$(PROGRAM): $(RUBY_INSTALL_NAME).res.#{objext}" =>
191
- "$(PROGRAM): $(RUBY_INSTALL_NAME).res.#{objext} $(LIBRUBY_A) # tebako patched\n" \
192
- "$(LIBRUBY_A): $(LIBRUBY_A_OBJS) $(INITOBJS) # tebako patched\n"
193
- }
194
- end
195
-
196
- def msys_patches
197
- {
198
- "cygwin/GNUmakefile.in" => gnumakefile_in_patch_p2,
199
- "ruby.c" => RUBY_C_MSYS_PATCHES,
200
- "win32/file.c" => WIN32_FILE_C_MSYS_PATCHES,
201
- "win32/win32.c" => WIN32_WIN32_C_MSYS_PATCHES
202
- }
203
- end
204
- end
205
-
206
128
  # Non-msys Pass2 patches
207
129
  class Pass2NonMSysPatch < Pass2Patch
208
130
  def patch_map
@@ -212,7 +134,6 @@ module Tebako
212
134
  pm
213
135
  end
214
136
 
215
- include Tebako::Packager::PatchBuildsystem
216
137
  include Tebako::Packager::PatchLiterals
217
138
  end
218
139
  end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2021-2025 [Ribose Inc](https://www.ribose.com).
4
+ # All rights reserved.
5
+ # This file is a part of tebako
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions
9
+ # are met:
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # 2. Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in the
14
+ # documentation and/or other materials provided with the distribution.
15
+ #
16
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
20
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ # POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ require_relative "pass2_patch"
29
+ require_relative "pass2msys_patch"
30
+
31
+ # Tebako - an executable packager
32
+ module Tebako
33
+ # Packager module
34
+ module Packager
35
+ class << self
36
+ def crt_pass2_patch(ostype, deps_lib_dir, ruby_ver)
37
+ scmb = ScenarioManagerBase.new(ostype)
38
+ if scmb.msys?
39
+ Pass2MSysPatch.new(ostype, deps_lib_dir, ruby_ver)
40
+ else
41
+ Pass2NonMSysPatch.new(ostype, deps_lib_dir, ruby_ver)
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,186 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2021-2025 [Ribose Inc](https://www.ribose.com).
4
+ # All rights reserved.
5
+ # This file is a part of tebako
6
+ #
7
+ # Redistribution and use in source and binary forms, with or without
8
+ # modification, are permitted provided that the following conditions
9
+ # are met:
10
+ # 1. Redistributions of source code must retain the above copyright
11
+ # notice, this list of conditions and the following disclaimer.
12
+ # 2. Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in the
14
+ # documentation and/or other materials provided with the distribution.
15
+ #
16
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17
+ # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18
+ # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
+ # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
20
+ # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
+ # POSSIBILITY OF SUCH DAMAGE.
27
+
28
+ require_relative "pass2_patch"
29
+ require_relative "patch_helpers"
30
+ require_relative "patch_literals"
31
+
32
+ # Tebako - an executable packager
33
+ module Tebako
34
+ # Packager module
35
+ module Packager
36
+ IO_C_MSYS_BASE_PATCH = {
37
+ "#define open rb_w32_uopen" => "#define open(p, f, m) tebako_open(3, (p), (f), (m))"
38
+ }.freeze
39
+
40
+ IO_C_MSYS_PATCH_PRE_32 = {
41
+ "(rb_w32_io_cancelable_p((fptr)->fd) ? Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil))" =>
42
+ "((is_tebako_file_descriptor((fptr)->fd) || rb_w32_io_cancelable_p((fptr)->fd)) ? \\\n" \
43
+ "Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil))"
44
+ }.freeze
45
+
46
+ IO_C_MSYS_PATCH = {
47
+ "(rb_w32_io_cancelable_p((fptr)->fd) ? Qnil : rb_io_wait(fptr->self, " \
48
+ "RB_INT2NUM(RUBY_IO_READABLE), RUBY_IO_TIMEOUT_DEFAULT))" =>
49
+ "((is_tebako_file_descriptor((fptr)->fd) || rb_w32_io_cancelable_p((fptr)->fd)) ? \\\n" \
50
+ "Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), RUBY_IO_TIMEOUT_DEFAULT))"
51
+ }.freeze
52
+
53
+ RUBY_C_MSYS_PATH_SUBST = <<~SUBST
54
+ /* -- Start of tebako patch -- */
55
+ VALUE path = within_tebako_memfs(paths) ?
56
+ rb_str_new_cstr(paths) :
57
+ RUBY_RELATIVE(paths, len);
58
+ /* -- End of tebako patch -- */
59
+ SUBST
60
+
61
+ RUBY_C_MSYS_PATCHES = {
62
+ "#ifndef MAXPATHLEN" => "#{PatchLiterals::C_FILE_SUBST_LESS}\n#ifndef MAXPATHLEN",
63
+ "VALUE path = RUBY_RELATIVE(paths, len);" => RUBY_C_MSYS_PATH_SUBST
64
+ }.freeze
65
+
66
+ WIN32_FILE_C_MSYS_SUBST = <<~SUBST
67
+ /* -- Start of tebako patch -- */
68
+ if (tebako_file_load_ok(path)) return ret;
69
+ /* -- End of tebako patch -- */
70
+ wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);
71
+ SUBST
72
+
73
+ WIN32_FILE_C_MSYS_PATCHES = {
74
+ "#ifndef INVALID_FILE_ATTRIBUTES" => "#{PatchLiterals::C_FILE_SUBST_LESS}\n#ifndef INVALID_FILE_ATTRIBUTES",
75
+ "wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);" => WIN32_FILE_C_MSYS_SUBST
76
+ }.freeze
77
+
78
+ WIN32_WIN32_C_MSYS_SUBST = <<~SUBST
79
+ /* -- Start of tebako patch -- */
80
+ if (is_tebako_cwd()) {
81
+ char* tebako_cwd = tebako_getcwd(NULL,0);
82
+ if (tebako_cwd == NULL) {
83
+ errno = ENOMEM;
84
+ return NULL;
85
+ }
86
+ len = strlen(tebako_cwd) + 1;
87
+
88
+ if (buffer) {
89
+ if (size < len) {
90
+ free(tebako_cwd);
91
+ errno = ERANGE;
92
+ return NULL;
93
+ }
94
+ }
95
+ else {
96
+ buffer = (*alloc)(len, arg);
97
+ if (!buffer) {
98
+ free(tebako_cwd);
99
+ errno = ENOMEM;
100
+ return NULL;
101
+ }
102
+ }
103
+ translate_char(tebako_cwd, (char)0x5c, '/', CP_UTF8);
104
+ strcpy(buffer, tebako_cwd);
105
+ free(tebako_cwd);
106
+ return buffer;
107
+ }
108
+ /* -- End of tebako patch -- */
109
+
110
+ len = GetCurrentDirectoryW(0, NULL);
111
+ SUBST
112
+
113
+ WIN32_WIN32_C_MSYS_PATCHES = {
114
+ "#if defined _MSC_VER && _MSC_VER <= 1200" =>
115
+ "#{PatchLiterals::C_FILE_SUBST_LESS}\n#if defined _MSC_VER && _MSC_VER <= 1200",
116
+ "len = GetCurrentDirectoryW(0, NULL);" => WIN32_WIN32_C_MSYS_SUBST
117
+ }.freeze
118
+
119
+ # Msys Pass2 patches
120
+ class Pass2MSysPatch < Pass2Patch
121
+ def patch_map
122
+ pm = super
123
+ pm.merge!(msys_patches)
124
+ pm.store("config.status", get_config_status_patch(@ostype, @deps_lib_dir, @ruby_ver))
125
+ pm
126
+ end
127
+
128
+ private
129
+
130
+ # Other MSYS (GNUMakefile) specific patches
131
+ # - The same issue with libraries as for Makefile above
132
+ # - 'Kill' ruby.exp regeneration on pass2
133
+ # since we want to use output from pass1 for implib generation
134
+ # [VERY UGLY HACK]
135
+ # - Introduce LIBRUBY dependency on static extensions
136
+ # This is an addition to COMMON_MK_PATCH specified above
137
+ def gnumakefile_in_patch_p2 # rubocop:disable Metrics/MethodLength
138
+ objext = @ruby_ver.ruby32? ? "$(OBJEXT)" : "@OBJEXT@"
139
+
140
+ {
141
+ "$(Q) $(DLLWRAP) \\" => GNUMAKEFILE_IN_DLLTOOL_SUBST,
142
+
143
+ "--output-exp=$(RUBY_EXP) \\" => "# tebako patched --output-exp=$(RUBY_EXP) \\",
144
+
145
+ "--export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)" =>
146
+ "# tebako patched --export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)",
147
+
148
+ "@rm -f $(PROGRAM)" => "# tebako patched @rm -f $(PROGRAM)",
149
+
150
+ " $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)" =>
151
+ "# tebako patched $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)",
152
+
153
+ "$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.#{objext}" =>
154
+ "$(WPROGRAM): $(RUBYW_INSTALL_NAME).res.#{objext} $(WINMAINOBJ) # tebako patched",
155
+
156
+ "RUBYDEF = $(DLL_BASE_NAME).def" => GNUMAKEFILE_IN_WINMAIN_SUBST,
157
+
158
+ "$(MAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@" =>
159
+ "$(WINMAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) -o $@ # tebako patched",
160
+
161
+ "$(RUBY_EXP): $(LIBRUBY_A)" => "dummy.exp: $(LIBRUBY_A) # tebako patched",
162
+
163
+ "$(PROGRAM): $(RUBY_INSTALL_NAME).res.#{objext}" =>
164
+ "$(PROGRAM): $(RUBY_INSTALL_NAME).res.#{objext} $(LIBRUBY_A) # tebako patched\n" \
165
+ "$(LIBRUBY_A): $(LIBRUBY_A_OBJS) $(INITOBJS) # tebako patched\n"
166
+ }
167
+ end
168
+
169
+ def io_c_patch
170
+ patch = super
171
+ patch.merge!(@ruby_ver.ruby32? ? IO_C_MSYS_PATCH : IO_C_MSYS_PATCH_PRE_32)
172
+ patch.merge!(IO_C_MSYS_BASE_PATCH)
173
+ patch
174
+ end
175
+
176
+ def msys_patches
177
+ {
178
+ "cygwin/GNUmakefile.in" => gnumakefile_in_patch_p2,
179
+ "ruby.c" => RUBY_C_MSYS_PATCHES,
180
+ "win32/file.c" => WIN32_FILE_C_MSYS_PATCHES,
181
+ "win32/win32.c" => WIN32_WIN32_C_MSYS_PATCHES
182
+ }
183
+ end
184
+ end
185
+ end
186
+ end
@@ -220,23 +220,6 @@ module Tebako
220
220
  flags = fcntl(fd, F_GETFD); /* should not fail except EBADF. */
221
221
  SUBST
222
222
 
223
- IO_C_MSYS_BASE_PATCH = {
224
- "#define open rb_w32_uopen" => "#define open(p, f, m) tebako_open(3, (p), (f), (m))"
225
- }.freeze
226
-
227
- IO_C_MSYS_PATCH_PRE_32 = {
228
- "(rb_w32_io_cancelable_p((fptr)->fd) ? Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil))" =>
229
- "((is_tebako_file_descriptor((fptr)->fd) || rb_w32_io_cancelable_p((fptr)->fd)) ? \\\n" \
230
- "Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil))"
231
- }.freeze
232
-
233
- IO_C_MSYS_PATCH = {
234
- "(rb_w32_io_cancelable_p((fptr)->fd) ? Qnil : rb_io_wait(fptr->self, " \
235
- "RB_INT2NUM(RUBY_IO_READABLE), RUBY_IO_TIMEOUT_DEFAULT))" =>
236
- "((is_tebako_file_descriptor((fptr)->fd) || rb_w32_io_cancelable_p((fptr)->fd)) ? \\\n" \
237
- "Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), RUBY_IO_TIMEOUT_DEFAULT))"
238
- }.freeze
239
-
240
223
  FILE_C_MSYS_SUBST = <<~SUBST
241
224
  /* -- Start of tebako patch -- */
242
225
  if (is_tebako_file_descriptor((fptr)->fd)) return ENOTSUP;
@@ -248,71 +231,6 @@ module Tebako
248
231
  "while ((int)rb_thread_io_blocking_region(rb_thread_flock, op, fptr->fd) < 0) {" => FILE_C_MSYS_SUBST
249
232
  }.freeze
250
233
 
251
- RUBY_C_MSYS_PATH_SUBST = <<~SUBST
252
- /* -- Start of tebako patch -- */
253
- VALUE path = within_tebako_memfs(paths) ?
254
- rb_str_new_cstr(paths) :
255
- RUBY_RELATIVE(paths, len);
256
- /* -- End of tebako patch -- */
257
- SUBST
258
-
259
- RUBY_C_MSYS_PATCHES = {
260
- "#ifndef MAXPATHLEN" => "#{C_FILE_SUBST_LESS}\n#ifndef MAXPATHLEN",
261
- "VALUE path = RUBY_RELATIVE(paths, len);" => RUBY_C_MSYS_PATH_SUBST
262
- }.freeze
263
-
264
- WIN32_FILE_C_MSYS_SUBST = <<~SUBST
265
- /* -- Start of tebako patch -- */
266
- if (tebako_file_load_ok(path)) return ret;
267
- /* -- End of tebako patch -- */
268
- wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);
269
- SUBST
270
-
271
- WIN32_FILE_C_MSYS_PATCHES = {
272
- "#ifndef INVALID_FILE_ATTRIBUTES" => "#{C_FILE_SUBST_LESS}\n#ifndef INVALID_FILE_ATTRIBUTES",
273
- "wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);" => WIN32_FILE_C_MSYS_SUBST
274
- }.freeze
275
-
276
- WIN32_WIN32_C_MSYS_SUBST = <<~SUBST
277
- /* -- Start of tebako patch -- */
278
- if (is_tebako_cwd()) {
279
- char* tebako_cwd = tebako_getcwd(NULL,0);
280
- if (tebako_cwd == NULL) {
281
- errno = ENOMEM;
282
- return NULL;
283
- }
284
- len = strlen(tebako_cwd) + 1;
285
-
286
- if (buffer) {
287
- if (size < len) {
288
- free(tebako_cwd);
289
- errno = ERANGE;
290
- return NULL;
291
- }
292
- }
293
- else {
294
- buffer = (*alloc)(len, arg);
295
- if (!buffer) {
296
- free(tebako_cwd);
297
- errno = ENOMEM;
298
- return NULL;
299
- }
300
- }
301
- translate_char(tebako_cwd, (char)0x5c, '/', CP_UTF8);
302
- strcpy(buffer, tebako_cwd);
303
- free(tebako_cwd);
304
- return buffer;
305
- }
306
- /* -- End of tebako patch -- */
307
-
308
- len = GetCurrentDirectoryW(0, NULL);
309
- SUBST
310
-
311
- WIN32_WIN32_C_MSYS_PATCHES = {
312
- "#if defined _MSC_VER && _MSC_VER <= 1200" => "#{C_FILE_SUBST_LESS}\n#if defined _MSC_VER && _MSC_VER <= 1200",
313
- "len = GetCurrentDirectoryW(0, NULL);" => WIN32_WIN32_C_MSYS_SUBST
314
- }.freeze
315
-
316
234
  LINUX_PATCHES = {
317
235
  "ext/extmk.rb" => {
318
236
  "mf.macro \"EXTLIBS\", $extlibs" => "# mf.macro \"EXTLIBS\", $extlibs tebako patched"
@@ -35,7 +35,7 @@ require_relative "ruby_builder"
35
35
  require_relative "stripper"
36
36
  require_relative "packager/pass1_patch"
37
37
  require_relative "packager/pass1a_patch"
38
- require_relative "packager/pass2_patch"
38
+ require_relative "packager/pass2_patch_crt"
39
39
  require_relative "packager/patch_helpers"
40
40
 
41
41
  # Tebako - an executable packager
@@ -39,6 +39,7 @@ module Tebako
39
39
  "3.2.4" => "c72b3c5c30482dca18b0f868c9075f3f47d8168eaf626d4e682ce5b59c858692",
40
40
  "3.2.5" => "ef0610b498f60fb5cfd77b51adb3c10f4ca8ed9a17cb87c61e5bea314ac34a16",
41
41
  "3.2.6" => "d9cb65ecdf3f18669639f2638b63379ed6fbb17d93ae4e726d4eb2bf68a48370",
42
+ "3.2.7" => "8488fa620ff0333c16d437f2b890bba3b67f8745fdecb1472568a6114aad9741",
42
43
  "3.3.3" => "83c05b2177ee9c335b631b29b8c077b4770166d02fa527f3a9f6a40d13f3cce2",
43
44
  "3.3.4" => "fe6a30f97d54e029768f2ddf4923699c416cdbc3a6e96db3e2d5716c7db96a34",
44
45
  "3.3.5" => "3781a3504222c2f26cb4b9eb9c1a12dbf4944d366ce24a9ff8cf99ecbce75196",
@@ -48,7 +49,7 @@ module Tebako
48
49
  }.freeze
49
50
 
50
51
  MIN_RUBY_VERSION_WINDOWS = "3.1.6"
51
- DEFAULT_RUBY_VERSION = "3.2.6"
52
+ DEFAULT_RUBY_VERSION = "3.3.7"
52
53
 
53
54
  def initialize(ruby_version)
54
55
  @ruby_version = ruby_version.nil? ? DEFAULT_RUBY_VERSION : ruby_version
@@ -90,8 +91,14 @@ module Tebako
90
91
  @ruby33 ||= ruby3x? && @ruby_version[2].to_i >= 3
91
92
  end
92
93
 
93
- def ruby337?
94
- @ruby337 ||= ruby34? || (ruby33? && @ruby_version[2] == "3" && @ruby_version[4].to_i >= 7)
94
+ def ruby33only?
95
+ @ruby33only ||= ruby3x? && @ruby_version[2] == "3"
96
+ end
97
+
98
+ def ruby3x7?
99
+ @ruby3x7 ||= ruby34? ||
100
+ (ruby33only? && @ruby_version[4].to_i >= 7) ||
101
+ (ruby32only? && @ruby_version[4].to_i >= 7)
95
102
  end
96
103
 
97
104
  def ruby34?
@@ -26,5 +26,5 @@
26
26
  # POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  module Tebako
29
- VERSION = "0.12.12"
29
+ VERSION = "0.12.13"
30
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tebako
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.12
4
+ version: 0.12.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-02-14 00:00:00.000000000 Z
11
+ date: 2025-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -219,6 +219,8 @@ files:
219
219
  - lib/tebako/packager/pass1_patch.rb
220
220
  - lib/tebako/packager/pass1a_patch.rb
221
221
  - lib/tebako/packager/pass2_patch.rb
222
+ - lib/tebako/packager/pass2_patch_crt.rb
223
+ - lib/tebako/packager/pass2msys_patch.rb
222
224
  - lib/tebako/packager/patch.rb
223
225
  - lib/tebako/packager/patch_buildsystem.rb
224
226
  - lib/tebako/packager/patch_helpers.rb