tebako 0.7.3 → 0.7.4
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 +9 -14
- data/README.adoc +10 -7
- data/exe/tebako-packager +10 -20
- data/lib/tebako/cli.rb +2 -2
- data/lib/tebako/deploy_helper.rb +18 -5
- data/lib/tebako/packager/patch_helpers.rb +8 -0
- data/lib/tebako/packager/patch_libraries.rb +2 -3
- data/lib/tebako/packager.rb +15 -13
- data/lib/tebako/stripper.rb +30 -7
- data/lib/tebako/version.rb +1 -1
- data/version.txt +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f401cd856745a3bf5936d3805342314d03b2fb08d6972c3a3c80164333af135c
|
4
|
+
data.tar.gz: 6c6db56b7763e6e0412539b20a0d6b5f679a1da55ceb8cc722293315df2f3cea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '028f3c468930c81829d693900dc9adb10a477877fdb5f65376b3c3f3a846672845389e83d4f361a207a15f1c4e824904fb4de88363c04aeb74b547504a03a01a'
|
7
|
+
data.tar.gz: a7aadebf1ec8b478e156d571ef9e7f48cb50965efdf1c629b895b96a039a8ffd116722460a80d042ab97e43a15ded8843148e0469079744f3ed8c6e5a55973bc
|
data/CMakeLists.txt
CHANGED
@@ -116,7 +116,7 @@ set(IS_MUSL OFF)
|
|
116
116
|
set(IS_MSYS OFF)
|
117
117
|
set(IS_DARWIN OFF)
|
118
118
|
set(RB_W32 OFF)
|
119
|
-
set(RUBY_WITHOUT_EXT "dbm,win32,win32ole
|
119
|
+
set(RUBY_WITHOUT_EXT "dbm,win32,win32ole,-test-\*")
|
120
120
|
set(RUBY_NAME "ruby")
|
121
121
|
set(RUBY_SUFFIX "")
|
122
122
|
set(EXE_SUFFIX "")
|
@@ -131,7 +131,7 @@ elseif("${OSTYPE_TXT}" MATCHES "^msys*")
|
|
131
131
|
set(IS_MSYS ON)
|
132
132
|
# set(DWARFS_PRELOAD ON)
|
133
133
|
set(RB_W32 ON)
|
134
|
-
set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline
|
134
|
+
set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline,-test-\*")
|
135
135
|
#set(RUBY_SUFFIX "w")
|
136
136
|
set(EXE_SUFFIX ".exe")
|
137
137
|
set(CMD_SUFFIX ".cmd")
|
@@ -462,7 +462,6 @@ else (${SETUP_MODE})
|
|
462
462
|
)
|
463
463
|
|
464
464
|
add_custom_target(packaged_filesystem
|
465
|
-
COMMAND ruby ${EXE}/tebako-packager strip ${OSTYPE_TXT} ${DATA_SRC_DIR}
|
466
465
|
COMMAND ${GNU_BASH} -c "chmod +x ${DEPS_BIN_DIR}/mkdwarfs${EXE_SUFFIX}"
|
467
466
|
# No progress below is critical since in reporting mode mkdwarfs tries to work directly with terminal
|
468
467
|
# and it creates issues for stderr redirects (&2 > 1) used by Ninja and our test srcipts
|
@@ -487,22 +486,18 @@ else (${SETUP_MODE})
|
|
487
486
|
add_dependencies(tebako-fs packaged_filesystem)
|
488
487
|
|
489
488
|
if (${RUBY_VER} VERSION_LESS "3.0.0")
|
490
|
-
add_custom_target(
|
489
|
+
add_custom_target(tebako
|
491
490
|
COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ${RUBY_MAKEFILE} -j${NCORES}
|
492
|
-
|
491
|
+
COMMAND ruby ${EXE}/tebako-packager finalize ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${APP_NAME}
|
492
|
+
)
|
493
493
|
else()
|
494
|
-
add_custom_target(
|
494
|
+
add_custom_target(tebako
|
495
495
|
COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ruby ${RUBY_MAKEFILE} -j${NCORES}
|
496
496
|
COMMAND ${CMAKE_COMMAND} -E chdir ${RUBY_SOURCE_DIR} make ${RUBY_MAKEFILE} -j${NCORES}
|
497
|
-
|
497
|
+
COMMAND ruby ${EXE}/tebako-packager finalize ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${APP_NAME}
|
498
|
+
)
|
498
499
|
endif()
|
499
500
|
|
500
|
-
add_dependencies(
|
501
|
-
|
502
|
-
add_custom_target(tebako ALL
|
503
|
-
COMMAND ${CMAKE_COMMAND} -E copy ${RUBY_SOURCE_DIR}/ruby${RUBY_SUFFIX}${EXE_SUFFIX} ${APP_NAME}${EXE_SUFFIX}
|
504
|
-
COMMAND ${CMAKE_COMMAND} -E echo "Tebako packaging has completed"
|
505
|
-
DEPENDS patched_ruby
|
506
|
-
)
|
501
|
+
add_dependencies(tebako setup tebako-fs)
|
507
502
|
|
508
503
|
endif(${SETUP_MODE})
|
data/README.adoc
CHANGED
@@ -38,7 +38,15 @@ The Tebako packager is tested on the following platforms:
|
|
38
38
|
* MacOS: macOS 12 (Monterey), 13 (Ventura), 14 (Sonoma)
|
39
39
|
* Windows: 2019, 2022 (using MinGW ucrt64 toolchain)
|
40
40
|
|
41
|
-
|
41
|
+
There are two known Windows issues:
|
42
|
+
|
43
|
+
* tebako may face errors related to CMake path length limitations (https://gitlab.kitware.com/cmake/cmake/-/issues/25936).
|
44
|
+
This error may affect not tebako itself but the gems that need to be package and use CMake to build native extensions.
|
45
|
+
There is no workaround for this issue as it looks like is a limitation of the manifest used to build CMake executable.
|
46
|
+
* MSys strip utility creates broken executable when tebako image is processed. Linking with '-s' flag produces unusable
|
47
|
+
executables as well.
|
48
|
+
Until this issue (https://github.com/tamatebako/tebako/issues/172) is resolved we plan to produce an Windows executable
|
49
|
+
with debug information unstripped. You can opt to run 'strip -S' manually, it most cases it works.
|
42
50
|
|
43
51
|
== Supported Ruby versions
|
44
52
|
|
@@ -135,7 +143,7 @@ To ensure the correct version of bison is picked, run this command before the bu
|
|
135
143
|
|
136
144
|
[source,sh]
|
137
145
|
----
|
138
|
-
export PATH="$(brew --prefix bison)/bin:$PATH"
|
146
|
+
export PATH="$(brew --prefix bison)/bin:$PATH"
|
139
147
|
----
|
140
148
|
|
141
149
|
=== Windows (workstation 10, 11; Server 2019, 2022)
|
@@ -151,11 +159,6 @@ Once it is installed use the following commands:
|
|
151
159
|
fmt glog dlfcn gtest autotools ncurses libyaml
|
152
160
|
----
|
153
161
|
|
154
|
-
Please note that on Windows tebako may face issues related by CMake path length limitations.
|
155
|
-
(https://gitlab.kitware.com/cmake/cmake/-/issues/25936)
|
156
|
-
This error may affect not tebako itself but the gems that need to be package and use CMake to build native extensions.
|
157
|
-
There is no workaround for this issue as it lloks like is a limitation of the manifest used to build CMake executable.
|
158
|
-
|
159
162
|
== Installation
|
160
163
|
|
161
164
|
=== General
|
data/exe/tebako-packager
CHANGED
@@ -48,26 +48,7 @@ begin
|
|
48
48
|
end
|
49
49
|
|
50
50
|
Tebako::Packager.pass1(ARGV[1], ARGV[2], ARGV[3], ARGV[4], ARGV[5])
|
51
|
-
when "stash"
|
52
|
-
# ARGV[0] -- command
|
53
|
-
# ARGV[1] -- DATA_SRC_DIR
|
54
|
-
# ARGV[2] -- RUBY_STASH_DIR
|
55
|
-
unless ARGV.length == 3
|
56
|
-
raise Tebako::Error,
|
57
|
-
"tebako-packager stash command expects 3 arguments, #{ARGV.length} has been provided."
|
58
|
-
end
|
59
|
-
|
60
|
-
Tebako::Packager.stash(ARGV[1], ARGV[2])
|
61
|
-
when "strip"
|
62
|
-
# ARGV[0] -- command
|
63
|
-
# ARGV[1] -- OSTYPE
|
64
|
-
# ARGV[2] -- DATA_SRC_DIR
|
65
|
-
unless ARGV.length == 3
|
66
|
-
raise Tebako::Error,
|
67
|
-
"tebako-packager strip command expects 3 arguments, #{ARGV.length} has been provided."
|
68
|
-
end
|
69
51
|
|
70
|
-
Tebako::Stripper.strip(ARGV[1], ARGV[2])
|
71
52
|
when "pass1a"
|
72
53
|
# ARGV[0] -- command
|
73
54
|
# ARGV[1] -- RUBY_SOURCE_DIR
|
@@ -114,6 +95,16 @@ begin
|
|
114
95
|
# That shall match CMakeLists.txt settings
|
115
96
|
Tebako::Packager.deploy(ARGV[1], ARGV[4], ARGV[5], ARGV[11], ARGV[7], ARGV[8], ARGV[9])
|
116
97
|
|
98
|
+
when "finalize"
|
99
|
+
# ARGV[0] -- command
|
100
|
+
# ARGV[1] -- OSTYPE
|
101
|
+
# ARGV[2] -- RUBY_SOURCE_DIR
|
102
|
+
# ARGV[3] -- APP_NAME
|
103
|
+
unless ARGV.length == 4
|
104
|
+
raise Tebako::Error,
|
105
|
+
"tebako-packager finalize command expects 4 arguments, #{ARGV.length} has been provided."
|
106
|
+
end
|
107
|
+
Tebako::Packager.finalize(ARGV[1], ARGV[2], ARGV[3])
|
117
108
|
else
|
118
109
|
raise Tebako::Error, "tebako-packager cannot process #{ARGV[0]} command"
|
119
110
|
end
|
@@ -121,5 +112,4 @@ rescue Tebako::Error => e
|
|
121
112
|
puts "tebako-packager failed: #{e.message} [#{e.error_code}]"
|
122
113
|
exit(e.error_code)
|
123
114
|
end
|
124
|
-
|
125
115
|
exit(0)
|
data/lib/tebako/cli.rb
CHANGED
@@ -61,8 +61,8 @@ module Tebako
|
|
61
61
|
def clean_ruby
|
62
62
|
puts "Cleaning Ruby sources from tebako packaging environment"
|
63
63
|
suffix = options["Ruby"].nil? ? "" : "_#{options["Ruby"]}"
|
64
|
-
nmr = "src/
|
65
|
-
nms = "
|
64
|
+
nmr = "src/_ruby#{suffix}*"
|
65
|
+
nms = "stash#{suffix}*"
|
66
66
|
FileUtils.rm_rf(Dir.glob(File.join(deps, nmr)), secure: true)
|
67
67
|
FileUtils.rm_rf(Dir.glob(File.join(deps, nms)), secure: true)
|
68
68
|
end
|
data/lib/tebako/deploy_helper.rb
CHANGED
@@ -29,6 +29,7 @@ require "fileutils"
|
|
29
29
|
require "find"
|
30
30
|
|
31
31
|
require_relative "error"
|
32
|
+
require_relative "packager/patch_helpers"
|
32
33
|
|
33
34
|
# Tebako - an executable packager
|
34
35
|
module Tebako
|
@@ -65,11 +66,16 @@ module Tebako
|
|
65
66
|
end
|
66
67
|
|
67
68
|
def deploy
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
69
|
+
Packager::PatchHelpers.with_env(deploy_env) do
|
70
|
+
unless Packager::PatchHelpers.ruby31?(@ruby_ver)
|
71
|
+
update_rubygems
|
72
|
+
patch_after_rubygems_update(@target_dir, @ruby_api_version)
|
73
|
+
end
|
74
|
+
system("#{gem_command} env")
|
75
|
+
install_gem("tebako-runtime")
|
76
|
+
install_gem("bundler", BUNDLER_VERSION) if needs_bundler?
|
77
|
+
deploy_solution
|
78
|
+
end
|
73
79
|
end
|
74
80
|
|
75
81
|
def deploy_env
|
@@ -264,6 +270,13 @@ module Tebako
|
|
264
270
|
end
|
265
271
|
end
|
266
272
|
|
273
|
+
def patch_after_rubygems_update(target_dir, ruby_api_ver)
|
274
|
+
# Autoload cannot handle statically linked openssl extension
|
275
|
+
# Changing it to require seems to be the simplest solution
|
276
|
+
Packager::PatchHelpers.patch_file("#{target_dir}/lib/ruby/site_ruby/#{ruby_api_ver}/rubygems/openssl.rb",
|
277
|
+
{ "autoload :OpenSSL, \"openssl\"" => "require \"openssl\"" })
|
278
|
+
end
|
279
|
+
|
267
280
|
def run_with_capture(args)
|
268
281
|
puts " ... @ #{args.join(" ")}"
|
269
282
|
out, st = Open3.capture2e(*args)
|
@@ -62,10 +62,18 @@ module Tebako
|
|
62
62
|
out
|
63
63
|
end
|
64
64
|
|
65
|
+
def exe_suffix(ostype)
|
66
|
+
msys?(ostype) ? ".exe" : ""
|
67
|
+
end
|
68
|
+
|
65
69
|
def msys?(ostype)
|
66
70
|
ostype =~ /msys|cygwin|mingw/
|
67
71
|
end
|
68
72
|
|
73
|
+
def macos?(ostype)
|
74
|
+
ostype =~ /darwin/
|
75
|
+
end
|
76
|
+
|
69
77
|
def patch_c_file_pre(pattern)
|
70
78
|
{
|
71
79
|
pattern => "#{PatchLiterals::C_FILE_SUBST}\n#{pattern}"
|
@@ -40,13 +40,12 @@ module Tebako
|
|
40
40
|
DARWIN_BREW_LIBS = [
|
41
41
|
["zlib", "z"], ["gdbm", "gdbm"], ["readline", "readline"], ["libffi", "ffi"],
|
42
42
|
["ncurses", "ncurses"], ["fmt", "fmt"], ["lz4", "lz4"], ["xz", "lzma"],
|
43
|
-
["libyaml", "yaml"], ["boost", "boost_chrono"],
|
44
|
-
["double-conversion", "double-conversion"]
|
43
|
+
["libyaml", "yaml"], ["boost", "boost_chrono"], ["double-conversion", "double-conversion"]
|
45
44
|
].freeze
|
46
45
|
|
47
46
|
DARWIN_BREW_LIBS_PRE_31 = [["openssl@1.1", "ssl"], ["openssl@1.1", "crypto"]].freeze
|
48
47
|
|
49
|
-
DARWIN_BREW_LIBS_31 = [["
|
48
|
+
DARWIN_BREW_LIBS_31 = [["openssl@3", "ssl"], ["openssl@3", "crypto"]].freeze
|
50
49
|
|
51
50
|
DARWIN_DEP_LIBS = ["glog", "gflags", "brotlienc", "brotlidec", "brotlicommon"].freeze
|
52
51
|
# rubocop:enable Style/WordArray
|
data/lib/tebako/packager.rb
CHANGED
@@ -31,6 +31,7 @@ require "pathname"
|
|
31
31
|
|
32
32
|
require_relative "error"
|
33
33
|
require_relative "deploy_helper"
|
34
|
+
require_relative "stripper"
|
34
35
|
require_relative "packager/pass1"
|
35
36
|
require_relative "packager/pass1a"
|
36
37
|
require_relative "packager/pass2"
|
@@ -79,14 +80,22 @@ module Tebako
|
|
79
80
|
|
80
81
|
deploy_helper = Tebako::DeployHelper.new(fs_root, fs_entrance, fs_mount_point, target_dir, pre_dir)
|
81
82
|
deploy_helper.config(os_type, ruby_ver)
|
83
|
+
deploy_helper.deploy
|
84
|
+
Tebako::Stripper.strip(os_type, target_dir)
|
85
|
+
end
|
82
86
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
87
|
+
def finalize(os_type, src_dir, app_name)
|
88
|
+
exe_suffix = Packager::PatchHelpers.exe_suffix(os_type)
|
89
|
+
src_name = File.join(src_dir, "ruby#{exe_suffix}")
|
90
|
+
package_name = "#{app_name}#{exe_suffix}"
|
91
|
+
# [TODO] On MSys strip sometimes creates a broken executable
|
92
|
+
# https://github.com/tamatebako/tebako/issues/172
|
93
|
+
if Packager::PatchHelpers.msys?(os_type)
|
94
|
+
FileUtils.cp(src_name, package_name)
|
95
|
+
else
|
96
|
+
Tebako::Stripper.strip_file(src_name, package_name)
|
89
97
|
end
|
98
|
+
puts "Created tebako package at \"#{package_name}\""
|
90
99
|
end
|
91
100
|
|
92
101
|
# Init
|
@@ -188,13 +197,6 @@ module Tebako
|
|
188
197
|
end
|
189
198
|
ruby_version
|
190
199
|
end
|
191
|
-
|
192
|
-
def patch_after_rubygems_update(target_dir, ruby_api_ver)
|
193
|
-
# Autoload cannot handle statically linked openssl extension
|
194
|
-
# Changing it to require seems to be the simplest solution
|
195
|
-
PatchHelpers.patch_file("#{target_dir}/lib/ruby/site_ruby/#{ruby_api_ver}/rubygems/openssl.rb",
|
196
|
-
{ "autoload :OpenSSL, \"openssl\"" => "require \"openssl\"" })
|
197
|
-
end
|
198
200
|
end
|
199
201
|
end
|
200
202
|
end
|
data/lib/tebako/stripper.rb
CHANGED
@@ -28,12 +28,13 @@
|
|
28
28
|
require "fileutils"
|
29
29
|
require "find"
|
30
30
|
|
31
|
+
require_relative "packager/patch_helpers"
|
32
|
+
|
31
33
|
# Tebako - an executable packager
|
32
34
|
module Tebako
|
33
35
|
# Tebako packaging support (stripper)
|
34
36
|
module Stripper
|
35
|
-
DELETE_EXTENSIONS = %w[o lo obj a lib].freeze
|
36
|
-
STRIP_EXTENSIONS = %w[dll so].freeze
|
37
|
+
DELETE_EXTENSIONS = %w[o lo obj a la lib].freeze
|
37
38
|
BIN_FILES = %w[
|
38
39
|
bundle bundler rbs erb gem irb racc racc2y rake rdoc ri y2racc rdbg typeprof
|
39
40
|
].freeze
|
@@ -47,15 +48,29 @@ module Tebako
|
|
47
48
|
# from memfs or not. For debugging purposes it is very handy to have it here
|
48
49
|
def strip(ostype, src_dir)
|
49
50
|
puts " ... stripping the output"
|
50
|
-
strip_bs(
|
51
|
+
strip_bs(src_dir)
|
51
52
|
strip_fi(ostype, src_dir)
|
52
53
|
strip_li(ostype, src_dir)
|
53
54
|
end
|
54
55
|
|
56
|
+
def strip_file(file_in, file_out = nil)
|
57
|
+
params = ["strip", "-S", file_in]
|
58
|
+
params << "-o" << file_out unless file_out.nil?
|
59
|
+
out, st = Open3.capture2e(*params)
|
60
|
+
|
61
|
+
# Some gems (well, libmspack) has bundled extensions for several architectures)
|
62
|
+
# Getting something like:
|
63
|
+
# strip: Unable to recognise the format of the input file
|
64
|
+
# `/tmp/cirrus-ci-build/o/s/lib/ruby/gems/3.1.0/gems/libmspack-0.11.0/ext/x86_64-linux/libmspack.so'
|
65
|
+
# on aarch64
|
66
|
+
|
67
|
+
puts "Warning: could not strip #{file_in}:\n #{out}" unless st.exitstatus.zero?
|
68
|
+
end
|
69
|
+
|
55
70
|
private
|
56
71
|
|
57
72
|
def get_files(ostype)
|
58
|
-
exe_suffix = ostype
|
73
|
+
exe_suffix = Packager::PatchHelpers.exe_suffix(ostype)
|
59
74
|
files = BIN_FILES.flat_map do |f|
|
60
75
|
[f, "#{f}#{CMD_SUFFIX}", "#{f}#{BAT_SUFFIX}"]
|
61
76
|
end
|
@@ -64,7 +79,7 @@ module Tebako
|
|
64
79
|
files
|
65
80
|
end
|
66
81
|
|
67
|
-
def strip_bs(
|
82
|
+
def strip_bs(src_dir)
|
68
83
|
FileUtils.rm_rf([
|
69
84
|
File.join(src_dir, "share"),
|
70
85
|
File.join(src_dir, "include"),
|
@@ -78,17 +93,25 @@ module Tebako
|
|
78
93
|
end
|
79
94
|
|
80
95
|
def strip_li(ostype, src_dir)
|
96
|
+
sext = strip_extensions(ostype)
|
81
97
|
Find.find(src_dir) do |file|
|
82
98
|
next if File.directory?(file)
|
83
99
|
|
84
100
|
extension = File.extname(file).delete_prefix(".").downcase
|
85
101
|
if DELETE_EXTENSIONS.include?(extension)
|
86
102
|
FileUtils.rm(file)
|
87
|
-
elsif
|
88
|
-
|
103
|
+
elsif sext.include?(extension) # && !Packager::PatchHelpers.msys?(ostype)
|
104
|
+
strip_file(file)
|
89
105
|
end
|
90
106
|
end
|
91
107
|
end
|
108
|
+
|
109
|
+
def strip_extensions(ostype)
|
110
|
+
sext = ["so"]
|
111
|
+
sext << "dll" if Packager::PatchHelpers.msys?(ostype)
|
112
|
+
sext << "dylib" << "bundle" if Packager::PatchHelpers.macos?(ostype)
|
113
|
+
sext
|
114
|
+
end
|
92
115
|
end
|
93
116
|
end
|
94
117
|
end
|
data/lib/tebako/version.rb
CHANGED
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.7.
|
1
|
+
0.7.4
|
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.7.
|
4
|
+
version: 0.7.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-07-
|
11
|
+
date: 2024-07-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|