tebako 0.9.2 → 0.10.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/.clang-format +4 -4
- data/Brewfile +23 -23
- data/CMakeLists.txt +15 -103
- data/README.adoc +1189 -1186
- data/common.env +1 -1
- data/exe/tebako-packager +1 -25
- data/lib/tebako/build_helpers.rb +0 -39
- data/lib/tebako/cache_manager.rb +112 -0
- data/lib/tebako/cli.rb +27 -18
- data/lib/tebako/cli_helpers.rb +26 -222
- data/lib/tebako/codegen.rb +154 -0
- data/lib/tebako/deploy_helper.rb +6 -34
- data/lib/tebako/error.rb +8 -1
- data/lib/tebako/options_manager.rb +237 -0
- data/lib/tebako/packager.rb +12 -6
- data/lib/tebako/{cli_rubies.rb → ruby_version.rb} +57 -23
- data/lib/tebako/scenario_manager.rb +119 -0
- data/lib/tebako/stripper.rb +13 -13
- data/lib/tebako/version.rb +1 -1
- data/src/tebako-main.cpp +5 -6
- metadata +10 -8
- data/resources/tebako-fs.cpp.in +0 -40
- data/resources/tebako-version.h.in +0 -37
data/common.env
CHANGED
data/exe/tebako-packager
CHANGED
@@ -27,6 +27,7 @@
|
|
27
27
|
# POSSIBILITY OF SUCH DAMAGE.
|
28
28
|
|
29
29
|
require_relative "../lib/tebako/packager"
|
30
|
+
require_relative "../lib/tebako/ruby_version"
|
30
31
|
require_relative "../lib/tebako/stripper"
|
31
32
|
require_relative "../lib/tebako/build_helpers"
|
32
33
|
|
@@ -73,31 +74,6 @@ begin
|
|
73
74
|
ruby_ver = Tebako::RubyVersion.new(ARGV[6])
|
74
75
|
Tebako::Packager.stash(ARGV[4], ARGV[5])
|
75
76
|
Tebako::Packager.pass2(ARGV[1], ARGV[2], ARGV[3], ruby_ver)
|
76
|
-
when "deploy"
|
77
|
-
# ARGV[0] -- command
|
78
|
-
# ARGV[1] -- OSTYPE
|
79
|
-
# ARGV[2] -- RUBY_SOURCE_DIR
|
80
|
-
# ARGV[3] -- FS_STASH_DIR
|
81
|
-
# ARGV[4] -- DATA_SRC_DIR
|
82
|
-
# ARGV[5] -- DATA_PRE_DIR
|
83
|
-
# ARGV[6] -- DATA_BIN_DIR
|
84
|
-
# ARGV[7] -- FS_ROOT
|
85
|
-
# ARGV[8] -- FS_ENTRANCE
|
86
|
-
# ARGV[9] -- FS_MOUNT_POINT
|
87
|
-
# ARGV[10] -- APP_NAME
|
88
|
-
# ARGV[11] -- RUBY_VER
|
89
|
-
# ARGV[12] -- CWD
|
90
|
-
unless ARGV.length == 13 || ARGV.length == 12
|
91
|
-
raise Tebako::Error,
|
92
|
-
"tebako-packager deploy command expects 12 or 13 arguments, #{ARGV.length} has been provided."
|
93
|
-
end
|
94
|
-
ruby_ver = Tebako::RubyVersion.new(ARGV[11])
|
95
|
-
Tebako::Packager.init(ARGV[3], ARGV[4], ARGV[5], ARGV[6])
|
96
|
-
Tebako::Packager.create_implib(ARGV[2], ARGV[4], File.basename(ARGV[10]), ruby_ver) if ARGV[1] =~ /msys/
|
97
|
-
# Assume that "<TARGET_BIN_DIR (TBD)>" is <DATA_SRC_DIR>/bin"
|
98
|
-
# That shall match CMakeLists.txt settings
|
99
|
-
Tebako::Packager.deploy(ARGV[1], ARGV[4], ARGV[5], ruby_ver, ARGV[7], ARGV[8], ARGV[9],
|
100
|
-
ARGV.length == 13 ? ARGV[12] : nil)
|
101
77
|
|
102
78
|
when "finalize"
|
103
79
|
# ARGV[0] -- command
|
data/lib/tebako/build_helpers.rb
CHANGED
@@ -81,43 +81,4 @@ module Tebako
|
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
84
|
-
|
85
|
-
# Ruby version checks
|
86
|
-
class RubyVersion
|
87
|
-
def initialize(ruby_ver)
|
88
|
-
unless ruby_ver =~ /^\d+\.\d+\.\d+$/
|
89
|
-
raise Tebako::Error, "Invalid Ruby version format '#{ruby_ver}'. Expected format: x.y.z"
|
90
|
-
end
|
91
|
-
|
92
|
-
@ruby_ver = ruby_ver
|
93
|
-
end
|
94
|
-
|
95
|
-
def ruby3x?
|
96
|
-
@ruby3x ||= @ruby_ver[0] == "3"
|
97
|
-
end
|
98
|
-
|
99
|
-
def ruby31?
|
100
|
-
@ruby31 ||= ruby3x? && @ruby_ver[2].to_i >= 1
|
101
|
-
end
|
102
|
-
|
103
|
-
def ruby32?
|
104
|
-
@ruby32 ||= ruby3x? && @ruby_ver[2].to_i >= 2
|
105
|
-
end
|
106
|
-
|
107
|
-
def ruby32only?
|
108
|
-
@ruby32only ||= ruby3x? && @ruby_ver[2] == "2"
|
109
|
-
end
|
110
|
-
|
111
|
-
def ruby33?
|
112
|
-
@ruby33 ||= ruby3x? && @ruby_ver[2].to_i >= 3
|
113
|
-
end
|
114
|
-
|
115
|
-
def api_version
|
116
|
-
@api_version ||= "#{@ruby_ver.split(".")[0..1].join(".")}.0"
|
117
|
-
end
|
118
|
-
|
119
|
-
def lib_version
|
120
|
-
@lib_version ||= "#{@ruby_ver.split(".")[0..1].join}0"
|
121
|
-
end
|
122
|
-
end
|
123
84
|
end
|
@@ -0,0 +1,112 @@
|
|
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_relative "version"
|
30
|
+
|
31
|
+
# Tebako - an executable packager
|
32
|
+
module Tebako
|
33
|
+
# Cache management
|
34
|
+
class CacheManager
|
35
|
+
E_VERSION_FILE = ".environment.version"
|
36
|
+
|
37
|
+
def initialize(deps, src_dir, out_dir)
|
38
|
+
@deps = deps
|
39
|
+
@src_dir = src_dir
|
40
|
+
@out_dir = out_dir
|
41
|
+
end
|
42
|
+
|
43
|
+
def clean_cache
|
44
|
+
puts "Cleaning tebako packaging environment"
|
45
|
+
# Using File.join(deps, "") to ensure that the slashes are appropriate
|
46
|
+
FileUtils.rm_rf([File.join(@deps, ""), File.join(@out_dir, "")], secure: true)
|
47
|
+
end
|
48
|
+
|
49
|
+
def clean_output
|
50
|
+
puts "Cleaning CMake cache and Ruby build files"
|
51
|
+
|
52
|
+
nmr = "src/_ruby_*"
|
53
|
+
nms = "stash_*"
|
54
|
+
FileUtils.rm_rf(Dir.glob(File.join(@deps, nmr)), secure: true)
|
55
|
+
FileUtils.rm_rf(Dir.glob(File.join(@deps, nms)), secure: true)
|
56
|
+
|
57
|
+
# Using File.join(output_folder, "") to ensure that the slashes are appropriate
|
58
|
+
FileUtils.rm_rf(File.join(@out_dir, ""), secure: true)
|
59
|
+
end
|
60
|
+
|
61
|
+
def ensure_version_file
|
62
|
+
version_file_path = File.join(@deps, E_VERSION_FILE)
|
63
|
+
|
64
|
+
begin
|
65
|
+
File.write(version_file_path, version_key)
|
66
|
+
# puts "Set version information for tebako packaging environment to #{Tebako::VERSION}"
|
67
|
+
rescue StandardError => e
|
68
|
+
puts "#{Tebako::PACKAGING_ERRORS[201]} #{E_VERSION_FILE}: #{e.message}"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def version_key
|
73
|
+
@version_key ||= "#{Tebako::VERSION} at #{@src_dir}"
|
74
|
+
end
|
75
|
+
|
76
|
+
def version_cache
|
77
|
+
version_file_path = File.join(@deps, E_VERSION_FILE)
|
78
|
+
file_version = File.open(version_file_path, &:readline).strip
|
79
|
+
file_version.match(/(?<version>.+) at (?<source>.+)/)
|
80
|
+
end
|
81
|
+
|
82
|
+
def version_cache_check
|
83
|
+
match_data = version_cache
|
84
|
+
return version_unknown unless match_data
|
85
|
+
|
86
|
+
if match_data[:version] != Tebako::VERSION
|
87
|
+
version_mismatch(match_data[:version])
|
88
|
+
elsif match_data[:source] != @src_dir
|
89
|
+
version_source_mismatch(match_data[:source])
|
90
|
+
end
|
91
|
+
rescue StandardError
|
92
|
+
version_unknown
|
93
|
+
end
|
94
|
+
|
95
|
+
def version_mismatch(cached_version)
|
96
|
+
puts "Tebako cache was created by a gem version #{cached_version} " \
|
97
|
+
"and cannot be used for gem version #{Tebako::VERSION}"
|
98
|
+
clean_cache
|
99
|
+
end
|
100
|
+
|
101
|
+
def version_source_mismatch(cached_source)
|
102
|
+
puts "CMake cache was created for a different source directory '#{cached_source}' " \
|
103
|
+
"and cannot be used for '#{@src_dir}'"
|
104
|
+
clean_output
|
105
|
+
end
|
106
|
+
|
107
|
+
def version_unknown
|
108
|
+
puts "CMake cache version was not recognized, cleaning up"
|
109
|
+
clean_cache
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
data/lib/tebako/cli.rb
CHANGED
@@ -32,9 +32,10 @@ require "open3"
|
|
32
32
|
require "thor"
|
33
33
|
require "yaml"
|
34
34
|
|
35
|
+
require_relative "cache_manager"
|
35
36
|
require_relative "cli_helpers"
|
36
|
-
require_relative "cli_rubies"
|
37
37
|
require_relative "error"
|
38
|
+
require_relative "ruby_version"
|
38
39
|
require_relative "version"
|
39
40
|
|
40
41
|
# Tebako - an executable packager
|
@@ -52,20 +53,23 @@ module Tebako
|
|
52
53
|
desc: "tebako configuration file 'tebafile', '$PWD/.tebako.yml' by default"
|
53
54
|
desc "clean", "Clean tebako packaging environment"
|
54
55
|
def clean
|
55
|
-
|
56
|
+
(_, cm) = bootstrap
|
57
|
+
cm.clean_cache
|
56
58
|
end
|
57
59
|
|
58
60
|
desc "clean_ruby", "Clean Ruby source from tebako packaging environment"
|
59
61
|
method_option :Ruby, type: :string, aliases: "-R", required: false,
|
60
|
-
enum: Tebako::
|
62
|
+
enum: Tebako::RubyVersion::RUBY_VERSIONS.keys,
|
61
63
|
desc: "Ruby version to clean, all available versions by default"
|
62
64
|
def clean_ruby
|
63
65
|
puts "Cleaning Ruby sources from tebako packaging environment"
|
66
|
+
(om,) = bootstrap
|
67
|
+
|
64
68
|
suffix = options["Ruby"].nil? ? "" : "_#{options["Ruby"]}"
|
65
69
|
nmr = "src/_ruby#{suffix}*"
|
66
70
|
nms = "stash#{suffix}*"
|
67
|
-
FileUtils.rm_rf(Dir.glob(File.join(deps, nmr)), secure: true)
|
68
|
-
FileUtils.rm_rf(Dir.glob(File.join(deps, nms)), secure: true)
|
71
|
+
FileUtils.rm_rf(Dir.glob(File.join(om.deps, nmr)), secure: true)
|
72
|
+
FileUtils.rm_rf(Dir.glob(File.join(om.deps, nms)), secure: true)
|
69
73
|
end
|
70
74
|
|
71
75
|
desc "hash", "Print build script hash (ci cache key)"
|
@@ -95,16 +99,15 @@ module Tebako
|
|
95
99
|
desc: "Tebako package file name, entry point base file name in the current folder by default"
|
96
100
|
method_option :root, type: :string, aliases: "-r", required: true, desc: "Root folder of the Ruby application"
|
97
101
|
method_option :Ruby, type: :string, aliases: "-R", required: false,
|
98
|
-
enum: Tebako::
|
99
|
-
desc: "Tebako package Ruby version, #{Tebako::
|
102
|
+
enum: Tebako::RubyVersion::RUBY_VERSIONS.keys,
|
103
|
+
desc: "Tebako package Ruby version, #{Tebako::RubyVersion::DEFAULT_RUBY_VERSION} by default"
|
100
104
|
method_option :patchelf, aliases: "-P", type: :boolean,
|
101
105
|
desc: RGP_DESCRIPTION
|
102
106
|
def press
|
103
|
-
|
107
|
+
(om, cm) = bootstrap
|
104
108
|
|
105
|
-
|
106
|
-
|
107
|
-
ensure_version_file
|
109
|
+
do_press(om)
|
110
|
+
cm.ensure_version_file
|
108
111
|
rescue Tebako::Error => e
|
109
112
|
puts "Tebako script failed: #{e.message} [#{e.error_code}]"
|
110
113
|
exit e.error_code
|
@@ -112,14 +115,13 @@ module Tebako
|
|
112
115
|
|
113
116
|
desc "setup", "Set up tebako packaging environment"
|
114
117
|
method_option :Ruby, type: :string, aliases: "-R", required: false,
|
115
|
-
enum: Tebako::
|
116
|
-
desc: "Tebako package Ruby version, #{Tebako::
|
118
|
+
enum: Tebako::RubyVersion::RUBY_VERSIONS.keys,
|
119
|
+
desc: "Tebako package Ruby version, #{Tebako::RubyVersion::DEFAULT_RUBY_VERSION} by default."
|
117
120
|
def setup
|
118
|
-
|
121
|
+
(om, cm) = bootstrap
|
119
122
|
|
120
|
-
|
121
|
-
|
122
|
-
ensure_version_file
|
123
|
+
do_setup(om)
|
124
|
+
cm.ensure_version_file
|
123
125
|
rescue Tebako::Error => e
|
124
126
|
puts "Tebako script failed: #{e.message} [#{e.error_code}]"
|
125
127
|
exit e.error_code
|
@@ -130,6 +132,14 @@ module Tebako
|
|
130
132
|
end
|
131
133
|
|
132
134
|
no_commands do
|
135
|
+
def bootstrap
|
136
|
+
options_manager = Tebako::OptionsManager.new(options)
|
137
|
+
cache_manager = Tebako::CacheManager.new(options_manager.deps, options_manager.source,
|
138
|
+
options_manager.output_folder)
|
139
|
+
cache_manager.version_cache_check unless options[:devmode]
|
140
|
+
[options_manager, cache_manager]
|
141
|
+
end
|
142
|
+
|
133
143
|
def initialize(*args)
|
134
144
|
super
|
135
145
|
return if args[2][:current_command].name.include?("hash")
|
@@ -151,7 +161,6 @@ module Tebako
|
|
151
161
|
|
152
162
|
no_commands do
|
153
163
|
include Tebako::CliHelpers
|
154
|
-
include Tebako::CliRubies
|
155
164
|
end
|
156
165
|
end
|
157
166
|
end
|
data/lib/tebako/cli_helpers.rb
CHANGED
@@ -30,123 +30,56 @@ require "fileutils"
|
|
30
30
|
require "pathname"
|
31
31
|
require "rbconfig"
|
32
32
|
|
33
|
-
require_relative "
|
33
|
+
require_relative "codegen"
|
34
34
|
require_relative "error"
|
35
|
-
require_relative "
|
35
|
+
require_relative "options_manager"
|
36
|
+
require_relative "scenario_manager"
|
36
37
|
|
37
38
|
# Tebako - an executable packager
|
38
39
|
# Command-line interface methods
|
39
40
|
module Tebako
|
40
|
-
E_VERSION_FILE = ".environment.version"
|
41
41
|
# Cli helpers
|
42
42
|
module CliHelpers
|
43
|
-
def
|
44
|
-
|
45
|
-
"-DTARGET_OS_SIMULATOR=0 -DTARGET_OS_IPHONE=0 #{ENV.fetch("CXXFLAGS", nil)}"
|
46
|
-
else
|
47
|
-
ENV.fetch("CXXFLAGS", nil)
|
48
|
-
end
|
49
|
-
@b_env ||= { "CXXFLAGS" => u_flags }
|
50
|
-
end
|
51
|
-
|
52
|
-
def cfg_options
|
53
|
-
ruby_ver, ruby_hash = extend_ruby_version
|
54
|
-
# Cannot use 'xxx' as parameters because it does not work in Windows shells
|
55
|
-
# So we have to use \"xxx\"
|
56
|
-
@cfg_options ||=
|
57
|
-
"-DCMAKE_BUILD_TYPE=Release -DRUBY_VER:STRING=\"#{ruby_ver}\" -DRUBY_HASH:STRING=\"#{ruby_hash}\" " \
|
58
|
-
"-DDEPS:STRING=\"#{deps}\" -G \"#{m_files}\" -B \"#{output_folder}\" -S \"#{source}\" " \
|
59
|
-
"#{remove_glibc_private} -DTEBAKO_VERSION:STRING=\"#{Tebako::VERSION}\""
|
60
|
-
end
|
43
|
+
def do_press(options_manager)
|
44
|
+
puts options_manager.press_announce
|
61
45
|
|
62
|
-
|
63
|
-
puts "Cleaning tebako packaging environment"
|
64
|
-
# Using File.join(deps, "") to ensure that the slashes are appropriate
|
65
|
-
FileUtils.rm_rf([File.join(deps, ""), File.join(output_folder, "")], secure: true)
|
66
|
-
end
|
46
|
+
generate_files(options_manager)
|
67
47
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
nmr = "src/_ruby_*"
|
72
|
-
nms = "stash_*"
|
73
|
-
FileUtils.rm_rf(Dir.glob(File.join(deps, nmr)), secure: true)
|
74
|
-
FileUtils.rm_rf(Dir.glob(File.join(deps, nms)), secure: true)
|
75
|
-
|
76
|
-
# Using File.join(output_folder, "") to ensure that the slashes are appropriate
|
77
|
-
FileUtils.rm_rf(File.join(output_folder, ""), secure: true)
|
78
|
-
end
|
79
|
-
|
80
|
-
def deps
|
81
|
-
@deps ||= File.join(prefix, "deps")
|
82
|
-
end
|
83
|
-
|
84
|
-
def do_press
|
85
|
-
cfg_cmd = "cmake -DSETUP_MODE:BOOLEAN=OFF #{cfg_options} #{press_options}"
|
86
|
-
build_cmd = "cmake --build #{output_folder} --target tebako --parallel #{Etc.nprocessors}"
|
87
|
-
merged_env = ENV.to_h.merge(b_env)
|
48
|
+
cfg_cmd = "cmake -DSETUP_MODE:BOOLEAN=OFF #{options_manager.cfg_options} #{options_manager.press_options}"
|
49
|
+
build_cmd = "cmake --build #{options_manager.output_folder} --target tebako --parallel #{Etc.nprocessors}"
|
50
|
+
merged_env = ENV.to_h.merge(options_manager.b_env)
|
88
51
|
Tebako.packaging_error(103) unless system(merged_env, cfg_cmd)
|
89
52
|
Tebako.packaging_error(104) unless system(merged_env, build_cmd)
|
90
53
|
true
|
91
54
|
end
|
92
55
|
|
93
|
-
def do_setup
|
94
|
-
|
95
|
-
|
96
|
-
|
56
|
+
def do_setup(options_manager)
|
57
|
+
puts "Setting up tebako packaging environment"
|
58
|
+
|
59
|
+
cfg_cmd = "cmake -DSETUP_MODE:BOOLEAN=ON #{options_manager.cfg_options}"
|
60
|
+
build_cmd = "cmake --build \"#{options_manager.output_folder}\" --target setup --parallel #{Etc.nprocessors}"
|
61
|
+
merged_env = ENV.to_h.merge(options_manager.b_env)
|
97
62
|
Tebako.packaging_error(101) unless system(merged_env, cfg_cmd)
|
98
63
|
Tebako.packaging_error(102) unless system(merged_env, build_cmd)
|
99
64
|
true
|
100
65
|
end
|
101
66
|
|
102
|
-
def
|
103
|
-
|
67
|
+
def generate_files(options_manager)
|
68
|
+
puts "-- Generating files"
|
69
|
+
scenario_manager = Tebako::ScenarioManager.new(options_manager.root, options_manager.fs_entrance)
|
70
|
+
scenario_manager.configure_scenario
|
104
71
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
rescue StandardError => e
|
109
|
-
puts "An error occurred while creating or updating #{E_VERSION_FILE}: #{e.message}"
|
110
|
-
end
|
111
|
-
end
|
72
|
+
puts " ... tebako-version.h"
|
73
|
+
v_parts = Tebako::VERSION.split(".")
|
74
|
+
Tebako::Codegen.generate_tebako_version_h(options_manager, v_parts)
|
112
75
|
|
113
|
-
|
114
|
-
|
115
|
-
if RUBY_PLATFORM =~ /msys|mingw|cygwin/
|
116
|
-
fs_current, cygpath_res = Open3.capture2e("cygpath", "-w", fs_current)
|
117
|
-
Tebako.packaging_error(101) unless cygpath_res.success?
|
118
|
-
fs_current.strip!
|
119
|
-
end
|
120
|
-
@fs_current ||= fs_current
|
121
|
-
end
|
76
|
+
puts " ... tebako-fs.cpp"
|
77
|
+
Tebako::Codegen.generate_tebako_fs_cpp(options_manager, scenario_manager)
|
122
78
|
|
123
|
-
|
124
|
-
|
125
|
-
"error"
|
126
|
-
else
|
127
|
-
options["log-level"]
|
128
|
-
end
|
79
|
+
puts " ... deploy.rb"
|
80
|
+
Tebako::Codegen.generate_deploy_rb(options_manager, scenario_manager)
|
129
81
|
end
|
130
82
|
|
131
|
-
# rubocop:disable Metrics/MethodLength
|
132
|
-
def m_files
|
133
|
-
# [TODO]
|
134
|
-
# Ninja generates incorrect script fot tebako press target -- gets lost in a chain custom targets
|
135
|
-
# Using makefiles has negative performance impact so it needs to be fixed
|
136
|
-
@m_files ||= case RUBY_PLATFORM
|
137
|
-
when /linux/, /darwin/
|
138
|
-
"Unix Makefiles"
|
139
|
-
when /msys|mingw|cygwin/
|
140
|
-
"MinGW Makefiles"
|
141
|
-
else
|
142
|
-
raise Tebako::Error.new(
|
143
|
-
"#{RUBY_PLATFORM} is not supported, exiting",
|
144
|
-
254
|
145
|
-
)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
# rubocop:enable Metrics/MethodLength
|
149
|
-
|
150
83
|
def options_from_tebafile(tebafile)
|
151
84
|
::YAML.load_file(tebafile)["options"] || {}
|
152
85
|
rescue Psych::SyntaxError => e
|
@@ -158,134 +91,5 @@ module Tebako
|
|
158
91
|
puts e.message
|
159
92
|
{}
|
160
93
|
end
|
161
|
-
|
162
|
-
def output_folder
|
163
|
-
@output_folder ||= File.join(prefix, "o")
|
164
|
-
end
|
165
|
-
|
166
|
-
def package
|
167
|
-
package = if options["output"].nil?
|
168
|
-
File.join(Dir.pwd, File.basename(options["entry-point"], ".*"))
|
169
|
-
else
|
170
|
-
options["output"]
|
171
|
-
end
|
172
|
-
@package ||= if relative?(package)
|
173
|
-
File.join(fs_current, package)
|
174
|
-
else
|
175
|
-
package
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
def remove_glibc_private
|
180
|
-
@remove_glibc_private ||= if RUBY_PLATFORM.end_with?("linux") || RUBY_PLATFORM.end_with?("linux-gnu")
|
181
|
-
"-DREMOVE_GLIBC_PRIVATE=#{options["patchelf"] ? "ON" : "OFF"}"
|
182
|
-
else
|
183
|
-
""
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
def handle_nil_prefix
|
188
|
-
env_prefix = ENV.fetch("TEBAKO_PREFIX", nil)
|
189
|
-
if env_prefix.nil?
|
190
|
-
puts "No prefix specified, using ~/.tebako"
|
191
|
-
File.expand_path("~/.tebako")
|
192
|
-
else
|
193
|
-
puts "Using TEBAKO_PREFIX environment variable as prefix"
|
194
|
-
File.expand_path(env_prefix)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
def prefix
|
199
|
-
@prefix ||= if options["prefix"].nil?
|
200
|
-
handle_nil_prefix
|
201
|
-
elsif options["prefix"] == "PWD"
|
202
|
-
Dir.pwd
|
203
|
-
else
|
204
|
-
File.expand_path(options["prefix"])
|
205
|
-
end
|
206
|
-
end
|
207
|
-
|
208
|
-
def press_announce
|
209
|
-
cwd_announce = options["cwd"].nil? ? "<Host current directory>" : options["cwd"]
|
210
|
-
@press_announce ||= <<~ANN
|
211
|
-
Running tebako press at #{prefix}
|
212
|
-
Ruby version: '#{extend_ruby_version[0]}'
|
213
|
-
Project root: '#{root}'
|
214
|
-
Application entry point: '#{options["entry-point"]}'
|
215
|
-
Package file name: '#{package}'
|
216
|
-
Loging level: '#{l_level}'
|
217
|
-
Package working directory: '#{cwd_announce}'
|
218
|
-
ANN
|
219
|
-
end
|
220
|
-
|
221
|
-
def press_options
|
222
|
-
cwd_option = if options["cwd"].nil?
|
223
|
-
"-DPACKAGE_NEEDS_CWD:BOOL=OFF"
|
224
|
-
else
|
225
|
-
"-DPACKAGE_NEEDS_CWD:BOOL=ON -DPACKAGE_CWD:STRING='#{options["cwd"]}'"
|
226
|
-
end
|
227
|
-
@press_options ||=
|
228
|
-
"-DROOT:STRING='#{root}' -DENTRANCE:STRING='#{options["entry-point"]}' " \
|
229
|
-
"-DPCKG:STRING='#{package}' -DLOG_LEVEL:STRING='#{options["log-level"]}' " \
|
230
|
-
"#{cwd_option}"
|
231
|
-
end
|
232
|
-
|
233
|
-
def relative?(path)
|
234
|
-
Pathname.new(path).relative?
|
235
|
-
end
|
236
|
-
|
237
|
-
def root
|
238
|
-
@root ||= if relative?(options["root"])
|
239
|
-
File.join(fs_current, options["root"])
|
240
|
-
else
|
241
|
-
File.join(options["root"], "")
|
242
|
-
end
|
243
|
-
end
|
244
|
-
|
245
|
-
def source
|
246
|
-
c_path = Pathname.new(__FILE__).realpath
|
247
|
-
@source ||= File.expand_path("../../..", c_path)
|
248
|
-
end
|
249
|
-
|
250
|
-
def version_key
|
251
|
-
@version_key ||= "#{Tebako::VERSION} at #{source}"
|
252
|
-
end
|
253
|
-
|
254
|
-
def version_cache
|
255
|
-
version_file_path = File.join(deps, E_VERSION_FILE)
|
256
|
-
file_version = File.open(version_file_path, &:readline).strip
|
257
|
-
file_version.match(/(?<version>.+) at (?<source>.+)/)
|
258
|
-
end
|
259
|
-
|
260
|
-
def version_cache_check
|
261
|
-
match_data = version_cache
|
262
|
-
|
263
|
-
return version_unknown unless match_data
|
264
|
-
|
265
|
-
if match_data[:version] != Tebako::VERSION
|
266
|
-
version_mismatch(match_data[:version])
|
267
|
-
elsif match_data[:source] != source
|
268
|
-
version_source_mismatch(match_data[:source])
|
269
|
-
end
|
270
|
-
rescue StandardError
|
271
|
-
version_unknown
|
272
|
-
end
|
273
|
-
|
274
|
-
def version_mismatch(cached_version)
|
275
|
-
puts "Tebako cache was created by a gem version #{cached_version} " \
|
276
|
-
"and cannot be used for gem version #{Tebako::VERSION}"
|
277
|
-
clean_cache
|
278
|
-
end
|
279
|
-
|
280
|
-
def version_source_mismatch(cached_source)
|
281
|
-
puts "CMake cache was created for a different source directory '#{cached_source}' " \
|
282
|
-
"and cannot be used for '#{source}'"
|
283
|
-
clean_output
|
284
|
-
end
|
285
|
-
|
286
|
-
def version_unknown
|
287
|
-
puts "CMake cache version was not recognized, cleaning up"
|
288
|
-
clean_cache
|
289
|
-
end
|
290
94
|
end
|
291
95
|
end
|