tebako 0.5.4 → 0.5.6

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: 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