tebako 0.7.4 → 0.8.1
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 +23 -27
- data/README.adoc +689 -173
- data/common.env +1 -1
- data/lib/tebako/cli_rubies.rb +3 -5
- data/lib/tebako/packager/pass1.rb +25 -12
- data/lib/tebako/packager/pass2.rb +14 -16
- data/lib/tebako/packager/patch_buildsystem.rb +41 -7
- data/lib/tebako/packager/patch_helpers.rb +0 -4
- data/lib/tebako/packager/patch_libraries.rb +85 -68
- data/lib/tebako/packager/patch_literals.rb +15 -17
- data/lib/tebako/version.rb +1 -1
- data/src/tebako-main.cpp +7 -0
- data/version.txt +1 -1
- metadata +6 -6
data/common.env
CHANGED
data/lib/tebako/cli_rubies.rb
CHANGED
@@ -40,12 +40,10 @@ module Tebako
|
|
40
40
|
RUBY_VERSIONS = {
|
41
41
|
"2.7.8" => "c2dab63cbc8f2a05526108ad419efa63a67ed4074dbbcf9fc2b1ca664cb45ba0",
|
42
42
|
"3.0.7" => "2a3411977f2850431136b0fab8ad53af09fb74df2ee2f4fb7f11b378fe034388",
|
43
|
-
"3.1.4" => "a3d55879a0dfab1d7141fdf10d22a07dbf8e5cdc4415da1bde06127d5cc3c7b6",
|
44
|
-
"3.1.5" => "3685c51eeee1352c31ea039706d71976f53d00ab6d77312de6aa1abaf5cda2c5",
|
45
43
|
"3.1.6" => "0d0dafb859e76763432571a3109d1537d976266be3083445651dc68deed25c22",
|
46
|
-
"3.2.
|
47
|
-
"3.
|
48
|
-
|
44
|
+
"3.2.4" => "c72b3c5c30482dca18b0f868c9075f3f47d8168eaf626d4e682ce5b59c858692",
|
45
|
+
"3.3.3" => "83c05b2177ee9c335b631b29b8c077b4770166d02fa527f3a9f6a40d13f3cce2",
|
46
|
+
"3.3.4" => "fe6a30f97d54e029768f2ddf4923699c416cdbc3a6e96db3e2d5716c7db96a34"
|
49
47
|
}.freeze
|
50
48
|
|
51
49
|
DEFAULT_RUBY_VERSION = "3.1.6"
|
@@ -88,9 +88,23 @@ module Tebako
|
|
88
88
|
SUBST
|
89
89
|
}.freeze
|
90
90
|
|
91
|
-
#
|
92
|
-
#
|
93
|
-
#
|
91
|
+
# The logic for statically linked extensions is broken entirely in the latest Ruby versions.
|
92
|
+
# The code below looks reasonble - we do not set -bundle_loader when building with -with-static-ext option
|
93
|
+
# However Gems bundled with Ruby just ignore with-static-ext option and build extensions as shared libraries
|
94
|
+
# So the -bundler_loader option is required for them to link.
|
95
|
+
# It is strange that it is disabled in any case because this option does not create any issues for static
|
96
|
+
# libraries.
|
97
|
+
# ---------------------------------------------------
|
98
|
+
# elif test "x$EXTSTATIC" = x
|
99
|
+
# then :
|
100
|
+
#
|
101
|
+
# # When building exts as bundles, a mach-o bundle needs to know its loader
|
102
|
+
# # program to bind symbols from the ruby executable
|
103
|
+
# EXTDLDFLAGS="-bundle_loader '\$(BUILTRUBY)'"
|
104
|
+
|
105
|
+
DARWIN_CONFIGURE_PATCH = {
|
106
|
+
"elif test \"x$EXTSTATIC\" = x" => "elif true"
|
107
|
+
}.freeze
|
94
108
|
|
95
109
|
OPENSSL_EXTCONF_RB_SUBST = <<~SUBST
|
96
110
|
# Start of tebako patch
|
@@ -137,11 +151,7 @@ module Tebako
|
|
137
151
|
patch_map = get_base_patch_map(mount_point)
|
138
152
|
|
139
153
|
# ....................................................
|
140
|
-
|
141
|
-
# On MacOS it generates bod EXTDLDFLAGS WITH -bundle_loader <missing parameter>
|
142
|
-
# However, it loooks likes EXTDLDFLAGS are just redundant for final Ruby linkage, so we are
|
143
|
-
# just removing it on pass 2 (at least for now)
|
144
|
-
# patch_map.store("configure", DARWIN_CONFIGURE_PATCH) if ostype =~ /darwin/
|
154
|
+
patch_map.store("configure", DARWIN_CONFIGURE_PATCH) if ostype =~ /darwin/
|
145
155
|
|
146
156
|
# ....................................................
|
147
157
|
# autoload :OpenSSL, "openssl"
|
@@ -178,13 +188,16 @@ module Tebako
|
|
178
188
|
"$(WINMAINOBJ) $(EXTOBJS) $(LIBRUBYARG) $(LIBS) -o $@ # tebako patched",
|
179
189
|
|
180
190
|
"--output-exp=$(RUBY_EXP) \\" =>
|
181
|
-
|
191
|
+
"--output-exp=$(RUBY_EXP) --output-lib=$(LIBRUBY) --output-def=tebako.def \\",
|
192
|
+
|
193
|
+
"--export-all $(LIBRUBY_A) $(LIBS) -o $(PROGRAM)" =>
|
194
|
+
"--export-all $(LIBRUBY_A) $(LIBS) -o program-stub.exe # tebako patched",
|
182
195
|
|
183
|
-
"
|
184
|
-
"
|
196
|
+
"@rm -f $(PROGRAM)" =>
|
197
|
+
"@rm -f program-stub.exe # tebako patched",
|
185
198
|
|
186
199
|
" $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)" =>
|
187
|
-
|
200
|
+
"# tebako patched $(Q) $(LDSHARED) $(DLDFLAGS) $(OBJS) dmyext.o $(SOLIBS) -o $(PROGRAM)",
|
188
201
|
|
189
202
|
"RUBYDEF = $(DLL_BASE_NAME).def" => GNUMAKEFILE_IN_WINMAIN_SUBST
|
190
203
|
}
|
@@ -38,23 +38,26 @@ module Tebako
|
|
38
38
|
class << self
|
39
39
|
def get_patch_map(ostype, deps_lib_dir, ruby_ver)
|
40
40
|
patch_map = get_patch_map_base(ostype, deps_lib_dir, ruby_ver)
|
41
|
-
|
42
41
|
patch_map.store("thread_pthread.c", LINUX_MUSL_THREAD_PTHREAD_PATCH) if ostype =~ /linux-musl/
|
43
|
-
|
44
42
|
if PatchHelpers.msys?(ostype)
|
45
43
|
patch_map.merge!(get_msys_patches(ruby_ver))
|
46
44
|
elsif PatchHelpers.ruby3x?(ruby_ver)
|
47
|
-
# [TODO] Do we really need it for platforms other then Windows ??
|
48
45
|
patch_map.store("common.mk", COMMON_MK_PATCH)
|
49
46
|
end
|
50
|
-
|
51
|
-
patch_map
|
47
|
+
extend_patch_map_r33(patch_map, ostype, deps_lib_dir, ruby_ver)
|
52
48
|
end
|
53
49
|
|
54
50
|
private
|
55
51
|
|
56
52
|
include Tebako::Packager::PatchBuildsystem
|
57
53
|
include Tebako::Packager::PatchLiterals
|
54
|
+
def extend_patch_map_r33(patch_map, ostype, deps_lib_dir, ruby_ver)
|
55
|
+
if PatchHelpers.ruby33?(ruby_ver) || PatchHelpers.msys?(ostype)
|
56
|
+
patch_map.store("config.status",
|
57
|
+
get_config_status_patch(ostype, deps_lib_dir, ruby_ver))
|
58
|
+
end
|
59
|
+
patch_map
|
60
|
+
end
|
58
61
|
|
59
62
|
def get_dir_c_patch(ostype)
|
60
63
|
pattern = PatchHelpers.msys?(ostype) ? "/* define system APIs */" : "#ifdef HAVE_GETATTRLIST"
|
@@ -91,21 +94,17 @@ module Tebako
|
|
91
94
|
end
|
92
95
|
|
93
96
|
def get_util_c_patch(ruby_ver)
|
94
|
-
if PatchHelpers.
|
97
|
+
if PatchHelpers.ruby31?(ruby_ver)
|
95
98
|
PatchHelpers.patch_c_file_post("#endif /* !HAVE_GNU_QSORT_R */")
|
96
99
|
else
|
97
100
|
PatchHelpers.patch_c_file_pre("#ifndef S_ISDIR")
|
98
101
|
end
|
99
102
|
end
|
100
103
|
|
101
|
-
def
|
104
|
+
def get_tool_mkconfig_rb_patch(ostype)
|
105
|
+
subst = PatchHelpers.msys?(ostype) ? TOOL_MKCONFIG_RB_SUBST_MSYS : TOOL_MKCONFIG_RB_SUBST
|
102
106
|
{
|
103
|
-
" if fast[name]" =>
|
104
|
-
"when /RUBYGEMS/; next" =>
|
105
|
-
"when /RUBYGEMS/; next\n\n" \
|
106
|
-
"# Start of tebako patch\n" \
|
107
|
-
"when /MAINLIBS/; val = #{PatchLibraries.msys_base_libs(ruby_ver)}\n" \
|
108
|
-
"# End of tebako patch"
|
107
|
+
" if fast[name]" => subst
|
109
108
|
}
|
110
109
|
end
|
111
110
|
|
@@ -119,10 +118,9 @@ module Tebako
|
|
119
118
|
end
|
120
119
|
|
121
120
|
def get_patch_map_base(ostype, deps_lib_dir, ruby_ver)
|
122
|
-
mcrb_subst = PatchHelpers.msys?(ostype) ? get_msys_mkconfig_rb_patches(ruby_ver) : TOOL_MKCONFIG_RB_PATCH
|
123
121
|
{
|
124
122
|
"template/Makefile.in" => template_makefile_in_patch(ostype, deps_lib_dir, ruby_ver),
|
125
|
-
"tool/mkconfig.rb" =>
|
123
|
+
"tool/mkconfig.rb" => get_tool_mkconfig_rb_patch(ostype),
|
126
124
|
"dir.c" => get_dir_c_patch(ostype), "dln.c" => get_dln_c_patch(ostype, ruby_ver),
|
127
125
|
"io.c" => get_io_c_patch(ostype, ruby_ver), "main.c" => MAIN_C_PATCH,
|
128
126
|
"file.c" => PatchHelpers.patch_c_file_pre("/* define system APIs */"),
|
@@ -135,7 +133,7 @@ module Tebako
|
|
135
133
|
{
|
136
134
|
"MAINLIBS = #{yjit_libs}@MAINLIBS@" =>
|
137
135
|
"# -- Start of tebako patch -- \n" \
|
138
|
-
"MAINLIBS = #{yjit_libs}#{PatchLibraries.mlibs(ostype, deps_lib_dir, ruby_ver)}" \
|
136
|
+
"MAINLIBS = #{yjit_libs}#{PatchLibraries.mlibs(ostype, deps_lib_dir, ruby_ver, true)}\n" \
|
139
137
|
"# -- End of tebako patch -- \n"
|
140
138
|
}
|
141
139
|
end
|
@@ -57,10 +57,14 @@ module Tebako
|
|
57
57
|
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
|
58
58
|
"# -- End of tebako patch --"
|
59
59
|
|
60
|
-
|
60
|
+
TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_3 =
|
61
61
|
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) " \
|
62
62
|
"$(LIBRUBYARG) $(MAINLIBS) $(LIBS) $(EXTLIBS) $(OUTFLAG)$@"
|
63
63
|
|
64
|
+
TEMPLATE_MAKEFILE_IN_BASE_PATTERN =
|
65
|
+
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(XLDFLAGS) $(MAINOBJ) $(EXTOBJS) " \
|
66
|
+
"$(LIBRUBYARG) $(MAINLIBS) $(EXTLIBS) $(OUTFLAG)$@"
|
67
|
+
|
64
68
|
TEMPLATE_MAKEFILE_IN_BASE_PATCH =
|
65
69
|
"# -- Start of tebako patch --\n" \
|
66
70
|
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(MAINOBJ) " \
|
@@ -73,13 +77,23 @@ module Tebako
|
|
73
77
|
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
|
74
78
|
"# -- End of tebako patch --"
|
75
79
|
|
76
|
-
def
|
80
|
+
def template_makefile_in_subst(ostype, ruby_ver)
|
77
81
|
if PatchHelpers.msys?(ostype)
|
78
|
-
|
79
|
-
elsif PatchHelpers.ruby31?(ruby_ver)
|
80
|
-
|
82
|
+
TEMPLATE_MAKEFILE_IN_BASE_PATCH_MSYS
|
83
|
+
elsif !PatchHelpers.ruby31?(ruby_ver)
|
84
|
+
TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1
|
85
|
+
else
|
86
|
+
TEMPLATE_MAKEFILE_IN_BASE_PATCH
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def template_makefile_in_patch_two(ostype, ruby_ver)
|
91
|
+
if !PatchHelpers.ruby31?(ruby_ver)
|
92
|
+
{ TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_1 => template_makefile_in_subst(ostype, ruby_ver) }
|
93
|
+
elsif !PatchHelpers.ruby33?(ruby_ver)
|
94
|
+
{ TEMPLATE_MAKEFILE_IN_BASE_PATTERN_PRE_3_3 => template_makefile_in_subst(ostype, ruby_ver) }
|
81
95
|
else
|
82
|
-
{
|
96
|
+
{ TEMPLATE_MAKEFILE_IN_BASE_PATTERN => template_makefile_in_subst(ostype, ruby_ver) }
|
83
97
|
end
|
84
98
|
end
|
85
99
|
|
@@ -94,10 +108,30 @@ module Tebako
|
|
94
108
|
# End of tebako patch
|
95
109
|
SUBST
|
96
110
|
|
111
|
+
def get_config_status_pattern(ostype)
|
112
|
+
case ostype
|
113
|
+
when /linux-/
|
114
|
+
"S[\"MAINLIBS\"]=\"-lz -lrt -lrt -ldl -lcrypt -lm -lpthread \""
|
115
|
+
when /darwin/
|
116
|
+
"S[\"MAINLIBS\"]=\"-ldl -lobjc -lpthread \""
|
117
|
+
when /msys/
|
118
|
+
"S[\"MAINLIBS\"]=\"-lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi -lbcrypt \""
|
119
|
+
else
|
120
|
+
raise Tebako::Error, "Unknown ostype #{ostype}"
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
def get_config_status_patch(ostype, deps_lib_dir, ruby_ver)
|
125
|
+
{
|
126
|
+
get_config_status_pattern(ostype) =>
|
127
|
+
"S[\"MAINLIBS\"]=\"#{PatchLibraries.mlibs(ostype, deps_lib_dir, ruby_ver, false)}\""
|
128
|
+
}
|
129
|
+
end
|
130
|
+
|
97
131
|
# Other MSYS (GNUMakefile) specific patches
|
98
132
|
# - The same issue with libraries as for Makefile above
|
99
133
|
# - 'Kill' ruby.exp regeneration on pass2
|
100
|
-
# since we want to use
|
134
|
+
# since we want to use output from pass1 for implib generation
|
101
135
|
# [VERY UGLY HACK]
|
102
136
|
# - Introduce LIBRUBY dependency on static extensions
|
103
137
|
# This is an addition to COMMON_MK_PATCH specified above
|
@@ -116,10 +116,6 @@ module Tebako
|
|
116
116
|
ruby3x?(ruby_ver) && ruby_ver[2].to_i >= 1
|
117
117
|
end
|
118
118
|
|
119
|
-
def ruby316?(ruby_ver)
|
120
|
-
ruby3x?(ruby_ver) && ruby_ver[2] == "1" && ruby_ver[4].to_i >= 6
|
121
|
-
end
|
122
|
-
|
123
119
|
def ruby32?(ruby_ver)
|
124
120
|
ruby3x?(ruby_ver) && ruby_ver[2].to_i >= 2
|
125
121
|
end
|
@@ -34,37 +34,104 @@ module Tebako
|
|
34
34
|
module PatchLibraries
|
35
35
|
class << self
|
36
36
|
# rubocop:disable Style/WordArray
|
37
|
-
|
38
|
-
# NOTE: folly provides build-in implementation of jemalloc
|
39
|
-
|
40
37
|
DARWIN_BREW_LIBS = [
|
41
|
-
["zlib", "z"],
|
42
|
-
["ncurses", "ncurses"],
|
43
|
-
["libyaml", "yaml"],
|
38
|
+
["zlib", "z"], ["gdbm", "gdbm"], ["readline", "readline"], ["libffi", "ffi"],
|
39
|
+
["ncurses", "ncurses"], ["fmt", "fmt"], ["lz4", "lz4"], ["xz", "lzma"],
|
40
|
+
["libyaml", "yaml"], ["boost", "boost_chrono"], ["double-conversion", "double-conversion"]
|
44
41
|
].freeze
|
45
42
|
|
46
43
|
DARWIN_BREW_LIBS_PRE_31 = [["openssl@1.1", "ssl"], ["openssl@1.1", "crypto"]].freeze
|
47
44
|
|
48
45
|
DARWIN_BREW_LIBS_31 = [["openssl@3", "ssl"], ["openssl@3", "crypto"]].freeze
|
49
46
|
|
50
|
-
|
47
|
+
DARWIN_DEP_LIBS_1 = ["folly", "fsst", "metadata_thrift", "thrift_light", "xxhash", "zstd"].freeze
|
48
|
+
DARWIN_DEP_LIBS_2 = ["glog", "gflags", "brotlienc", "brotlidec", "brotlicommon"].freeze
|
51
49
|
# rubocop:enable Style/WordArray
|
52
50
|
|
51
|
+
COMMON_LINUX_LIBRARIES = [
|
52
|
+
"-l:libdwarfs-wr.a", "-l:libtebako-fs.a", "-l:libdwarfs.a", "LIBCOMPRESSION",
|
53
|
+
"-l:libfolly.a", "-l:libfsst.a", "-l:libmetadata_thrift.a", "-l:libthrift_light.a",
|
54
|
+
"-l:libxxhash.a", "-l:libfmt.a", "-l:libdouble-conversion.a", "-l:libglog.a",
|
55
|
+
"-l:libgflags.a", "-l:libevent.a"
|
56
|
+
].freeze
|
57
|
+
|
58
|
+
COMMON_ARCHIEVE_LIBRARIES = [
|
59
|
+
"-l:libarchive.a", "-l:liblz4.a", "-l:libz.a", "-l:libzstd.a",
|
60
|
+
"-l:libbrotlienc.a", "-l:libbrotlidec.a", "-l:libbrotlicommon.a", "-l:liblzma.a"
|
61
|
+
].freeze
|
62
|
+
|
63
|
+
LINUX_GNU_LIBRARIES = [
|
64
|
+
"-l:libiberty.a", "-l:libacl.a", "-l:libssl.a", "-l:libcrypto.a",
|
65
|
+
"-l:libgdbm.a", "-l:libreadline.a", "-l:libtinfo.a", "-l:libffi.a",
|
66
|
+
"-l:libncurses.a", "-l:libjemalloc.a", "-l:libcrypt.a", "-l:libanl.a",
|
67
|
+
"LIBYAML", "-l:libboost_system.a", "-l:libboost_chrono.a", "-l:libutil.a",
|
68
|
+
"-l:libstdc++.a", "-lgcc_eh", "-l:libunwind.a", "-l:liblzma.a",
|
69
|
+
"-l:librt.a", "-ldl", "-lpthread", "-lm"
|
70
|
+
].freeze
|
71
|
+
|
72
|
+
LINUX_MUSL_LIBRARIES = [
|
73
|
+
"-l:libiberty.a", "-l:libacl.a", "-l:libssl.a", "-l:libcrypto.a",
|
74
|
+
"-l:libreadline.a", "-l:libgdbm.a", "-l:libffi.a", "-l:libncurses.a",
|
75
|
+
"-l:libjemalloc.a", "-l:libcrypt.a", "LIBYAML", "-l:libboost_system.a",
|
76
|
+
"-l:libboost_chrono.a", "-l:librt.a", "-l:libstdc++.a", "-lgcc_eh",
|
77
|
+
" -l:libunwind.a", "-l:liblzma.a", "-ldl", "-lpthread"
|
78
|
+
].freeze
|
79
|
+
|
80
|
+
MSYS_LIBRARIES = [
|
81
|
+
"-l:liblz4.a", "-l:libz.a", "-l:libzstd.a", "-l:liblzma.a",
|
82
|
+
"-l:libncurses.a", "-l:libunwind.a", "-l:liblzma.a", "-l:libiberty.a",
|
83
|
+
"LIBYAML", "-l:libffi.a", "-l:libboost_system-mt.a", "-l:libboost_chrono-mt.a",
|
84
|
+
"-l:libstdc++.a", "-l:libdl.a", "-static-libgcc", "-static-libstdc++",
|
85
|
+
"-l:libssl.a", "-l:libcrypto.a", "-l:libz.a", "-l:libwinpthread.a",
|
86
|
+
"-lcrypt32", "-lshlwapi", "-lwsock32", "-liphlpapi",
|
87
|
+
"-limagehlp", "-lbcrypt", "-lole32", "-loleaut32",
|
88
|
+
"-luuid", "-lws2_32"
|
89
|
+
].freeze
|
90
|
+
|
91
|
+
def linux_gnu_libraries(ruby_ver, with_compression)
|
92
|
+
libraries = COMMON_LINUX_LIBRARIES + COMMON_ARCHIEVE_LIBRARIES + LINUX_GNU_LIBRARIES
|
93
|
+
linux_libraries(libraries, ruby_ver, with_compression)
|
94
|
+
end
|
95
|
+
|
96
|
+
def linux_musl_libraries(ruby_ver, with_compression)
|
97
|
+
libraries = COMMON_LINUX_LIBRARIES + COMMON_ARCHIEVE_LIBRARIES + LINUX_MUSL_LIBRARIES
|
98
|
+
linux_libraries(libraries, ruby_ver, with_compression)
|
99
|
+
end
|
100
|
+
|
101
|
+
def linux_libraries(libraries, ruby_ver, with_compression)
|
102
|
+
libraries.map! do |lib|
|
103
|
+
if lib == "LIBYAML"
|
104
|
+
PatchHelpers.yaml_reference(ruby_ver)
|
105
|
+
elsif lib == "LIBCOMPRESSION"
|
106
|
+
with_compression ? "-Wl,--push-state,--whole-archive -l:libdwarfs_compression.a -Wl,--pop-state" : ""
|
107
|
+
else
|
108
|
+
lib
|
109
|
+
end
|
110
|
+
end
|
111
|
+
libraries.join(" ")
|
112
|
+
end
|
113
|
+
|
114
|
+
def msys_libraries(ruby_ver, with_compression)
|
115
|
+
libraries = with_compression ? ["-Wl,-Bstatic"] : []
|
116
|
+
libraries = libraries + COMMON_LINUX_LIBRARIES + MSYS_LIBRARIES
|
117
|
+
linux_libraries(libraries, ruby_ver, with_compression)
|
118
|
+
end
|
119
|
+
|
53
120
|
def process_brew_libs!(libs, brew_libs)
|
54
121
|
brew_libs.each { |lib| libs << "#{PatchHelpers.get_prefix_macos(lib[0]).chop}/lib/lib#{lib[1]}.a " }
|
55
122
|
end
|
56
123
|
|
57
|
-
def
|
124
|
+
def darwin_libraries(deps_lib_dir, ruby_ver, with_compression)
|
58
125
|
libs = String.new
|
59
126
|
|
127
|
+
DARWIN_DEP_LIBS_1.each { |lib| libs << "#{deps_lib_dir}/lib#{lib}.a " }
|
60
128
|
process_brew_libs!(libs, PatchHelpers.ruby31?(ruby_ver) ? DARWIN_BREW_LIBS_31 : DARWIN_BREW_LIBS_PRE_31)
|
61
129
|
process_brew_libs!(libs, DARWIN_BREW_LIBS)
|
62
130
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
SUBST
|
131
|
+
DARWIN_DEP_LIBS_2.each { |lib| libs << "#{deps_lib_dir}/lib#{lib}.a " }
|
132
|
+
|
133
|
+
compression_lib = with_compression ? "-force_load #{deps_lib_dir}/libdwarfs_compression.a" : ""
|
134
|
+
"-ltebako-fs -ldwarfs-wr -ldwarfs #{compression_lib} #{libs} -ljemalloc -lc++ -lc++abi"
|
68
135
|
end
|
69
136
|
|
70
137
|
# .....................................................
|
@@ -79,66 +146,16 @@ module Tebako
|
|
79
146
|
# This is fixed by ext/extmk.rb patch [TODO ?]
|
80
147
|
# .....................................................
|
81
148
|
|
82
|
-
def
|
83
|
-
<<~SUBST
|
84
|
-
-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 \\
|
85
|
-
-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 \\
|
86
|
-
SUBST
|
87
|
-
end
|
88
|
-
|
89
|
-
def common_enc_libs
|
90
|
-
"-l:liblz4.a -l:libz.a -l:libzstd.a -l:libbrotlienc.a -l:libbrotlidec.a -l:libbrotlicommon.a -l:liblzma.a"
|
91
|
-
end
|
92
|
-
|
93
|
-
def linux_gnu_libs(ruby_ver)
|
94
|
-
<<~SUBST
|
95
|
-
#{linux_common_libs} \
|
96
|
-
-l:libarchive.a -l:libiberty.a -l:libacl.a -l:libssl.a -l:libcrypto.a #{common_enc_libs} \\
|
97
|
-
-l:libgdbm.a -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)} \\
|
98
|
-
-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
|
99
|
-
SUBST
|
100
|
-
end
|
101
|
-
|
102
|
-
def linux_musl_libs(ruby_ver)
|
103
|
-
<<~SUBST
|
104
|
-
#{linux_common_libs} \
|
105
|
-
-l:libiberty.a -l:libacl.a -l:libssl.a -l:libcrypto.a #{common_enc_libs} -l:libreadline.a \\
|
106
|
-
-l:libgdbm.a -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 \\
|
107
|
-
-l:librt.a -l:libstdc++.a -lgcc_eh -l:libunwind.a -l:liblzma.a -ldl -lpthread
|
108
|
-
SUBST
|
109
|
-
end
|
110
|
-
|
111
|
-
# Used for mkconfig.rb
|
112
|
-
def msys_base_libs(ruby_ver)
|
113
|
-
<<~SUBST
|
114
|
-
"-l:libtebako-fs.a -l:libdwarfs-wr.a -l:libdwarfs.a -l:libdwarfs_compression.a -l:libfolly.a -l:libfsst.a " \\
|
115
|
-
"-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 " \\
|
116
|
-
"-l:liblz4.a -l:libz.a -l:libzstd.a -l:liblzma.a -l:libncurses.a -l:libunwind.a -l:liblzma.a -l:libiberty.a #{PatchHelpers.yaml_reference(ruby_ver)} " \\
|
117
|
-
"-l:libffi.a -l:libboost_system-mt.a -l:libboost_chrono-mt.a -l:libstdc++.a -l:libdl.a -static-libgcc -static-libstdc++ -l:libssl.a -l:libcrypto.a " \\
|
118
|
-
"-l:libz.a -l:libwinpthread.a -lcrypt32 -lshlwapi -lwsock32 -liphlpapi -limagehlp -lbcrypt -lole32 -loleaut32 -luuid"
|
119
|
-
SUBST
|
120
|
-
end
|
121
|
-
|
122
|
-
# Used in Makefile
|
123
|
-
def msys_libs(ruby_ver)
|
124
|
-
<<~SUBST
|
125
|
-
-Wl,-Bstatic #{linux_common_libs} \
|
126
|
-
-l:liblz4.a -l:libz.a -l:libzstd.a -l:liblzma.a -l:libncurses.a -l:libunwind.a -l:liblzma.a -l:libiberty.a #{PatchHelpers.yaml_reference(ruby_ver)} \\
|
127
|
-
-l:libffi.a -l:libboost_system-mt.a -l:libboost_chrono-mt.a -l:libstdc++.a -l:libdl.a -static-libgcc -static-libstdc++ -l:libssl.a -l:libcrypto.a -l:libz.a \\
|
128
|
-
-l:libwinpthread.a -lcrypt32 -lshlwapi -lwsock32 -liphlpapi -limagehlp -lshlwapi -lbcrypt -lws2_32 -lole32 -loleaut32 -luuid
|
129
|
-
SUBST
|
130
|
-
end
|
131
|
-
|
132
|
-
def mlibs(ostype, deps_lib_dir, ruby_ver) # rubocop:disable Metrics/MethodLength
|
149
|
+
def mlibs(ostype, deps_lib_dir, ruby_ver, with_compression) # rubocop:disable Metrics/MethodLength
|
133
150
|
case ostype
|
134
151
|
when /linux-gnu/
|
135
|
-
|
152
|
+
linux_gnu_libraries(ruby_ver, with_compression)
|
136
153
|
when /linux-musl/
|
137
|
-
|
154
|
+
linux_musl_libraries(ruby_ver, with_compression)
|
138
155
|
when /darwin/
|
139
|
-
|
156
|
+
darwin_libraries(deps_lib_dir, ruby_ver, with_compression)
|
140
157
|
when /msys/
|
141
|
-
|
158
|
+
msys_libraries(ruby_ver, with_compression)
|
142
159
|
else
|
143
160
|
raise Tebako::Error, "Unknown ostype #{ostype}"
|
144
161
|
end
|
@@ -30,25 +30,23 @@ module Tebako
|
|
30
30
|
module Packager
|
31
31
|
# Ruby patching literals (pass2)
|
32
32
|
module PatchLiterals
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
if v_head_comp == v[0...(v_head_comp.length)]
|
38
|
-
v = "\#{v[0...(v_head_comp.length)]}'/__tebako_memfs__'
|
39
|
-
"
|
40
|
-
end
|
41
|
-
v_head_comp = " CONFIG[\\"RUBY_EXEC_PREFIX\\"] \#{eq} "
|
42
|
-
if v_head_comp == v[0...(v_head_comp.length)]
|
33
|
+
TOOL_MKCONFIG_RB_SUBST = <<~SUBST
|
34
|
+
# -- Start of tebako patch --
|
35
|
+
v_head_comp = " CONFIG[\\"prefix\\"] \#{eq} "
|
36
|
+
if v_head_comp == v[0...(v_head_comp.length)]
|
43
37
|
v = "\#{v[0...(v_head_comp.length)]}'/__tebako_memfs__'
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
38
|
+
"
|
39
|
+
end
|
40
|
+
v_head_comp = " CONFIG[\\"RUBY_EXEC_PREFIX\\"] \#{eq} "
|
41
|
+
if v_head_comp == v[0...(v_head_comp.length)]
|
42
|
+
v = "\#{v[0...(v_head_comp.length)]}'/__tebako_memfs__'
|
43
|
+
"
|
44
|
+
end
|
45
|
+
# -- End of tebako patch --
|
46
|
+
if fast[name]
|
47
|
+
SUBST
|
50
48
|
|
51
|
-
|
49
|
+
TOOL_MKCONFIG_RB_SUBST_MSYS = <<~SUBST
|
52
50
|
# -- Start of tebako patch --
|
53
51
|
v_head_comp = " CONFIG[\\"prefix\\"] \#{eq} "
|
54
52
|
if v_head_comp == v[0...(v_head_comp.length)]
|
data/lib/tebako/version.rb
CHANGED
data/src/tebako-main.cpp
CHANGED
@@ -156,3 +156,10 @@ extern "C" const char* tebako_mount_point(void) {
|
|
156
156
|
extern "C" int tebako_is_running_miniruby(void) {
|
157
157
|
return running_miniruby;
|
158
158
|
}
|
159
|
+
|
160
|
+
#ifdef RB_W32_PRE_33
|
161
|
+
extern "C" ssize_t rb_w32_pread(int /* fd */, void* /* buf */, size_t /* size */, size_t /* offset */)
|
162
|
+
{
|
163
|
+
return -1;
|
164
|
+
}
|
165
|
+
#endif
|
data/version.txt
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.8.1
|
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.
|
4
|
+
version: 0.8.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-08-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -115,7 +115,7 @@ licenses:
|
|
115
115
|
metadata:
|
116
116
|
homepage_uri: https://github.com/tamatebako/tebako
|
117
117
|
source_code_uri: https://github.com/tamatebako/tebako
|
118
|
-
post_install_message:
|
118
|
+
post_install_message:
|
119
119
|
rdoc_options: []
|
120
120
|
require_paths:
|
121
121
|
- cmake
|
@@ -139,8 +139,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
139
|
- !ruby/object:Gem::Version
|
140
140
|
version: '0'
|
141
141
|
requirements: []
|
142
|
-
rubygems_version: 3.
|
143
|
-
signing_key:
|
142
|
+
rubygems_version: 3.3.27
|
143
|
+
signing_key:
|
144
144
|
specification_version: 4
|
145
145
|
summary: Packager for Ruby executables
|
146
146
|
test_files: []
|