tebako 0.5.12 → 0.6.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 +107 -196
- data/README.adoc +82 -22
- data/common.env +1 -1
- data/exe/tebako-packager +15 -9
- data/lib/tebako/cli.rb +25 -32
- data/lib/tebako/cli_helpers.rb +53 -44
- data/lib/tebako/cli_rubies.rb +75 -0
- data/lib/tebako/error.rb +17 -2
- data/lib/tebako/packager/pass1.rb +71 -6
- data/lib/tebako/packager/pass2.rb +58 -79
- data/lib/tebako/packager/patch_libraries.rb +138 -0
- data/lib/tebako/packager/patch_literals.rb +150 -70
- data/lib/tebako/packager.rb +28 -2
- data/lib/tebako/version.rb +1 -1
- data/src/tebako-main.cpp +1 -38
- data/version.txt +1 -1
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b3b1bac324a40524fe22b2c7026dcad437f62802fcaf57f37b4ae64eda383eb3
|
4
|
+
data.tar.gz: 1eec9bed248d7fc6d3f4c6d8c11e1ca7d7f9f1a10077b87cde00f61c2978cd33
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da56a60c53abc22be03dbd4be569f547c0bb5f698883e3f3960c2ba8a43a2ef06c66df739c9dfd7bda55c129fb8f6e166c02372baad4cee1ce1af142709c0ad0
|
7
|
+
data.tar.gz: 902a593412bb255369c7dd69b98c178066cfe5209d7a3836bfe3d2b45382bcd9c29ba4119e0f8128b3b960d545af0f9881de9786e374e4a231e46d0c42971543
|
data/CMakeLists.txt
CHANGED
@@ -38,33 +38,6 @@ determine_version("${CMAKE_CURRENT_SOURCE_DIR}" TEBAKO)
|
|
38
38
|
|
39
39
|
project(tebako_packager VERSION ${TEBAKO_VERSION})
|
40
40
|
|
41
|
-
execute_process(
|
42
|
-
COMMAND pwd
|
43
|
-
RESULT_VARIABLE PWD_RES
|
44
|
-
OUTPUT_VARIABLE FS_CURRENT_RAW
|
45
|
-
OUTPUT_STRIP_TRAILING_WHITESPACE
|
46
|
-
)
|
47
|
-
|
48
|
-
if(NOT (PWD_RES EQUAL 0))
|
49
|
-
message(FATAL_ERROR "Could not determine current folder")
|
50
|
-
endif()
|
51
|
-
|
52
|
-
if (MINGW)
|
53
|
-
execute_process(
|
54
|
-
COMMAND "cygpath" "-w" ${FS_CURRENT_RAW}
|
55
|
-
RESULT_VARIABLE CYGPATH_RES
|
56
|
-
OUTPUT_VARIABLE FS_CURRENT
|
57
|
-
OUTPUT_STRIP_TRAILING_WHITESPACE
|
58
|
-
)
|
59
|
-
if(NOT (CYGPATH_RES EQUAL 0))
|
60
|
-
message(FATAL_ERROR "Could not map MSys path to Windows")
|
61
|
-
endif()
|
62
|
-
else(MINGW)
|
63
|
-
set(FS_CURRENT ${FS_CURRENT_RAW})
|
64
|
-
endif(MINGW)
|
65
|
-
|
66
|
-
set(RUBY_DEBUG_BUILD OFF)
|
67
|
-
|
68
41
|
include(ExternalProject)
|
69
42
|
# This is the default that will be overwritten for MacOS and MSys
|
70
43
|
set(GNU_BASH "bash")
|
@@ -78,13 +51,8 @@ if(NOT LOG_LEVEL)
|
|
78
51
|
set(LOG_LEVEL "error")
|
79
52
|
endif()
|
80
53
|
|
81
|
-
set(START_WITH_PACKAGED_FILESYSTEM OFF CACHE BOOL "Start workflow from 'packaged filesystem' target!!!" FORCE)
|
82
|
-
|
83
54
|
if (NOT ${SETUP_MODE})
|
84
55
|
message("Running tebako press script")
|
85
|
-
if (${START_WITH_PACKAGED_FILESYSTEM})
|
86
|
-
message("*** Starting workflow from 'packaged filesystem' target ***")
|
87
|
-
endif(${START_WITH_PACKAGED_FILESYSTEM})
|
88
56
|
|
89
57
|
if ("-${ROOT}" STREQUAL "-")
|
90
58
|
message(FATAL_ERROR "Project ROOT is not specified.")
|
@@ -94,12 +62,15 @@ if (NOT ${SETUP_MODE})
|
|
94
62
|
message(FATAL_ERROR "Project ENTRANCE is not specified.")
|
95
63
|
endif()
|
96
64
|
|
65
|
+
if ("-${PCKG}" STREQUAL "-")
|
66
|
+
message(FATAL_ERROR "Project OUTPUT PACKAGE is not specified.")
|
67
|
+
endif()
|
68
|
+
|
97
69
|
cmake_path(SET FS_ENTRANCE NORMALIZE ${ENTRANCE})
|
98
70
|
|
99
71
|
cmake_path(IS_RELATIVE ROOT IS_RT_RELATIVE)
|
100
72
|
if(${IS_RT_RELATIVE})
|
101
|
-
|
102
|
-
message("Relative path to root '${ROOT}' will be extended to '${FS_ROOT}'")
|
73
|
+
message(FATAL_ERROR "Path to root shall be absolute. Relative path '${FS_ROOT}' is not allowed.")
|
103
74
|
else()
|
104
75
|
cmake_path(SET FS_ROOT NORMALIZE ${ROOT})
|
105
76
|
endif()
|
@@ -115,15 +86,11 @@ if (NOT ${SETUP_MODE})
|
|
115
86
|
message("Absolute path to entry point '${FS_ENTR_TMP}' will be reduced '${FS_ENTRANCE}' relative to '${FS_ROOT}'")
|
116
87
|
endif(${IS_EN_ABSOLUTE})
|
117
88
|
|
118
|
-
|
119
|
-
|
89
|
+
cmake_path(IS_RELATIVE PCKG IS_PK_RELATIVE)
|
90
|
+
if(${IS_PK_RELATIVE})
|
91
|
+
message(FATAL_ERROR "Path to output package shall be absolute. Relative path '${PCKG}' is not allowed.")
|
120
92
|
else()
|
121
|
-
cmake_path(
|
122
|
-
if(${IS_PK_RELATIVE})
|
123
|
-
cmake_path(SET APP_NAME NORMALIZE ${FS_CURRENT}/${PCKG})
|
124
|
-
else()
|
125
|
-
cmake_path(SET APP_NAME NORMALIZE ${PCKG})
|
126
|
-
endif()
|
93
|
+
cmake_path(SET APP_NAME NORMALIZE ${PCKG})
|
127
94
|
endif()
|
128
95
|
|
129
96
|
message("Packaging ${FS_ROOT} folder with ${FS_ENTRANCE} entry point to ${APP_NAME}")
|
@@ -157,19 +124,22 @@ set(EXE_SUFFIX "")
|
|
157
124
|
set(CMD_SUFFIX "")
|
158
125
|
set(BAT_SUFFIX "")
|
159
126
|
set(RUBY_MAKEFILE "")
|
127
|
+
set(DWARFS_PRELOAD OFF)
|
160
128
|
|
161
129
|
if("${OSTYPE_TXT}" MATCHES "^linux-musl.*")
|
162
130
|
set(IS_MUSL ON)
|
163
131
|
set(FORCE_RUBY_PLATFORM "true")
|
164
132
|
elseif("${OSTYPE_TXT}" MATCHES "^msys*")
|
165
133
|
set(IS_MSYS ON)
|
134
|
+
set(FORCE_RUBY_PLATFORM "true")
|
135
|
+
# set(DWARFS_PRELOAD ON)
|
166
136
|
set(RB_W32 ON)
|
167
137
|
set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline")
|
168
|
-
set(RUBY_SUFFIX "w")
|
138
|
+
#set(RUBY_SUFFIX "w")
|
169
139
|
set(EXE_SUFFIX ".exe")
|
170
140
|
set(CMD_SUFFIX ".cmd")
|
171
141
|
set(BAT_SUFFIX ".bat")
|
172
|
-
set(RUBY_MAKEFILE "--file=GNUmakefile")
|
142
|
+
#set(RUBY_MAKEFILE "--file=GNUmakefile")
|
173
143
|
elseif("${OSTYPE_TXT}" MATCHES "^darwin.*")
|
174
144
|
set(IS_DARWIN ON)
|
175
145
|
if(${RUBY_VER} VERSION_LESS "3.1.0")
|
@@ -234,24 +204,18 @@ set(RUBY_STASH_DIR ${DEPS}/stash_${RUBY_VER})
|
|
234
204
|
string(SUBSTRING ${RUBY_VER} 0 3 RUBY_VER_BASE)
|
235
205
|
string(CONCAT RUBY_API_VER ${RUBY_VER_BASE} ".0")
|
236
206
|
|
237
|
-
|
238
|
-
|
207
|
+
if(DWARFS_PRELOAD)
|
208
|
+
def_ext_prj_t(LIBDWARFS_WR "0.5.1" "7bf8e5b4432f35b65f6034f614067c2018995c1bebaf935e8cdddc1a3e045c01")
|
239
209
|
|
240
|
-
|
241
|
-
# ${RUBY_VER} VERSION_LESS "3.0.0"
|
242
|
-
include(${CMAKE_SOURCE_DIR}/tools/cmake-scripts/setup-openssl.cmake)
|
243
|
-
endif(IS_MSYS)
|
210
|
+
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+)\\.([0-9]+).*" "\\1;\\2;\\3" LIBDWARFS_WR_VER_COMPONENTS ${LIBDWARFS_WR_VER})
|
244
211
|
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
else()
|
253
|
-
set(WITH_NCURSES_BUILD OFF)
|
254
|
-
endif()
|
212
|
+
list(GET LIBDWARFS_WR_VER_COMPONENTS 0 LIBDWARFS_WR_VER_MAJOR)
|
213
|
+
list(GET LIBDWARFS_WR_VER_COMPONENTS 1 LIBDWARFS_WR_VER_MINOR)
|
214
|
+
list(GET LIBDWARFS_WR_VER_COMPONENTS 2 LIBDWARFS_WR_VER_PATCH)
|
215
|
+
set (LIBDWARFS_WR_VER_M ${LIBDWARFS_WR_VER_MAJOR}.${LIBDWARFS_WR_VER_MINOR}.${LIBDWARFS_WR_VER_PATCH})
|
216
|
+
else(DWARFS_PRELOAD)
|
217
|
+
def_ext_prj_g(DWARFS_WR "v0.5.1")
|
218
|
+
endif(DWARFS_PRELOAD)
|
255
219
|
|
256
220
|
set(LIBYAML_RUBY_OPTION "")
|
257
221
|
if(${RUBY_VER} VERSION_LESS "3.2.0")
|
@@ -260,18 +224,12 @@ endif(${RUBY_VER} VERSION_LESS "3.2.0")
|
|
260
224
|
|
261
225
|
message("Configuration summary:")
|
262
226
|
message(STATUS "ruby: v${RUBY_VER} at ${RUBY_SOURCE_DIR}")
|
263
|
-
if(WITH_OPENSSL_BUILD)
|
264
|
-
message(STATUS "openssl: building @${OPENSSL_TAG} at ${OPENSSL_SOURCE_DIR}")
|
265
|
-
endif(WITH_OPENSSL_BUILD)
|
266
227
|
|
267
|
-
if(
|
268
|
-
message(STATUS "
|
269
|
-
else()
|
270
|
-
message(STATUS "
|
271
|
-
endif(
|
272
|
-
|
273
|
-
message(STATUS "incbin: @${INCBIN_TAG} at ${INCBIN_SOURCE_DIR}")
|
274
|
-
message(STATUS "dwarfs with tebako wrapper: @${DWARFS_WR_TAG} at ${DWARFS_WR_SOURCE_DIR}")
|
228
|
+
if(DWARFS_PRELOAD)
|
229
|
+
message(STATUS "dwarfs with tebako wrapper: deploying v${LIBDWARFS_WR_VER} to ${LIBDWARFS_WR_SOURCE_DIR}")
|
230
|
+
else(DWARFS_PRELOAD)
|
231
|
+
message(STATUS "dwarfs with tebako wrapper: @${DWARFS_WR_TAG} at ${DWARFS_WR_SOURCE_DIR}")
|
232
|
+
endif(DWARFS_PRELOAD)
|
275
233
|
|
276
234
|
# ...................................................................
|
277
235
|
# Filesystem locations
|
@@ -286,6 +244,8 @@ set(DATA_BIN_DIR ${CMAKE_CURRENT_BINARY_DIR}/packaged_filesystem)
|
|
286
244
|
set(DATA_BIN_FILE ${DATA_BIN_DIR}/fs.bin)
|
287
245
|
# Target binary directory
|
288
246
|
set (TBD ${DATA_SRC_DIR}/bin)
|
247
|
+
# Target library directory
|
248
|
+
set (TLIBD ${DATA_SRC_DIR}/lib)
|
289
249
|
# Target 'local' directory
|
290
250
|
set (TLD ${DATA_SRC_DIR}/local)
|
291
251
|
# TGD folder is used to install gems
|
@@ -302,9 +262,10 @@ message(STATUS "DATA_SRC_DIR: ${DATA_SRC_DIR}")
|
|
302
262
|
message(STATUS "DATA_PRE_DIR: ${DATA_PRE_DIR}")
|
303
263
|
message(STATUS "DATA_BIN_DIR: ${DATA_BIN_DIR}")
|
304
264
|
message(STATUS "DATA_BIN_FILE: ${DATA_BIN_FILE}")
|
305
|
-
message(STATUS "
|
306
|
-
message(STATUS "
|
307
|
-
message(STATUS "
|
265
|
+
message(STATUS "Target binary directory: ${TBD}")
|
266
|
+
message(STATUS "Target library directory: ${TLIBD}")
|
267
|
+
message(STATUS "Target local directory: ${TLD}")
|
268
|
+
message(STATUS "Target Gem directory:: ${TGD}")
|
308
269
|
message(STATUS "FS_MOUNT_POINT: ${FS_MOUNT_POINT}")
|
309
270
|
message(STATUS "Building for Win32 Ruby (RB_W32): ${RB_W32}")
|
310
271
|
|
@@ -314,43 +275,6 @@ message(STATUS "Building for Win32 Ruby (RB_W32): ${RB_W32}")
|
|
314
275
|
message(STATUS "Force Ruby platform for Gems: ${FORCE_RUBY_PLATFORM}")
|
315
276
|
message(STATUS "Not building Ruby extensions: ${RUBY_WITHOUT_EXT}")
|
316
277
|
|
317
|
-
# ...................................................................
|
318
|
-
# incbin
|
319
|
-
|
320
|
-
ExternalProject_Add(${INCBIN_PRJ}
|
321
|
-
PREFIX ${DEPS}
|
322
|
-
GIT_REPOSITORY https://github.com/graphitemaster/incbin.git
|
323
|
-
GIT_TAG ${INCBIN_TAG}
|
324
|
-
BUILD_IN_SOURCE true
|
325
|
-
CONFIGURE_COMMAND ""
|
326
|
-
BUILD_COMMAND ""
|
327
|
-
INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS_INCLUDE_DIR}/incbin
|
328
|
-
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${INCBIN_SOURCE_DIR}/incbin.h ${DEPS_INCLUDE_DIR}/incbin
|
329
|
-
)
|
330
|
-
|
331
|
-
# ...................................................................
|
332
|
-
# OpenSSL
|
333
|
-
if(WITH_OPENSSL_BUILD)
|
334
|
-
message(STATUS "Building OpenSSL since Ruby 2.x requires 1.1.x")
|
335
|
-
def_ext_prj_g(OPENSSL "OpenSSL_1_1_1s")
|
336
|
-
|
337
|
-
set(__LIBSSL "${DEPS}/lib/libssl.a")
|
338
|
-
set(__LIBCRYPTO "${DEPS}/lib/libcrypto.a")
|
339
|
-
|
340
|
-
ExternalProject_Add(${OPENSSL_PRJ}
|
341
|
-
PREFIX ${DEPS}
|
342
|
-
GIT_REPOSITORY "https://github.com/openssl/openssl.git"
|
343
|
-
GIT_TAG ${OPENSSL_TAG}
|
344
|
-
UPDATE_COMMAND ""
|
345
|
-
SOURCE_DIR ${OPENSSL_SOURCE_DIR}
|
346
|
-
BINARY_DIR ${OPENSSL_BINARY_DIR}
|
347
|
-
CONFIGURE_COMMAND ${GNU_BASH} -c "${OPENSSL_SOURCE_DIR}/config \
|
348
|
-
--openssldir=${DEPS} \
|
349
|
-
--prefix=${DEPS}"
|
350
|
-
BUILD_BYPRODUCTS ${__LIBSSL} ${__LIBCRYPTO}
|
351
|
-
)
|
352
|
-
endif(WITH_OPENSSL_BUILD)
|
353
|
-
|
354
278
|
# ...................................................................
|
355
279
|
# DwarFS with tebako wrapper
|
356
280
|
|
@@ -370,47 +294,42 @@ set(__LIBXXHASH "${DEPS_LIB_DIR}/libxxhash.a")
|
|
370
294
|
set(__LIBZSTD "${DEPS_LIB_DIR}/libzstd.a")
|
371
295
|
set(__LIBARCHIVE "${DEPS_LIB_DIR}/libarchive.a")
|
372
296
|
|
373
|
-
|
297
|
+
if(DWARFS_PRELOAD)
|
298
|
+
ExternalProject_Add(${LIBDWARFS_WR_PRJ}
|
374
299
|
PREFIX ${DEPS}
|
375
|
-
|
376
|
-
|
377
|
-
SOURCE_DIR ${DWARFS_WR_SOURCE_DIR}
|
378
|
-
BINARY_DIR ${DWARFS_WR_BINARY_DIR}
|
379
|
-
UPDATE_COMMAND ""
|
380
|
-
BUILD_COMMAND ${CMAKE_COMMAND} --build ${DWARFS_WR_BINARY_DIR} --parallel ${NCORES}
|
381
|
-
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${DEPS}
|
382
|
-
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
383
|
-
-DWITH_TESTS:BOOL=OFF
|
384
|
-
-DWITH_ASAN:BOOL=OFF
|
385
|
-
-DWITH_COVERAGE:BOOL=OFF
|
386
|
-
-DTEBAKO_BUILD_SCOPE=MKD
|
387
|
-
-DRB_W32=${RB_W32}
|
388
|
-
BUILD_BYPRODUCTS ${__LIBDWARFS_WR}
|
389
|
-
${__LIBDWARFS} ${__LIBFSST} ${__LIBFOLLY} ${__LIBT_METADATA}
|
390
|
-
${__LIBT_LIGHT} ${__LIBXXHASH} ${__LIBZSTD} ${__LIBARCHIVE}
|
391
|
-
)
|
392
|
-
if(WITH_OPENSSL_BUILD)
|
393
|
-
add_dependencies(${DWARFS_WR_PRJ} ${OPENSSL_PRJ} )
|
394
|
-
endif(WITH_OPENSSL_BUILD)
|
395
|
-
|
396
|
-
if(WITH_NCURSES_BUILD)
|
397
|
-
ExternalProject_Add(${NCURSES_PRJ}
|
398
|
-
PREFIX ${DEPS}
|
399
|
-
URL https://ftp.gnu.org/pub/gnu/ncurses/ncurses-${NCURSES_VER}.tar.gz
|
400
|
-
URL_HASH SHA256=${NCURSES_HASH}
|
300
|
+
URL https://github.com/tamatebako/libdwarfs/releases/download/v${LIBDWARFS_WR_VER}/libdwarfs-wr-${LIBDWARFS_WR_VER_M}-mingw-ucrt64.7z
|
301
|
+
URL_HASH SHA256=${LIBDWARFS_WR_HASH}
|
401
302
|
DOWNLOAD_NO_PROGRESS true
|
402
|
-
SOURCE_DIR ${
|
303
|
+
SOURCE_DIR ${LIBDWARFS_WR_SOURCE_DIR}
|
403
304
|
UPDATE_COMMAND ""
|
404
|
-
CONFIGURE_COMMAND
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
305
|
+
CONFIGURE_COMMAND ""
|
306
|
+
BUILD_COMMAND ""
|
307
|
+
INSTALL_COMMAND ${CMAKE_COMMAND} -E make_directory ${DEPS}
|
308
|
+
COMMAND ${CMAKE_COMMAND} -E copy_directory ${LIBDWARFS_WR_SOURCE_DIR} ${DEPS}
|
309
|
+
TEST_COMMAND ""
|
310
|
+
)
|
311
|
+
else(DWARFS_PRELOAD)
|
312
|
+
ExternalProject_Add(${DWARFS_WR_PRJ}
|
313
|
+
PREFIX ${DEPS}
|
314
|
+
GIT_REPOSITORY https://github.com/tamatebako/libdwarfs.git
|
315
|
+
GIT_TAG ${DWARFS_WR_TAG}
|
316
|
+
SOURCE_DIR ${DWARFS_WR_SOURCE_DIR}
|
317
|
+
BINARY_DIR ${DWARFS_WR_BINARY_DIR}
|
318
|
+
UPDATE_COMMAND ""
|
319
|
+
BUILD_COMMAND ${CMAKE_COMMAND} --build ${DWARFS_WR_BINARY_DIR} --parallel ${NCORES}
|
320
|
+
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${DEPS}
|
321
|
+
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
322
|
+
-DWITH_TESTS:BOOL=OFF
|
323
|
+
-DWITH_ASAN:BOOL=OFF
|
324
|
+
-DWITH_COVERAGE:BOOL=OFF
|
325
|
+
-DTEBAKO_BUILD_SCOPE=MKD
|
326
|
+
-DRB_W32=${RB_W32}
|
327
|
+
-GNinja
|
328
|
+
BUILD_BYPRODUCTS ${__LIBDWARFS_WR}
|
329
|
+
${__LIBDWARFS} ${__LIBFSST} ${__LIBFOLLY} ${__LIBT_METADATA}
|
330
|
+
${__LIBT_LIGHT} ${__LIBXXHASH} ${__LIBZSTD} ${__LIBARCHIVE}
|
412
331
|
)
|
413
|
-
endif(
|
332
|
+
endif(DWARFS_PRELOAD)
|
414
333
|
|
415
334
|
# ...................................................................
|
416
335
|
# Ruby
|
@@ -441,6 +360,7 @@ else(IS_DARWIN)
|
|
441
360
|
|
442
361
|
if(RB_W32)
|
443
362
|
string(CONCAT RUBY_C_FLAGS ${RUBY_C_FLAGS} " -DRB_W32=1")
|
363
|
+
string(CONCAT RUBY_L_FLAGS ${RUBY_L_FLAGS} " -L${TLIBD}")
|
444
364
|
endif(RB_W32)
|
445
365
|
endif(IS_DARWIN)
|
446
366
|
|
@@ -470,27 +390,20 @@ ExternalProject_Add(${RUBY_PRJ}
|
|
470
390
|
LDFLAGS=\"${RUBY_L_FLAGS}\""
|
471
391
|
BUILD_COMMAND make ${RUBY_MAKEFILE} -j${NCORES}
|
472
392
|
INSTALL_COMMAND make ${RUBY_MAKEFILE} install
|
473
|
-
COMMAND ruby ${EXE}/tebako-packager pass2 ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${DEPS_LIB_DIR} ${DATA_SRC_DIR} ${RUBY_STASH_DIR} ${RUBY_VER}
|
393
|
+
COMMAND ${GNU_BASH} -c "ruby ${EXE}/tebako-packager pass2 ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${DEPS_LIB_DIR} ${DATA_SRC_DIR} ${RUBY_STASH_DIR} ${RUBY_VER}"
|
474
394
|
)
|
475
395
|
|
476
|
-
add_dependencies(${RUBY_PRJ} ${DWARFS_WR_PRJ})
|
477
|
-
if(WITH_NCURSES_BUILD)
|
478
|
-
add_dependencies(${RUBY_PRJ} ${NCURSES_PRJ})
|
479
|
-
endif(WITH_NCURSES_BUILD)
|
480
|
-
|
481
|
-
if(WITH_OPENSSL_BUILD)
|
482
|
-
add_dependencies(${RUBY_PRJ} ${OPENSSL_PRJ} )
|
483
|
-
endif(WITH_OPENSSL_BUILD)
|
396
|
+
add_dependencies(${RUBY_PRJ} ${DWARFS_WR_PRJ} ${LIBDWARFS_WR_PRJ})
|
484
397
|
|
485
398
|
if (${SETUP_MODE})
|
486
399
|
add_custom_target(setup
|
487
400
|
${CMAKE_COMMAND} -E echo "Tebako setup has completed"
|
488
|
-
DEPENDS ${DWARFS_WR_PRJ} ${
|
401
|
+
DEPENDS ${DWARFS_WR_PRJ} ${RUBY_PRJ}
|
489
402
|
)
|
490
403
|
else (${SETUP_MODE})
|
491
404
|
add_custom_target(setup
|
492
405
|
${CMAKE_COMMAND} -E echo "Tebako setup has been verified"
|
493
|
-
DEPENDS ${DWARFS_WR_PRJ} ${
|
406
|
+
DEPENDS ${DWARFS_WR_PRJ} ${RUBY_PRJ}
|
494
407
|
)
|
495
408
|
|
496
409
|
file(GLOB GEMSPECS LIST_DIRECTORIES false ${FS_ROOT}/*.gemspec)
|
@@ -502,9 +415,12 @@ else (${SETUP_MODE})
|
|
502
415
|
list(LENGTH GEMS GLENGTH)
|
503
416
|
|
504
417
|
add_custom_target(clean_filesystem
|
505
|
-
COMMAND ruby ${EXE}/tebako-packager deploy ${
|
418
|
+
COMMAND ruby ${EXE}/tebako-packager deploy ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${RUBY_STASH_DIR}
|
419
|
+
${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR}
|
420
|
+
${GFLENGTH} ${APP_NAME} ${RUBY_VER}
|
506
421
|
DEPENDS ${RUBY_PRJ}
|
507
422
|
)
|
423
|
+
|
508
424
|
if(GSLENGTH GREATER 0)
|
509
425
|
if(GSLENGTH GREATER 1)
|
510
426
|
message(FATAL_ERROR "Multiple gemspecs detected in ${FS_ROOT}")
|
@@ -519,11 +435,11 @@ else (${SETUP_MODE})
|
|
519
435
|
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
520
436
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
|
521
437
|
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
522
|
-
${TBD}/bundle${
|
438
|
+
${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
|
523
439
|
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
524
|
-
${TBD}/bundle${
|
440
|
+
${TBD}/bundle${BAT_SUFFIX} install
|
525
441
|
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
526
|
-
${TBD}/bundle${
|
442
|
+
${TBD}/bundle${BAT_SUFFIX} exec ${TBD}/gem${CMD_SUFFIX} build ${GEMSPEC}
|
527
443
|
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
528
444
|
${TBD}/gem${CMD_SUFFIX} install *.gem --verbose --no-document --install-dir ${TGD}
|
529
445
|
COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
|
@@ -562,11 +478,11 @@ else (${SETUP_MODE})
|
|
562
478
|
COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
|
563
479
|
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
564
480
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
565
|
-
${TBD}/bundle${
|
481
|
+
${TBD}/bundle${BAT_SUFFIX} config build.ffi --disable-system-libffi
|
566
482
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
567
|
-
${TBD}/bundle${
|
483
|
+
${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
|
568
484
|
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
569
|
-
${TBD}/bundle${
|
485
|
+
${TBD}/bundle${BAT_SUFFIX} install --jobs=${NCORES}
|
570
486
|
# COMMAND_EXPAND_LISTS
|
571
487
|
# [TODO] Open question - how to deploy a project to source filesystem
|
572
488
|
# ruby packer does bundle install --deployment --binstubs
|
@@ -626,38 +542,33 @@ else (${SETUP_MODE})
|
|
626
542
|
@ONLY
|
627
543
|
)
|
628
544
|
|
629
|
-
|
630
|
-
add_custom_target(packaged_filesystem
|
631
|
-
COMMAND chmod +x ${DEPS_BIN_DIR}/*
|
632
|
-
COMMAND ${DEPS_BIN_DIR}/mkdwarfs -o ${DATA_BIN_FILE} -i ${DATA_SRC_DIR}
|
633
|
-
COMMAND ${CMAKE_COMMAND} -E touch ${DEPS_SRC_DIR}/tebako-fs.cpp
|
634
|
-
BYPRODUCTS ${DATA_BIN_FILE}
|
635
|
-
)
|
636
|
-
else(${START_WITH_PACKAGED_FILESYSTEM})
|
637
|
-
add_custom_target(packaged_filesystem
|
545
|
+
add_custom_target(packaged_filesystem
|
638
546
|
# [TODO] Open question - whether we shall delete ruby binaries from memfs or not
|
639
547
|
# For debugging purposes it is very handy to have it here
|
640
548
|
#
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
549
|
+
COMMAND ${CMAKE_COMMAND} -E rm -rf ${DATA_SRC_DIR}/share ${DATA_SRC_DIR}/include ${DATA_SRC_DIR}/lib/pkgconfig
|
550
|
+
${DATA_SRC_DIR}/bin/bundle${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/bundle
|
551
|
+
${DATA_SRC_DIR}/bin/bundler${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/bundler
|
552
|
+
${DATA_SRC_DIR}/bin/bundle${BAT_SUFFIX} ${DATA_SRC_DIR}/bin/bundler${BAT_SUFFIX}
|
553
|
+
${DATA_SRC_DIR}/bin/erb${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/gem${CMD_SUFFIX}
|
554
|
+
${DATA_SRC_DIR}/bin/irb${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/racc${CMD_SUFFIX}
|
555
|
+
${DATA_SRC_DIR}/bin/racc2y${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/rake${BAT_SUFFIX}
|
556
|
+
${DATA_SRC_DIR}/bin/rake ${DATA_SRC_DIR}/bin/rdoc${CMD_SUFFIX}
|
557
|
+
${DATA_SRC_DIR}/bin/ri${CMD_SUFFIX} ${DATA_SRC_DIR}/bin/y2racc${CMD_SUFFIX}
|
558
|
+
${DATA_SRC_DIR}/bin/ruby${EXE_SUFFIX} ${DATA_SRC_DIR}/bin/ruby${RUBY_SUFFIX}${EXE_SUFFIX}
|
559
|
+
|
560
|
+
COMMAND ${GNU_BASH} -c "rm -f ${DATA_SRC_DIR}/**/*.a"
|
561
|
+
COMMAND ${GNU_BASH} -c "rm -f ${DATA_SRC_DIR}/**/*.o"
|
562
|
+
COMMAND ${GNU_BASH} -c "chmod +x ${DEPS_BIN_DIR}/mkdwarfs${EXE_SUFFIX}"
|
563
|
+
# No progress below is crtitical since in reporting mode mkdwarfs tries to work directly with terminal
|
564
|
+
# and it creates critical issues for stderr redirects (&2 > 1) used by Ninja and our test srcipts
|
565
|
+
# It may be fixable bit is very difficult to reproduce in testi environment
|
566
|
+
COMMAND ${DEPS_BIN_DIR}/mkdwarfs -o ${DATA_BIN_FILE} -i ${DATA_SRC_DIR} --no-progress
|
567
|
+
COMMAND ${CMAKE_COMMAND} -E touch ${DEPS_SRC_DIR}/tebako/tebako-fs.cpp
|
568
|
+
DEPENDS setup source_filesystem
|
569
|
+
VERBATIM
|
570
|
+
BYPRODUCTS ${DATA_BIN_FILE}
|
571
|
+
)
|
661
572
|
|
662
573
|
set(CMAKE_CXX_FLAGS "${RUBY_C_FLAGS}")
|
663
574
|
|
@@ -669,7 +580,7 @@ else (${SETUP_MODE})
|
|
669
580
|
${DEPS_INCLUDE_DIR}/tebako/tebako-version.h
|
670
581
|
)
|
671
582
|
|
672
|
-
add_dependencies(tebako-fs
|
583
|
+
add_dependencies(tebako-fs packaged_filesystem)
|
673
584
|
|
674
585
|
if (${RUBY_VER} VERSION_LESS "3.0.0")
|
675
586
|
add_custom_target(patched_ruby
|
data/README.adoc
CHANGED
@@ -3,11 +3,13 @@
|
|
3
3
|
image:https://github.com/tamatebako/tebako/actions/workflows/ubuntu.yml/badge.svg["Ubuntu amd64", link="https://github.com/tamatebako/tebako/actions/workflows/ubuntu.yml"]
|
4
4
|
image:https://github.com/tamatebako/tebako/actions/workflows/alpine.yml/badge.svg["Alpine", link="https://github.com/tamatebako/tebako/actions/workflows/alpine.yml"]
|
5
5
|
image:https://github.com/tamatebako/tebako/actions/workflows/macos.yml/badge.svg["MacOS amd64", link="https://github.com/tamatebako/tebako/actions/workflows/macos.yml"]
|
6
|
-
image:https://github.com/tamatebako/tebako/actions/workflows/
|
6
|
+
image:https://github.com/tamatebako/tebako/actions/workflows/windows-msys.yml/badge.svg["Windows msys", link="https://github.com/tamatebako/tebako/actions/workflows/windows-msys.yml"]
|
7
7
|
|
8
8
|
image:https://api.cirrus-ci.com/github/tamatebako/tebako.svg?branch=main&task=macos-arm64["MacOS arm64", link="https://cirrus-ci.com/github/tamatebako/tebako"]
|
9
9
|
image:https://api.cirrus-ci.com/github/tamatebako/tebako.svg?branch=main&task=ubuntu-aarch64["Ubuntu aarch64", link="https://cirrus-ci.com/github/tamatebako/tebako"]
|
10
10
|
|
11
|
+
image:https://github.com/tamatebako/tebako/actions/workflows/lint.yml/badge.svg["lint", link="https://github.com/tamatebako/tebako/actions/workflows/lint.yml"]
|
12
|
+
|
11
13
|
== Purpose
|
12
14
|
|
13
15
|
Tebako is an executable packager. It packages a set of files into a DwarFS file
|
@@ -34,27 +36,45 @@ In the future:
|
|
34
36
|
The Tebako packager is tested on the following platforms:
|
35
37
|
|
36
38
|
* Linux: Ubuntu 20.04; Alpine 3.17
|
37
|
-
*
|
38
|
-
* Windows:
|
39
|
+
* MacOS: macOS 12 (Monterey), 13 (Ventura)
|
40
|
+
* Windows: 2019, 2022 (using MinGW ucrt64 toolchain)
|
41
|
+
|
42
|
+
Please note that Windows support is in pre-release and is a subject of further testing and optimization
|
39
43
|
|
40
44
|
== Supported Ruby versions
|
41
45
|
|
42
46
|
The Tebako packager supports the following versions of Ruby for packaging:
|
43
47
|
|
44
|
-
* 2.7.8
|
45
|
-
* 3.0.6
|
46
|
-
* 3.1.4
|
47
|
-
* 3.2.3
|
48
|
+
* 2.7.8 (Linux, MacOS)
|
49
|
+
* 3.0.6 (Linux, MacOS)
|
50
|
+
* 3.1.4 (Linux, MacOS, Windows)
|
51
|
+
* 3.2.3 (Linux, MacOS)
|
48
52
|
|
49
53
|
Support of specific version including minor release requires some effort, sometimes extensive
|
50
54
|
but our goal is to be able to package all maintained Ruby releases.
|
51
55
|
|
52
56
|
== Prerequisites
|
53
57
|
|
54
|
-
=== Ubuntu
|
58
|
+
=== Ubuntu 20.04
|
55
59
|
|
56
60
|
==== GNU C/C++ 10+ or Clang C/C++ 12+
|
57
61
|
|
62
|
+
[source,sh]
|
63
|
+
----
|
64
|
+
apt install -y gcc-10 g++-10
|
65
|
+
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 10
|
66
|
+
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 10
|
67
|
+
----
|
68
|
+
|
69
|
+
or
|
70
|
+
|
71
|
+
[source,sh]
|
72
|
+
----
|
73
|
+
apt install -y clang-12
|
74
|
+
update-alternatives --install /usr/bin/clang clang /usr/bin/clang-12 150
|
75
|
+
update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-12 150
|
76
|
+
----
|
77
|
+
|
58
78
|
==== CMake version 3.20+
|
59
79
|
|
60
80
|
Tebako relies on CMake 3.20+, which may not be available as a default package.
|
@@ -75,16 +95,39 @@ apt-get install cmake
|
|
75
95
|
|
76
96
|
[source,sh]
|
77
97
|
----
|
78
|
-
apt-get
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
98
|
+
apt-get -y install sudo git curl build-essential pkg-config bison flex autoconf \
|
99
|
+
binutils-dev libevent-dev acl-dev libfmt-dev libjemalloc-dev libiberty-dev \
|
100
|
+
libdouble-conversion-dev liblz4-dev liblzma-dev libssl-dev libunwind-dev \
|
101
|
+
libboost-filesystem-dev libboost-program-options-dev libboost-system-dev \
|
102
|
+
libboost-iostreams-dev libboost-date-time-dev libboost-context-dev \
|
103
|
+
libboost-regex-dev libboost-thread-dev libbrotli-dev libdwarf-dev libelf-dev \
|
104
|
+
libgoogle-glog-dev libffi-dev libgdbm-dev libyaml-dev libncurses-dev \
|
105
|
+
libreadline-dev libncurses-dev libreadline-dev ruby-dev ruby-bundler \
|
106
|
+
libutfcpp-dev
|
107
|
+
----
|
108
|
+
|
109
|
+
=== Alpine 3.17
|
110
|
+
|
111
|
+
[source,sh]
|
112
|
+
----
|
113
|
+
apk --no-cache --upgrade add build-base cmake git bash autoconf boost-static \
|
114
|
+
boost-dev flex-dev bison make binutils-dev libevent-dev acl-dev sed python3 \
|
115
|
+
pkgconfig lz4-dev openssl-dev zlib-dev xz ninja zip unzip curl libdwarf-dev \
|
116
|
+
libunwind-dev gflags-dev elfutils-dev libevent-static openssl-libs-static \
|
117
|
+
lz4-static xz-dev zlib-static libunwind-static acl-static tar libffi-dev \
|
118
|
+
gdbm-dev yaml-dev yaml-static ncurses-dev ncurses-static readline-dev \
|
119
|
+
readline-static p7zip ruby-dev gcompat gettext-dev gperf brotli-dev \
|
120
|
+
brotli-static jemalloc-dev fmt-dev xz-static
|
86
121
|
----
|
87
122
|
|
123
|
+
=== macOS 12 (Monterey)
|
124
|
+
|
125
|
+
[source,sh]
|
126
|
+
----
|
127
|
+
brew update
|
128
|
+
brew install gnu-sed bash pkg-config bison flex binutils libffi gdbm zlib ncurses \
|
129
|
+
double-conversion boost jemalloc fmt glog libevent libsodium lz4 xz libyaml openssl@3
|
130
|
+
----
|
88
131
|
|
89
132
|
== Installation
|
90
133
|
|
@@ -97,6 +140,20 @@ Tebako is distributed as a Ruby gem
|
|
97
140
|
gem install tebako
|
98
141
|
----
|
99
142
|
|
143
|
+
=== Windows (2019, 2022)
|
144
|
+
|
145
|
+
The simplest approach is to use Ruby development environment provided by RubyInstaller, for example Ruby+Devkit 3.1.4-1
|
146
|
+
Once it is is installed use the follwoing commands
|
147
|
+
|
148
|
+
[source,sh]
|
149
|
+
----
|
150
|
+
ridk enable ucrt64
|
151
|
+
pacman -S git tar bison flex toolchain make cmake
|
152
|
+
boost diffutils libevent double-conversion
|
153
|
+
fmt glog dlfcn gtest autotools ncurses libyaml
|
154
|
+
----
|
155
|
+
|
156
|
+
|
100
157
|
=== Quick setup on Ubuntu 20.04 on Docker
|
101
158
|
|
102
159
|
Launch a container on the target platform:
|
@@ -126,12 +183,15 @@ apt-get install -y curl git ruby ruby-dev pkg-config bison flex make autoconf
|
|
126
183
|
curl https://apt.kitware.com/kitware-archive.sh | bash
|
127
184
|
apt-get install -y cmake
|
128
185
|
|
129
|
-
apt-get
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
186
|
+
apt-get -y install sudo git curl build-essential pkg-config bison flex autoconf \
|
187
|
+
binutils-dev libevent-dev acl-dev libfmt-dev libjemalloc-dev libiberty-dev \
|
188
|
+
libdouble-conversion-dev liblz4-dev liblzma-dev libssl-dev libunwind-dev \
|
189
|
+
libboost-filesystem-dev libboost-program-options-dev libboost-system-dev \
|
190
|
+
libboost-iostreams-dev libboost-date-time-dev libboost-context-dev \
|
191
|
+
libboost-regex-dev libboost-thread-dev libbrotli-dev libdwarf-dev libelf-dev \
|
192
|
+
libgoogle-glog-dev libffi-dev libgdbm-dev libyaml-dev libncurses-dev \
|
193
|
+
libreadline-dev libutfcpp-dev libncurses-dev libreadline-dev gcc-10 g++-10 \
|
194
|
+
ruby-dev ruby-bundler
|
135
195
|
|
136
196
|
gem install tebako
|
137
197
|
|
data/common.env
CHANGED