tebako 0.5.4 → 0.5.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b93ceda3b8a6329b0a332f3ebfbf4c24ff030eda6c1727109623a98bbf868eae
4
- data.tar.gz: 78e53009d65e1841a8c706b3be9fcbe17f7976864d23e5f70bf07357f3f2701f
3
+ metadata.gz: 23a76520703c1526cb92a3aaeac6c215a117b5dd6f27f18b286c7dc165d95b98
4
+ data.tar.gz: 2078da7a9009225a1d50435dac76b75579068f8683e4f0d5c6f1c80f501a98f8
5
5
  SHA512:
6
- metadata.gz: c256ed82865bea01ac84c9c5bc33f7ef0c99df2d143eb78ac1f6b486492d42affb10fe14f590665a7a00b2c397ae57d9ba7cd3c52b6742b5740965340eeb1c77
7
- data.tar.gz: 2d5dd78d7ccdf95f06b7453b4939ebc81e759242fbf37259edd95e598901adc6a5af6828cf1c57c081c7c7f487c6a4609e3f1c8d2b59e070a5be0869448781f1
6
+ metadata.gz: f1102354529402a3ac5d30830d602f203d0c89ded810e44d4caeabd407ccda5a7b72bda9a03c15732cf451a5716d9875c6d51ae8dfb669af15d4a0c9f1ae255a
7
+ data.tar.gz: ff70d7dfbe6ce10b6689ed97860b87909e18e4a29c44c2d7a0cc1895667121010810b1aa702d2ec6869e844e214ad2be17b66ee67dd58f2fbe8254b984a8fc63
data/CMakeLists.txt CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2021-2023 [Ribose Inc](https://www.ribose.com).
1
+ # Copyright (c) 2021-2024 [Ribose Inc](https://www.ribose.com).
2
2
  # All rights reserved.
3
3
  # This file is a part of tebako
4
4
  #
@@ -172,14 +172,37 @@ elseif("${OSTYPE_TXT}" MATCHES "^msys*")
172
172
  set(RUBY_MAKEFILE "--file=GNUmakefile")
173
173
  elseif("${OSTYPE_TXT}" MATCHES "^darwin.*")
174
174
  set(IS_DARWIN ON)
175
- if(${RUBY_VER} VERSION_LESS "3.2.0")
175
+ if(${RUBY_VER} VERSION_LESS "3.1.0")
176
176
  set(OPENSSL_VER "1.1")
177
- else(${RUBY_VER} VERSION_LESS "3.2.0")
177
+ else(${RUBY_VER} VERSION_LESS "3.1.0")
178
178
  set(OPENSSL_VER "3")
179
- endif(${RUBY_VER} VERSION_LESS "3.2.0")
179
+ endif(${RUBY_VER} VERSION_LESS "3.1.0")
180
180
  set(BUILD_OPENSSL_ROOT_DIR "${BUILD_BREW_PREFIX}/opt/openssl@${OPENSSL_VER}")
181
181
  endif()
182
182
 
183
+ if(IS_DARWIN)
184
+ execute_process(
185
+ COMMAND "sysctl" "-n" "hw.ncpu"
186
+ RESULT_VARIABLE NCORES_RES
187
+ OUTPUT_VARIABLE NCORES
188
+ OUTPUT_STRIP_TRAILING_WHITESPACE
189
+ )
190
+ else(IS_DARWIN)
191
+ execute_process(
192
+ COMMAND "nproc" "--all"
193
+ RESULT_VARIABLE NCORES_RES
194
+ OUTPUT_VARIABLE NCORES
195
+ OUTPUT_STRIP_TRAILING_WHITESPACE
196
+ )
197
+ endif(IS_DARWIN)
198
+
199
+ if(NCORES_RES EQUAL 0)
200
+ message(STATUS "NCORES: ${NCORES}")
201
+ else(NCORES_RES EQUAL 0)
202
+ set(NCORES 4)
203
+ message(WARNING "Failed to detect NCORES, resetting to ${NCORES} (default)")
204
+ endif(NCORES_RES EQUAL 0)
205
+
183
206
  # Various locations for external projects
184
207
  set(DEPS ${CMAKE_CURRENT_SOURCE_DIR}/deps CACHE STRING "Dependencies' folder'")
185
208
  set(DEPS_INCLUDE_DIR ${DEPS}/include)
@@ -220,15 +243,7 @@ if(IS_MSYS)
220
243
  endif(IS_MSYS)
221
244
 
222
245
  def_ext_prj_g(INCBIN "348e36b")
223
- def_ext_prj_g(DWARFS_WR "v0.3.5")
224
-
225
- if (DEFINED ENV{BUNDLER_VER})
226
- set(BUNDLER_VER $ENV{BUNDLER_VER})
227
- set(BUNDLER_ANNOTATION "environment")
228
- else()
229
- set(BUNDLER_VER "2.3.22")
230
- set(BUNDLER_ANNOTATION "default")
231
- endif()
246
+ def_ext_prj_g(DWARFS_WR "v0.4.0")
232
247
 
233
248
  find_library(_LIBNCURSES "libncurses.a")
234
249
  if(${_LIBNCURSES} STREQUAL "_LIBNCURSES-NOTFOUND")
@@ -245,7 +260,6 @@ endif(${RUBY_VER} VERSION_LESS "3.2.0")
245
260
 
246
261
  message("Configuration summary:")
247
262
  message(STATUS "ruby: v${RUBY_VER} at ${RUBY_SOURCE_DIR}")
248
- message(STATUS "bundler version: ${BUNDLER_VER} (${BUNDLER_ANNOTATION})")
249
263
  if(WITH_OPENSSL_BUILD)
250
264
  message(STATUS "openssl: building @${OPENSSL_TAG} at ${OPENSSL_SOURCE_DIR}")
251
265
  endif(WITH_OPENSSL_BUILD)
@@ -363,7 +377,7 @@ ExternalProject_Add(${DWARFS_WR_PRJ}
363
377
  SOURCE_DIR ${DWARFS_WR_SOURCE_DIR}
364
378
  BINARY_DIR ${DWARFS_WR_BINARY_DIR}
365
379
  UPDATE_COMMAND ""
366
- BUILD_COMMAND ${CMAKE_COMMAND} --build ${DWARFS_WR_BINARY_DIR} --parallel 4
380
+ BUILD_COMMAND ${CMAKE_COMMAND} --build ${DWARFS_WR_BINARY_DIR} --parallel ${NCORES}
367
381
  CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${DEPS}
368
382
  -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
369
383
  -DWITH_TESTS:BOOL=OFF
@@ -418,15 +432,17 @@ if(IS_DARWIN)
418
432
  string(CONCAT RUBY_L_FLAGS ${RUBY_L_FLAGS} " -L${BUILD_BREW_PREFIX}/opt/openssl@${OPENSSL_VER}/lib -L${BUILD_BREW_PREFIX}/opt/zlib/lib -L${BUILD_BREW_PREFIX}/lib")
419
433
  set(OPENSSL_RUBY_OPTION "--with-openssl-dir=${BUILD_BREW_PREFIX}/opt/openssl@${OPENSSL_VER}")
420
434
  set(C_FLAGS_DEST cflags)
421
- endif(IS_DARWIN)
435
+ else(IS_DARWIN)
436
+ string(CONCAT RUBY_L_FLAGS ${RUBY_L_FLAGS} " -static-libgcc")
422
437
 
423
- if(IS_MUSL)
424
- string(CONCAT RUBY_C_FLAGS ${RUBY_C_FLAGS} " -DENABLE_PATH_CHECK=0")
425
- endif(IS_MUSL)
438
+ if(IS_MUSL)
439
+ string(CONCAT RUBY_C_FLAGS ${RUBY_C_FLAGS} " -DENABLE_PATH_CHECK=0")
440
+ endif(IS_MUSL)
426
441
 
427
- if(RB_W32)
428
- string(CONCAT RUBY_C_FLAGS ${RUBY_C_FLAGS} " -DRB_W32=1")
429
- endif(RB_W32)
442
+ if(RB_W32)
443
+ string(CONCAT RUBY_C_FLAGS ${RUBY_C_FLAGS} " -DRB_W32=1")
444
+ endif(RB_W32)
445
+ endif(IS_DARWIN)
430
446
 
431
447
  message(STATUS "Ruby build ${C_FLAGS_DEST}='${RUBY_C_FLAGS}'")
432
448
  message(STATUS "Ruby build LDFLAGS='${RUBY_L_FLAGS}'")
@@ -452,7 +468,7 @@ ExternalProject_Add(${RUBY_PRJ}
452
468
  --prefix=${DATA_SRC_DIR} \
453
469
  ${C_FLAGS_DEST}=\"${RUBY_C_FLAGS}\" \
454
470
  LDFLAGS=\"${RUBY_L_FLAGS}\""
455
- BUILD_COMMAND make ${RUBY_MAKEFILE}
471
+ BUILD_COMMAND make ${RUBY_MAKEFILE} -j${NCORES}
456
472
  INSTALL_COMMAND make ${RUBY_MAKEFILE} install
457
473
  COMMAND ruby ${EXE}/tebako-packager pass2 ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${DEPS_LIB_DIR} ${DATA_SRC_DIR} ${RUBY_STASH_DIR} ${RUBY_VER}
458
474
  )
@@ -486,7 +502,7 @@ else (${SETUP_MODE})
486
502
  list(LENGTH GEMS GLENGTH)
487
503
 
488
504
  add_custom_target(clean_filesystem
489
- COMMAND ruby ${EXE}/tebako-packager deploy ${RUBY_STASH_DIR} ${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR} ${TBD} ${TGD}
505
+ COMMAND ruby ${EXE}/tebako-packager deploy ${RUBY_STASH_DIR} ${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR} ${GFLENGTH}
490
506
  DEPENDS ${RUBY_PRJ}
491
507
  )
492
508
  if(GSLENGTH GREATER 0)
@@ -502,8 +518,6 @@ else (${SETUP_MODE})
502
518
  add_custom_target(source_filesystem
503
519
  COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
504
520
  COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
505
- COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
506
- ${TBD}/gem${CMD_SUFFIX} install bundler -v '${BUNDLER_VER}' --source 'https://rubygems.org/' --no-document --install-dir ${TGD}
507
521
  COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
508
522
  ${TBD}/bundle${CMD_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
509
523
  COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
@@ -547,23 +561,19 @@ else (${SETUP_MODE})
547
561
  ${CMAKE_COMMAND} -E false )
548
562
  COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
549
563
  COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
550
- COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
551
- ${TBD}/gem${CMD_SUFFIX} install bundler -v '${BUNDLER_VER}'
552
- --source 'https://rubygems.org/' --no-document --install-dir ${TGD}
553
564
  COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
554
565
  ${TBD}/bundle${CMD_SUFFIX} config build.ffi --disable-system-libffi
555
566
  COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
556
567
  ${TBD}/bundle${CMD_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
557
568
  COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
558
- ${TBD}/bundle${CMD_SUFFIX} install --jobs=4
569
+ ${TBD}/bundle${CMD_SUFFIX} install --jobs=${NCORES}
559
570
  # COMMAND_EXPAND_LISTS
560
571
  # [TODO] Open question - how to deploy a project to source filesystem
561
572
  # ruby packer does bundle install --deployment --binstubs
562
- # [TODO] --jobs=4 probably can be more intellectual
563
573
  # COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
564
574
  # ${TBD}/bundle lock
565
575
  # COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
566
- # ${TBD}/bundle install --deployment --jobs=4
576
+ # ${TBD}/bundle install --deployment --jobs=${NCORES}
567
577
  DEPENDS clean_filesystem
568
578
  )
569
579
  elseif(GLENGTH GREATER 0)
@@ -663,12 +673,12 @@ else (${SETUP_MODE})
663
673
 
664
674
  if (${RUBY_VER} VERSION_LESS "3.0.0")
665
675
  add_custom_target(patched_ruby
666
- COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ${RUBY_MAKEFILE}
676
+ COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ${RUBY_MAKEFILE} -j${NCORES}
667
677
  )
668
678
  else()
669
679
  add_custom_target(patched_ruby
670
- COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ruby ${RUBY_MAKEFILE}
671
- COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ${RUBY_MAKEFILE}
680
+ COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ruby ${RUBY_MAKEFILE} -j${NCORES}
681
+ COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ${RUBY_MAKEFILE} -j${NCORES}
672
682
  )
673
683
  endif()
674
684
 
data/README.adoc CHANGED
@@ -33,7 +33,7 @@ In the future:
33
33
 
34
34
  The Tebako packager is tested on the following platforms:
35
35
 
36
- * Linux: Ubuntu 20.04; Alpine 3.16
36
+ * Linux: Ubuntu 20.04; Alpine 3.17
37
37
  * macOS: macOS 11.0 (Monterey)
38
38
  * Windows: TBD
39
39
 
@@ -41,10 +41,10 @@ The Tebako packager is tested on the following platforms:
41
41
 
42
42
  The Tebako packager supports the following versions of Ruby for packaging:
43
43
 
44
- * 2.7.7
44
+ * 2.7.8
45
45
  * 3.0.6
46
46
  * 3.1.4
47
- * 3.2.2
47
+ * 3.2.3
48
48
 
49
49
  Support of specific version including minor release requires some effort, sometimes extensive
50
50
  but our goal is to be able to package all maintained Ruby releases.
@@ -53,7 +53,7 @@ but our goal is to be able to package all maintained Ruby releases.
53
53
 
54
54
  === Ubuntu
55
55
 
56
- ==== GNU C/C++ 9+ or Clang C/C++ 11+
56
+ ==== GNU C/C++ 10+ or Clang C/C++ 12+
57
57
 
58
58
  ==== CMake version 3.20+
59
59
 
@@ -120,7 +120,7 @@ export TZ=Etc/UTC
120
120
  apt-get update
121
121
  apt-get install -y software-properties-common
122
122
  add-apt-repository -y ppa:ubuntu-toolchain-r/test
123
- apt-get install -y gcc-9 g++-9
123
+ apt-get install -y gcc-10 g++-10
124
124
 
125
125
  apt-get install -y curl git ruby ruby-dev pkg-config bison flex make autoconf
126
126
  curl https://apt.kitware.com/kitware-archive.sh | bash
@@ -164,7 +164,7 @@ cmmands below.
164
164
  ----
165
165
  tebako press \
166
166
  [-p|--prefix=<tebako-root-folder>] \
167
- [-R|--Ruby=<2.7.7|3.0.6|3.1.4|3.2.2>] \
167
+ [-R|--Ruby=<2.7.8|3.0.6|3.1.4|3.2.3>] \
168
168
  -r|--root=<project-root-folder> \
169
169
  -e|--entry-point=<entry-point> \
170
170
  [-o|--output=<packaged file name>] \
@@ -176,7 +176,7 @@ Where:
176
176
  * `<tebako-root-folder>`, the Tebako setup folder (optional, defaults to current
177
177
  folder)
178
178
 
179
- * `Ruby` parameter defines Ruby version that will be packaged (optional, defaults to 3.0.6)
179
+ * `Ruby` parameter defines Ruby version that will be packaged (optional, defaults to 3.1.4)
180
180
 
181
181
  * `<project-root>`, a folder at the host source file system where project files
182
182
  are located
@@ -214,7 +214,7 @@ invocation of press command.
214
214
  ----
215
215
  tebako setup \
216
216
  [-p |--prefix=<tebako-root-folder>] \
217
- [-R |--Ruby=<2.7.7|3.0.6|3.1.4|3.2.2>]
217
+ [-R |--Ruby=<2.7.8|3.0.6|3.1.4|3.2.3>]
218
218
  ----
219
219
 
220
220
  Where:
@@ -257,7 +257,7 @@ Normally you do not need to do it since tebako packager optimizes artifacts life
257
257
  ----
258
258
  tebako clean_ruby
259
259
  [-p|--prefix=<tebako-root-folder>]
260
- [-R|--Ruby=<2.7.7|3.0.6|3.1.4|3.2.2>]
260
+ [-R|--Ruby=<2.7.8|3.0.6|3.1.4|3.2.3>]
261
261
  ----
262
262
 
263
263
  Where:
data/Rakefile CHANGED
@@ -36,7 +36,7 @@ desc "Generate version.txt"
36
36
  task "generate_version_txt" do
37
37
  require_relative "lib/tebako/version"
38
38
  File.write(File.join(__dir__, "version.txt"), "#{Tebako::VERSION}\n")
39
- puts "Generating version.txt #{Tebako::VERSION} --> #{File.join(__dir__, "version.txt")}"
39
+ puts "Generating #{File.join(__dir__, "version.txt")}; version = #{Tebako::VERSION}"
40
40
  end
41
41
 
42
42
  task build: :generate_version_txt
data/common.env CHANGED
@@ -1,6 +1,5 @@
1
1
  BUILD_TYPE=Release
2
2
  DEPS=deps
3
3
  INCBIN_TAG=348e36b
4
- DWARFS_WR_TAG=v0.3.5
5
- BUNDLER_VER=2.3.22
4
+ DWARFS_WR_TAG=v0.4.0
6
5
  RUBY_VER=3.1.4
data/exe/tebako-packager CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
3
 
4
- # Copyright (c) 2023 [Ribose Inc](https://www.ribose.com).
4
+ # Copyright (c) 2023-2024 [Ribose Inc](https://www.ribose.com).
5
5
  # All rights reserved.
6
6
  # This file is a part of tebako
7
7
  #
@@ -78,13 +78,15 @@ begin
78
78
  # ARGV[2] -- DATA_SRC_DIR
79
79
  # ARGV[3] -- DATA_PRE_DIR
80
80
  # ARGV[4] -- DATA_BIN_DIR
81
- # ARGV[5] -- TARGET_BIN_DIR (TBD)
82
- # ARGV[6] -- TARGET_GEM_DIR (TGD)
83
- unless ARGV.length == 7
81
+ # ARGV[5] -- GFLENGTH
82
+ unless ARGV.length == 6
84
83
  raise Tebako::Error,
85
- "tebako-packager deploy command expects 7 arguments, #{ARGV.length} has been provided."
84
+ "tebako-packager deploy command expects 6 arguments, #{ARGV.length} has been provided."
86
85
  end
87
- Tebako::Packager.deploy(ARGV[1], ARGV[2], ARGV[3], ARGV[4], ARGV[5])
86
+ Tebako::Packager.init(ARGV[1], ARGV[2], ARGV[3], ARGV[4])
87
+ # Assume that "<TARGET_BIN_DIR (TBD)>" is <DATA_SRC_DIR>/bin"
88
+ # That shall match CMakeLists.txt settings
89
+ Tebako::Packager.deploy(ARGV[2], "#{ARGV[2]}/bin", ARGV[5])
88
90
  else
89
91
  raise Tebako::Error, "tebako-packager cannot process #{ARGV[0]} command"
90
92
  end
@@ -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
  #
@@ -44,8 +44,6 @@ module Tebako
44
44
  else
45
45
  ENV.fetch("CXXFLAGS", nil)
46
46
  end
47
- # cc = ENV.fetch("CC", "gcc")
48
- # cxx = ENV.fetch("CXX", "g++")
49
47
  @b_env ||= { "CXXFLAGS" => u_flags }
50
48
  end
51
49
 
@@ -61,10 +59,11 @@ module Tebako
61
59
  end
62
60
 
63
61
  RUBY_VERSIONS = {
64
- "2.7.7" => "e10127db691d7ff36402cfe88f418c8d025a3f1eea92044b162dd72f0b8c7b90",
62
+ "2.7.8" => "c2dab63cbc8f2a05526108ad419efa63a67ed4074dbbcf9fc2b1ca664cb45ba0",
65
63
  "3.0.6" => "6e6cbd490030d7910c0ff20edefab4294dfcd1046f0f8f47f78b597987ac683e",
66
64
  "3.1.4" => "a3d55879a0dfab1d7141fdf10d22a07dbf8e5cdc4415da1bde06127d5cc3c7b6",
67
- "3.2.2" => "96c57558871a6748de5bc9f274e93f4b5aad06cd8f37befa0e8d94e7b8a423bc"
65
+ "3.2.3" => "af7f1757d9ddb630345988139211f1fd570ff5ba830def1cc7c468ae9b65c9ba",
66
+ "3.3.0" => "96518814d9832bece92a85415a819d4893b307db5921ae1f0f751a9a89a56b7d"
68
67
  }.freeze
69
68
 
70
69
  DEFAULT_RUBY_VERSION = "3.1.4"
@@ -132,6 +131,7 @@ module Tebako
132
131
 
133
132
  def prefix
134
133
  @prefix ||= if options["prefix"].nil?
134
+ puts "No prefix specified, using ~/.tebako"
135
135
  File.expand_path("~/.tebako")
136
136
  elsif options["prefix"] == "PWD"
137
137
  Dir.pwd
@@ -42,6 +42,7 @@ module Tebako
42
42
  patch_map.store("common.mk", COMMON_MK_PATCH) if PatchHelpers.ruby3x?(ruby_ver)
43
43
 
44
44
  ostype =~ /msys/ ? patch_map.merge!(MSYS_PATCHES) : patch_map
45
+ # patch_map.merge!(LINUX_PATCHES)
45
46
  end
46
47
 
47
48
  private
@@ -64,35 +65,51 @@ module Tebako
64
65
  end
65
66
 
66
67
  def process_brew_libs!(libs, brew_libs)
67
- brew_libs.each { |lib| libs << "#{PatchHelpers.get_prefix(lib[0]).chop}/lib/lib#{lib[1]}.a " }
68
+ brew_libs.each { |lib| libs << "#{PatchHelpers.get_prefix_macos(lib[0]).chop}/lib/lib#{lib[1]}.a " }
68
69
  end
69
70
 
70
71
  def darwin_libs(deps_lib_dir, ruby_ver)
71
72
  libs = String.new
73
+
74
+ process_brew_libs!(libs, PatchHelpers.ruby31?(ruby_ver) ? DARWIN_BREW_LIBS_31 : DARWIN_BREW_LIBS_PRE_31)
72
75
  process_brew_libs!(libs, DARWIN_BREW_LIBS)
73
- process_brew_libs!(libs, DARWIN_BREW_LIBS_32) if PatchHelpers.ruby32?(ruby_ver)
76
+
74
77
  DARWIN_DEP_LIBS.each { |lib| libs << "#{deps_lib_dir}/lib#{lib}.a " }
75
78
  <<~SUBST
76
- -ltebako-fs -ldwarfs-wr -ldwarfs -lfolly -lfsst -lmetadata_thrift -lthrift_light -lxxhash \
77
- -lzstd #{libs} -ljemalloc -lc++
79
+ -ltebako-fs -ldwarfs-wr -ldwarfs -force_load #{deps_lib_dir}/libdwarfs_compression.a -lfolly -lfsst -lmetadata_thrift -lthrift_light -lxxhash \
80
+ -lzstd #{libs} -ljemalloc -lc++ -lc++abi
78
81
  SUBST
79
82
  end
80
83
 
84
+ # .....................................................
85
+ # Notes re linux libraries
86
+ # 1) This order is important: -lgcc_eh -l:libunwind.a -l:liblzma.a lzma is used to process debug sections.
87
+ # gcc_eh shall be linked before unwind to avoid duplicate symbols.
88
+ # 2) -lgcc_eh assumes -static-libgcc (applied in CMakeLists.ext, RUBY_C_FLAGS)
89
+ # 3) -static-libstdc++ did not work, not sure why [TODO ?]
90
+ # 4) When clang is used linker links libraries specified in exensions in such way that they are linked shared
91
+ # (libz, libffi, libreadline, libncurses, libtinfo, ... )
92
+ # Using stuff like -l:libz.a does not help; there is a reference to libz.so anyway.
93
+ # This is fixed by ext/extmk.rb patch [TODO ?]
94
+ # .....................................................
95
+
81
96
  def linux_gnu_libs(ruby_ver)
82
97
  <<~SUBST
83
- -l:libtebako-fs.a -l:libdwarfs-wr.a -l:libdwarfs.a -l:libfolly.a -l:libfsst.a -l:libmetadata_thrift.a -l:libthrift_light.a -l:libxxhash.a \
84
- -l:libfmt.a -l:libdouble-conversion.a -l:libglog.a -l:libgflags.a -l:libevent.a -l:libiberty.a -l:libacl.a -l:libssl.a -l:libcrypto.a -l:liblz4.a -l:libz.a \
85
- -l:libzstd.a -l:libgdbm.a -l:libreadline.a -l:libtinfo.a -l:libffi.a -l:libncurses.a -l:libjemalloc.a -l:libunwind.a -l:libcrypt.a -l:libanl.a -l:liblzma.a \
86
- #{PatchHelpers.yaml_reference(ruby_ver)} -l:libboost_system.a -l:libstdc++.a -l:librt.a -ldl -lpthread
98
+ -l:libtebako-fs.a -l:libdwarfs-wr.a -l:libdwarfs.a -Wl,--push-state,--whole-archive -l:libdwarfs_compression.a -Wl,--pop-state -l:libfolly.a -l:libfsst.a \
99
+ -l:libmetadata_thrift.a -l:libthrift_light.a -l:libxxhash.a -l:libarchive.a -l:libfmt.a -l:libdouble-conversion.a -l:libglog.a -l:libgflags.a -l:libevent.a \
100
+ -l:libiberty.a -l:libacl.a -l:libssl.a -l:libcrypto.a -l:liblz4.a -l:libz.a -l:libzstd.a -l:libbrotlienc.a -l:libbrotlidec.a -l:libbrotlicommon.a -l:libgdbm.a \
101
+ -l:libreadline.a -l:libtinfo.a -l:libffi.a -l:libncurses.a -l:libjemalloc.a -l:libcrypt.a -l:libanl.a #{PatchHelpers.yaml_reference(ruby_ver)} \
102
+ -l:libboost_system.a -l:libboost_chrono.a -l:libutil.a -l:libstdc++.a -lgcc_eh -l:libunwind.a -l:liblzma.a -l:librt.a -ldl -lpthread -lm
87
103
  SUBST
88
104
  end
89
105
 
90
106
  def linux_musl_libs(ruby_ver)
91
107
  <<~SUBST
92
- -l:libtebako-fs.a -l:libdwarfs-wr.a -l:libdwarfs.a -l:libfolly.a -l:libfsst.a -l:libmetadata_thrift.a -l:libthrift_light.a -l:libxxhash.a \
93
- -l:libfmt.a -l:libdouble-conversion.a -l:libglog.a -l:libgflags.a -l:libevent.a -l:libiberty.a -l:libacl.a -l:libssl.a -l:libcrypto.a -l:liblz4.a -l:libz.a \
94
- -l:libzstd.a -l:libgdbm.a -l:libreadline.a -l:libffi.a -l:libncurses.a -l:libjemalloc.a -l:libunwind.a -l:libcrypt.a -l:liblzma.a \
95
- #{PatchHelpers.yaml_reference(ruby_ver)} -l:libboost_system.a -l:libstdc++.a -l:librt.a -ldl -lpthread
108
+ -l:libtebako-fs.a -l:libdwarfs-wr.a -l:libdwarfs.a -Wl,--push-state,--whole-archive -l:libdwarfs_compression.a -Wl,--pop-state -l:libfolly.a -l:libfsst.a \
109
+ -l:libmetadata_thrift.a -l:libthrift_light.a -l:libxxhash.a -l:libfmt.a -l:libdouble-conversion.a -l:libglog.a -l:libgflags.a -l:libevent.a -l:libiberty.a \
110
+ -l:libacl.a -l:libssl.a -l:libcrypto.a -l:liblz4.a -l:libz.a -l:libzstd.a -l:libbrotlienc.a -l:libbrotlidec.a -l:libbrotlicommon.a -l:libgdbm.a -l:libreadline.a \
111
+ -l:libffi.a -l:libncurses.a -l:libjemalloc.a -l:libcrypt.a #{PatchHelpers.yaml_reference(ruby_ver)} -l:libboost_system.a -l:libboost_chrono.a -l:librt.a \
112
+ -l:libstdc++.a -lgcc_eh -l:libunwind.a -l:liblzma.a -ldl -lpthread
96
113
  SUBST
97
114
  end
98
115
 
@@ -123,7 +140,7 @@ module Tebako
123
140
  # rubocop:enable Metrics/MethodLength
124
141
 
125
142
  def mlibs_subst(ostype, deps_lib_dir, ruby_ver)
126
- yjit_libs = PatchHelpers.ruby32?(ruby_ver) ? "$(YJIT_LIBS) " : ""
143
+ yjit_libs = PatchHelpers.ruby32only?(ruby_ver) ? "$(YJIT_LIBS) " : ""
127
144
  {
128
145
  "MAINLIBS = #{yjit_libs}@MAINLIBS@" =>
129
146
  "# -- Start of tebako patch -- \n" \
@@ -139,15 +156,14 @@ module Tebako
139
156
  end
140
157
 
141
158
  def template_makefile_in_patch(ostype, deps_lib_dir, ruby_ver)
142
- base_patch = TEMPLATE_MAKEFILE_IN_BASE_PATCH_ONE.merge(mlibs_subst(ostype, deps_lib_dir, ruby_ver))
143
- base_patch.merge!(template_makefile_in_patch_two(ruby_ver))
159
+ template_makefile_in_patch_two(ruby_ver).merge(mlibs_subst(ostype, deps_lib_dir, ruby_ver))
144
160
  end
145
161
 
146
162
  def template_makefile_in_patch_two(ruby_ver)
147
163
  if PatchHelpers.ruby31?(ruby_ver)
148
- { TEMPLATE_MAKEFILE_IN_BASE_PATTERN_TWO => TEMPLATE_MAKEFILE_IN_BASE_PATCH_TWO }
164
+ { TEMPLATE_MAKEFILE_IN_BASE_PATTERN => TEMPLATE_MAKEFILE_IN_BASE_PATCH }
149
165
  else
150
- { TEMPLATE_MAKEFILE_IN_BASE_PATTERN_TWO_PRE_3_1 => TEMPLATE_MAKEFILE_IN_BASE_PATCH_TWO_PRE_3_1 }
166
+ { TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_1 => TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1 }
151
167
  end
152
168
  end
153
169
  end
@@ -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
  #
@@ -34,13 +34,55 @@ module Tebako
34
34
  # Ruby patching helpers (pass2)
35
35
  module PatchHelpers
36
36
  class << self
37
- def get_prefix(package)
37
+ def patch_file(fname, mapping)
38
+ raise Tebako::Error, "Could not patch #{fname} because it does not exist." unless File.exist?(fname)
39
+
40
+ puts " ... patching #{fname}"
41
+ restore_and_save(fname)
42
+ contents = File.read(fname)
43
+ mapping.each { |pattern, subst| contents.sub!(pattern, subst) }
44
+ File.open(fname, "w") { |file| file << contents }
45
+ end
46
+
47
+ def get_prefix_macos(package)
38
48
  out, st = Open3.capture2("brew --prefix #{package}")
39
49
  raise Tebako::Error, "brew --prefix #{package} failed with code #{st.exitstatus}" unless st.exitstatus.zero?
40
50
 
41
51
  out
42
52
  end
43
53
 
54
+ def get_prefix_linux(package)
55
+ out, st = Open3.capture2("pkg-config --variable=libdir #{package}")
56
+ unless st.exitstatus.zero?
57
+ raise Tebako::Error,
58
+ "pkg-config --variable=libdir #{package} failed with code #{st.exitstatus}"
59
+ end
60
+
61
+ out
62
+ end
63
+
64
+ def recreate(dirname)
65
+ FileUtils.rm_rf(dirname, noop: nil, verbose: nil, secure: true)
66
+ FileUtils.mkdir(dirname)
67
+ end
68
+
69
+ def restore_and_save(fname)
70
+ raise Tebako::Error, "Could not save #{fname} because it does not exist." unless File.exist?(fname)
71
+
72
+ old_fname = "#{fname}.old"
73
+ if File.exist?(old_fname)
74
+ FileUtils.rm_f(fname)
75
+ File.rename(old_fname, fname)
76
+ end
77
+ FileUtils.cp(fname, old_fname)
78
+ end
79
+
80
+ def restore_and_save_files(files, ruby_source_dir)
81
+ files.each do |fname|
82
+ restore_and_save "#{ruby_source_dir}/#{fname}"
83
+ end
84
+ end
85
+
44
86
  def ruby3x?(ruby_ver)
45
87
  ruby_ver[0] == "3"
46
88
  end
@@ -53,6 +95,30 @@ module Tebako
53
95
  ruby3x?(ruby_ver) && ruby_ver[2].to_i >= 2
54
96
  end
55
97
 
98
+ def ruby32only?(ruby_ver)
99
+ ruby3x?(ruby_ver) && ruby_ver[2].to_i == 2
100
+ end
101
+
102
+ def ruby33?(ruby_ver)
103
+ ruby3x?(ruby_ver) && ruby_ver[2].to_i >= 3
104
+ end
105
+
106
+ # Sets up temporary environment variables and yields to the
107
+ # block. When the block exits, the environment variables are set
108
+ # back to their original values.
109
+ def with_env(hash)
110
+ old = {}
111
+ hash.each do |k, v|
112
+ old[k] = ENV.fetch(k, nil)
113
+ ENV[k] = v
114
+ end
115
+ begin
116
+ yield
117
+ ensure
118
+ hash.each_key { |k| ENV[k] = old[k] }
119
+ end
120
+ end
121
+
56
122
  def yaml_reference(ruby_ver)
57
123
  ruby32?(ruby_ver) ? "-l:libyaml.a" : ""
58
124
  end
@@ -168,32 +168,24 @@ module Tebako
168
168
  ["dln.c", "static const char funcname_prefix[sizeof(FUNCNAME_PREFIX) - 1] = FUNCNAME_PREFIX;"]
169
169
  ].freeze
170
170
 
171
- TEMPLATE_MAKEFILE_IN_BASE_PATCH_ONE = {
172
- "LIBS = @LIBS@ $(EXTLIBS)" => <<~SUBST
173
- # -- Start of tebako patch --
174
- LIBS = $(MAINLIBS) @LIBS@
175
- # -- End of tebako patch --
176
- SUBST
177
- }.freeze
178
-
179
- TEMPLATE_MAKEFILE_IN_BASE_PATTERN_TWO_PRE_3_1 =
171
+ TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_1 =
180
172
  "\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
181
173
  "$(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
182
174
 
183
- TEMPLATE_MAKEFILE_IN_BASE_PATCH_TWO_PRE_3_1 =
175
+ TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1 =
184
176
  "# -- Start of tebako patch --\n" \
185
177
  "\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
186
- "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(LIBS) $(OUTFLAG)$@\n" \
178
+ "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
187
179
  "# -- End of tebako patch --"
188
180
 
189
- TEMPLATE_MAKEFILE_IN_BASE_PATTERN_TWO =
190
- "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
191
- "$(EXTOBJS) $(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
181
+ TEMPLATE_MAKEFILE_IN_BASE_PATTERN =
182
+ "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) " \
183
+ "$(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
192
184
 
193
- TEMPLATE_MAKEFILE_IN_BASE_PATCH_TWO =
185
+ TEMPLATE_MAKEFILE_IN_BASE_PATCH =
194
186
  "# -- Start of tebako patch --\n" \
195
187
  "\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) " \
196
- "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(LIBS) $(OUTFLAG)$@\n" \
188
+ "$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
197
189
  "# -- End of tebako patch --"
198
190
 
199
191
  C_FILE_SUBST = <<~SUBST
@@ -259,17 +251,28 @@ module Tebako
259
251
 
260
252
  }.freeze
261
253
 
254
+ LINUX_PATCHES = {
255
+ "ext/extmk.rb" => {
256
+ "mf.macro \"EXTLIBS\", $extlibs" => "# mf.macro \"EXTLIBS\", $extlibs tebako patched"
257
+ }
258
+ }.freeze
259
+
262
260
  # rubocop:disable Style/WordArray
261
+
262
+ # NOTE: folly provides build-in implementation of jemalloc
263
+
263
264
  DARWIN_BREW_LIBS = [
264
- ["openssl@1.1", "ssl"], ["openssl@1.1", "crypto"], ["zlib", "z"], ["gdbm", "gdbm"],
265
- ["readline", "readline"], ["libffi", "ffi"], ["ncurses", "ncurses"], ["fmt", "fmt"],
266
- ["lz4", "lz4"], ["xz", "lzma"], ["libyaml", "yaml"],
265
+ ["zlib", "z"], ["gdbm", "gdbm"], ["readline", "readline"], ["libffi", "ffi"],
266
+ ["ncurses", "ncurses"], ["fmt", "fmt"], ["lz4", "lz4"], ["xz", "lzma"],
267
+ ["libyaml", "yaml"], ["boost", "boost_chrono"],
267
268
  ["double-conversion", "double-conversion"]
268
269
  ].freeze
269
270
 
270
- DARWIN_BREW_LIBS_32 = [["libyaml", "yaml"]].freeze
271
+ DARWIN_BREW_LIBS_PRE_31 = [["openssl@1.1", "ssl"], ["openssl@1.1", "crypto"]].freeze
272
+
273
+ DARWIN_BREW_LIBS_31 = [["libyaml", "yaml"], ["openssl@3", "ssl"], ["openssl@3", "crypto"]].freeze
271
274
 
272
- DARWIN_DEP_LIBS = ["glog", "gflags"].freeze
275
+ DARWIN_DEP_LIBS = ["glog", "gflags", "brotlienc", "brotlidec", "brotlicommon"].freeze
273
276
  # rubocop:enable Style/WordArray
274
277
  end
275
278
  # rubocop:enable Metrics/ModuleLength
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright (c) 2021-2023 [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
  #
@@ -30,6 +30,7 @@ require "fileutils"
30
30
  require_relative "error"
31
31
  require_relative "packager/pass1"
32
32
  require_relative "packager/pass2"
33
+ require_relative "packager/patch_helpers"
33
34
 
34
35
  # Tebako - an executable packager
35
36
  module Tebako
@@ -62,20 +63,45 @@ module Tebako
62
63
  "TEBAKO_PASS_THROUGH" => "1"
63
64
  }.freeze
64
65
 
66
+ # Magic version numbers used to ensure compatibility for Ruby 2.7.x, 3.0.x
67
+ # These are the minimal versions required to provide linux-gnu / linux-musl differentiantion by bundler
68
+ # Ruby 3.1+ default bubdler/rubygems versions work correctly out of the box
69
+ BUNDLER_VERSION = "2.4.22"
70
+ RUBYGEMS_VERSION = "3.4.22"
71
+
65
72
  class << self
73
+ # Deploy
74
+ def deploy(src_dir, tbd, gflength)
75
+ puts "-- Running deploy script"
76
+
77
+ ruby_ver = ruby_version(tbd)
78
+ update_rubygems(tbd, "#{src_dir}/lib", ruby_ver, RUBYGEMS_VERSION)
79
+ install_gem tbd, "tebako-runtime"
80
+ install_gem tbd, "bundler", (PatchHelpers.ruby31?(ruby_ver) ? nil : BUNDLER_VERSION) if gflength.to_i != 0
81
+ end
82
+
83
+ # Deploy
84
+ def init(stash_dir, src_dir, pre_dir, bin_dir)
85
+ puts "-- Running init script"
86
+
87
+ puts " ... creating packaging environment at #{src_dir}"
88
+ PatchHelpers.recreate([src_dir, pre_dir, bin_dir])
89
+ FileUtils.cp_r "#{stash_dir}/.", src_dir
90
+ end
91
+
66
92
  # Pass1
67
93
  # Executed before Ruby build, patching ensures that Ruby itself is linked statically
68
94
  def pass1(ostype, ruby_source_dir, mount_point, src_dir, ruby_ver)
69
95
  puts "-- Running pass1 script"
70
96
 
71
- recreate(src_dir)
97
+ PatchHelpers.recreate(src_dir)
72
98
  do_patch(Pass1.get_patch_map(ostype, mount_point, ruby_ver), ruby_source_dir)
73
99
 
74
100
  # Roll back pass2 patches
75
101
  # Just in case we are recovering after some error
76
- restore_and_save_files(FILES_TO_RESTORE, ruby_source_dir)
77
- restore_and_save_files(FILES_TO_RESTORE_MUSL, ruby_source_dir) if ostype =~ /linux-musl/
78
- restore_and_save_files(FILES_TO_RESTORE_MSYS, ruby_source_dir) if ostype =~ /msys/
102
+ PatchHelpers.restore_and_save_files(FILES_TO_RESTORE, ruby_source_dir)
103
+ PatchHelpers.restore_and_save_files(FILES_TO_RESTORE_MUSL, ruby_source_dir) if ostype =~ /linux-musl/
104
+ PatchHelpers.restore_and_save_files(FILES_TO_RESTORE_MSYS, ruby_source_dir) if ostype =~ /msys/
79
105
  end
80
106
 
81
107
  # Pass2
@@ -100,81 +126,54 @@ module Tebako
100
126
  # end
101
127
 
102
128
  puts " ... saving pristine ruby environment to #{stash_dir}"
103
- recreate(stash_dir)
129
+ PatchHelpers.recreate(stash_dir)
104
130
  FileUtils.cp_r "#{src_dir}/.", stash_dir
105
131
  end
106
132
 
107
- # Deploy
108
- def deploy(stash_dir, src_dir, pre_dir, bin_dir, tbd)
109
- puts "-- Running deploy script"
110
-
111
- puts " ... creating packaging environment at #{src_dir}"
112
- recreate([src_dir, pre_dir, bin_dir])
113
- FileUtils.cp_r "#{stash_dir}/.", src_dir
114
-
115
- install_gem tbd, "tebako-runtime"
116
- end
117
-
118
133
  private
119
134
 
120
- def install_gem(tbd, name)
121
- puts " ... installing #{name} gem"
122
- with_env(DEPLOY_ENV) do
123
- out, st = Open3.capture2e("#{tbd}/gem", "install", name.to_s, "--no-doc")
135
+ def install_gem(tbd, name, ver = nil)
136
+ puts " ... installing #{name} gem#{" version #{ver}" if ver}"
137
+ PatchHelpers.with_env(DEPLOY_ENV) do
138
+ params = ["#{tbd}/gem", "install", name.to_s]
139
+ params.push("-v", ver.to_s) if ver
140
+
141
+ out, st = Open3.capture2e(*params)
124
142
  raise Tebako::Error, "Failed to install #{name} (#{st}):\n #{out}" unless st.exitstatus.zero?
125
143
  end
126
144
  end
127
145
 
128
146
  def do_patch(patch_map, root)
129
- patch_map.each { |fname, mapping| patch_file("#{root}/#{fname}", mapping) }
147
+ patch_map.each { |fname, mapping| PatchHelpers.patch_file("#{root}/#{fname}", mapping) }
130
148
  end
131
149
 
132
- def patch_file(fname, mapping)
133
- raise Tebako::Error, "Could not patch #{fname} because it does not exist." unless File.exist?(fname)
150
+ def ruby_version(tbd)
151
+ ruby_version = nil
152
+ PatchHelpers.with_env(DEPLOY_ENV) do
153
+ out, st = Open3.capture2e("#{tbd}/ruby", "--version")
154
+ raise Tebako::Error, "Failed to run ruby --version" unless st.exitstatus.zero?
134
155
 
135
- puts " ... patching #{fname}"
136
- restore_and_save(fname)
137
- contents = File.read(fname)
138
- mapping.each { |pattern, subst| contents.sub!(pattern, subst) }
139
- File.open(fname, "w") { |file| file << contents }
140
- end
141
-
142
- def recreate(dirname)
143
- FileUtils.rm_rf(dirname, noop: nil, verbose: nil, secure: true)
144
- FileUtils.mkdir(dirname)
145
- end
146
-
147
- def restore_and_save(fname)
148
- raise Tebako::Error, "Could not save #{fname} because it does not exist." unless File.exist?(fname)
156
+ match = out.match(/ruby (\d+\.\d+\.\d+)/)
157
+ raise Tebako::Error, "Failed to parse Ruby version from #{out}" unless match
149
158
 
150
- old_fname = "#{fname}.old"
151
- if File.exist?(old_fname)
152
- FileUtils.rm_f(fname)
153
- File.rename(old_fname, fname)
159
+ ruby_version = match[1]
154
160
  end
155
- FileUtils.cp(fname, old_fname)
161
+ ruby_version
156
162
  end
157
163
 
158
- def restore_and_save_files(files, ruby_source_dir)
159
- files.each do |fname|
160
- restore_and_save "#{ruby_source_dir}/#{fname}"
161
- end
162
- end
164
+ def update_rubygems(tbd, tld, ruby_ver, gem_ver)
165
+ return if PatchHelpers.ruby31?(ruby_ver)
163
166
 
164
- # Sets up temporary environment variables and yields to the
165
- # block. When the block exits, the environment variables are set
166
- # back to their original values.
167
- def with_env(hash)
168
- old = {}
169
- hash.each do |k, v|
170
- old[k] = ENV.fetch(k, nil)
171
- ENV[k] = v
172
- end
173
- begin
174
- yield
175
- ensure
176
- hash.each { |k, _v| ENV[k] = old[k] }
167
+ puts " ... updating rubygems to #{gem_ver}"
168
+ PatchHelpers.with_env(DEPLOY_ENV) do
169
+ out, st = Open3.capture2e("#{tbd}/gem", "update", "--no-doc", "--system", gem_ver.to_s)
170
+ raise Tebako::Error, "Failed to update rubugems to #{gem_ver} (#{st}):\n #{out}" unless st.exitstatus.zero?
177
171
  end
172
+ ruby_api_ver = ruby_ver.split(".")[0..1].join(".")
173
+ # Autoload cannot handle statically linked openssl extension
174
+ # Changing it to require seems to be the simplest solution
175
+ PatchHelpers.patch_file("#{tld}/ruby/site_ruby/#{ruby_api_ver}.0/rubygems/openssl.rb",
176
+ { "autoload :OpenSSL, \"openssl\"" => "require \"openssl\"" })
178
177
  end
179
178
  end
180
179
  end
@@ -26,5 +26,5 @@
26
26
  # POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  module Tebako
29
- VERSION = "0.5.4"
29
+ VERSION = "0.5.6"
30
30
  end
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  *
3
- * Copyright (c) 2021-2022 [Ribose Inc](https://www.ribose.com).
3
+ * Copyright (c) 2021-2023 [Ribose Inc](https://www.ribose.com).
4
4
  * All rights reserved.
5
5
  * This file is a part of tebako
6
6
  *
@@ -34,4 +34,4 @@ namespace tebako {
34
34
  const char * fs_mount_point = "@FS_MOUNT_POINT@";
35
35
  const char * fs_entry_point = "@FS_ENTRY_POINT@";
36
36
  INCBIN(fs, "@DATA_BIN_FILE@");
37
- }
37
+ }
data/version.txt CHANGED
@@ -1 +1 @@
1
- 0.5.4
1
+ 0.5.6
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.4
4
+ version: 0.5.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-08-11 00:00:00.000000000 Z
11
+ date: 2024-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  requirements: []
127
- rubygems_version: 3.4.10
127
+ rubygems_version: 3.5.3
128
128
  signing_key:
129
129
  specification_version: 4
130
130
  summary: Packager for Ruby executables