tebako 0.5.12 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
3
+ # Copyright (c) 2023-2024 [Ribose Inc](https://www.ribose.com).
4
4
  # All rights reserved.
5
5
  # This file is a part of tebako
6
6
  #
@@ -29,20 +29,14 @@
29
29
  module Tebako
30
30
  module Packager
31
31
  # Ruby patching literals (pass2)
32
- # rubocop:disable Metrics/ModuleLength
33
32
  module PatchLiterals
34
33
  TOOL_MKCONFIG_RB_PATCH = {
35
34
  " if fast[name]" => <<~SUBST
36
35
  # -- Start of tebako patch --
37
36
  v_head_comp = " CONFIG[\\"prefix\\"] \#{eq} "
38
37
  if v_head_comp == v[0...(v_head_comp.length)]
39
- if win32
40
- v = "\#{v[0...(v_head_comp.length)]}CONFIG[\\"RUBY_EXEC_PREFIX\\"] = '/__tebako_memfs__'
41
- "
42
- else
43
38
  v = "\#{v[0...(v_head_comp.length)]}'/__tebako_memfs__'
44
39
  "
45
- end
46
40
  end
47
41
  v_head_comp = " CONFIG[\\"RUBY_EXEC_PREFIX\\"] \#{eq} "
48
42
  if v_head_comp == v[0...(v_head_comp.length)]
@@ -54,6 +48,22 @@ module Tebako
54
48
  SUBST
55
49
  }.freeze
56
50
 
51
+ TOOLS_MKCONFIG_RB_SUBST = <<~SUBST
52
+ # -- Start of tebako patch --
53
+ v_head_comp = " CONFIG[\\"prefix\\"] \#{eq} "
54
+ if v_head_comp == v[0...(v_head_comp.length)]
55
+ v = "\#{v[0...(v_head_comp.length)]}CONFIG[\\"RUBY_EXEC_PREFIX\\"] = 'A:/__tebako_memfs__'
56
+ "
57
+ end
58
+ v_head_comp = " CONFIG[\\"RUBY_EXEC_PREFIX\\"] \#{eq} "
59
+ if v_head_comp == v[0...(v_head_comp.length)]
60
+ v = "\#{v[0...(v_head_comp.length)]}'A:/__tebako_memfs__'
61
+ "
62
+ end
63
+ # -- End of tebako patch --
64
+ if fast[name]
65
+ SUBST
66
+
57
67
  # Alpine-specific patches https://github.com/docker-library/ruby/blob/master/3.1/alpine3.15/Dockerfile
58
68
  # -- Patch no. 1 --
59
69
  # https://github.com/docker-library/ruby/issues/196
@@ -125,6 +135,7 @@ module Tebako
125
135
  ruby_sysinit(&argc, &argv);
126
136
  /* -- Start of tebako patch -- */
127
137
  if (tebako_main(&argc, &argv) != 0) {
138
+ printf("Tebako intialization failed.");
128
139
  return -1;
129
140
  }
130
141
  /* -- End of tebako patch -- */
@@ -156,46 +167,62 @@ module Tebako
156
167
  "else if (e == EIO /* tebako patch */ && !within_tebako_memfs(path)) {"
157
168
  }.freeze
158
169
 
