autoproj 2.10.1 → 2.13.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/.rubocop.yml +5 -8
- data/.travis.yml +5 -3
- data/autoproj.gemspec +7 -6
- data/bin/alog +1 -0
- data/bin/autoproj +1 -1
- data/bin/autoproj_bootstrap +149 -86
- data/bin/autoproj_bootstrap.in +9 -7
- data/bin/autoproj_install +148 -82
- data/bin/autoproj_install.in +8 -3
- data/lib/autoproj.rb +3 -0
- data/lib/autoproj/aruba_minitest.rb +15 -0
- data/lib/autoproj/autobuild_extensions/dsl.rb +61 -27
- data/lib/autoproj/base.rb +35 -6
- data/lib/autoproj/cli/base.rb +1 -1
- data/lib/autoproj/cli/build.rb +9 -3
- data/lib/autoproj/cli/cache.rb +79 -7
- data/lib/autoproj/cli/doc.rb +4 -18
- data/lib/autoproj/cli/inspection_tool.rb +5 -6
- data/lib/autoproj/cli/main.rb +41 -18
- data/lib/autoproj/cli/main_doc.rb +86 -0
- data/lib/autoproj/cli/main_plugin.rb +3 -0
- data/lib/autoproj/cli/main_test.rb +15 -0
- data/lib/autoproj/cli/show.rb +12 -18
- data/lib/autoproj/cli/status.rb +15 -9
- data/lib/autoproj/cli/test.rb +13 -84
- data/lib/autoproj/cli/update.rb +77 -19
- data/lib/autoproj/cli/utility.rb +136 -0
- data/lib/autoproj/configuration.rb +28 -4
- data/lib/autoproj/default.osdeps +18 -0
- data/lib/autoproj/installation_manifest.rb +7 -5
- data/lib/autoproj/manifest.rb +15 -21
- data/lib/autoproj/ops/build.rb +23 -27
- data/lib/autoproj/ops/cache.rb +151 -33
- data/lib/autoproj/ops/cached_env.rb +2 -2
- data/lib/autoproj/ops/import.rb +146 -80
- data/lib/autoproj/ops/install.rb +140 -79
- data/lib/autoproj/ops/phase_reporting.rb +49 -0
- data/lib/autoproj/ops/snapshot.rb +2 -1
- data/lib/autoproj/ops/tools.rb +2 -2
- data/lib/autoproj/os_package_installer.rb +19 -11
- data/lib/autoproj/package_definition.rb +29 -10
- data/lib/autoproj/package_managers/apt_dpkg_manager.rb +49 -28
- data/lib/autoproj/package_managers/bundler_manager.rb +257 -87
- data/lib/autoproj/package_managers/homebrew_manager.rb +2 -2
- data/lib/autoproj/package_managers/shell_script_manager.rb +44 -24
- data/lib/autoproj/package_manifest.rb +49 -34
- data/lib/autoproj/package_set.rb +48 -29
- data/lib/autoproj/repository_managers/apt.rb +0 -1
- data/lib/autoproj/test.rb +29 -10
- data/lib/autoproj/variable_expansion.rb +3 -1
- data/lib/autoproj/vcs_definition.rb +30 -15
- data/lib/autoproj/version.rb +1 -1
- data/lib/autoproj/workspace.rb +55 -13
- metadata +32 -28
data/lib/autoproj/default.osdeps
CHANGED
@@ -92,6 +92,12 @@ ruby24:
|
|
92
92
|
ruby25:
|
93
93
|
default: ignore # we assume that if the user has a ruby 2.5 runtime, it is usable
|
94
94
|
|
95
|
+
ruby26:
|
96
|
+
default: ignore # we assume that if the user has a ruby 2.5 runtime, it is usable
|
97
|
+
|
98
|
+
ruby27:
|
99
|
+
default: ignore # we assume that if the user has a ruby 2.5 runtime, it is usable
|
100
|
+
|
95
101
|
build-essential:
|
96
102
|
debian,ubuntu: build-essential
|
97
103
|
gentoo: ignore
|
@@ -132,15 +138,19 @@ archive:
|
|
132
138
|
debian,ubuntu:
|
133
139
|
- tar
|
134
140
|
- unzip
|
141
|
+
- ca-certificates
|
135
142
|
gentoo:
|
136
143
|
- app-arch/tar
|
137
144
|
- app-arch/unzip
|
145
|
+
- app-misc/ca-certificates
|
138
146
|
arch:
|
139
147
|
- tar
|
140
148
|
- unzip
|
149
|
+
- ca-certificates
|
141
150
|
fedora:
|
142
151
|
- tar
|
143
152
|
- unzip
|
153
|
+
- ca-certificates
|
144
154
|
macos-port:
|
145
155
|
- gnutar
|
146
156
|
- unzip
|
@@ -149,6 +159,7 @@ archive:
|
|
149
159
|
opensuse:
|
150
160
|
- tar
|
151
161
|
- unzip
|
162
|
+
- ca-certificates
|
152
163
|
default: ignore
|
153
164
|
|
154
165
|
cvs:
|
@@ -171,6 +182,13 @@ python:
|
|
171
182
|
opensuse: python-devel
|
172
183
|
default: ignore # will be installed manually by the user
|
173
184
|
|
185
|
+
python-setuptools:
|
186
|
+
arch: python2-distribute
|
187
|
+
debian,ubuntu: python-setuptools
|
188
|
+
fedora: python-setuptools
|
189
|
+
gentoo: dev-python/setuptools
|
190
|
+
default: ignore # will be installed manually by the user
|
191
|
+
|
174
192
|
sudo:
|
175
193
|
macos-brew: ignore
|
176
194
|
default: sudo
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module Autoproj
|
2
2
|
# Manifest of installed packages imported from another autoproj installation
|
3
3
|
class InstallationManifest
|
4
|
-
Package = Struct.new :name, :type, :vcs, :srcdir, :
|
4
|
+
Package = Struct.new :name, :type, :vcs, :srcdir, :importdir,
|
5
|
+
:prefix, :builddir, :logdir, :dependencies
|
5
6
|
PackageSet = Struct.new :name, :vcs, :raw_local_dir, :user_local_dir
|
6
7
|
|
7
8
|
attr_reader :path
|
@@ -28,11 +29,11 @@ def add_package_set(pkg_set)
|
|
28
29
|
def each_package_set(&block)
|
29
30
|
package_sets.each_value(&block)
|
30
31
|
end
|
31
|
-
|
32
|
+
|
32
33
|
def each_package(&block)
|
33
34
|
packages.each_value(&block)
|
34
35
|
end
|
35
|
-
|
36
|
+
|
36
37
|
def load
|
37
38
|
@packages = Hash.new
|
38
39
|
raw = YAML.load(File.open(path))
|
@@ -51,8 +52,8 @@ def load
|
|
51
52
|
package_sets[pkg_set.name] = pkg_set
|
52
53
|
else
|
53
54
|
pkg = Package.new(
|
54
|
-
entry['name'], entry['type'], entry['vcs'], entry['srcdir'], entry['
|
55
|
-
entry['builddir'], entry['logdir'], entry['dependencies'])
|
55
|
+
entry['name'], entry['type'], entry['vcs'], entry['srcdir'], entry['importdir'],
|
56
|
+
entry['prefix'], entry['builddir'], entry['logdir'], entry['dependencies'])
|
56
57
|
packages[pkg.name] = pkg
|
57
58
|
end
|
58
59
|
end
|
@@ -74,6 +75,7 @@ def save(path = self.path)
|
|
74
75
|
'type' => v.class.name,
|
75
76
|
'vcs' => package_def.vcs.to_hash,
|
76
77
|
'srcdir' => v.srcdir,
|
78
|
+
'importdir' => (v.importdir if v.respond_to?(:importdir)),
|
77
79
|
'builddir' => (v.builddir if v.respond_to?(:builddir)),
|
78
80
|
'logdir' => v.logdir,
|
79
81
|
'prefix' => v.prefix,
|
data/lib/autoproj/manifest.rb
CHANGED
@@ -50,12 +50,14 @@ def self.load(file)
|
|
50
50
|
|
51
51
|
# Load the manifest data contained in +file+
|
52
52
|
def load(file)
|
53
|
-
|
54
|
-
raise ConfigError.new(File.dirname(file)),
|
53
|
+
unless File.exist?(file)
|
54
|
+
raise ConfigError.new(File.dirname(file)),
|
55
|
+
"expected an autoproj configuration in #{File.dirname(file)}, "\
|
56
|
+
"but #{file} does not exist"
|
55
57
|
end
|
56
58
|
|
57
59
|
data = Autoproj.in_file(file, Autoproj::YAML_LOAD_ERROR) do
|
58
|
-
YAML.
|
60
|
+
YAML.safe_load(File.read(file)) || {}
|
59
61
|
end
|
60
62
|
|
61
63
|
@file = file
|
@@ -81,7 +83,8 @@ def initialize_from_hash(data)
|
|
81
83
|
@has_layout = !!data['layout']
|
82
84
|
|
83
85
|
if data['constants']
|
84
|
-
@constant_definitions =
|
86
|
+
@constant_definitions =
|
87
|
+
Autoproj.resolve_constant_definitions(data['constants'])
|
85
88
|
end
|
86
89
|
end
|
87
90
|
|
@@ -1020,23 +1023,14 @@ def load_package_manifest(pkg)
|
|
1020
1023
|
if manifest
|
1021
1024
|
pkg.autobuild.description = manifest
|
1022
1025
|
else
|
1023
|
-
Autoproj.warn "#{package.name} from #{package_set.name}
|
1026
|
+
Autoproj.warn "#{package.name} from #{package_set.name} "\
|
1027
|
+
"does not have a manifest"
|
1024
1028
|
end
|
1025
1029
|
|
1026
|
-
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
package.optional_dependency name
|
1031
|
-
else
|
1032
|
-
package.depends_on name
|
1033
|
-
end
|
1034
|
-
rescue ConfigError => e
|
1035
|
-
raise ConfigError.new(manifest_path),
|
1036
|
-
"manifest #{manifest_path} of #{package.name} from #{package_set.name} lists '#{name}' as dependency, but it is neither a normal package nor an osdeps package. osdeps reports: #{e.message}", e.backtrace
|
1037
|
-
end
|
1038
|
-
end
|
1039
|
-
manifest
|
1030
|
+
pkg.apply_dependencies_from_manifest
|
1031
|
+
# #description is initialized with a null package manifest
|
1032
|
+
# return it even if we haven't overriden it
|
1033
|
+
pkg.autobuild.description
|
1040
1034
|
end
|
1041
1035
|
|
1042
1036
|
def load_all_available_package_manifests
|
@@ -1243,7 +1237,7 @@ def self.config
|
|
1243
1237
|
workspace.config
|
1244
1238
|
end
|
1245
1239
|
|
1246
|
-
def self.add_osdeps_overrides(*args, &block)
|
1247
|
-
manifest.add_osdeps_overrides(*args, &block)
|
1240
|
+
def self.add_osdeps_overrides(*args, **kw, &block)
|
1241
|
+
manifest.add_osdeps_overrides(*args, **kw, &block)
|
1248
1242
|
end
|
1249
1243
|
end
|
data/lib/autoproj/ops/build.rb
CHANGED
@@ -87,40 +87,36 @@ def force_build_packages(selected_packages, all_enabled_packages)
|
|
87
87
|
# names of the packages that should be rebuilt
|
88
88
|
# @return [void]
|
89
89
|
def build_packages(all_enabled_packages, options = Hash.new)
|
90
|
+
if @report_path
|
91
|
+
reporting = Ops::PhaseReporting.new(
|
92
|
+
'build', @report_path, method(:package_metadata)
|
93
|
+
)
|
94
|
+
end
|
95
|
+
|
90
96
|
Autobuild.do_rebuild = false
|
91
97
|
Autobuild.do_forced_build = false
|
98
|
+
reporting&.initialize_incremental_report
|
92
99
|
begin
|
93
|
-
Autobuild.apply(
|
100
|
+
Autobuild.apply(
|
101
|
+
all_enabled_packages,
|
102
|
+
"autoproj-build", ['build'], options
|
103
|
+
) do |pkg, phase|
|
104
|
+
reporting&.report_incremental(pkg) if phase == 'build'
|
105
|
+
end
|
106
|
+
|
94
107
|
ensure
|
95
|
-
|
108
|
+
packages = all_enabled_packages.map do |name|
|
109
|
+
@manifest.find_autobuild_package(name)
|
110
|
+
end
|
111
|
+
reporting&.create_report(packages)
|
96
112
|
end
|
97
113
|
end
|
98
114
|
|
99
|
-
def
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
{
|
106
|
-
name: pkg.name,
|
107
|
-
import_invoked: pkg.import_invoked?,
|
108
|
-
prepare_invoked: pkg.prepare_invoked?,
|
109
|
-
build_invoked: pkg.build_invoked?,
|
110
|
-
failed: pkg.failed?,
|
111
|
-
imported: pkg.imported?,
|
112
|
-
prepared: pkg.prepared?,
|
113
|
-
built: pkg.built?
|
114
|
-
}
|
115
|
-
end
|
116
|
-
|
117
|
-
build_report = JSON.pretty_generate({
|
118
|
-
build_report: {
|
119
|
-
timestamp: Time.now,
|
120
|
-
packages: packages
|
121
|
-
}
|
122
|
-
})
|
123
|
-
IO.write(@report_path, build_report)
|
115
|
+
def package_metadata(autobuild_package)
|
116
|
+
{
|
117
|
+
invoked: !!autobuild_package.install_invoked?,
|
118
|
+
success: !!autobuild_package.installed?
|
119
|
+
}
|
124
120
|
end
|
125
121
|
end
|
126
122
|
end
|
data/lib/autoproj/ops/cache.rb
CHANGED
@@ -4,9 +4,10 @@ class Cache
|
|
4
4
|
attr_reader :cache_dir
|
5
5
|
attr_reader :manifest
|
6
6
|
|
7
|
-
def initialize(cache_dir,
|
7
|
+
def initialize(cache_dir, ws)
|
8
8
|
@cache_dir = cache_dir
|
9
|
-
@
|
9
|
+
@ws = ws
|
10
|
+
@manifest = ws.manifest
|
10
11
|
end
|
11
12
|
|
12
13
|
def with_retry(count)
|
@@ -27,29 +28,39 @@ def git_cache_dir
|
|
27
28
|
File.join(cache_dir, 'git')
|
28
29
|
end
|
29
30
|
|
30
|
-
def cache_git(pkg,
|
31
|
+
def cache_git(pkg, checkout_only: false)
|
31
32
|
pkg.importdir = File.join(git_cache_dir, pkg.name)
|
32
|
-
if
|
33
|
-
return
|
34
|
-
end
|
33
|
+
return if checkout_only && File.directory?(pkg.importdir)
|
35
34
|
|
36
35
|
pkg.importer.local_branch = nil
|
37
36
|
pkg.importer.remote_branch = nil
|
38
37
|
pkg.importer.remote_name = 'autobuild'
|
39
38
|
|
40
|
-
|
39
|
+
unless File.directory?(pkg.importdir)
|
41
40
|
FileUtils.mkdir_p File.dirname(pkg.importdir)
|
42
|
-
Autobuild::Subprocess.run(
|
41
|
+
Autobuild::Subprocess.run(
|
42
|
+
"autoproj-cache", "import", Autobuild.tool(:git),
|
43
|
+
"--git-dir", pkg.importdir, 'init', "--bare"
|
44
|
+
)
|
43
45
|
end
|
44
46
|
pkg.importer.update_remotes_configuration(pkg)
|
45
47
|
|
46
48
|
with_retry(10) do
|
47
|
-
Autobuild::Subprocess.run(
|
49
|
+
Autobuild::Subprocess.run(
|
50
|
+
'autoproj-cache', :import, Autobuild.tool('git'),
|
51
|
+
'--git-dir', pkg.importdir, 'remote', 'update', 'autobuild'
|
52
|
+
)
|
48
53
|
end
|
49
54
|
with_retry(10) do
|
50
|
-
Autobuild::Subprocess.run(
|
55
|
+
Autobuild::Subprocess.run(
|
56
|
+
'autoproj-cache', :import, Autobuild.tool('git'),
|
57
|
+
'--git-dir', pkg.importdir, 'fetch', 'autobuild', '--tags'
|
58
|
+
)
|
51
59
|
end
|
52
|
-
Autobuild::Subprocess.run(
|
60
|
+
Autobuild::Subprocess.run(
|
61
|
+
'autoproj-cache', :import, Autobuild.tool('git'),
|
62
|
+
'--git-dir', pkg.importdir, 'gc', '--prune=all'
|
63
|
+
)
|
53
64
|
end
|
54
65
|
|
55
66
|
def archive_cache_dir
|
@@ -63,7 +74,8 @@ def cache_archive(pkg)
|
|
63
74
|
end
|
64
75
|
end
|
65
76
|
|
66
|
-
def create_or_update(*package_names, all: true, keep_going: false,
|
77
|
+
def create_or_update(*package_names, all: true, keep_going: false,
|
78
|
+
checkout_only: false)
|
67
79
|
FileUtils.mkdir_p cache_dir
|
68
80
|
|
69
81
|
if package_names.empty?
|
@@ -75,7 +87,7 @@ def create_or_update(*package_names, all: true, keep_going: false, checkout_only
|
|
75
87
|
end
|
76
88
|
else
|
77
89
|
packages = package_names.map do |name|
|
78
|
-
if pkg = manifest.find_autobuild_package(name)
|
90
|
+
if (pkg = manifest.find_autobuild_package(name))
|
79
91
|
pkg
|
80
92
|
else
|
81
93
|
raise PackageNotFound, "no package named #{name}"
|
@@ -88,42 +100,148 @@ def create_or_update(*package_names, all: true, keep_going: false, checkout_only
|
|
88
100
|
total = packages.size
|
89
101
|
Autoproj.message "Handling #{total} packages"
|
90
102
|
packages.each_with_index do |pkg, i|
|
91
|
-
|
103
|
+
# No need to process this one, it is uses another package's
|
104
|
+
# import
|
105
|
+
next if pkg.srcdir != pkg.importdir
|
106
|
+
|
92
107
|
begin
|
93
108
|
case pkg.importer
|
94
109
|
when Autobuild::Git
|
95
|
-
Autoproj.message
|
110
|
+
Autoproj.message(
|
111
|
+
" [#{i}/#{total}] caching #{pkg.name} (git)"
|
112
|
+
)
|
96
113
|
cache_git(pkg, checkout_only: checkout_only)
|
97
114
|
when Autobuild::ArchiveImporter
|
98
|
-
Autoproj.message
|
115
|
+
Autoproj.message(
|
116
|
+
" [#{i}/#{total}] caching #{pkg.name} (archive)"
|
117
|
+
)
|
99
118
|
cache_archive(pkg)
|
100
119
|
else
|
101
|
-
Autoproj.message
|
120
|
+
Autoproj.message(
|
121
|
+
" [#{i}/#{total}] not caching #{pkg.name} "\
|
122
|
+
"(cannot cache #{pkg.importer.class})"
|
123
|
+
)
|
102
124
|
end
|
103
125
|
rescue Interrupt
|
104
126
|
raise
|
105
127
|
rescue ::Exception => e
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
pkg.message(
|
116
|
-
|
117
|
-
|
128
|
+
raise unless keep_going
|
129
|
+
|
130
|
+
pkg.error " failed to cache #{pkg.name}, "\
|
131
|
+
'but going on as requested'
|
132
|
+
lines = e.to_s.split('\n')
|
133
|
+
lines = e.message.split('\n') if lines.empty?
|
134
|
+
lines = ['unknown error'] if lines.empty?
|
135
|
+
pkg.message(lines.shift, :red, :bold)
|
136
|
+
lines.each do |line|
|
137
|
+
pkg.message(line)
|
138
|
+
end
|
139
|
+
nil
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def gems_cache_dir
|
145
|
+
File.join(cache_dir, 'package_managers', 'gem')
|
146
|
+
end
|
147
|
+
|
148
|
+
def create_or_update_gems(keep_going: true, compile_force: false, compile: [])
|
149
|
+
# Note: this might directly copy into the cache directoy, and
|
150
|
+
# we support it later
|
151
|
+
cache_dir = File.join(@ws.prefix_dir, 'gems', 'vendor', 'cache')
|
152
|
+
PackageManagers::BundlerManager.run_bundler(
|
153
|
+
@ws, 'cache'
|
154
|
+
)
|
155
|
+
|
156
|
+
FileUtils.mkdir_p(gems_cache_dir) unless File.exist?(gems_cache_dir)
|
157
|
+
|
158
|
+
needs_copy =
|
159
|
+
if File.exist?(cache_dir)
|
160
|
+
real_cache_dir = File.realpath(cache_dir)
|
161
|
+
real_target_dir = File.realpath(gems_cache_dir)
|
162
|
+
(real_cache_dir != real_target_dir)
|
163
|
+
end
|
164
|
+
|
165
|
+
synchronize_gems_cache_dirs(real_cache_dir, real_target_dir) if needs_copy
|
166
|
+
|
167
|
+
platform_suffix = "-#{Gem::Platform.local}.gem"
|
168
|
+
failed = []
|
169
|
+
compile.each do |gem_name, artifacts: []|
|
170
|
+
Dir.glob(File.join(cache_dir, "#{gem_name}*.gem")) do |gem|
|
171
|
+
next if gem.end_with?(platform_suffix)
|
172
|
+
|
173
|
+
gem_basename = File.basename(gem, ".gem")
|
174
|
+
expected_platform_gem = File.join(
|
175
|
+
real_target_dir, "#{gem_basename}#{platform_suffix}"
|
176
|
+
)
|
177
|
+
next if !compile_force && File.file?(expected_platform_gem)
|
178
|
+
|
179
|
+
begin
|
180
|
+
compile_gem(
|
181
|
+
gem, artifacts: artifacts, output: real_target_dir
|
182
|
+
)
|
183
|
+
rescue CompilationFailed
|
184
|
+
unless keep_going
|
185
|
+
raise CompilationFailed, "#{gem} failed to compile"
|
118
186
|
end
|
119
|
-
|
120
|
-
|
121
|
-
raise
|
187
|
+
|
188
|
+
failed << gem
|
122
189
|
end
|
123
190
|
end
|
124
191
|
end
|
192
|
+
|
193
|
+
unless failed.empty?
|
194
|
+
raise CompilationFailed, "#{failed.sort.join(', ')} failed to compile"
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
class CompilationFailed < RuntimeError; end
|
199
|
+
|
200
|
+
def synchronize_gems_cache_dirs(source, target)
|
201
|
+
Dir.glob(File.join(source, "*.gem")) do |source_file|
|
202
|
+
basename = File.basename(source_file)
|
203
|
+
target_file = File.join(target, basename)
|
204
|
+
next if File.file?(target_file)
|
205
|
+
|
206
|
+
Autoproj.message "gems: caching #{basename}"
|
207
|
+
FileUtils.cp source_file, target_file
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def guess_gem_program
|
212
|
+
return Autobuild.programs['gem'] if Autobuild.programs['gem']
|
213
|
+
|
214
|
+
ruby_bin = RbConfig::CONFIG['RUBY_INSTALL_NAME']
|
215
|
+
ruby_bindir = RbConfig::CONFIG['bindir']
|
216
|
+
|
217
|
+
candidates = ['gem']
|
218
|
+
candidates << "gem#{$1}" if ruby_bin =~ /^ruby(.+)$/
|
219
|
+
|
220
|
+
candidates.each do |gem_name|
|
221
|
+
if File.file?(gem_full_path = File.join(ruby_bindir, gem_name))
|
222
|
+
Autobuild.programs['gem'] = gem_full_path
|
223
|
+
return Autobuild.programs['gem']
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
227
|
+
raise ArgumentError,
|
228
|
+
'cannot find a gem program (tried '\
|
229
|
+
"#{candidates.sort.join(', ')} in #{ruby_bindir})"
|
230
|
+
end
|
231
|
+
|
232
|
+
private def compile_gem(gem_path, output:, artifacts: [])
|
233
|
+
artifacts = artifacts.flat_map do |include, n|
|
234
|
+
if include
|
235
|
+
["--include", n]
|
236
|
+
else
|
237
|
+
["--exclude", n]
|
238
|
+
end
|
239
|
+
end
|
240
|
+
unless system(Autobuild.tool('ruby'), '-S', guess_gem_program,
|
241
|
+
'compile', '--output', output, *artifacts, gem_path)
|
242
|
+
raise CompilationFailed, "#{gem_path} failed to compile"
|
243
|
+
end
|
125
244
|
end
|
126
245
|
end
|
127
246
|
end
|
128
247
|
end
|
129
|
-
|