tebako 0.6.6 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|