tebako 0.7.2.rc3 → 0.7.2.rc5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99a2a477845a6154633205dd8d0420156f97c057cfb820158d0f88e432e09a85
4
- data.tar.gz: e8fb206e64c629a058620c9563bd34b274af06f8d14fdaacd7b3ad3788406536
3
+ metadata.gz: 446a6e7b682bc902e8f22715760ad946a1c35e62c8a5b634af7a0a60436213cf
4
+ data.tar.gz: 8ea046fe2708966ff3cafb6c66ace15af072eabf0b83b588d1ed7525c9937bc1
5
5
  SHA512:
6
- metadata.gz: 78846d4443cdd33781108b1be109b191b8f1398a882083d4c6e4840b5dcaf5a122c60ec887fd3ef3c2a2562355457e1cf7bd4bd1eff96d33b056ff78042a9414
7
- data.tar.gz: 5803abbe66b044013d221c3ca3e18f1f7fded575deca85b9b9210b4920488a3d87c5b3314f2fcb3d4c0302b634f48a18cb01c6515e6ee6985f7ece0d023ea336
6
+ metadata.gz: 84f293aecf93beef4e2bbe7db8792a4acef9ed6e1d126f3f49b1c5c93231f2e2dfa8e5277b259e48f42239dd721b05029be3276e59587e44f979928c64f7de0a
7
+ data.tar.gz: 7c644560f564737a05a557a9b1e97b6d34b82771d2eb45d76189b4c03723c9948d685528e424b99dea78f22968cac3b2104d965c87a551186c3999e73c01482c
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(FORCE_RUBY_PLATFORM "false")
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] -- GFLENGTH
103
- # ARGV[8] -- APP_NAME
104
- # ARGV[9] -- RUBY_VER
105
- unless ARGV.length == 10
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 10 arguments, #{ARGV.length} has been provided."
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[8]), ARGV[9]) if ARGV[1] =~ /msys/
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[9], ARGV[7])
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
- (clean_output unless version_match?) unless options[:devmode]
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
- (clean_output unless version_match?) unless options[:devmode]
102
+ version_cache_check unless options[:devmode]
103
103
 
104
104
  puts "Setting up tebako packaging environment"
105
105
  do_setup
@@ -81,7 +81,7 @@ module Tebako
81
81
  end
82
82
 
83
83
  def ensure_version_file
84
- version_file_path = File.join(prefix, E_VERSION_FILE)
84
+ version_file_path = File.join(deps, E_VERSION_FILE)
85
85
 
86
86
  begin
87
87
  File.write(version_file_path, version_key)
@@ -204,20 +204,41 @@ module Tebako
204
204
  @version_key ||= "#{Tebako::VERSION} at #{source}"
205
205
  end
206
206
 
207
- def version_match? # rubocop:disable Metrics/MethodLength
208
- begin
209
- version_file_path = File.join(prefix, E_VERSION_FILE)
210
- file_version = File.open(version_file_path, &:readline).strip
211
- rs = file_version == version_key
212
- unless rs
213
- puts "CMake cache was created by a gem version #{file_version} " \
214
- "and cannot be used for gem version #{version_key}"
215
- end
216
- rescue StandardError
217
- # In case of any error (e.g., file not readable), return false
218
- rs = false
207
+ def version_cache
208
+ version_file_path = File.join(deps, E_VERSION_FILE)
209
+ file_version = File.open(version_file_path, &:readline).strip
210
+ file_version.match(/(?<version>.+) at (?<source>.+)/)
211
+ end
212
+
213
+ def version_cache_check
214
+ match_data = version_cache
215
+
216
+ return version_unknown unless match_data
217
+
218
+ if match_data[:version] != Tebako::VERSION
219
+ version_mismatch(match_data[:version])
220
+ elsif match_data[:source] != source
221
+ version_source_mismatch(match_data[:source])
219
222
  end
