tebako 0.5.5 → 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 +4 -4
- data/CMakeLists.txt +2 -16
- data/README.adoc +9 -9
- data/common.env +0 -1
- data/exe/tebako-packager +8 -6
- data/lib/tebako/cli_helpers.rb +5 -3
- data/lib/tebako/packager/pass2.rb +1 -1
- data/lib/tebako/packager/patch_helpers.rb +57 -1
- data/lib/tebako/packager.rb +60 -61
- data/lib/tebako/version.rb +1 -1
- data/version.txt +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 23a76520703c1526cb92a3aaeac6c215a117b5dd6f27f18b286c7dc165d95b98
|
|
4
|
+
data.tar.gz: 2078da7a9009225a1d50435dac76b75579068f8683e4f0d5c6f1c80f501a98f8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f1102354529402a3ac5d30830d602f203d0c89ded810e44d4caeabd407ccda5a7b72bda9a03c15732cf451a5716d9875c6d51ae8dfb669af15d4a0c9f1ae255a
|
|
7
|
+
data.tar.gz: ff70d7dfbe6ce10b6689ed97860b87909e18e4a29c44c2d7a0cc1895667121010810b1aa702d2ec6869e844e214ad2be17b66ee67dd58f2fbe8254b984a8fc63
|
data/CMakeLists.txt
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2021-
|
|
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
|
#
|
|
@@ -245,14 +245,6 @@ endif(IS_MSYS)
|
|
|
245
245
|
def_ext_prj_g(INCBIN "348e36b")
|
|
246
246
|
def_ext_prj_g(DWARFS_WR "v0.4.0")
|
|
247
247
|
|
|
248
|
-
if (DEFINED ENV{BUNDLER_VER})
|
|
249
|
-
set(BUNDLER_VER $ENV{BUNDLER_VER})
|
|
250
|
-
set(BUNDLER_ANNOTATION "environment")
|
|
251
|
-
else()
|
|
252
|
-
set(BUNDLER_VER "2.3.22")
|
|
253
|
-
set(BUNDLER_ANNOTATION "default")
|
|
254
|
-
endif()
|
|
255
|
-
|
|
256
248
|
find_library(_LIBNCURSES "libncurses.a")
|
|
257
249
|
if(${_LIBNCURSES} STREQUAL "_LIBNCURSES-NOTFOUND")
|
|
258
250
|
set(WITH_NCURSES_BUILD ON)
|
|
@@ -268,7 +260,6 @@ endif(${RUBY_VER} VERSION_LESS "3.2.0")
|
|
|
268
260
|
|
|
269
261
|
message("Configuration summary:")
|
|
270
262
|
message(STATUS "ruby: v${RUBY_VER} at ${RUBY_SOURCE_DIR}")
|
|
271
|
-
message(STATUS "bundler version: ${BUNDLER_VER} (${BUNDLER_ANNOTATION})")
|
|
272
263
|
if(WITH_OPENSSL_BUILD)
|
|
273
264
|
message(STATUS "openssl: building @${OPENSSL_TAG} at ${OPENSSL_SOURCE_DIR}")
|
|
274
265
|
endif(WITH_OPENSSL_BUILD)
|
|
@@ -511,7 +502,7 @@ else (${SETUP_MODE})
|
|
|
511
502
|
list(LENGTH GEMS GLENGTH)
|
|
512
503
|
|
|
513
504
|
add_custom_target(clean_filesystem
|
|
514
|
-
COMMAND ruby ${EXE}/tebako-packager deploy ${RUBY_STASH_DIR} ${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR} ${
|
|
505
|
+
COMMAND ruby ${EXE}/tebako-packager deploy ${RUBY_STASH_DIR} ${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR} ${GFLENGTH}
|
|
515
506
|
DEPENDS ${RUBY_PRJ}
|
|
516
507
|
)
|
|
517
508
|
if(GSLENGTH GREATER 0)
|
|
@@ -527,8 +518,6 @@ else (${SETUP_MODE})
|
|
|
527
518
|
add_custom_target(source_filesystem
|
|
528
519
|
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
529
520
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
|
|
530
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
531
|
-
${TBD}/gem${CMD_SUFFIX} install bundler -v '${BUNDLER_VER}' --source 'https://rubygems.org/' --no-document --install-dir ${TGD}
|
|
532
521
|
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
533
522
|
${TBD}/bundle${CMD_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
|
|
534
523
|
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
@@ -572,9 +561,6 @@ else (${SETUP_MODE})
|
|
|
572
561
|
${CMAKE_COMMAND} -E false )
|
|
573
562
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
|
|
574
563
|
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
575
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
576
|
-
${TBD}/gem${CMD_SUFFIX} install bundler -v '${BUNDLER_VER}'
|
|
577
|
-
--source 'https://rubygems.org/' --no-document --install-dir ${TGD}
|
|
578
564
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
579
565
|
${TBD}/bundle${CMD_SUFFIX} config build.ffi --disable-system-libffi
|
|
580
566
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
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.
|
|
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.
|
|
44
|
+
* 2.7.8
|
|
45
45
|
* 3.0.6
|
|
46
46
|
* 3.1.4
|
|
47
|
-
* 3.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++
|
|
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-
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
260
|
+
[-R|--Ruby=<2.7.8|3.0.6|3.1.4|3.2.3>]
|
|
261
261
|
----
|
|
262
262
|
|
|
263
263
|
Where:
|
data/common.env
CHANGED
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] --
|
|
82
|
-
|
|
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
|
|
84
|
+
"tebako-packager deploy command expects 6 arguments, #{ARGV.length} has been provided."
|
|
86
85
|
end
|
|
87
|
-
Tebako::Packager.
|
|
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
|
data/lib/tebako/cli_helpers.rb
CHANGED
|
@@ -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
|
#
|
|
@@ -59,10 +59,11 @@ module Tebako
|
|
|
59
59
|
end
|
|
60
60
|
|
|
61
61
|
RUBY_VERSIONS = {
|
|
62
|
-
"2.7.
|
|
62
|
+
"2.7.8" => "c2dab63cbc8f2a05526108ad419efa63a67ed4074dbbcf9fc2b1ca664cb45ba0",
|
|
63
63
|
"3.0.6" => "6e6cbd490030d7910c0ff20edefab4294dfcd1046f0f8f47f78b597987ac683e",
|
|
64
64
|
"3.1.4" => "a3d55879a0dfab1d7141fdf10d22a07dbf8e5cdc4415da1bde06127d5cc3c7b6",
|
|
65
|
-
"3.2.
|
|
65
|
+
"3.2.3" => "af7f1757d9ddb630345988139211f1fd570ff5ba830def1cc7c468ae9b65c9ba",
|
|
66
|
+
"3.3.0" => "96518814d9832bece92a85415a819d4893b307db5921ae1f0f751a9a89a56b7d"
|
|
66
67
|
}.freeze
|
|
67
68
|
|
|
68
69
|
DEFAULT_RUBY_VERSION = "3.1.4"
|
|
@@ -130,6 +131,7 @@ module Tebako
|
|
|
130
131
|
|
|
131
132
|
def prefix
|
|
132
133
|
@prefix ||= if options["prefix"].nil?
|
|
134
|
+
puts "No prefix specified, using ~/.tebako"
|
|
133
135
|
File.expand_path("~/.tebako")
|
|
134
136
|
elsif options["prefix"] == "PWD"
|
|
135
137
|
Dir.pwd
|
|
@@ -140,7 +140,7 @@ module Tebako
|
|
|
140
140
|
# rubocop:enable Metrics/MethodLength
|
|
141
141
|
|
|
142
142
|
def mlibs_subst(ostype, deps_lib_dir, ruby_ver)
|
|
143
|
-
yjit_libs = PatchHelpers.
|
|
143
|
+
yjit_libs = PatchHelpers.ruby32only?(ruby_ver) ? "$(YJIT_LIBS) " : ""
|
|
144
144
|
{
|
|
145
145
|
"MAINLIBS = #{yjit_libs}@MAINLIBS@" =>
|
|
146
146
|
"# -- Start of tebako patch -- \n" \
|
|
@@ -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,6 +34,16 @@ module Tebako
|
|
|
34
34
|
# Ruby patching helpers (pass2)
|
|
35
35
|
module PatchHelpers
|
|
36
36
|
class << self
|
|
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
|
+
|
|
37
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?
|
|
@@ -51,6 +61,28 @@ module Tebako
|
|
|
51
61
|
out
|
|
52
62
|
end
|
|
53
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
|
+
|
|
54
86
|
def ruby3x?(ruby_ver)
|
|
55
87
|
ruby_ver[0] == "3"
|
|
56
88
|
end
|
|
@@ -63,6 +95,30 @@ module Tebako
|
|
|
63
95
|
ruby3x?(ruby_ver) && ruby_ver[2].to_i >= 2
|
|
64
96
|
end
|
|
65
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
|
+
|
|
66
122
|
def yaml_reference(ruby_ver)
|
|
67
123
|
ruby32?(ruby_ver) ? "-l:libyaml.a" : ""
|
|
68
124
|
end
|
data/lib/tebako/packager.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# Copyright (c) 2021-
|
|
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
|
-
|
|
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
|
|
133
|
-
|
|
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
|
-
|
|
136
|
-
|
|
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
|
-
|
|
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
|
-
|
|
161
|
+
ruby_version
|
|
156
162
|
end
|
|
157
163
|
|
|
158
|
-
def
|
|
159
|
-
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
data/lib/tebako/version.rb
CHANGED
data/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.5.
|
|
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
|
+
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:
|
|
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.
|
|
127
|
+
rubygems_version: 3.5.3
|
|
128
128
|
signing_key:
|
|
129
129
|
specification_version: 4
|
|
130
130
|
summary: Packager for Ruby executables
|