159
- COMMON_MK_PATCH = {
160
- "ext/extinit.c: $(srcdir)/template/extinit.c.tmpl $(PREP)" =>
161
- "ext/extinit.c: $(srcdir)/template/extinit.c.tmpl $(PREP) $(EXTS_MK)"
170
+ DLN_C_MSYS_PATCH_PRE32 = {
171
+ " winfile = rb_w32_mbstr_to_wstr(CP_UTF8, file, -1, NULL);" => <<~SUBST
172
+ /* -- Start of tebako patch -- */
173
+ char *f = NULL;
174
+ winfile = NULL;
175
+ if (file && within_tebako_memfs(file)) {
176
+ f = tebako_dlmap2file(file);
177
+ if (f) {
178
+ winfile = rb_w32_mbstr_to_wstr(CP_UTF8, f, -1, NULL);
179
+ free(f);
180
+ }
181
+ else {
182
+ goto failed;
183
+ }
184
+ }
185
+ else {
186
+ winfile = rb_w32_mbstr_to_wstr(CP_UTF8, file, -1, NULL);
187
+ }
188
+ /* -- End of tebako patch -- */
189
+ SUBST
162
190
  }.freeze
163
191
 
164
- C_FILES_TO_PATCH = [
165
- ["file.c", "/* define system APIs */"],
166
- ["io.c", "/* define system APIs */"],
167
- ["util.c", "#ifndef S_ISDIR"],
168
- ["dln.c", "static const char funcname_prefix[sizeof(FUNCNAME_PREFIX) - 1] = FUNCNAME_PREFIX;"]
169
- ].freeze
170
-
171
- TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_1 =
172
- "\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
173
- "$(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
174
-
175
- TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1 =
176
- "# -- Start of tebako patch --\n" \
177
- "\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
178
- "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
179
- "# -- End of tebako patch --"
180
-
181
- TEMPLATE_MAKEFILE_IN_BASE_PATTERN =
182
- "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) " \
183
- "$(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
184
-
185
- TEMPLATE_MAKEFILE_IN_BASE_PATCH =
186
- "# -- Start of tebako patch --\n" \
187
- "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
188
- "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
189
- "# -- End of tebako patch --"
192
+ DLN_C_MSYS_PATCH = {
193
+ " WCHAR *winfile = rb_w32_mbstr_to_wstr(CP_UTF8, file, -1, NULL);" => <<~SUBST
194
+ /* -- Start of tebako patch -- */
195
+ char *f = NULL;
196
+ WCHAR *winfile = NULL;
197
+ if (file && within_tebako_memfs(file)) {
198
+ f = tebako_dlmap2file(file);
199
+ if (f) {
200
+ winfile = rb_w32_mbstr_to_wstr(CP_UTF8, f, -1, NULL);
201
+ free(f);
202
+ }
203
+ else {
204
+ goto failed;
205
+ }
206
+ }
207
+ else {
208
+ winfile = rb_w32_mbstr_to_wstr(CP_UTF8, file, -1, NULL);
209
+ }
210
+ /* -- End of tebako patch -- */
211
+ SUBST
212
+ }.freeze
190
213
 
191
214
  C_FILE_SUBST = <<~SUBST
192
215
  /* -- Start of tebako patch -- */
193
- #ifndef NO_TEBAKO_INCLUDES
194
216
  #include <tebako/tebako-config.h>
195
217
  #include <tebako/tebako-defines.h>
196
- #include <tebako/tebako-io-rb-w32.h>
197
218
  #include <tebako/tebako-io.h>
198
- #endif
219
+ /* -- End of tebako patch -- */
220
+ SUBST
221
+
222
+ C_FILE_SUBST_LESS = <<~SUBST
223
+ /* -- Start of tebako patch -- */
224
+ #include <tebako/tebako-config.h>
225
+ #include <tebako/tebako-io.h>
199
226
  /* -- End of tebako patch -- */
200
227
  SUBST
201
228
 
@@ -213,68 +240,111 @@ module Tebako
213
240
  SUBST
214
241
  }.freeze
215
242
 