220
- rs
223
+ rescue StandardError
224
+ version_unknown
225
+ end
226
+
227
+ def version_mismatch(cached_version)
228
+ puts "Tebako cache was created by a gem version #{cached_version} " \
229
+ "and cannot be used for gem version #{Tebako::VERSION}"
230
+ clean_cache
231
+ end
232
+
233
+ def version_source_mismatch(cached_source)
234
+ puts "CMake cache was created for a different source directory '#{cached_source}' " \
235
+ "and cannot be used for '#{source}'"
236
+ clean_output
237
+ end
238
+
239
+ def version_unknown
240
+ puts "CMake cache version was not recognized, cleaning up"
241
+ clean_cache
221
242
  end
222
243
  end
223
244
  end
@@ -0,0 +1,285 @@
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
+ system("#{gem_command} env")
69
+ install_gem("tebako-runtime")
70
+ install_gem("bundler", Tebako::BUNDLER_VERSION) if needs_bundler?
71
+
72
+ deploy_solution
73
+ end
74
+
75
+ def deploy_env
76
+ {
77
+ "GEM_HOME" => gem_home,
78
+ "GEM_PATH" => gem_home,
79
+ "GEM_SPEC_CACHE" => File.join(@target_dir, "spec_cache"),
80
+ "TEBAKO_PASS_THROUGH" => "1"
81
+ }
82
+ end
83
+
84
+ def install_gem(name, ver = nil)
85
+ puts " ... installing #{name} gem#{" version #{ver}" if ver}"
86
+
87
+ params = [@gem_command, "install", name.to_s]
88
+ params.push("-v", ver.to_s) if ver
89
+ ["--no-document", "--install-dir", @tgd].each do |param|
90
+ params.push(param)
91
+ end
92
+ run_with_capture_v(params)
93
+ end
94
+
95
+ def ruby_api_version
96
+ @ruby_api_version ||= "#{@ruby_ver.split(".")[0..1].join(".")}.0"
97
+ end
98
+
99
+ def needs_bundler?
100
+ @gf_length.positive?
101
+ end
102
+
103
+ def update_rubygems
104
+ puts " ... updating rubygems to #{Tebako::RUBYGEMS_VERSION}"
105
+ run_with_capture_v([@gem_command, "update", "--no-doc", "--system", Tebako::RUBYGEMS_VERSION])
106
+ end
107
+
108
+ private
109
+
110
+ def bundle_config
111
+ run_with_capture_v([@bundler_command, "config", "set", "--local", "build.ffi", "--disable-system-libffi"])
112
+ run_with_capture_v([@bundler_command, "config", "set", "--local", "build.nokogiri", @nokogiri_option])
113
+ run_with_capture_v([@bundler_command, "config", "set", "--local", "force_ruby_platform", @force_ruby_platform])
114
+ end
115
+
116
+ def check_entry_point(entry_point_root)
117
+ fs_entry_point = File.join(entry_point_root, @fs_entrance)
118
+ puts " ... target entry point will be at #{File.join(@fs_mount_point, fs_entry_point)}"
119
+
120
+ return if File.exist?(File.join(@target_dir, fs_entry_point))
121
+
122
+ raise Tebako::Error.new("Entry point #{fs_entry_point} does not exist or is not accessible", 106)
123
+ end
124
+
125
+ def collect_and_deploy_gem(gemspec)
126
+ puts " ... Collecting gem from gemspec #{gemspec}"
127
+
128
+ copy_files(@pre_dir)
129
+
130
+ Dir.chdir(@pre_dir) do
131
+ run_with_capture_v([@gem_command, "build", gemspec])
132
+ install_all_gems_or_fail
133
+ end
134
+
135
+ check_entry_point("bin")
136
+ end
137
+
138
+ def collect_and_deploy_gem_and_gemfile(gemspec)
139
+ puts " ... collecting gem from gemspec #{gemspec} and Gemfile"
140
+
141
+ copy_files(@pre_dir)
142
+
143
+ Dir.chdir(@pre_dir) do
144
+ bundle_config
145
+ puts " *** It may take a long time for a big project. It takes REALLY long time on Windows ***"
146
+ run_with_capture_v([@bundler_command, "install", "--jobs=#{ncores}"])
147
+ run_with_capture_v([@bundler_command, "exec", @gem_command, "build", gemspec])
148
+ install_all_gems_or_fail
149
+ end
150
+
151
+ check_entry_point("bin")
152
+ end
153
+
154
+ def configure_commands
155
+ @cmd_suffix = @os_type =~ /msys/ ? ".cmd" : ""
156
+ @bat_suffix = @os_type =~ /msys/ ? ".bat" : ""
157
+
158
+ @gem_command = File.join(@tbd, "gem#{@cmd_suffix}")
159
+ @bundler_command = File.join(@tbd, "bundle#{@bat_suffix}")
160
+
161
+ @force_ruby_platform = @os_type =~ /msys|linux-musl/ ? "true" : "false"
162
+ @nokogiri_option = @os_type =~ /msys/ ? "--use-system-libraries" : "--no-use-system-libraries"
163
+ end
164
+
165
+ def configure_scenario
166
+ case @gs_length
167
+ when 0
168
+ configure_scenario_no_gemspec
169
+ when 1
170
+ @scenario = @gf_length.positive? ? :gemspec_and_gemfile : :gemspec
171
+ else
172
+ raise Tebako::Error, "Multiple Ruby gemspecs found in #{@fs_root}"
173
+ end
174
+ end
175
+
176
+ def configure_scenario_no_gemspec
177
+ @scenario = if @gf_length.positive?
178
+ :gemfile
179
+ elsif @g_length.positive?
180
+ :gem
181
+ else
182
+ :simple_script
183
+ end
184
+ end
185
+
186
+ def copy_files(dest)
187
+ FileUtils.mkdir_p(dest)
188
+ if Dir.exist?(@fs_root) && File.readable?(@fs_root)
189
+ begin
190
+ FileUtils.cp_r(File.join(@fs_root, "."), dest)
191
+ rescue StandardError
192
+ raise Tebako::Error.new("#{@fs_root} is not accessible or does not exist.", 107)
193
+ end
194
+ return
195
+ end
196
+ raise Tebako::Error.new("#{@fs_root} is not accessible or is not a directory.", 107)
197
+ end
198
+
199
+ def deploy_gem(gem)
200
+ puts " ... installing Ruby gem from #{gem}"
201
+ copy_files(@pre_dir)
202
+ Dir.chdir(@pre_dir) { install_gem(gem) }
203
+ check_entry_point("bin")
204
+ end
205
+
206
+ def deploy_gemfile
207
+ puts " ... deploying Gemfile"
208
+ copy_files(@tld)
209
+
210
+ Dir.chdir(@tld) do
211
+ bundle_config
212
+ puts " *** It may take a long time for a big project. It takes REALLY long time on Windows ***"
213
+ run_with_capture_v([@bundler_command, "install", "--jobs=#{ncores}"])
214
+ end
215
+
216
+ check_entry_point("local")
217
+ end
218
+
219
+ def deploy_simple_script
220
+ puts " ... collecting simple Ruby script from #{@fs_root}"
221
+ copy_files(@tld)
222
+ check_entry_point("local")
223
+ end
224
+
225
+ def deploy_solution # rubocop:disable Metrics/MethodLength
226
+ case @scenario
227
+ when :simple_script
228
+ deploy_simple_script
229
+ when :gem
230
+ deploy_gem(Dir.glob(File.join(@fs_root, "*.gem")).first)
231
+ when :gemfile
232
+ deploy_gemfile
233
+ when :gemspec
234
+ collect_and_deploy_gem(Dir.glob(File.join(@fs_root, "*.gemspec")).first)
235
+ when :gemspec_and_gemfile
236
+ collect_and_deploy_gem_and_gemfile(Dir.glob(File.join(@fs_root, "*.gemspec")).first)
237
+ end
238
+ end
239
+
240
+ def install_all_gems_or_fail
241
+ gem_files = Dir.glob("*.gem").map { |file| File.expand_path(file) }
242
+ raise Tebako::Error, "No gem files found after build" if gem_files.empty?
243
+
244
+ gem_files.each { |gem_file| install_gem(gem_file) }
245
+ end
246
+
247
+ def lookup_files
248
+ @gs_length = Dir.glob(File.join(@fs_root, "*.gemspec")).length
249
+ @gf_length = Dir.glob(File.join(@fs_root, "Gemfile")).length
250
+ @g_length = Dir.glob(File.join(@fs_root, "*.gem")).length
251
+ end
252
+
253
+ def ncores
254
+ if RUBY_PLATFORM.include?("darwin")
255
+ out, st = Open3.capture2e("sysctl", "-n", "hw.ncpu")
256
+ else
257
+ out, st = Open3.capture2e("nproc", "--all")
258
+ end
259
+
260
+ @ncores ||= if st.exitstatus.zero?
261
+ out.strip.to_i
262
+ else
263
+ 4
264
+ end
265
+ end
266
+
267
+ def run_with_capture(args)
268
+ puts " ... @ #{args.join(" ")}"
269
+ out, st = Open3.capture2e(*args)
270
+ raise Tebako::Error, "Failed to run #{args.join(" ")} (#{st}):\n #{out}" unless st.exitstatus.zero?
271
+
272
+ out
273
+ end
274
+
275
+ def run_with_capture_v(args)
276
+ if @verbose
277
+ args_v = args.dup
278
+ args_v.push("--verbose")
279
+ puts run_with_capture(args_v)
280
+ else
281
+ run_with_capture(args)
282
+ end
283
+ end
284
+ end
285
+ 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
- "EXTDLDFLAGS=\"-bundle_loader '\\$(BUILTRUBY)'\"" => ""
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
- patch_map.store("configure", DARWIN_CONFIGURE_PATCH) if ostype =~ /darwin/
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) $(XLDFLAGS) $(MAINOBJ) " \
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) $(XLDFLAGS) $(MAINOBJ) " \
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) $(XLDFLAGS) $(RUBY_EXP) $(MAINOBJ) " \
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
 
