tebako 0.6.6 → 0.7.0
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 +27 -36
- data/README.adoc +9 -5
- data/common.env +1 -1
- data/exe/tebako-packager +11 -0
- data/lib/tebako/cli_helpers.rb +1 -1
- data/lib/tebako/cli_rubies.rb +3 -1
- data/lib/tebako/packager/pass2.rb +12 -4
- data/lib/tebako/packager/patch_helpers.rb +12 -2
- data/lib/tebako/packager.rb +11 -4
- data/lib/tebako/stripper.rb +94 -0
- data/lib/tebako/version.rb +1 -1
- data/version.txt +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a0c260fa919b77603c20cc5db12e51595c0a0fd0da649dd6f64d2022bebc50dc
|
|
4
|
+
data.tar.gz: 1bd24a7fa0d74fb44b95f0b5f41f736323553725741327b130cfadc36cb45cb6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 145fe0a5fe1cb275c21db9e9d4b9092e7c7b342ee43e232d1a6e61a5bc606c62329c9a6a0082843a8b7c017667fda09317c1faa2f3371687e5e64c4a49a176b2
|
|
7
|
+
data.tar.gz: 4708ff850fc763b41d7e1d8e84bee81d4c6a17f1653ac6f697f39e7146fe8acb60ca7922ac1ff7693086fae3f5216d82d83bd1cb97b596c9607769ce022c00f0
|
data/CMakeLists.txt
CHANGED
|
@@ -235,11 +235,11 @@ endif(DWARFS_PRELOAD)
|
|
|
235
235
|
# Filesystem locations
|
|
236
236
|
|
|
237
237
|
# DATA_SRC_DIR folder is used to collect all files that need to be packaged
|
|
238
|
-
set(DATA_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR}/
|
|
238
|
+
set(DATA_SRC_DIR ${CMAKE_CURRENT_BINARY_DIR}/s)
|
|
239
239
|
# DATA_PRE_DIR folder is used to build gems that need to be packaged
|
|
240
|
-
set(DATA_PRE_DIR ${CMAKE_CURRENT_BINARY_DIR}/
|
|
240
|
+
set(DATA_PRE_DIR ${CMAKE_CURRENT_BINARY_DIR}/r)
|
|
241
241
|
# DATA_BIN_DIR folder is used to create packaged filesystem
|
|
242
|
-
set(DATA_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}/
|
|
242
|
+
set(DATA_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}/p)
|
|
243
243
|
# DATA_BIN_FILE is packaged filesystem itself
|
|
244
244
|
set(DATA_BIN_FILE ${DATA_BIN_DIR}/fs.bin)
|
|
245
245
|
# Target binary directory
|
|
@@ -433,27 +433,31 @@ else (${SETUP_MODE})
|
|
|
433
433
|
message("Collecting gem from gemspec ${GEMSPEC} and Gemfile")
|
|
434
434
|
set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
|
|
435
435
|
add_custom_target(source_filesystem
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
436
|
+
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
437
|
+
COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
|
|
438
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
439
|
+
${TBD}/bundle${BAT_SUFFIX} config set --local build.ffi --disable-system-libffi
|
|
440
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
441
|
+
${TBD}/bundle${BAT_SUFFIX} config set --local build.nokogiri --use-system-libraries
|
|
442
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
443
|
+
${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
|
|
444
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
445
|
+
${TBD}/bundle${BAT_SUFFIX} install
|
|
446
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
447
|
+
${TBD}/bundle${BAT_SUFFIX} exec ${TBD}/gem${CMD_SUFFIX} build ${GEMSPEC}
|
|
448
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
449
|
+
${TBD}/gem${CMD_SUFFIX} install *.gem --verbose --no-document --install-dir ${TGD}
|
|
450
|
+
COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
|
|
447
451
|
(${CMAKE_COMMAND} -E echo "Entry point ${DATA_SRC_DIR}${FS_ENTRY_POINT} does not exist" &&
|
|
448
452
|
${CMAKE_COMMAND} -E false )
|
|
449
|
-
|
|
453
|
+
DEPENDS clean_filesystem
|
|
450
454
|
)
|
|
451
455
|
else(GFLENGTH GREATER 0)
|
|
452
456
|
# Found xxx.gemspec but no Gemfile
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
+
message("Collecting gem from gemspec ${GEMSPEC}")
|
|
458
|
+
set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
|
|
459
|
+
message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
|
|
460
|
+
add_custom_target(source_filesystem
|
|
457
461
|
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
458
462
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
|
|
459
463
|
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
@@ -479,7 +483,9 @@ else (${SETUP_MODE})
|
|
|
479
483
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
|
|
480
484
|
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
481
485
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
482
|
-
${TBD}/bundle${BAT_SUFFIX} config build.ffi --disable-system-libffi
|
|
486
|
+
${TBD}/bundle${BAT_SUFFIX} config set --local build.ffi --disable-system-libffi
|
|
487
|
+
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
488
|
+
${TBD}/bundle${BAT_SUFFIX} config set --local build.nokogiri --use-system-libraries
|
|
483
489
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
484
490
|
${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
|
|
485
491
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
@@ -544,22 +550,7 @@ else (${SETUP_MODE})
|
|
|
544
550
|
)
|
|
545
551
|
|
|
546
552
|
add_custom_target(packaged_filesystem
|
|
547
|
-
|
|
548
|
-
# For debugging purposes it is very handy to have it here
|
|
549
|
-
#
|
|
550
|
-
COMMAND ${CMAKE_COMMAND} -E rm -rf ${DATA_SRC_DIR}/share ${DATA_SRC_DIR}/include ${DATA_SRC_DIR}/lib/pkgconfig
|
|
551
|
-
${DATA_SRC_DIR}/bin/bundle${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/bundle
|
|
552
|
-
${DATA_SRC_DIR}/bin/bundler${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/bundler
|
|
553
|
-
${DATA_SRC_DIR}/bin/bundle${BAT_SUFFIX} ${DATA_SRC_DIR}/bin/bundler${BAT_SUFFIX}
|
|
554
|
-
${DATA_SRC_DIR}/bin/erb${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/gem${CMD_SUFFIX}
|
|
555
|
-
${DATA_SRC_DIR}/bin/irb${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/racc${CMD_SUFFIX}
|
|
556
|
-
${DATA_SRC_DIR}/bin/racc2y${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/rake${BAT_SUFFIX}
|
|
557
|
-
${DATA_SRC_DIR}/bin/rake ${DATA_SRC_DIR}/bin/rdoc${CMD_SUFFIX}
|
|
558
|
-
${DATA_SRC_DIR}/bin/ri${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/y2racc${CMD_SUFFIX}
|
|
559
|
-
${DATA_SRC_DIR}/bin/ruby${EXE_SUFFIX} ${DATA_SRC_DIR}/bin/ruby${RUBY_SUFFIX}${EXE_SUFFIX}
|
|
560
|
-
|
|
561
|
-
COMMAND ${GNU_BASH} -c "rm -f ${DATA_SRC_DIR}/**/*.a"
|
|
562
|
-
COMMAND ${GNU_BASH} -c "rm -f ${DATA_SRC_DIR}/**/*.o"
|
|
553
|
+
COMMAND ruby ${EXE}/tebako-packager strip ${OSTYPE_TXT} ${DATA_SRC_DIR}
|
|
563
554
|
COMMAND ${GNU_BASH} -c "chmod +x ${DEPS_BIN_DIR}/mkdwarfs${EXE_SUFFIX}"
|
|
564
555
|
# No progress below is critical since in reporting mode mkdwarfs tries to work directly with terminal
|
|
565
556
|
# and it creates issues for stderr redirects (&2 > 1) used by Ninja and our test srcipts
|
data/README.adoc
CHANGED
|
@@ -46,7 +46,7 @@ The Tebako packager supports the following versions of Ruby for packaging:
|
|
|
46
46
|
|
|
47
47
|
* 2.7.8 (Linux, MacOS)
|
|
48
48
|
* 3.0.7 (Linux, MacOS)
|
|
49
|
-
* 3.1.4, 3.1.5 (Linux, MacOS, Windows)
|
|
49
|
+
* 3.1.4, 3.1.5, 3.1.6 (Linux, MacOS, Windows)
|
|
50
50
|
* 3.2.3, 3.2.4 (Linux, MacOS, Windows)
|
|
51
51
|
|
|
52
52
|
Support of specific version including minor release requires some effort, sometimes extensive
|
|
@@ -128,10 +128,9 @@ brew install gnu-sed bash pkg-config bison flex binutils libffi gdbm zlib ncurse
|
|
|
128
128
|
double-conversion boost jemalloc fmt glog libevent libsodium lz4 xz libyaml openssl@3
|
|
129
129
|
----
|
|
130
130
|
|
|
131
|
-
=== Windows (2019, 2022)
|
|
131
|
+
=== Windows (workstation 10, 11; Server 2019, 2022)
|
|
132
132
|
|
|
133
133
|
The simplest approach is to use Ruby development environment provided by RubyInstaller, for example Ruby+Devkit 3.1.4-1.
|
|
134
|
-
|
|
135
134
|
Once it is installed use the following commands:
|
|
136
135
|
|
|
137
136
|
[source,sh]
|
|
@@ -142,6 +141,11 @@ Once it is installed use the following commands:
|
|
|
142
141
|
fmt glog dlfcn gtest autotools ncurses libyaml
|
|
143
142
|
----
|
|
144
143
|
|
|
144
|
+
Please note that on Windows tebako may face issues related by CMake path length limitations.
|
|
145
|
+
(https://gitlab.kitware.com/cmake/cmake/-/issues/25936)
|
|
146
|
+
This error may affect not tebako itself but the gems that need to be package and use CMake to build native extensions.
|
|
147
|
+
There is no workaround for this issue as it lloks like is a limitation of the manifest used to build CMake executable.
|
|
148
|
+
|
|
145
149
|
== Installation
|
|
146
150
|
|
|
147
151
|
=== General
|
|
@@ -275,7 +279,7 @@ based on ```tebako setup``` output. Building cache based on ```tebako press``` m
|
|
|
275
279
|
----
|
|
276
280
|
tebako setup \
|
|
277
281
|
[-p |--prefix=<tebako-root-folder>] \
|
|
278
|
-
[-R |--Ruby=<2.7.8|3.0.7|3.1.4|3.1.5|3.2.3|3.2.4>]
|
|
282
|
+
[-R |--Ruby=<2.7.8|3.0.7|3.1.4|3.1.5|3.1.6|3.2.3|3.2.4>]
|
|
279
283
|
----
|
|
280
284
|
|
|
281
285
|
Where:
|
|
@@ -283,7 +287,7 @@ Where:
|
|
|
283
287
|
* `<tebako-root-folder>`, the Tebako setup folder (optional, defaults to current
|
|
284
288
|
folder)
|
|
285
289
|
|
|
286
|
-
* `Ruby` parameter defines Ruby version that will be packaged (optional, defaults to 3.1.
|
|
290
|
+
* `Ruby` parameter defines Ruby version that will be packaged (optional, defaults to 3.1.6)
|
|
287
291
|
|
|
288
292
|
==== Clean
|
|
289
293
|
|
data/common.env
CHANGED
data/exe/tebako-packager
CHANGED
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
28
28
|
|
|
29
29
|
require_relative "../lib/tebako/packager"
|
|
30
|
+
require_relative "../lib/tebako/stripper"
|
|
30
31
|
|
|
31
32
|
begin
|
|
32
33
|
unless ARGV.length.positive?
|
|
@@ -57,6 +58,16 @@ begin
|
|
|
57
58
|
end
|
|
58
59
|
|
|
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
|
+
|
|
70
|
+
Tebako::Stripper.strip(ARGV[1], ARGV[2])
|
|
60
71
|
when "pass1a"
|
|
61
72
|
# ARGV[0] -- command
|
|
62
73
|
# ARGV[1] -- RUBY_SOURCE_DIR
|
data/lib/tebako/cli_helpers.rb
CHANGED
data/lib/tebako/cli_rubies.rb
CHANGED
|
@@ -42,11 +42,13 @@ module Tebako
|
|
|
42
42
|
"3.0.7" => "2a3411977f2850431136b0fab8ad53af09fb74df2ee2f4fb7f11b378fe034388",
|
|
43
43
|
"3.1.4" => "a3d55879a0dfab1d7141fdf10d22a07dbf8e5cdc4415da1bde06127d5cc3c7b6",
|
|
44
44
|
"3.1.5" => "3685c51eeee1352c31ea039706d71976f53d00ab6d77312de6aa1abaf5cda2c5",
|
|
45
|
+
"3.1.6" => "0d0dafb859e76763432571a3109d1537d976266be3083445651dc68deed25c22",
|
|
45
46
|
"3.2.3" => "af7f1757d9ddb630345988139211f1fd570ff5ba830def1cc7c468ae9b65c9ba",
|
|
46
47
|
"3.2.4" => "c72b3c5c30482dca18b0f868c9075f3f47d8168eaf626d4e682ce5b59c858692"
|
|
48
|
+
# "3.3.3" => "83c05b2177ee9c335b631b29b8c077b4770166d02fa527f3a9f6a40d13f3cce2"
|
|
47
49
|
}.freeze
|
|
48
50
|
|
|
49
|
-
DEFAULT_RUBY_VERSION = "3.1.
|
|
51
|
+
DEFAULT_RUBY_VERSION = "3.1.6"
|
|
50
52
|
|
|
51
53
|
def version_check(version)
|
|
52
54
|
return if RUBY_VERSIONS.key?(version)
|
|
@@ -58,7 +58,7 @@ module Tebako
|
|
|
58
58
|
|
|
59
59
|
def get_dir_c_patch(ostype)
|
|
60
60
|
pattern = PatchHelpers.msys?(ostype) ? "/* define system APIs */" : "#ifdef HAVE_GETATTRLIST"
|
|
61
|
-
dir_c_patch = PatchHelpers.
|
|
61
|
+
dir_c_patch = PatchHelpers.patch_c_file_pre(pattern)
|
|
62
62
|
dir_c_patch.merge!(DIR_C_BASE_PATCH)
|
|
63
63
|
dir_c_patch
|
|
64
64
|
end
|
|
@@ -85,11 +85,19 @@ module Tebako
|
|
|
85
85
|
end
|
|
86
86
|
|
|
87
87
|
def get_io_c_patch(ostype, ruby_ver)
|
|
88
|
-
io_c_patch = PatchHelpers.
|
|
88
|
+
io_c_patch = PatchHelpers.patch_c_file_pre("/* define system APIs */")
|
|
89
89
|
io_c_patch.merge!(get_io_c_msys_patch(ruby_ver)) if PatchHelpers.msys?(ostype)
|
|
90
90
|
io_c_patch
|
|
91
91
|
end
|
|
92
92
|
|
|
93
|
+
def get_util_c_patch(ruby_ver)
|
|
94
|
+
if PatchHelpers.ruby316?(ruby_ver)
|
|
95
|
+
PatchHelpers.patch_c_file_post("#endif /* !HAVE_GNU_QSORT_R */")
|
|
96
|
+
else
|
|
97
|
+
PatchHelpers.patch_c_file_pre("#ifndef S_ISDIR")
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
93
101
|
def get_msys_mkconfig_rb_patches(ruby_ver)
|
|
94
102
|
{
|
|
95
103
|
" if fast[name]" => TOOLS_MKCONFIG_RB_SUBST,
|
|
@@ -117,8 +125,8 @@ module Tebako
|
|
|
117
125
|
"tool/mkconfig.rb" => mcrb_subst,
|
|
118
126
|
"dir.c" => get_dir_c_patch(ostype), "dln.c" => get_dln_c_patch(ostype, ruby_ver),
|
|
119
127
|
"io.c" => get_io_c_patch(ostype, ruby_ver), "main.c" => MAIN_C_PATCH,
|
|
120
|
-
"file.c" => PatchHelpers.
|
|
121
|
-
"util.c" =>
|
|
128
|
+
"file.c" => PatchHelpers.patch_c_file_pre("/* define system APIs */"),
|
|
129
|
+
"util.c" => get_util_c_patch(ruby_ver)
|
|
122
130
|
}
|
|
123
131
|
end
|
|
124
132
|
|
|
@@ -66,12 +66,18 @@ module Tebako
|
|
|
66
66
|
ostype =~ /msys|cygwin|mingw/
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
def
|
|
69
|
+
def patch_c_file_pre(pattern)
|
|
70
70
|
{
|
|
71
71
|
pattern => "#{PatchLiterals::C_FILE_SUBST}\n#{pattern}"
|
|
72
72
|
}
|
|
73
73
|
end
|
|
74
74
|
|
|
75
|
+
def patch_c_file_post(pattern)
|
|
76
|
+
{
|
|
77
|
+
pattern => "#{pattern}\n\n#{PatchLiterals::C_FILE_SUBST}"
|
|
78
|
+
}
|
|
79
|
+
end
|
|
80
|
+
|
|
75
81
|
def recreate(dirname)
|
|
76
82
|
FileUtils.rm_rf(dirname, noop: nil, verbose: nil, secure: true)
|
|
77
83
|
FileUtils.mkdir(dirname)
|
|
@@ -102,12 +108,16 @@ module Tebako
|
|
|
102
108
|
ruby3x?(ruby_ver) && ruby_ver[2].to_i >= 1
|
|
103
109
|
end
|
|
104
110
|
|
|
111
|
+
def ruby316?(ruby_ver)
|
|
112
|
+
ruby3x?(ruby_ver) && ruby_ver[2] == "1" && ruby_ver[4].to_i >= 6
|
|
113
|
+
end
|
|
114
|
+
|
|
105
115
|
def ruby32?(ruby_ver)
|
|
106
116
|
ruby3x?(ruby_ver) && ruby_ver[2].to_i >= 2
|
|
107
117
|
end
|
|
108
118
|
|
|
109
119
|
def ruby32only?(ruby_ver)
|
|
110
|
-
ruby3x?(ruby_ver) && ruby_ver[2]
|
|
120
|
+
ruby3x?(ruby_ver) && ruby_ver[2] == "2"
|
|
111
121
|
end
|
|
112
122
|
|
|
113
123
|
def ruby33?(ruby_ver)
|
data/lib/tebako/packager.rb
CHANGED
|
@@ -74,11 +74,8 @@ module Tebako
|
|
|
74
74
|
class << self
|
|
75
75
|
# Create implib
|
|
76
76
|
def create_implib(src_dir, package_src_dir, app_name, ruby_ver)
|
|
77
|
+
create_def(src_dir, app_name)
|
|
77
78
|
puts " ... creating Windows import library"
|
|
78
|
-
File.open(def_fname(src_dir, app_name), "w") do |file|
|
|
79
|
-
file.puts "LIBRARY #{out_fname(app_name)}"
|
|
80
|
-
file.puts File.read(File.join(src_dir, "tebako.def"))
|
|
81
|
-
end
|
|
82
79
|
params = ["dlltool", "-d", def_fname(src_dir, app_name), "-D", out_fname(app_name),
|
|
83
80
|
"--output-lib", lib_fname(package_src_dir, ruby_ver)]
|
|
84
81
|
out, st = Open3.capture2e(*params)
|
|
@@ -155,6 +152,16 @@ module Tebako
|
|
|
155
152
|
|
|
156
153
|
private
|
|
157
154
|
|
|
155
|
+
def create_def(src_dir, app_name)
|
|
156
|
+
puts " ... creating Windows def file"
|
|
157
|
+
File.open(def_fname(src_dir, app_name), "w") do |file|
|
|
158
|
+
file.puts "LIBRARY #{out_fname(app_name)}"
|
|
159
|
+
File.readlines(File.join(src_dir, "tebako.def")).each do |line|
|
|
160
|
+
file.puts line unless line.include?("DllMain")
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
end
|
|
164
|
+
|
|
158
165
|
def def_fname(src_dir, app_name)
|
|
159
166
|
File.join(src_dir, "#{app_name}.def")
|
|
160
167
|
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# Copyright (c) 2024 [Ribose Inc](https://www.ribose.com).
|
|
4
|
+
# All rights reserved.
|
|
5
|
+
# This file is a part of tebako
|
|
6
|
+
#
|
|
7
|
+
# Redistribution and use in source and binary forms, with or without
|
|
8
|
+
# modification, are permitted provided that the following conditions
|
|
9
|
+
# are met:
|
|
10
|
+
# 1. Redistributions of source code must retain the above copyright
|
|
11
|
+
# notice, this list of conditions and the following disclaimer.
|
|
12
|
+
# 2. Redistributions in binary form must reproduce the above copyright
|
|
13
|
+
# notice, this list of conditions and the following disclaimer in the
|
|
14
|
+
# documentation and/or other materials provided with the distribution.
|
|
15
|
+
#
|
|
16
|
+
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
17
|
+
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
18
|
+
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
19
|
+
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
20
|
+
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
21
|
+
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
22
|
+
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
23
|
+
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
24
|
+
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
25
|
+
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
26
|
+
# POSSIBILITY OF SUCH DAMAGE.
|
|
27
|
+
|
|
28
|
+
require "fileutils"
|
|
29
|
+
require "find"
|
|
30
|
+
|
|
31
|
+
# Tebako - an executable packager
|
|
32
|
+
module Tebako
|
|
33
|
+
# Tebako packaging support (stripper)
|
|
34
|
+
module Stripper
|
|
35
|
+
DELETE_EXTENSIONS = %w[o lo obj a lib].freeze
|
|
36
|
+
STRIP_EXTENSIONS = %w[dll so].freeze
|
|
37
|
+
BIN_FILES = %w[
|
|
38
|
+
bundle bundler rbs erb gem irb racc racc2y rake rdoc ri y2racc rdbg typeprof
|
|
39
|
+
].freeze
|
|
40
|
+
CMD_SUFFIX = ".cmd"
|
|
41
|
+
BAT_SUFFIX = ".bat"
|
|
42
|
+
|
|
43
|
+
class << self
|
|
44
|
+
# Strip
|
|
45
|
+
# Removes build artefacts, strip shared objects
|
|
46
|
+
# [TODO] We probably need debug option/flag to say whether we shall delete ruby binaries
|
|
47
|
+
# from memfs or not. For debugging purposes it is very handy to have it here
|
|
48
|
+
def strip(ostype, src_dir)
|
|
49
|
+
puts " ... stripping the output"
|
|
50
|
+
strip_bs(ostype, src_dir)
|
|
51
|
+
strip_fi(ostype, src_dir)
|
|
52
|
+
strip_li(ostype, src_dir)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
private
|
|
56
|
+
|
|
57
|
+
def get_files(ostype)
|
|
58
|
+
exe_suffix = ostype =~ /msys/ ? ".exe" : ""
|
|
59
|
+
files = BIN_FILES.flat_map do |f|
|
|
60
|
+
[f, "#{f}#{CMD_SUFFIX}", "#{f}#{BAT_SUFFIX}"]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
files += ["ruby#{exe_suffix}", "rubyw#{exe_suffix}"]
|
|
64
|
+
files
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def strip_bs(_ostype, src_dir)
|
|
68
|
+
FileUtils.rm_rf([
|
|
69
|
+
File.join(src_dir, "share"),
|
|
70
|
+
File.join(src_dir, "include"),
|
|
71
|
+
File.join(src_dir, "lib", "pkgconfig")
|
|
72
|
+
])
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def strip_fi(ostype, src_dir)
|
|
76
|
+
files = get_files(ostype).map { |f| "#{src_dir}/bin/#{f}" }
|
|
77
|
+
FileUtils.rm(files, force: true)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def strip_li(ostype, src_dir)
|
|
81
|
+
Find.find(src_dir) do |file|
|
|
82
|
+
next if File.directory?(file)
|
|
83
|
+
|
|
84
|
+
extension = File.extname(file).delete_prefix(".").downcase
|
|
85
|
+
if DELETE_EXTENSIONS.include?(extension)
|
|
86
|
+
FileUtils.rm(file)
|
|
87
|
+
elsif STRIP_EXTENSIONS.include?(extension)
|
|
88
|
+
system("strip \"#{file}\"") unless ostype =~ /darwin/
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
data/lib/tebako/version.rb
CHANGED
data/version.txt
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.
|
|
1
|
+
0.7.0
|
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.7.0
|
|
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-06-
|
|
11
|
+
date: 2024-06-28 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -75,6 +75,7 @@ files:
|
|
|
75
75
|
- lib/tebako/packager/patch_helpers.rb
|
|
76
76
|
- lib/tebako/packager/patch_libraries.rb
|
|
77
77
|
- lib/tebako/packager/patch_literals.rb
|
|
78
|
+
- lib/tebako/stripper.rb
|
|
78
79
|
- lib/tebako/version.rb
|
|
79
80
|
- resources/tebako-fs.cpp.in
|
|
80
81
|
- resources/tebako-version.h.in
|
|
@@ -136,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
136
137
|
- !ruby/object:Gem::Version
|
|
137
138
|
version: '0'
|
|
138
139
|
requirements: []
|
|
139
|
-
rubygems_version: 3.5.
|
|
140
|
+
rubygems_version: 3.5.11
|
|
140
141
|
signing_key:
|
|
141
142
|
specification_version: 4
|
|
142
143
|
summary: Packager for Ruby executables
|