216
- MSYS_PATCHES = {
217
- "ruby.c" => {
218
- "#define RUBY_RELATIVE(path, len) rb_str_buf_cat(BASEPATH(), (path), (len))" =>
219
- "#define RUBY_RELATIVE(path, len) rubylib_path_new((path), (len)) /* tebako patched */",
220
- "#define PREFIX_PATH() sopath" =>
221
- "#define PREFIX_PATH() rubylib_path_new(tebako_mount_point(), " \
222
- "strlen(tebako_mount_point())) /* tebako patched */",
223
- '#include "mjit.h"' =>
224
- "#include \"mjit.h\"\n" \
225
- "/* -- Start of tebako patch -- */\n" \
226
- "#include <tebako/tebako-main.h>\n" \
227
- "/* -- End of tebako patch -- */"
228
- },
229
- "/win32/win32.c" => {
230
- "#undef __STRICT_ANSI__" =>
231
- "#undef __STRICT_ANSI__\n" \
232
- "/* -- Start of tebako patch -- */\n" \
233
- "#define NO_TEBAKO_INCLUDES\n" \
234
- "/* -- End of tebako patch -- */"
235
- },
236
- "win32/dir.h" => {
237
- "#define opendir(s) rb_w32_opendir((s))" => "#{C_FILE_SUBST}\n#define opendir(s) rb_w32_opendir((s))"
238
- },
239
- "file.c" => {
240
- " wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);" =>
241
- "/* -- Start of tebako patch -- */\n" \
242
- "if (tebako_file_load_ok(path)) return 1;\n" \
243
- "/* -- End of tebako patch -- */\n" \
244
- "wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);",
245
- '#include "win32/file.h' =>
246
- "#include \"win32/file.h\"\n" \
247
- "/* -- Start of tebako patch -- */\n" \
248
- "#include <tebako/tebako-main.h>\n" \
249
- "/* -- End of tebako patch -- */"
250
- }
243
+ IO_C_SUBST = <<~SUBST
244
+ /* -- Start of tebako patch -- */
245
+ if (is_tebako_file_descriptor(fd)) return;
246
+ /* -- End of tebako patch -- */
247
+ flags = fcntl(fd, F_GETFD); /* should not fail except EBADF. */
248
+ SUBST
251
249
 
250
+ IO_C_MSYS_BASE_PATCH = {
251
+ "#define open rb_w32_uopen" => "#define open(p, f, m) tebako_open(3, (p), (f), (m))"
252
252
  }.freeze
253
253
 
254
- LINUX_PATCHES = {
255
- "ext/extmk.rb" => {
256
- "mf.macro \"EXTLIBS\", $extlibs" => "# mf.macro \"EXTLIBS\", $extlibs tebako patched"
257
- }
254
+ IO_C_MSYS_PATCH_PRE_32 = {
255
+ "(rb_w32_io_cancelable_p((fptr)->fd) ? Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil))" =>
256
+ "((is_tebako_file_descriptor((fptr)->fd) || rb_w32_io_cancelable_p((fptr)->fd)) ? \\\n" \
257
+ "Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), Qnil))"
258
258
  }.freeze
259
259
 
260
- # rubocop:disable Style/WordArray
260
+ IO_C_MSYS_PATCH = {
261
+ "(rb_w32_io_cancelable_p((fptr)->fd) ? Qnil : rb_io_wait(fptr->self, " \
262
+ "RB_INT2NUM(RUBY_IO_READABLE), RUBY_IO_TIMEOUT_DEFAULT))" =>
263
+ "((is_tebako_file_descriptor((fptr)->fd) || rb_w32_io_cancelable_p((fptr)->fd)) ? \\\n" \
264
+ "Qnil : rb_io_wait(fptr->self, RB_INT2NUM(RUBY_IO_READABLE), RUBY_IO_TIMEOUT_DEFAULT))"
265
+ }.freeze
261
266
 
262
- # NOTE: folly provides build-in implementation of jemalloc
267
+ FILE_C_MSYS_SUBST = <<~SUBST
268
+ /* -- Start of tebako patch -- */
269
+ if (is_tebako_file_descriptor((fptr)->fd)) return ENOTSUP;
270
+ /* -- End of tebako patch -- */
271
+ while ((int)rb_thread_io_blocking_region(rb_thread_flock, op, fptr->fd) < 0) {
272
+ SUBST
273
+
274
+ FILE_C_MSYS_PATCH = {
275
+ "while ((int)rb_thread_io_blocking_region(rb_thread_flock, op, fptr->fd) < 0) {" => FILE_C_MSYS_SUBST
276
+ }.freeze
277
+
278
+ RUBY_C_MSYS_PATH_SUBST = <<~SUBST
279
+ /* -- Start of tebako patch -- */
280
+ VALUE path = within_tebako_memfs(paths) ?
281
+ rb_str_new_cstr(paths) :
282
+ RUBY_RELATIVE(paths, len);
283
+ /* -- End of tebako patch -- */
284
+ SUBST
263
285
 
264
- DARWIN_BREW_LIBS = [
265
- ["zlib", "z"], ["gdbm", "gdbm"], ["readline", "readline"], ["libffi", "ffi"],
266
- ["ncurses", "ncurses"], ["fmt", "fmt"], ["lz4", "lz4"], ["xz", "lzma"],
267
- ["libyaml", "yaml"], ["boost", "boost_chrono"],
268
- ["double-conversion", "double-conversion"]
269
- ].freeze
286
+ RUBY_C_MSYS_PATCHES = {
287
+ "#ifndef MAXPATHLEN" => "#{C_FILE_SUBST_LESS}\n#ifndef MAXPATHLEN",
288
+ "VALUE path = RUBY_RELATIVE(paths, len);" => RUBY_C_MSYS_PATH_SUBST
289
+ }.freeze
270
290
 
271
- DARWIN_BREW_LIBS_PRE_31 = [["openssl@1.1", "ssl"], ["openssl@1.1", "crypto"]].freeze
291
+ WIN32_FILE_C_MSYS_SUBST = <<~SUBST
292
+ /* -- Start of tebako patch -- */
293
+ if (tebako_file_load_ok(path)) return ret;
294
+ /* -- End of tebako patch -- */
295
+ wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);
296
+ SUBST
272
297
 
273
- DARWIN_BREW_LIBS_31 = [["libyaml", "yaml"], ["openssl@3", "ssl"], ["openssl@3", "crypto"]].freeze
298
+ WIN32_FILE_C_MSYS_PATCHES = {
299
+ "#ifndef INVALID_FILE_ATTRIBUTES" => "#{C_FILE_SUBST_LESS}\n#ifndef INVALID_FILE_ATTRIBUTES",
300
+ "wpath = mbstr_to_wstr(CP_UTF8, path, -1, &len);" => WIN32_FILE_C_MSYS_SUBST
301
+ }.freeze
274
302
 
275
- DARWIN_DEP_LIBS = ["glog", "gflags", "brotlienc", "brotlidec", "brotlicommon"].freeze
276
- # rubocop:enable Style/WordArray
303
+ WIN32_WIN32_C_MSYS_SUBST = <<~SUBST
304
+ /* -- Start of tebako patch -- */
305
+ if (is_tebako_cwd()) {
306
+ char* tebako_cwd = tebako_getcwd(NULL,0);
307
+ if (tebako_cwd == NULL) {
308
+ errno = ENOMEM;
309
+ return NULL;
310
+ }
311
+ len = strlen(tebako_cwd) + 1;
312
+
313
+ if (buffer) {
314
+ if (size < len) {
315
+ free(tebako_cwd);
316
+ errno = ERANGE;
317
+ return NULL;
318
+ }
319
+ }
320
+ else {
321
+ buffer = (*alloc)(len, arg);
322
+ if (!buffer) {
323
+ free(tebako_cwd);
324
+ errno = ENOMEM;
325
+ return NULL;
326
+ }
327
+ }
328
+ translate_char(tebako_cwd, (char)0x5c, '/', CP_UTF8);
329
+ strcpy(buffer, tebako_cwd);
330
+ free(tebako_cwd);
331
+ return buffer;
332
+ }
333
+ /* -- End of tebako patch -- */
334
+
335
+ len = GetCurrentDirectoryW(0, NULL);
336
+ SUBST
337
+
338
+ WIN32_WIN32_C_MSYS_PATCHES = {
339
+ "#if defined _MSC_VER && _MSC_VER <= 1200" => "#{C_FILE_SUBST_LESS}\n#if defined _MSC_VER && _MSC_VER <= 1200",
340
+ "len = GetCurrentDirectoryW(0, NULL);" => WIN32_WIN32_C_MSYS_SUBST
341
+ }.freeze
342
+
343
+ LINUX_PATCHES = {
344
+ "ext/extmk.rb" => {
345
+ "mf.macro \"EXTLIBS\", $extlibs" => "# mf.macro \"EXTLIBS\", $extlibs tebako patched"
346
+ }
347
+ }.freeze
277
348
  end
278
- # rubocop:enable Metrics/ModuleLength
279
349
  end
280
350
  end
@@ -48,10 +48,11 @@ module Tebako
48
48
 
49
49
  FILES_TO_RESTORE_MSYS = %w[
50
50
  ruby.c
51
- win32/win32.c
52
51
  win32/file.c
53
- win32/dir.h
54
52
  ].freeze
53
+ # Do not need to restore cygwin/GNUmakefile.in
54
+ # because it is patched (differently) both on pass 1 and pass2
55
+ # cygwin/GNUmakefile.in
55
56
 
56
57
  FILES_TO_RESTORE_MUSL = %w[
57
58
  thread_pthread.c
@@ -70,6 +71,19 @@ module Tebako
70
71
  RUBYGEMS_VERSION = "3.4.22"
71
72
 
72
73
  class << self
74
+ # Create implib
75
+ def create_implib(src_dir, package_src_dir, app_name, ruby_ver)
76
+ puts " ... creating Windows import library"
77
+ File.open(def_fname(src_dir, app_name), "w") do |file|
78
+ file.puts "LIBRARY #{out_fname(app_name)}"
79
+ file.puts File.read(File.join(src_dir, "tebako.def"))
80
+ end
81
+ params = ["dlltool", "-d", def_fname(src_dir, app_name), "-D", out_fname(app_name),
82
+ "--output-lib", lib_fname(package_src_dir, ruby_ver)]
83
+ out, st = Open3.capture2e(*params)
84
+ raise Tebako::Error, "Failed to create import library:\n #{out}" unless st.exitstatus.zero?
85
+ end
86
+
73
87
  # Deploy
74
88
  def deploy(src_dir, tbd, gflength)
75
89
  puts "-- Running deploy script"
@@ -132,6 +146,18 @@ module Tebako
132
146
 
133
147
  private
134
148
 
149
+ def def_fname(src_dir, app_name)
150
+ File.join(src_dir, "#{app_name}.def")
151
+ end
152
+
153
+ def out_fname(app_name)
154
+ File.join("#{app_name}.exe")
155
+ end
156
+
157
+ def lib_fname(src_dir, ruby_ver)
158
+ File.join(src_dir, "lib", "libx64-ucrt-ruby#{ruby_ver[0]}#{ruby_ver[2]}0.a")
159
+ end
160
+
135
161
  def install_gem(tbd, name, ver = nil)
136
162
  puts " ... installing #{name} gem#{" version #{ver}" if ver}"
137
163
  PatchHelpers.with_env(DEPLOY_ENV) do
@@ -26,5 +26,5 @@
26
26
  # POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  module Tebako
29
- VERSION = "0.5.12"
29
+ VERSION = "0.6.2"
30
30
  end
data/src/tebako-main.cpp CHANGED
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  *
3
- * Copyright (c) 2021-2022 [Ribose Inc](https://www.ribose.com).
3
+ * Copyright (c) 2021-2024 [Ribose Inc](https://www.ribose.com).
4
4
  * All rights reserved.
5
5
  * This file is a part of tebako
6
6
  *
@@ -35,6 +35,7 @@
35
35
  #include <fcntl.h>
36
36
 
37
37
  #include <string>
38
+ #include <cstdint>
38
39
 
39
40
  #ifdef _WIN32
40
41
  #include <winsock2.h>
@@ -49,6 +50,8 @@
49
50
  #include <tebako/tebako-main.h>
50
51
  #include <tebako/tebako-fs.h>
51
52
 
53
+ static int running_miniruby = 0;
54
+
52
55
  extern "C" int tebako_main(int* argc, char*** argv) {
53
56
  int ret = -1, fsret = -1;
54
57
  char** new_argv = NULL;
@@ -58,6 +61,7 @@ extern "C" int tebako_main(int* argc, char*** argv) {
58
61
  // Ruby build script is designed in such a way that this patch is also applied towards miniruby
59
62
  // Just pass through in such case
60
63
  ret = 0;
64
+ running_miniruby = -1;
61
65
  }
62
66
  else {
63
67
  try {
@@ -149,40 +153,6 @@ extern "C" const char* tebako_mount_point(void) {
149
153
  return tebako::fs_mount_point;
150
154
  }
151
155
 
152
- #ifdef RB_W32
153
-
154
- #if !defined(RUBY_WIN32_H)
155
- struct stati128 {
156
- _dev_t st_dev;
157
- unsigned __int64 st_ino;
158
- __int64 st_inohigh;
159
- unsigned short st_mode;
160
- short st_nlink;
161
- short st_uid;
162
- short st_gid;
163
- _dev_t st_rdev;
164
- __int64 st_size;
165
- __time64_t st_atime;
166
- long st_atimensec;
167
- __time64_t st_mtime;
168
- long st_mtimensec;
169
- __time64_t st_ctime;
170
- long st_ctimensec;
171
- };
172
- #endif
173
-
174
- extern "C" int tebako_file_load_ok(const char *path) {
175
- int ret = 0;
176
-
177
- if (within_tebako_memfs(path)) {
178
- int fd = tebako_open(2, path, O_RDONLY);
179
- if (fd != -1) {
180
- struct STAT_TYPE st;
181
- ret = (tebako_fstat(fd, &st)==0) ? 1:0;
182
- tebako_close(fd);
183
- }
184
- }
185
- return ret;
156
+ extern "C" int tebako_is_running_miniruby(void) {
157
+ return running_miniruby;
186
158
  }
187
-
188
- #endif
@@ -1,5 +1,5 @@
1
1
  #! /bin/bash
2
- # Copyright (c) 2022, [Ribose Inc](https://www.ribose.com).
2
+ # Copyright (c) 2022,2024 [Ribose Inc](https://www.ribose.com).
3
3
  # All rights reserved.
4
4
  # This file is a part of tebako
5
5
  #
@@ -43,70 +43,17 @@ do_patch_multiline() {
43
43
  "$gSed" -i "s/$re/${sbst//$'\n'/"\\n"}/g" "$1"
44
44
  }
45
45
 
46
- # ....................................................
47
- # Surprise, surprise ... Upstream project shall found boost libraries for fbthrift
48
- # https://github.com/facebook/fbthrift/commit/c23af9dee42374d43d2f10e0e07edf1c1c97c328
49
-
50
-
51
46
  if [[ "$OSTYPE" == "linux-gnu"* || "$OSTYPE" == "linux-musl"* || "$OSTYPE" == "msys" ]]; then
52
47
  gSed="sed"
53
- # shellcheck disable=SC2251
54
- ! IFS= read -r -d '' sbst << EOM
55
- find_package(OpenSSL REQUIRED)
56
- # -- Start of tebako patch --
57
- find_package(Boost 1.65 REQUIRED COMPONENTS filesystem)
58
- include_directories(\${Boost_INCLUDE_DIRS})
59
- # -- End of tebako patch --
60
- EOM
61
-
62
48
  elif [[ "$OSTYPE" == "darwin"* ]]; then
63
49
  gSed="gsed"
64
-
65
- # shellcheck disable=SC2251
66
- ! IFS= read -r -d '' sbst << EOM
67
- find_package(OpenSSL REQUIRED)
68
- # -- Start of tebako patch --
69
- find_package(Boost 1.65 REQUIRED COMPONENTS filesystem)
70
- include_directories(\${Boost_INCLUDE_DIRS})
71
- # Suppress superfluous randlib warnings about \"*.a\" having no symbols on MacOSX.
72
- set(CMAKE_C_ARCHIVE_CREATE \"<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>\")
73
- set(CMAKE_CXX_ARCHIVE_CREATE \"<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>\")
74
- set(CMAKE_C_ARCHIVE_FINISH \"<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>\")
75
- set(CMAKE_CXX_ARCHIVE_FINISH \"<CMAKE_RANLIB> -no_warning_for_no_symbols -c <TARGET>\")
76
- # -- End of tebako patch --
77
- EOM
78
-
79
50
  else
80
51
  echo "Unknown OSTYPE=$OSTYPE"
81
52
  exit 1
82
53
  fi
83
54
 
84
- restore_and_save "$1/CMakeLists.txt"
85
- re="find_package(OpenSSL REQUIRED)"
86
- "$gSed" -i "s/$re/${sbst//$'\n'/"\\n"}/g" "$1/CMakeLists.txt"
87
-
88
- # GCC 13 compatibility
89
- # --- thrift/compiler/lib/cpp2/util.cc ---
90
- re="#include <stdexcept>"
91
- # shellcheck disable=SC2251
92
- ! IFS= read -r -d '' sbst << EOM
93
- #include <stdexcept>
94
-
95
- \/* -- Start of tebako patch -- *\/
96
- #include <cstdint>
97
- \/* -- End of tebako patch -- *\/
98
- EOM
99
-
100
- do_patch_multiline "$1/thrift/compiler/lib/cpp2/util.cc"
101
-
102
-
103
55
  if [[ "$OSTYPE" == "msys" ]]; then
104
- re="if(WIN32)"
105
- sbst="if(MSVC) # tebako patched"
106
- do_patch "$1/thrift/compiler/CMakeLists.txt" "$re" "$sbst"
107
-
108
- re="ftruncate(file\.fd(), finalBufferSize);"
109
- sbst="folly::portability::unistd::ftruncate(file.fd(), finalBufferSize); \/* tebako patched *\/"
56
+ re="ftruncate(file\.fd(), finalBufferSize),"
57
+ sbst="folly::portability::unistd::ftruncate(file.fd(), finalBufferSize), \/* tebako patched *\/"
110
58
  do_patch "$1/thrift/lib/cpp2/frozen/FrozenUtil.h" "$re" "$sbst"
111
-
112
59
  fi
@@ -1,5 +1,5 @@
1
1
  #! /bin/bash
2
- # Copyright (c) 2022-2023, [Ribose Inc](https://www.ribose.com).
2
+ # Copyright (c) 2022-2024, [Ribose Inc](https://www.ribose.com).
3
3
  # All rights reserved.
4
4
  # This file is a part of tebako
5
5
  #
@@ -41,6 +41,7 @@ restore_and_save() {
41
41
 
42
42
  do_patch() {
43
43
  restore_and_save "$1"
44
+ # echo "$GNU_SED" -i "s/$2/$3/g" "$1"
44
45
  "$GNU_SED" -i "s/$2/$3/g" "$1"
45
46
  }
46
47
 
@@ -316,15 +317,6 @@ EOM
316
317
  sbst=" \/* tebako patched *\/ folly::portability::unistd::lseek(fd,"
317
318
  do_patch "$1/folly/portability/SysUio.cpp" "$re" "$sbst"
318
319
 
319
- # --- folly/portability/Unistd.cpp ---
320
- re="(lseek(fd,"
321
- sbst="( \/* tebako patched *\/ folly::portability::unistd::lseek(fd,"
322
- do_patch "$1/folly/portability/Unistd.cpp" "$re" "$sbst"
323
-
324
- re="lseek(fd, 0,"
325
- sbst=" \/* tebako patched *\/ folly::portability::unistd::lseek(fd, 0,"
326
- "$GNU_SED" -i "s/$re/$sbst/g" "$1/folly/portability/Unistd.cpp"
327
-
328
320
  # --- folly/logging/ImmediateFileWriter.h ---
329
321
  re="isatty(file"
330
322
  sbst=" \/* tebako patched *\/ folly::portability::unistd::isatty(file"
@@ -402,6 +394,7 @@ EOM
402
394
  #ifdef __MINGW32__
403
395
  #include <mswsock.h>
404
396
  using cmsghdr = WSACMSGHDR;
397
+ #define CMSG_SPACE WSA_CMSG_SPACE
405
398
  #endif
406
399
  \/* -- End of tebako patch -- *\/
407
400
 
@@ -448,7 +441,55 @@ EOM
448
441
  sbst="#if defined(__XROS__) || defined(__MINGW32__) \/* tebako patched *\/"
449
442
  "$GNU_SED" -i "s/$re/$sbst/g" "$1/folly/system/ThreadName.cpp"
450
443
 
444
+ # --- folly/net/NetOps.h ---
445
+
446
+ re="#include <WS2tcpip\.h> \/\/ @manual"
447
+ # shellcheck disable=SC2251
448
+ ! IFS= read -r -d '' sbst << EOM
449
+ #include <WS2tcpip.h> \/\/ @manual
450
+
451
+ \/* -- Start of tebako patch -- *\/
452
+ #ifdef __MINGW32__
453
+ #include <memory>
454
+ #include <mswsock.h>
455
+ #endif
456
+ \/* -- End of tebako patch -- *\/
457
+ EOM
458
+ do_patch_multiline "$1/folly/net/NetOps.h" "$re" "$sbst"
459
+
460
+ # --- folly/Random.cpp ---
461
+
462
+ re="#include <folly\/synchronization\/RelaxedAtomic\.h>"
463
+ # shellcheck disable=SC2251
464
+ ! IFS= read -r -d '' sbst << EOM
465
+ #include <folly\/synchronization\/RelaxedAtomic.h>
466
+
467
+ \/* -- Start of tebako patch -- *\/
468
+ #include <folly\/portability\/Fcntl.h>
469
+ \/* -- End of tebako patch -- *\/
470
+ EOM
471
+ do_patch_multiline "$1/folly/Random.cpp" "$re" "$sbst"
472
+
473
+ # --- folly/Utility.h ---
474
+ re="T uninit;"
475
+ sbst="T uninit = 0; \/* tebako patched *\/"
476
+ do_patch "$1/folly/Utility.h" "$re" "$sbst"
477
+
478
+ # --- folly/experimental/io/AsyncBase.cpp ---
479
+ re="CHECK_ERR(close(pollFd_));"
480
+ sbst="CHECK_ERR(folly::portability::unistd::close(pollFd_)); \/* tebako patched *\/"
481
+ do_patch "$1/folly/experimental/io/AsyncBase.cpp" "$re" "$sbst"
482
+
483
+ # --- folly/portability/Unistd.cpp ---
484
+ re="res = lseek64(fd, offset, whence);"
485
+ sbst="res = folly::portability::unistd::lseek64(fd, offset, whence); \/* tebako patched *\/ "
486
+ do_patch "$1/folly/portability/Unistd.cpp" "$re" "$sbst"
487
+
488
+ re="res = lseek(fd, offset, whence);"
489
+ sbst="res = folly::portability::unistd::lseek(fd, offset, whence); \/* tebako patched *\/ "
490
+ "$GNU_SED" -i "s/$re/$sbst/g" "$1/folly/portability/Unistd.cpp"
451
491
  # ---
492
+
452
493
  defined_msc_ver_to_win32 "$1/folly/external/farmhash/farmhash.cpp"
453
494
  defined_msc_ver_to_win32 "$1/folly/detail/IPAddressSource.h"
454
495
  defined_msc_ver_to_win32 "$1/folly/portability/Sockets.cpp"
@@ -471,5 +512,6 @@ EOM
471
512
  # while gettimeofday is provided by MSys, the other two functions are lost
472
513
  defined_n_win32_to_msc_ver "$1/folly/portability/SysTime.h"
473
514
  defined_win32_to_msc_ver "$1/folly/portability/SysTime.cpp"
515
+ defined_win32_to_msc_ver "$1/folly/lang/Exception.cpp"
474
516
 
475
517
  fi
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.5.12
1
+ 0.6.2
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.5.12
4
+ version: 0.6.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-02-27 00:00:00.000000000 Z
11
+ date: 2024-04-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -65,11 +65,14 @@ files:
65
65
  - lib/tebako.rb
66
66
  - lib/tebako/cli.rb
67
67
  - lib/tebako/cli_helpers.rb
68
+ - lib/tebako/cli_rubies.rb
68
69
  - lib/tebako/error.rb
69
70
  - lib/tebako/packager.rb
70
71
  - lib/tebako/packager/pass1.rb
71
72
  - lib/tebako/packager/pass2.rb
73
+ - lib/tebako/packager/patch_buildsystem.rb
72
74
  - lib/tebako/packager/patch_helpers.rb
75
+ - lib/tebako/packager/patch_libraries.rb
73
76
  - lib/tebako/packager/patch_literals.rb
74
77
  - lib/tebako/version.rb
75
78
  - resources/tebako-fs.cpp.in