tebako 0.7.2.rc3 → 0.7.2.rc4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CMakeLists.txt +9 -100
- data/exe/tebako-packager +9 -7
- data/lib/tebako/cli.rb +2 -2
- data/lib/tebako/cli_helpers.rb +35 -13
- data/lib/tebako/deploy_helper.rb +281 -0
- data/lib/tebako/error.rb +3 -1
- data/lib/tebako/packager/pass1.rb +7 -4
- data/lib/tebako/packager/patch_buildsystem.rb +3 -3
- data/lib/tebako/packager.rb +13 -34
- data/lib/tebako/version.rb +1 -1
- data/tools/.github/workflows/test.yml +4 -25
- data/tools/cmake-scripts/macos-environment.cmake +36 -25
- metadata +3 -3
- data/tools/tests/cmake/CMakeLists.txt +0 -81
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4bfa5dde3a184cd2689178ae837ee3a5eff510cecb0ed1385617d4d3f170c707
|
|
4
|
+
data.tar.gz: b67d902a82ff37050ff7c273b770e96b8be23c83c9056a4e5bc88c4936d2bbb8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: ce1166b1042a38f95db4f8190e5d2de55c7a62d40d3d4db990527c27199d23ffc5590af7ae094e0f8cafdfc5b0c2e9c7e3140fd6f8ad5d56dcfc8627b845a552
|
|
7
|
+
data.tar.gz: 398b4088288778241c404de5d68b1703d2ee42647060833b5c8c7b0b16f22223c92fe1abc7b6982b7124d57a95b732ee98a48e7ea9d913858c5ec0a396faffec
|
data/CMakeLists.txt
CHANGED
|
@@ -116,9 +116,7 @@ set(IS_MUSL OFF)
|
|
|
116
116
|
set(IS_MSYS OFF)
|
|
117
117
|
set(IS_DARWIN OFF)
|
|
118
118
|
set(RB_W32 OFF)
|
|
119
|
-
set(
|
|
120
|
-
set(NOKOGIRI_OPTION "--no-use-system-libraries")
|
|
121
|
-
set(RUBY_WITHOUT_EXT "dbm,win32,win32ole")
|
|
119
|
+
set(RUBY_WITHOUT_EXT "dbm,win32,win32ole,'-test-'")
|
|
122
120
|
set(RUBY_NAME "ruby")
|
|
123
121
|
set(RUBY_SUFFIX "")
|
|
124
122
|
set(EXE_SUFFIX "")
|
|
@@ -129,14 +127,11 @@ set(DWARFS_PRELOAD OFF)
|
|
|
129
127
|
|
|
130
128
|
if("${OSTYPE_TXT}" MATCHES "^linux-musl.*")
|
|
131
129
|
set(IS_MUSL ON)
|
|
132
|
-
set(FORCE_RUBY_PLATFORM "true")
|
|
133
130
|
elseif("${OSTYPE_TXT}" MATCHES "^msys*")
|
|
134
131
|
set(IS_MSYS ON)
|
|
135
|
-
set(FORCE_RUBY_PLATFORM "true")
|
|
136
|
-
set(NOKOGIRI_OPTION "--use-system-libraries")
|
|
137
132
|
# set(DWARFS_PRELOAD ON)
|
|
138
133
|
set(RB_W32 ON)
|
|
139
|
-
set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline")
|
|
134
|
+
set(RUBY_WITHOUT_EXT "dbm,syslog,pty,gdbm,readline,'-test-'")
|
|
140
135
|
#set(RUBY_SUFFIX "w")
|
|
141
136
|
set(EXE_SUFFIX ".exe")
|
|
142
137
|
set(CMD_SUFFIX ".cmd")
|
|
@@ -274,7 +269,6 @@ message(STATUS "Building for Win32 Ruby (RB_W32): ${RB_W32}")
|
|
|
274
269
|
# ...................................................................
|
|
275
270
|
# Other options
|
|
276
271
|
|
|
277
|
-
message(STATUS "Force Ruby platform for Gems: ${FORCE_RUBY_PLATFORM}")
|
|
278
272
|
message(STATUS "Not building Ruby extensions: ${RUBY_WITHOUT_EXT}")
|
|
279
273
|
|
|
280
274
|
# ...................................................................
|
|
@@ -370,7 +364,6 @@ message(STATUS "Ruby build ${C_FLAGS_DEST}='${RUBY_C_FLAGS}'")
|
|
|
370
364
|
message(STATUS "Ruby build LDFLAGS='${RUBY_L_FLAGS}'")
|
|
371
365
|
message(STATUS "openssl Ruby option='${OPENSSL_RUBY_OPTION}'")
|
|
372
366
|
message(STATUS "libyaml Ruby option='${LIBYAML_RUBY_OPTION}'")
|
|
373
|
-
message(STATUS "nokogiri build option='${NOKOGIRI_OPTION}'")
|
|
374
367
|
|
|
375
368
|
ExternalProject_Add(${RUBY_PRJ}
|
|
376
369
|
PREFIX ${DEPS}
|
|
@@ -418,125 +411,41 @@ else (${SETUP_MODE})
|
|
|
418
411
|
list(LENGTH GEMFILES GFLENGTH)
|
|
419
412
|
list(LENGTH GEMS GLENGTH)
|
|
420
413
|
|
|
421
|
-
add_custom_target(clean_filesystem
|
|
422
|
-
COMMAND ruby ${EXE}/tebako-packager deploy ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${RUBY_STASH_DIR}
|
|
423
|
-
${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR}
|
|
424
|
-
${GFLENGTH} ${APP_NAME} ${RUBY_VER}
|
|
425
|
-
DEPENDS ${RUBY_PRJ}
|
|
426
|
-
)
|
|
427
|
-
|
|
428
414
|
if(GSLENGTH GREATER 0)
|
|
429
415
|
if(GSLENGTH GREATER 1)
|
|
430
416
|
message(FATAL_ERROR "Multiple gemspecs detected in ${FS_ROOT}")
|
|
431
417
|
else(GSLENGTH GREATER 1)
|
|
432
|
-
list(GET GEMSPECS 0 GEMSPEC)
|
|
433
|
-
list(LENGTH GEMFILES GFLENGTH)
|
|
434
418
|
if(GFLENGTH GREATER 0)
|
|
435
419
|
# Found xxx.gemspec and Gemfile
|
|
436
|
-
message("Collecting gem from gemspec ${GEMSPEC} and Gemfile")
|
|
437
420
|
set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
|
|
438
|
-
add_custom_target(source_filesystem
|
|
439
|
-
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
440
|
-
COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
|
|
441
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
442
|
-
${TBD}/bundle${BAT_SUFFIX} config set --local build.ffi --disable-system-libffi
|
|
443
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
444
|
-
${TBD}/bundle${BAT_SUFFIX} config set --local build.nokogiri ${NOKOGIRI_OPTION}
|
|
445
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
446
|
-
${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
|
|
447
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
448
|
-
${TBD}/bundle${BAT_SUFFIX} install
|
|
449
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
450
|
-
${TBD}/bundle${BAT_SUFFIX} exec ${TBD}/gem${CMD_SUFFIX} build ${GEMSPEC}
|
|
451
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
452
|
-
${TBD}/gem${CMD_SUFFIX} install *.gem --verbose --no-document --install-dir ${TGD}
|
|
453
|
-
COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
|
|
454
|
-
(${CMAKE_COMMAND} -E echo "Entry point ${DATA_SRC_DIR}${FS_ENTRY_POINT} does not exist" &&
|
|
455
|
-
${CMAKE_COMMAND} -E false )
|
|
456
|
-
DEPENDS clean_filesystem
|
|
457
|
-
)
|
|
458
421
|
else(GFLENGTH GREATER 0)
|
|
459
422
|
# Found xxx.gemspec but no Gemfile
|
|
460
|
-
message("Collecting gem from gemspec ${GEMSPEC}")
|
|
461
423
|
set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
|
|
462
|
-
message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
|
|
463
|
-
add_custom_target(source_filesystem
|
|
464
|
-
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
465
|
-
COMMAND ${CMAKE_COMMAND} -E make_directory ${TGD}
|
|
466
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
467
|
-
${TBD}/gem${CMD_SUFFIX} build ${GEMSPEC}
|
|
468
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
469
|
-
${TBD}/gem${CMD_SUFFIX} install *.gem --verbose --no-document --install-dir ${TGD}
|
|
470
|
-
COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
|
|
471
|
-
(${CMAKE_COMMAND} -E echo "Entry point ${DATA_SRC_DIR}${FS_ENTRY_POINT} does not exist" &&
|
|
472
|
-
${CMAKE_COMMAND} -E false )
|
|
473
|
-
DEPENDS clean_filesystem
|
|
474
|
-
)
|
|
475
424
|
endif(GFLENGTH GREATER 0)
|
|
476
425
|
endif(GSLENGTH GREATER 1)
|
|
477
426
|
elseif(GFLENGTH GREATER 0)
|
|
478
427
|
# Found Gemfile but no gemspec
|
|
479
|
-
message("Deploying Gemfile")
|
|
480
428
|
set(FS_ENTRY_POINT "/local/${FS_ENTRANCE}")
|
|
481
|
-
message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
|
|
482
|
-
add_custom_target(source_filesystem
|
|
483
|
-
COMMAND test -f ${FS_ROOT}/${FS_ENTRANCE} ||
|
|
484
|
-
(${CMAKE_COMMAND} -E echo "Entry point ${FS_ROOT}/${FS_ENTRANCE} does not exist or is not accessible" &&
|
|
485
|
-
${CMAKE_COMMAND} -E false )
|
|
486
|
-
COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
|
|
487
|
-
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
488
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
489
|
-
${TBD}/bundle${BAT_SUFFIX} config set --local build.ffi --disable-system-libffi
|
|
490
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
491
|
-
${TBD}/bundle${BAT_SUFFIX} config set --local build.nokogiri ${NOKOGIRI_OPTION}
|
|
492
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
493
|
-
${TBD}/bundle${BAT_SUFFIX} config set --local force_ruby_platform ${FORCE_RUBY_PLATFORM}
|
|
494
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
495
|
-
${TBD}/bundle${BAT_SUFFIX} install --jobs=${NCORES}
|
|
496
|
-
# COMMAND_EXPAND_LISTS
|
|
497
|
-
# [TODO] Open question - how to deploy a project to source filesystem
|
|
498
|
-
# ruby packer does bundle install --deployment --binstubs
|
|
499
|
-
# COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
500
|
-
# ${TBD}/bundle lock
|
|
501
|
-
# COMMAND ${CMAKE_COMMAND} -E chdir ${TLD} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
502
|
-
# ${TBD}/bundle install --deployment --jobs=${NCORES}
|
|
503
|
-
DEPENDS clean_filesystem
|
|
504
|
-
)
|
|
505
429
|
elseif(GLENGTH GREATER 0)
|
|
506
430
|
# xxx.gem, no gemspec, no gemfile
|
|
507
|
-
list(GET GEMS 0 GEM)
|
|
508
431
|
if(GLENGTH GREATER 1)
|
|
509
432
|
message(FATAL_ERROR "Multiple gems detected in ${FS_ROOT}")
|
|
510
433
|
else(GLENGTH GREATER 1)
|
|
511
|
-
message("Installing Ruby gem from ${GEM}")
|
|
512
434
|
set(FS_ENTRY_POINT "/bin/${FS_ENTRANCE}")
|
|
513
|
-
message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
|
|
514
|
-
add_custom_target(source_filesystem
|
|
515
|
-
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${DATA_PRE_DIR} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
516
|
-
COMMAND ${CMAKE_COMMAND} -E chdir ${DATA_PRE_DIR} ${CMAKE_COMMAND} -E env --unset=GEM_HOME --unset=GEM_PATH TEBAKO_PASS_THROUGH=1
|
|
517
|
-
${TBD}/gem${CMD_SUFFIX} install ${GEM} --verbose --no-document --install-dir ${TGD}
|
|
518
|
-
COMMAND test -f ${DATA_SRC_DIR}${FS_ENTRY_POINT} ||
|
|
519
|
-
(${CMAKE_COMMAND} -E echo "Entry point ${DATA_SRC_DIR}${FS_ENTRY_POINT} does not exist or is not accessible" &&
|
|
520
|
-
${CMAKE_COMMAND} -E false )
|
|
521
|
-
DEPENDS clean_filesystem
|
|
522
|
-
)
|
|
523
435
|
endif(GLENGTH GREATER 1)
|
|
524
436
|
else()
|
|
525
437
|
# No gem, no gemspec, no gemfile
|
|
526
438
|
# Simple ruby script
|
|
527
|
-
message("Collecting simple Ruby script from ${FS_ROOT}")
|
|
528
439
|
set(FS_ENTRY_POINT "/local/${FS_ENTRANCE}")
|
|
529
|
-
message("Target entry point will be at ${FS_MOUNT_POINT}${FS_ENTRY_POINT}")
|
|
530
|
-
add_custom_target(source_filesystem
|
|
531
|
-
COMMAND test -f ${FS_ROOT}/${FS_ENTRANCE} ||
|
|
532
|
-
(${CMAKE_COMMAND} -E echo "Entry point ${FS_ROOT}/${FS_ENTRANCE} does not exist or is not accessible" &&
|
|
533
|
-
${CMAKE_COMMAND} -E false )
|
|
534
|
-
COMMAND ${CMAKE_COMMAND} -E make_directory ${TLD}
|
|
535
|
-
COMMAND ${CMAKE_COMMAND} -DSOURCE_DIR=${FS_ROOT} -DTARGET_DIR=${TLD} -P ${CMAKE_SOURCE_DIR}/cmake/copy_dir.cmake
|
|
536
|
-
DEPENDS clean_filesystem
|
|
537
|
-
)
|
|
538
440
|
endif()
|
|
539
441
|
|
|
442
|
+
add_custom_target(source_filesystem
|
|
443
|
+
COMMAND ruby ${EXE}/tebako-packager deploy ${OSTYPE_TXT} ${RUBY_SOURCE_DIR} ${RUBY_STASH_DIR}
|
|
444
|
+
${DATA_SRC_DIR} ${DATA_PRE_DIR} ${DATA_BIN_DIR}
|
|
445
|
+
${FS_ROOT} ${FS_ENTRANCE} ${FS_MOUNT_POINT} ${APP_NAME} ${RUBY_VER}
|
|
446
|
+
DEPENDS ${RUBY_PRJ}
|
|
447
|
+
)
|
|
448
|
+
|
|
540
449
|
# ...................................................................
|
|
541
450
|
# Packaged filesystem
|
|
542
451
|
|
data/exe/tebako-packager
CHANGED
|
@@ -99,18 +99,20 @@ begin
|
|
|
99
99
|
# ARGV[4] -- DATA_SRC_DIR
|
|
100
100
|
# ARGV[5] -- DATA_PRE_DIR
|
|
101
101
|
# ARGV[6] -- DATA_BIN_DIR
|
|
102
|
-
# ARGV[7] --
|
|
103
|
-
# ARGV[8] --
|
|
104
|
-
# ARGV[9] --
|
|
105
|
-
|
|
102
|
+
# ARGV[7] -- FS_ROOT
|
|
103
|
+
# ARGV[8] -- FS_ENTRANCE
|
|
104
|
+
# ARGV[9] -- FS_MOUNT_POINT
|
|
105
|
+
# ARGV[10] -- APP_NAME
|
|
106
|
+
# ARGV[11] -- RUBY_VER
|
|
107
|
+
unless ARGV.length == 12
|
|
106
108
|
raise Tebako::Error,
|
|
107
|
-
"tebako-packager deploy command expects
|
|
109
|
+
"tebako-packager deploy command expects 12 arguments, #{ARGV.length} has been provided."
|
|
108
110
|
end
|
|
109
111
|
Tebako::Packager.init(ARGV[3], ARGV[4], ARGV[5], ARGV[6])
|
|
110
|
-
Tebako::Packager.create_implib(ARGV[2], ARGV[4], File.basename(ARGV[
|
|
112
|
+
Tebako::Packager.create_implib(ARGV[2], ARGV[4], File.basename(ARGV[10]), ARGV[11]) if ARGV[1] =~ /msys/
|
|
111
113
|
# Assume that "<TARGET_BIN_DIR (TBD)>" is <DATA_SRC_DIR>/bin"
|
|
112
114
|
# That shall match CMakeLists.txt settings
|
|
113
|
-
Tebako::Packager.deploy(ARGV[4], ARGV[
|
|
115
|
+
Tebako::Packager.deploy(ARGV[1], ARGV[4], ARGV[5], ARGV[11], ARGV[7], ARGV[8], ARGV[9])
|
|
114
116
|
|
|
115
117
|
else
|
|
116
118
|
raise Tebako::Error, "tebako-packager cannot process #{ARGV[0]} command"
|
data/lib/tebako/cli.rb
CHANGED
|
@@ -84,7 +84,7 @@ module Tebako
|
|
|
84
84
|
enum: Tebako::CliRubies::RUBY_VERSIONS.keys,
|
|
85
85
|
desc: "Tebako package Ruby version, #{Tebako::CliRubies::DEFAULT_RUBY_VERSION} by default"
|
|
86
86
|
def press
|
|
87
|
-
|
|
87
|
+
version_cache_check unless options[:devmode]
|
|
88
88
|
|
|
89
89
|
puts press_announce
|
|
90
90
|
do_press
|
|
@@ -99,7 +99,7 @@ module Tebako
|
|
|
99
99
|
enum: Tebako::CliRubies::RUBY_VERSIONS.keys,
|
|
100
100
|
desc: "Tebako package Ruby version, #{Tebako::CliRubies::DEFAULT_RUBY_VERSION} by default."
|
|
101
101
|
def setup
|
|
102
|
-
|
|
102
|
+
version_cache_check unless options[:devmode]
|
|
103
103
|
|
|
104
104
|
puts "Setting up tebako packaging environment"
|
|
105
105
|
do_setup
|
data/lib/tebako/cli_helpers.rb
CHANGED
|
@@ -204,20 +204,42 @@ module Tebako
|
|
|
204
204
|
@version_key ||= "#{Tebako::VERSION} at #{source}"
|
|
205
205
|
end
|
|
206
206
|
|
|
207
|
-
def
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
207
|
+
def version_cache
|
|
208
|
+
version_file_path = File.join(prefix, E_VERSION_FILE)
|
|
209
|
+
file_version = File.open(version_file_path, &:readline).strip
|
|
210
|
+
|
|
211
|
+
file_version.match(/(?<version>.+) at (?<source>.+)/)
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
def version_cache_check
|
|
215
|
+
match_data = version_cache
|
|
216
|
+
|
|
217
|
+
return version_unknown unless match_data
|
|
218
|
+
|
|
219
|
+
if match_data[:version] != Tebako::VERSION
|
|
220
|
+
version_mismatch(match_data[:version])
|
|
221
|
+
elsif match_data[:source] != source
|
|
222
|
+
version_source_mismatch(match_data[:source])
|
|
219
223
|
end
|
|
220
|
-
|
|
224
|
+
rescue StandardError
|
|
225
|
+
version_unknown
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
def version_mismatch(cached_version)
|
|
229
|
+
puts "Tebako cache was created by a gem version #{cached_version} " \
|
|
230
|
+
"and cannot be used for gem version #{Tebako::VERSION}"
|
|
231
|
+
clean_cache
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
def version_source_mismatch(cached_source)
|
|
235
|
+
puts "CMake cache was created for a different source directory '#{cached_source}' " \
|
|
236
|
+
"and cannot be used for '#{source}'"
|
|
237
|
+
clean_output
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def version_unknown
|
|
241
|
+
puts "CMake cache version was not recognized, cleaning up"
|
|
242
|
+
clean_cache
|
|
221
243
|
end
|
|
222
244
|
end
|
|
223
245
|
end
|
|
@@ -0,0 +1,281 @@
|
|
|
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
|
+
require_relative "error"
|
|
32
|
+
|
|
33
|
+
# Tebako - an executable packager
|
|
34
|
+
module Tebako
|
|
35
|
+
# Magic version numbers used to ensure compatibility for Ruby 2.7.x, 3.0.x
|
|
36
|
+
# These are the minimal versions required to provide linux-gnu / linux-musl differentiation by bundler
|
|
37
|
+
# Ruby 3.1+ default rubygems versions work correctly out of the box
|
|
38
|
+
BUNDLER_VERSION = "2.4.22"
|
|
39
|
+
RUBYGEMS_VERSION = "3.4.22"
|
|
40
|
+
|
|
41
|
+
# Tebako packaging support (deployer)
|
|
42
|
+
class DeployHelper # rubocop:disable Metrics/ClassLength
|
|
43
|
+
def initialize(fs_root, fs_entrance, fs_mount_point, target_dir, pre_dir)
|
|
44
|
+
@fs_root = fs_root
|
|
45
|
+
@fs_entrance = fs_entrance
|
|
46
|
+
@fs_mount_point = fs_mount_point
|
|
47
|
+
@target_dir = target_dir
|
|
48
|
+
@pre_dir = pre_dir
|
|
49
|
+
@verbose = ENV["VERBOSE"] == "yes" || ENV["VERBOSE"] == "true"
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
attr_reader :bundler_command, :gem_command, :gem_home
|
|
53
|
+
|
|
54
|
+
def config(os_type, ruby_ver)
|
|
55
|
+
@ruby_ver = ruby_ver
|
|
56
|
+
@os_type = os_type
|
|
57
|
+
|
|
58
|
+
@tbd = File.join(@target_dir, "bin")
|
|
59
|
+
@tgd = @gem_home = File.join(@target_dir, "lib", "ruby", "gems", ruby_api_version)
|
|
60
|
+
@tld = File.join(@target_dir, "local")
|
|
61
|
+
|
|
62
|
+
lookup_files
|
|
63
|
+
configure_scenario
|
|
64
|
+
configure_commands
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def deploy
|
|
68
|
+
install_gem("tebako-runtime")
|
|
69
|
+
install_gem("bundler", Tebako::BUNDLER_VERSION) if needs_bundler?
|
|
70
|
+
|
|
71
|
+
deploy_solution
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def deploy_env
|
|
75
|
+
{ "GEM_HOME" => gem_home,
|
|
76
|
+
"GEM_PATH" => gem_home,
|
|
77
|
+
"TEBAKO_PASS_THROUGH" => "1" }
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def install_gem(name, ver = nil)
|
|
81
|
+
puts " ... installing #{name} gem#{" version #{ver}" if ver}"
|
|
82
|
+
|
|
83
|
+
params = [@gem_command, "install", name.to_s]
|
|
84
|
+
params.push("-v", ver.to_s) if ver
|
|
85
|
+
["--no-document", "--install-dir", @tgd].each do |param|
|
|
86
|
+
params.push(param)
|
|
87
|
+
end
|
|
88
|
+
run_with_capture_v(params)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def ruby_api_version
|
|
92
|
+
@ruby_api_version ||= "#{@ruby_ver.split(".")[0..1].join(".")}.0"
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def needs_bundler?
|
|
96
|
+
@gf_length.positive?
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def update_rubygems
|
|
100
|
+
puts " ... updating rubygems to #{Tebako::RUBYGEMS_VERSION}"
|
|
101
|
+
run_with_capture_v([@gem_command, "update", "--no-doc", "--system", Tebako::RUBYGEMS_VERSION])
|
|
102
|
+
end
|
|
103
|
+
|
|
104
|
+
private
|
|
105
|
+
|
|
106
|
+
def bundle_config
|
|
107
|
+
run_with_capture_v([@bundler_command, "config", "set", "--local", "build.ffi", "--disable-system-libffi"])
|
|
108
|
+
run_with_capture_v([@bundler_command, "config", "set", "--local", "build.nokogiri", @nokogiri_option])
|
|
109
|
+
run_with_capture_v([@bundler_command, "config", "set", "--local", "force_ruby_platform", @force_ruby_platform])
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def check_entry_point(entry_point_root)
|
|
113
|
+
fs_entry_point = File.join(entry_point_root, @fs_entrance)
|
|
114
|
+
puts " ... target entry point will be at #{File.join(@fs_mount_point, fs_entry_point)}"
|
|
115
|
+
|
|
116
|
+
return if File.exist?(File.join(@target_dir, fs_entry_point))
|
|
117
|
+
|
|
118
|
+
raise Tebako::Error.new("Entry point #{fs_entry_point} does not exist or is not accessible", 106)
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def collect_and_deploy_gem(gemspec)
|
|
122
|
+
puts " ... Collecting gem from gemspec #{gemspec}"
|
|
123
|
+
|
|
124
|
+
copy_files(@pre_dir)
|
|
125
|
+
|
|
126
|
+
Dir.chdir(@pre_dir) do
|
|
127
|
+
run_with_capture_v([@gem_command, "build", gemspec])
|
|
128
|
+
install_all_gems_or_fail
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
check_entry_point("bin")
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def collect_and_deploy_gem_and_gemfile(gemspec)
|
|
135
|
+
puts " ... collecting gem from gemspec #{gemspec} and Gemfile"
|
|
136
|
+
|
|
137
|
+
copy_files(@pre_dir)
|
|
138
|
+
|
|
139
|
+
Dir.chdir(@pre_dir) do
|
|
140
|
+
bundle_config
|
|
141
|
+
puts " *** It may take a long time for a big project. It takes REALLY long time on Windows ***"
|
|
142
|
+
run_with_capture_v([@bundler_command, "install", "--jobs=#{ncores}"])
|
|
143
|
+
run_with_capture_v([@bundler_command, "exec", @gem_command, "build", gemspec])
|
|
144
|
+
install_all_gems_or_fail
|
|
145
|
+
end
|
|
146
|
+
|
|
147
|
+
check_entry_point("bin")
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
def configure_commands
|
|
151
|
+
@cmd_suffix = @os_type =~ /msys/ ? ".cmd" : ""
|
|
152
|
+
@bat_suffix = @os_type =~ /msys/ ? ".bat" : ""
|
|
153
|
+
|
|
154
|
+
@gem_command = File.join(@tbd, "gem#{@cmd_suffix}")
|
|
155
|
+
@bundler_command = File.join(@tbd, "bundle#{@bat_suffix}")
|
|
156
|
+
|
|
157
|
+
@force_ruby_platform = @os_type =~ /msys|linux-musl/ ? "true" : "false"
|
|
158
|
+
@nokogiri_option = @os_type =~ /msys/ ? "--use-system-libraries" : "--no-use-system-libraries"
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
def configure_scenario
|
|
162
|
+
case @gs_length
|
|
163
|
+
when 0
|
|
164
|
+
configure_scenario_no_gemspec
|
|
165
|
+
when 1
|
|
166
|
+
@scenario = @gf_length.positive? ? :gemspec_and_gemfile : :gemspec
|
|
167
|
+
else
|
|
168
|
+
raise Tebako::Error, "Multiple Ruby gemspecs found in #{@fs_root}"
|
|
169
|
+
end
|
|
170
|
+
end
|
|
171
|
+
|
|
172
|
+
def configure_scenario_no_gemspec
|
|
173
|
+
@scenario = if @gf_length.positive?
|
|
174
|
+
:gemfile
|
|
175
|
+
elsif @g_length.positive?
|
|
176
|
+
:gem
|
|
177
|
+
else
|
|
178
|
+
:simple_script
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
def copy_files(dest)
|
|
183
|
+
FileUtils.mkdir_p(dest)
|
|
184
|
+
if Dir.exist?(@fs_root) && File.readable?(@fs_root)
|
|
185
|
+
begin
|
|
186
|
+
FileUtils.cp_r(File.join(@fs_root, "."), dest)
|
|
187
|
+
rescue StandardError
|
|
188
|
+
raise Tebako::Error.new("#{@fs_root} is not accessible or does not exist.", 107)
|
|
189
|
+
end
|
|
190
|
+
return
|
|
191
|
+
end
|
|
192
|
+
raise Tebako::Error.new("#{@fs_root} is not accessible or is not a directory.", 107)
|
|
193
|
+
end
|
|
194
|
+
|
|
195
|
+
def deploy_gem(gem)
|
|
196
|
+
puts " ... installing Ruby gem from #{gem}"
|
|
197
|
+
copy_files(@pre_dir)
|
|
198
|
+
Dir.chdir(@pre_dir) { install_gem(gem) }
|
|
199
|
+
check_entry_point("bin")
|
|
200
|
+
end
|
|
201
|
+
|
|
202
|
+
def deploy_gemfile
|
|
203
|
+
puts " ... deploying Gemfile"
|
|
204
|
+
copy_files(@tld)
|
|
205
|
+
|
|
206
|
+
Dir.chdir(@tld) do
|
|
207
|
+
bundle_config
|
|
208
|
+
puts " *** It may take a long time for a big project. It takes REALLY long time on Windows ***"
|
|
209
|
+
run_with_capture_v([@bundler_command, "install", "--jobs=#{ncores}"])
|
|
210
|
+
end
|
|
211
|
+
|
|
212
|
+
check_entry_point("local")
|
|
213
|
+
end
|
|
214
|
+
|
|
215
|
+
def deploy_simple_script
|
|
216
|
+
puts " ... collecting simple Ruby script from #{@fs_root}"
|
|
217
|
+
copy_files(@tld)
|
|
218
|
+
check_entry_point("local")
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def deploy_solution # rubocop:disable Metrics/MethodLength
|
|
222
|
+
case @scenario
|
|
223
|
+
when :simple_script
|
|
224
|
+
deploy_simple_script
|
|
225
|
+
when :gem
|
|
226
|
+
deploy_gem(Dir.glob(File.join(@fs_root, "*.gem")).first)
|
|
227
|
+
when :gemfile
|
|
228
|
+
deploy_gemfile
|
|
229
|
+
when :gemspec
|
|
230
|
+
collect_and_deploy_gem(Dir.glob(File.join(@fs_root, "*.gemspec")).first)
|
|
231
|
+
when :gemspec_and_gemfile
|
|
232
|
+
collect_and_deploy_gem_and_gemfile(Dir.glob(File.join(@fs_root, "*.gemspec")).first)
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
def install_all_gems_or_fail
|
|
237
|
+
gem_files = Dir.glob("*.gem").map { |file| File.expand_path(file) }
|
|
238
|
+
raise Tebako::Error, "No gem files found after build" if gem_files.empty?
|
|
239
|
+
|
|
240
|
+
gem_files.each { |gem_file| install_gem(gem_file) }
|
|
241
|
+
end
|
|
242
|
+
|
|
243
|
+
def lookup_files
|
|
244
|
+
@gs_length = Dir.glob(File.join(@fs_root, "*.gemspec")).length
|
|
245
|
+
@gf_length = Dir.glob(File.join(@fs_root, "Gemfile")).length
|
|
246
|
+
@g_length = Dir.glob(File.join(@fs_root, "*.gem")).length
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
def ncores
|
|
250
|
+
if RUBY_PLATFORM.include?("darwin")
|
|
251
|
+
out, st = Open3.capture2e("sysctl", "-n", "hw.ncpu")
|
|
252
|
+
else
|
|
253
|
+
out, st = Open3.capture2e("nproc", "--all")
|
|
254
|
+
end
|
|
255
|
+
|
|
256
|
+
@ncores ||= if st.exitstatus.zero?
|
|
257
|
+
out.strip.to_i
|
|
258
|
+
else
|
|
259
|
+
4
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
263
|
+
def run_with_capture(args)
|
|
264
|
+
puts " ... @ #{args.join(" ")}"
|
|
265
|
+
out, st = Open3.capture2e(*args)
|
|
266
|
+
raise Tebako::Error, "Failed to run #{args.join(" ")} (#{st}):\n #{out}" unless st.exitstatus.zero?
|
|
267
|
+
|
|
268
|
+
out
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
def run_with_capture_v(args)
|
|
272
|
+
if @verbose
|
|
273
|
+
args_v = args.dup
|
|
274
|
+
args_v.push("--verbose")
|
|
275
|
+
puts run_with_capture(args_v)
|
|
276
|
+
else
|
|
277
|
+
run_with_capture(args)
|
|
278
|
+
end
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
data/lib/tebako/error.rb
CHANGED
|
@@ -32,7 +32,9 @@ module Tebako
|
|
|
32
32
|
102 => "'tebako setup' build step failed",
|
|
33
33
|
103 => "'tebako press' configure step failed",
|
|
34
34
|
104 => "'tebako press' build step failed",
|
|
35
|
-
105 => "Failed to map MSys path to Windows"
|
|
35
|
+
105 => "Failed to map MSys path to Windows",
|
|
36
|
+
106 => "Entry point does not exist or is not accessible",
|
|
37
|
+
107 => "Project root does not exist or is not accessible"
|
|
36
38
|
}.freeze
|
|
37
39
|
|
|
38
40
|
class << self
|
|
@@ -88,9 +88,9 @@ module Tebako
|
|
|
88
88
|
SUBST
|
|
89
89
|
}.freeze
|
|
90
90
|
|
|
91
|
-
DARWIN_CONFIGURE_PATCH = {
|
|
92
|
-
|
|
93
|
-
}.freeze
|
|
91
|
+
# DARWIN_CONFIGURE_PATCH = {
|
|
92
|
+
# "EXTDLDFLAGS=\"-bundle_loader '\\$(BUILTRUBY)'\"" => ""
|
|
93
|
+
# }.freeze
|
|
94
94
|
|
|
95
95
|
OPENSSL_EXTCONF_RB_SUBST = <<~SUBST
|
|
96
96
|
# Start of tebako patch
|
|
@@ -138,7 +138,10 @@ module Tebako
|
|
|
138
138
|
|
|
139
139
|
# ....................................................
|
|
140
140
|
# Fixing (bypassing) configure script bug where a variable is used before initialization
|
|
141
|
-
|
|
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/
|
|
142
145
|
|
|
143
146
|
# ....................................................
|
|
144
147
|
# autoload :OpenSSL, "openssl"
|
|
@@ -53,7 +53,7 @@ module Tebako
|
|
|
53
53
|
|
|
54
54
|
TEMPLATE_MAKEFILE_IN_BASE_PATCH_PRE_3_1 =
|
|
55
55
|
"# -- Start of tebako patch --\n" \
|
|
56
|
-
"\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(
|
|
56
|
+
"\t\t$(Q) $(PURIFY) $(CC) $(LDFLAGS) $(MAINOBJ) " \
|
|
57
57
|
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
|
|
58
58
|
"# -- End of tebako patch --"
|
|
59
59
|
|
|
@@ -63,13 +63,13 @@ module Tebako
|
|
|
63
63
|
|
|
64
64
|
TEMPLATE_MAKEFILE_IN_BASE_PATCH =
|
|
65
65
|
"# -- Start of tebako patch --\n" \
|
|
66
|
-
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(
|
|
66
|
+
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(MAINOBJ) " \
|
|
67
67
|
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
|
|
68
68
|
"# -- End of tebako patch --"
|
|
69
69
|
|
|
70
70
|
TEMPLATE_MAKEFILE_IN_BASE_PATCH_MSYS =
|
|
71
71
|
"# -- Start of tebako patch --\n" \
|
|
72
|
-
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(
|
|
72
|
+
"\t\t$(Q) $(PURIFY) $(CC) $(EXE_LDFLAGS) $(RUBY_EXP) $(MAINOBJ) " \
|
|
73
73
|
"$(EXTOBJS) $(LIBRUBYARG_STATIC) $(OUTFLAG)$@\n" \
|
|
74
74
|
"# -- End of tebako patch --"
|
|
75
75
|
|
data/lib/tebako/packager.rb
CHANGED
|
@@ -26,8 +26,11 @@
|
|
|
26
26
|
# POSSIBILITY OF SUCH DAMAGE.
|
|
27
27
|
|
|
28
28
|
require "fileutils"
|
|
29
|
+
require "find"
|
|
30
|
+
require "pathname"
|
|
29
31
|
|
|
30
32
|
require_relative "error"
|
|
33
|
+
require_relative "deploy_helper"
|
|
31
34
|
require_relative "packager/pass1"
|
|
32
35
|
require_relative "packager/pass1a"
|
|
33
36
|
require_relative "packager/pass2"
|
|
@@ -59,12 +62,6 @@ module Tebako
|
|
|
59
62
|
thread_pthread.c
|
|
60
63
|
].freeze
|
|
61
64
|
|
|
62
|
-
# Magic version numbers used to ensure compatibility for Ruby 2.7.x, 3.0.x
|
|
63
|
-
# These are the minimal versions required to provide linux-gnu / linux-musl differentiation by bundler
|
|
64
|
-
# Ruby 3.1+ default rubygems versions work correctly out of the box
|
|
65
|
-
BUNDLER_VERSION = "2.4.22"
|
|
66
|
-
RUBYGEMS_VERSION = "3.4.22"
|
|
67
|
-
|
|
68
65
|
class << self
|
|
69
66
|
# Create implib
|
|
70
67
|
def create_implib(src_dir, package_src_dir, app_name, ruby_ver)
|
|
@@ -77,18 +74,18 @@ module Tebako
|
|
|
77
74
|
end
|
|
78
75
|
|
|
79
76
|
# Deploy
|
|
80
|
-
def deploy(target_dir, ruby_ver,
|
|
77
|
+
def deploy(os_type, target_dir, pre_dir, ruby_ver, fs_root, fs_entrance, fs_mount_point) # rubocop:disable Metrics/ParameterLists
|
|
81
78
|
puts "-- Running deploy script"
|
|
82
79
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
deploy_env = { "GEM_HOME" => gem_home, "GEM_PATH" => gem_home, "TEBAKO_PASS_THROUGH" => "1" }
|
|
80
|
+
deploy_helper = Tebako::DeployHelper.new(fs_root, fs_entrance, fs_mount_point, target_dir, pre_dir)
|
|
81
|
+
deploy_helper.config(os_type, ruby_ver)
|
|
87
82
|
|
|
88
|
-
PatchHelpers.with_env(deploy_env) do
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
83
|
+
PatchHelpers.with_env(deploy_helper.deploy_env) do
|
|
84
|
+
unless PatchHelpers.ruby31?(ruby_ver)
|
|
85
|
+
deploy_helper.update_rubygems
|
|
86
|
+
patch_after_rubygems_update(target_dir, deploy_helper.ruby_api_version)
|
|
87
|
+
end
|
|
88
|
+
deploy_helper.deploy
|
|
92
89
|
end
|
|
93
90
|
end
|
|
94
91
|
|
|
@@ -174,24 +171,10 @@ module Tebako
|
|
|
174
171
|
File.join(src_dir, "lib", "libx64-ucrt-ruby#{ruby_ver[0]}#{ruby_ver[2]}0.a")
|
|
175
172
|
end
|
|
176
173
|
|
|
177
|
-
def install_gem(target_dir, name, ver = nil)
|
|
178
|
-
puts " ... installing #{name} gem#{" version #{ver}" if ver}"
|
|
179
|
-
|
|
180
|
-
params = ["#{target_dir}/bin/gem", "install", name.to_s]
|
|
181
|
-
params.push("-v", ver.to_s) if ver
|
|
182
|
-
|
|
183
|
-
out, st = Open3.capture2e(*params)
|
|
184
|
-
raise Tebako::Error, "Failed to install #{name} (#{st}):\n #{out}" unless st.exitstatus.zero?
|
|
185
|
-
end
|
|
186
|
-
|
|
187
174
|
def do_patch(patch_map, root)
|
|
188
175
|
patch_map.each { |fname, mapping| PatchHelpers.patch_file("#{root}/#{fname}", mapping) }
|
|
189
176
|
end
|
|
190
177
|
|
|
191
|
-
def ruby_api_version(ruby_ver)
|
|
192
|
-
"#{ruby_ver.split(".")[0..1].join(".")}.0"
|
|
193
|
-
end
|
|
194
|
-
|
|
195
178
|
def ruby_version(tbd)
|
|
196
179
|
ruby_version = nil
|
|
197
180
|
PatchHelpers.with_env(DEPLOY_ENV) do
|
|
@@ -206,11 +189,7 @@ module Tebako
|
|
|
206
189
|
ruby_version
|
|
207
190
|
end
|
|
208
191
|
|
|
209
|
-
def
|
|
210
|
-
puts " ... updating rubygems to #{gem_ver}"
|
|
211
|
-
out, st = Open3.capture2e("#{target_dir}/bin/gem", "update", "--no-doc", "--system", gem_ver.to_s)
|
|
212
|
-
raise Tebako::Error, "Failed to update rubugems to #{gem_ver} (#{st}):\n #{out}" unless st.exitstatus.zero?
|
|
213
|
-
|
|
192
|
+
def patch_after_rubygems_update(target_dir, ruby_api_ver)
|
|
214
193
|
# Autoload cannot handle statically linked openssl extension
|
|
215
194
|
# Changing it to require seems to be the simplest solution
|
|
216
195
|
PatchHelpers.patch_file("#{target_dir}/lib/ruby/site_ruby/#{ruby_api_ver}/rubygems/openssl.rb",
|
data/lib/tebako/version.rb
CHANGED
|
@@ -42,7 +42,7 @@ jobs:
|
|
|
42
42
|
strategy:
|
|
43
43
|
fail-fast: false
|
|
44
44
|
matrix:
|
|
45
|
-
os: [ ubuntu-20.04, macos-
|
|
45
|
+
os: [ ubuntu-20.04, macos-11.0 ]
|
|
46
46
|
steps:
|
|
47
47
|
- name: Checkout
|
|
48
48
|
uses: actions/checkout@v4
|
|
@@ -67,7 +67,7 @@ jobs:
|
|
|
67
67
|
strategy:
|
|
68
68
|
fail-fast: false
|
|
69
69
|
matrix:
|
|
70
|
-
os: [ ubuntu-20.04, macos-
|
|
70
|
+
os: [ ubuntu-20.04, macos-11.0 ]
|
|
71
71
|
steps:
|
|
72
72
|
- name: Checkout
|
|
73
73
|
uses: actions/checkout@v4
|
|
@@ -89,7 +89,7 @@ jobs:
|
|
|
89
89
|
strategy:
|
|
90
90
|
fail-fast: false
|
|
91
91
|
matrix:
|
|
92
|
-
os: [ ubuntu-20.04, macos-
|
|
92
|
+
os: [ ubuntu-20.04, macos-11.0 ]
|
|
93
93
|
steps:
|
|
94
94
|
- name: Checkout
|
|
95
95
|
uses: actions/checkout@v4
|
|
@@ -106,7 +106,7 @@ jobs:
|
|
|
106
106
|
|
|
107
107
|
test-cross-brew-install:
|
|
108
108
|
name: test arm-brew-setup/install
|
|
109
|
-
runs-on: macos-
|
|
109
|
+
runs-on: macos-11.0
|
|
110
110
|
steps:
|
|
111
111
|
- name: Checkout
|
|
112
112
|
uses: actions/checkout@v4
|
|
@@ -122,24 +122,3 @@ jobs:
|
|
|
122
122
|
set -o errexit -o pipefail -o noclobber -o nounset
|
|
123
123
|
test -f $PWD/arm-homebrew/lib/libgflags.dylib
|
|
124
124
|
test -f $PWD/arm-homebrew/lib/libglog.dylib
|
|
125
|
-
|
|
126
|
-
test-macos-environment-script:
|
|
127
|
-
name: test macos-environment.cmake on ${{ matrix.os }}
|
|
128
|
-
runs-on: ${{ matrix.os }}
|
|
129
|
-
strategy:
|
|
130
|
-
fail-fast: false
|
|
131
|
-
matrix:
|
|
132
|
-
os: [ macos-12, macos-13, macos-14 ]
|
|
133
|
-
|
|
134
|
-
steps:
|
|
135
|
-
- name: Checkout
|
|
136
|
-
uses: actions/checkout@v4
|
|
137
|
-
|
|
138
|
-
- name: Checkout
|
|
139
|
-
uses: actions/checkout@v4
|
|
140
|
-
|
|
141
|
-
- name: Install packages
|
|
142
|
-
run: brew install flex bison bash
|
|
143
|
-
|
|
144
|
-
- name: Run CMake test
|
|
145
|
-
run: cmake -B test.build -S tests/cmake
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Copyright (c) 2021-
|
|
1
|
+
# Copyright (c) 2021-2023, [Ribose Inc](https://www.ribose.com).
|
|
2
2
|
# All rights reserved.
|
|
3
3
|
# This file is a part of tamatebako
|
|
4
4
|
#
|
|
@@ -25,32 +25,14 @@
|
|
|
25
25
|
#
|
|
26
26
|
|
|
27
27
|
if (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
|
|
28
|
-
|
|
29
|
-
function(find_and_set_homebrew_prefix package_name pkg_name executable_name)
|
|
30
|
-
execute_process(
|
|
31
|
-
COMMAND brew --prefix ${package_name}
|
|
32
|
-
RESULT_VARIABLE BREW_${pkg_name}_RESULT
|
|
33
|
-
OUTPUT_VARIABLE BREW_${pkg_name}_PREFIX_TMP
|
|
34
|
-
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
35
|
-
)
|
|
36
|
-
if (BREW_${pkg_name}_RESULT EQUAL 0 AND EXISTS "${BREW_${pkg_name}_PREFIX_TMP}")
|
|
37
|
-
set(BREW_${pkg_name}_PREFIX "${BREW_${pkg_name}_PREFIX_TMP}" CACHE PATH "${package_name} prefix")
|
|
38
|
-
message(STATUS "Found ${package_name} keg installed by Homebrew at ${BREW_${pkg_name}_PREFIX}")
|
|
39
|
-
set(${executable_name} "${BREW_${pkg_name}_PREFIX}/bin/${package_name}" CACHE FILEPATH "${executable_name} executable")
|
|
40
|
-
endif()
|
|
41
|
-
endfunction()
|
|
42
|
-
|
|
43
|
-
|
|
44
28
|
execute_process(
|
|
45
29
|
COMMAND brew --prefix
|
|
46
30
|
RESULT_VARIABLE BREW_PREFIX_RES
|
|
47
|
-
OUTPUT_VARIABLE
|
|
31
|
+
OUTPUT_VARIABLE BREW_PREFIX
|
|
48
32
|
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
49
33
|
)
|
|
50
|
-
if(NOT (BREW_PREFIX_RES EQUAL 0 AND EXISTS ${
|
|
34
|
+
if(NOT (BREW_PREFIX_RES EQUAL 0 AND EXISTS ${BREW_PREFIX}))
|
|
51
35
|
message(FATAL "Could not find build brew setup")
|
|
52
|
-
else()
|
|
53
|
-
set(BREW_PREFIX "${BREW_PREFIX_TMP}" CACHE PATH "Brew installation prefix")
|
|
54
36
|
endif()
|
|
55
37
|
|
|
56
38
|
message(STATUS "Using brew environment at ${BREW_PREFIX}")
|
|
@@ -58,12 +40,41 @@ if (CMAKE_HOST_SYSTEM_NAME MATCHES "Darwin")
|
|
|
58
40
|
set(OPENSSL_ROOT_DIR "${BREW_PREFIX}/opt/openssl@3")
|
|
59
41
|
set(CMAKE_PREFIX_PATH "${BREW_PREFIX}")
|
|
60
42
|
include_directories("${OPENSSL_ROOT_DIR}/include")
|
|
61
|
-
include_directories("${
|
|
43
|
+
include_directories("${TARGET_BREW_PREFIX}/include")
|
|
62
44
|
|
|
63
45
|
# https://stackoverflow.com/questions/53877344/cannot-configure-cmake-to-look-for-homebrew-installed-version-of-bison
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
46
|
+
execute_process(
|
|
47
|
+
COMMAND brew --prefix bison
|
|
48
|
+
RESULT_VARIABLE BREW_BISON
|
|
49
|
+
OUTPUT_VARIABLE BREW_BISON_PREFIX
|
|
50
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
51
|
+
)
|
|
52
|
+
if (BREW_BISON EQUAL 0 AND EXISTS "${BREW_BISON_PREFIX}")
|
|
53
|
+
message(STATUS "Found Bison keg installed by Homebrew at ${BREW_BISON_PREFIX}")
|
|
54
|
+
set(BISON_EXECUTABLE "${BREW_BISON_PREFIX}/bin/bison")
|
|
55
|
+
endif()
|
|
56
|
+
|
|
57
|
+
execute_process(
|
|
58
|
+
COMMAND brew --prefix flex
|
|
59
|
+
RESULT_VARIABLE BREW_FLEX
|
|
60
|
+
OUTPUT_VARIABLE BREW_FLEX_PREFIX
|
|
61
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
62
|
+
)
|
|
63
|
+
if (BREW_FLEX EQUAL 0 AND EXISTS "${BREW_FLEX_PREFIX}")
|
|
64
|
+
message(STATUS "Found Flex keg installed by Homebrew at ${BREW_FLEX_PREFIX}")
|
|
65
|
+
set(FLEX_EXECUTABLE "${BREW_FLEX_PREFIX}/bin/flex")
|
|
66
|
+
endif()
|
|
67
|
+
|
|
68
|
+
execute_process(
|
|
69
|
+
COMMAND brew --prefix bash
|
|
70
|
+
RESULT_VARIABLE BREW_BASH
|
|
71
|
+
OUTPUT_VARIABLE BREW_BASH_PREFIX
|
|
72
|
+
OUTPUT_STRIP_TRAILING_WHITESPACE
|
|
73
|
+
)
|
|
74
|
+
if (BREW_BASH EQUAL 0 AND EXISTS "${BREW_BASH_PREFIX}")
|
|
75
|
+
message(STATUS "Found GNU bash keg installed by Homebrew at ${BREW_BASH_PREFIX}")
|
|
76
|
+
set(GNU_BASH "${BREW_BASH_PREFIX}/bin/bash")
|
|
77
|
+
endif()
|
|
67
78
|
|
|
68
79
|
# Suppress superfluous randlib warnings about "*.a" having no symbols on MacOSX.
|
|
69
80
|
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> Scr <TARGET> <LINK_FLAGS> <OBJECTS>")
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tebako
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.7.2.
|
|
4
|
+
version: 0.7.2.rc4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ribose Inc.
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-07-
|
|
11
|
+
date: 2024-07-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: thor
|
|
@@ -66,6 +66,7 @@ files:
|
|
|
66
66
|
- lib/tebako/cli.rb
|
|
67
67
|
- lib/tebako/cli_helpers.rb
|
|
68
68
|
- lib/tebako/cli_rubies.rb
|
|
69
|
+
- lib/tebako/deploy_helper.rb
|
|
69
70
|
- lib/tebako/error.rb
|
|
70
71
|
- lib/tebako/packager.rb
|
|
71
72
|
- lib/tebako/packager/pass1.rb
|
|
@@ -103,7 +104,6 @@ files:
|
|
|
103
104
|
- tools/cmake-scripts/setup-openssl.cmake
|
|
104
105
|
- tools/cmake-scripts/version.cmake
|
|
105
106
|
- tools/include/pro-statvfs.h
|
|
106
|
-
- tools/tests/cmake/CMakeLists.txt
|
|
107
107
|
- tools/tests/setup-libhowardhinnerdate/CMakeLists.txt
|
|
108
108
|
- tools/tests/setup-librachive/CMakeLists.txt
|
|
109
109
|
- tools/tests/setup-libutfcpp/CMakeLists.txt
|
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# Copyright (c) 2024, [Ribose Inc](https://www.ribose.com).
|
|
2
|
-
# All rights reserved.
|
|
3
|
-
# This file is a part of tebako
|
|
4
|
-
#
|
|
5
|
-
# Redistribution and use in source and binary forms, with or without
|
|
6
|
-
# modification, are permitted provided that the following conditions
|
|
7
|
-
# are met:
|
|
8
|
-
# 1. Redistributions of source code must retain the above copyright
|
|
9
|
-
# notice, this list of conditions and the following disclaimer.
|
|
10
|
-
# 2. Redistributions in binary form must reproduce the above copyright
|
|
11
|
-
# notice, this list of conditions and the following disclaimer in the
|
|
12
|
-
# documentation and/or other materials provided with the distribution.
|
|
13
|
-
#
|
|
14
|
-
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
15
|
-
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
|
16
|
-
# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
17
|
-
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS
|
|
18
|
-
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
19
|
-
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
20
|
-
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
21
|
-
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
22
|
-
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
23
|
-
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
24
|
-
# POSSIBILITY OF SUCH DAMAGE.
|
|
25
|
-
|
|
26
|
-
cmake_minimum_required(VERSION 3.15)
|
|
27
|
-
project(cmake-tests)
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
# Adjust the path to where your macos-environment.cmake is located
|
|
31
|
-
include("${CMAKE_CURRENT_LIST_DIR}/../../cmake-scripts/macos-environment.cmake")
|
|
32
|
-
|
|
33
|
-
# Function to check if a variable is set (not empty)
|
|
34
|
-
function(check_variable_set VAR_NAME)
|
|
35
|
-
if(NOT ${VAR_NAME})
|
|
36
|
-
message(FATAL_ERROR "${VAR_NAME} is not set.")
|
|
37
|
-
endif()
|
|
38
|
-
endfunction()
|
|
39
|
-
|
|
40
|
-
# Function to check if a file/directory exists at the path specified by a variable
|
|
41
|
-
function(check_exists VAR_NAME TYPE)
|
|
42
|
-
if(NOT EXISTS "${${VAR_NAME}}")
|
|
43
|
-
if(TYPE STREQUAL "FILE")
|
|
44
|
-
message(FATAL_ERROR "The file specified in ${VAR_NAME} does not exist: ${${VAR_NAME}}")
|
|
45
|
-
elseif(TYPE STREQUAL "DIRECTORY")
|
|
46
|
-
message(FATAL_ERROR "The directory specified in ${VAR_NAME} does not exist: ${${VAR_NAME}}")
|
|
47
|
-
endif()
|
|
48
|
-
endif()
|
|
49
|
-
endfunction()
|
|
50
|
-
|
|
51
|
-
message(STATUS "BREW_PREFIX: ${BREW_PREFIX}")
|
|
52
|
-
check_variable_set(BREW_PREFIX)
|
|
53
|
-
check_exists(BREW_PREFIX DIRECTORY)
|
|
54
|
-
|
|
55
|
-
message(STATUS "OPENSSL_ROOT_DIR: ${OPENSSL_ROOT_DIR}")
|
|
56
|
-
check_variable_set(OPENSSL_ROOT_DIR)
|
|
57
|
-
check_exists(OPENSSL_ROOT_DIR DIRECTORY)
|
|
58
|
-
|
|
59
|
-
message(STATUS "CMAKE_PREFIX_PATH: ${CMAKE_PREFIX_PATH}")
|
|
60
|
-
check_variable_set(CMAKE_PREFIX_PATH)
|
|
61
|
-
check_exists(CMAKE_PREFIX_PATH DIRECTORY)
|
|
62
|
-
|
|
63
|
-
message(STATUS "BREW_BISON_PREFIX: ${BREW_BISON_PREFIX}")
|
|
64
|
-
check_variable_set(BREW_BISON_PREFIX)
|
|
65
|
-
check_exists(BREW_BISON_PREFIX DIRECTORY)
|
|
66
|
-
|
|
67
|
-
message(STATUS "BREW_FLEX_PREFIX: ${BREW_FLEX_PREFIX}")
|
|
68
|
-
check_variable_set(BREW_FLEX_PREFIX)
|
|
69
|
-
check_exists(BREW_FLEX_PREFIX DIRECTORY)
|
|
70
|
-
|
|
71
|
-
message(STATUS "FLEX_EXECUTABLE: ${FLEX_EXECUTABLE}")
|
|
72
|
-
check_variable_set(FLEX_EXECUTABLE)
|
|
73
|
-
check_exists(FLEX_EXECUTABLE FILE)
|
|
74
|
-
|
|
75
|
-
message(STATUS "BREW_BASH_PREFIX: ${BREW_BASH_PREFIX}")
|
|
76
|
-
check_variable_set(BREW_BASH_PREFIX)
|
|
77
|
-
check_exists(BREW_BASH_PREFIX DIRECTORY)
|
|
78
|
-
|
|
79
|
-
message(STATUS "GNU_BASH: ${GNU_BASH}")
|
|
80
|
-
check_variable_set(GNU_BASH)
|
|
81
|
-
check_exists(GNU_BASH FILE)
|