@@ -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, gflength)
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
- ruby_api_ver = ruby_api_version(ruby_ver)
84
- gem_home = "#{target_dir}/lib/ruby/gems/#{ruby_api_ver}"
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
- update_rubygems(target_dir, ruby_api_ver, RUBYGEMS_VERSION) unless PatchHelpers.ruby31?(ruby_ver)
90
- install_gem(target_dir, "tebako-runtime")
91
- install_gem(target_dir, "bundler", BUNDLER_VERSION) if gflength.to_i != 0
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 update_rubygems(target_dir, ruby_api_ver, gem_ver)
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",
@@ -26,5 +26,5 @@
26
26
  # POSSIBILITY OF SUCH DAMAGE.
27
27
 
28
28
  module Tebako
29
- VERSION = "0.7.2.rc3"
29
+ VERSION = "0.7.2.rc5"
30
30
  end
@@ -42,7 +42,7 @@ jobs:
42
42
  strategy:
43
43
  fail-fast: false
44
44
  matrix:
45
- os: [ ubuntu-20.04, macos-12 ]
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-12 ]
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-12 ]
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-12
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-2024, [Ribose Inc](https://www.ribose.com).
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 BREW_PREFIX_TMP
31
+ OUTPUT_VARIABLE BREW_PREFIX
48
32
  OUTPUT_STRIP_TRAILING_WHITESPACE
49
33
  )
50
- if(NOT (BREW_PREFIX_RES EQUAL 0 AND EXISTS ${BREW_PREFIX_TMP}))
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("${BREW_PREFIX}/include")
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
- find_and_set_homebrew_prefix("bison" "BISON" "BISON_EXECUTABLE")
65
- find_and_set_homebrew_prefix("flex" "FLEX" "FLEX_EXECUTABLE")
66
- find_and_set_homebrew_prefix("bash" "BASH" "GNU_BASH")
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.rc3
4
+ version: 0.7.2.rc5
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-03 00:00:00.000000000 Z
11
+ date: 2024-07-09 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)