litbuild 1.0.3 → 1.0.9
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/bin/lb +2 -6
- data/lib/litbuild/ascii_doc_visitor.rb +6 -8
- data/lib/litbuild/bash_script_visitor.rb +45 -19
- data/lib/litbuild/blueprint.rb +5 -8
- data/lib/litbuild/blueprint_library.rb +13 -13
- data/lib/litbuild/blueprint_parser.rb +7 -9
- data/lib/litbuild/commands.rb +1 -2
- data/lib/litbuild/logfile_namer.rb +2 -2
- data/lib/litbuild/multi_part_visitor.rb +1 -2
- data/lib/litbuild/source_code_manager.rb +4 -6
- data/lib/litbuild/version.rb +1 -1
- metadata +10 -35
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- metadata.gz.sig +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 021106eb1915ada36b41382da16fdde8d9c2762d3e250dc0cbdb5067c7432bcf
|
4
|
+
data.tar.gz: a42ebf4088c9c1f7b9ae2d3d4f238ec2e9610c17c6fd07da1e0af6a5938c71dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 93da197d79732d1944ec9821f2d567c76962408923e68a2642789a4408176ab341dcf6e2fb61b2274413b98272e2d4f3cf979c38b20d11186d7f80a6a8e90238
|
7
|
+
data.tar.gz: 2a38bdce9e787c5685ccaf92fca51cffc16da80c900694701fc6a169aef9c9e8797eedbf8fe53d317e2129000126bff9076d69ba4da0f0bba086630e367b6928
|
data/bin/lb
CHANGED
@@ -4,14 +4,10 @@
|
|
4
4
|
gem 'litbuild'
|
5
5
|
require 'litbuild'
|
6
6
|
require 'optparse'
|
7
|
-
require 'ostruct'
|
8
7
|
require 'fileutils'
|
9
8
|
|
10
|
-
|
11
|
-
|
12
|
-
# defaults:
|
13
|
-
options.query = nil
|
14
|
-
options.version = false
|
9
|
+
Options = Struct.new(:query, :version)
|
10
|
+
options = Options.new(nil, false)
|
15
11
|
|
16
12
|
OptionParser.new do |opts|
|
17
13
|
opts.banner = 'Usage: lb [options] target'
|
@@ -139,10 +139,9 @@ module Litbuild
|
|
139
139
|
FileUtils.mkdir_p(location)
|
140
140
|
doc_name = format('%<count>02d-%<doc>s',
|
141
141
|
count: @written[location].size,
|
142
|
-
doc: blueprint.file_name
|
143
|
-
|
144
|
-
|
145
|
-
end
|
142
|
+
doc: "#{blueprint.file_name}.adoc")
|
143
|
+
content = to_asciidoc(blueprint, extra, summary, block)
|
144
|
+
File.write(File.join(location, doc_name), content)
|
146
145
|
@written[location] << doc_name
|
147
146
|
@all_written_targets << blueprint.target_name
|
148
147
|
end
|
@@ -180,12 +179,12 @@ module Litbuild
|
|
180
179
|
extra.call(doc)
|
181
180
|
# If there are any extraneous blank lines in the document, get rid
|
182
181
|
# of them.
|
183
|
-
doc.string.gsub(/\n\n\n+/, "\n\n").strip
|
182
|
+
"#{doc.string.gsub(/\n\n\n+/, "\n\n").strip}\n"
|
184
183
|
end
|
185
184
|
|
186
185
|
def phase_heading(level, blueprint)
|
187
186
|
"[[#{blueprint.name_with_phase},#{blueprint.header_text_with_phase}]]\n" \
|
188
|
-
|
187
|
+
"#{level} #{blueprint.header_text_with_phase}\n\n"
|
189
188
|
end
|
190
189
|
|
191
190
|
def render_grafs(doc, grafs, block)
|
@@ -397,9 +396,8 @@ module Litbuild
|
|
397
396
|
end
|
398
397
|
if !package.phases? || for_phase
|
399
398
|
write_environment_row(doc, package)
|
400
|
-
|
399
|
+
package.build_dir &&
|
401
400
|
doc.puts("|Build Directory| `#{package.build_dir}`")
|
402
|
-
end
|
403
401
|
end
|
404
402
|
doc.puts("|===\n\n")
|
405
403
|
end
|
@@ -104,6 +104,7 @@ module Litbuild
|
|
104
104
|
skip_line(f)
|
105
105
|
f.puts("trap 'echo UTTER FAILURE on line $LINENO' ERR")
|
106
106
|
f.puts('set -e -v')
|
107
|
+
f.puts('cd $(dirname $0)')
|
107
108
|
skip_line(f)
|
108
109
|
write_components(location: script_dir, script: f)
|
109
110
|
f.puts('set +v')
|
@@ -120,13 +121,11 @@ module Litbuild
|
|
120
121
|
FileUtils.mkdir_p(location)
|
121
122
|
script_name = format('%<count>02d-%<script>s',
|
122
123
|
count: @written[location].size,
|
123
|
-
script: blueprint.file_name
|
124
|
+
script: "#{blueprint.file_name}.sh")
|
124
125
|
script_path = File.join(location, script_name)
|
125
|
-
File.
|
126
|
-
f.write(to_bash_script(blueprint, block))
|
127
|
-
end
|
126
|
+
File.write(script_path, to_bash_script(blueprint, block))
|
128
127
|
FileUtils.chmod('ugo+x', script_path)
|
129
|
-
envcmds = environment_commands(blueprint).
|
128
|
+
envcmds = environment_commands(blueprint).grep_v(/^mkdir/)
|
130
129
|
unless envcmds.empty?
|
131
130
|
envscript = File.join(location, "env_#{blueprint.file_name}.sh")
|
132
131
|
File.open(envscript, 'w') do |f|
|
@@ -214,11 +213,11 @@ module Litbuild
|
|
214
213
|
return [] if running_as_root
|
215
214
|
|
216
215
|
raw_sudo_cmds = @all_commands.select do |c|
|
217
|
-
c
|
216
|
+
c.include?('sudo ') && c.lines.size < 2
|
218
217
|
end.uniq
|
219
218
|
sudo_cmds = raw_sudo_cmds.map do |c|
|
220
219
|
sudoed_cmd = c.sub(/^.*sudo (.*)$/, '\\1')
|
221
|
-
sudoed_cmd = sudoed_cmd.sub(/;.*$/, '') if sudoed_cmd.
|
220
|
+
sudoed_cmd = sudoed_cmd.sub(/;.*$/, '') if sudoed_cmd.include?(';')
|
222
221
|
sudoed_cmd = convert_to_absolute(sudoed_cmd)
|
223
222
|
sudoed_cmd.gsub(/([,:=\\])/, '\\\\\1')
|
224
223
|
end
|
@@ -241,17 +240,39 @@ module Litbuild
|
|
241
240
|
build_location = dir_for_build(package)
|
242
241
|
|
243
242
|
if package.build_dir
|
244
|
-
render_command(script, "mkdir -p #{build_location}"
|
243
|
+
render_command(script, "mkdir -p #{build_location}")
|
245
244
|
skip_line(script)
|
246
245
|
end
|
247
246
|
|
247
|
+
# When actually running stage commands: if something goes wrong we
|
248
|
+
# want to try one more time without MAKEFLAGS set. This addresses
|
249
|
+
# the case where parallelism breaks builds, and also addresses
|
250
|
+
# ephemeral compiler errors that can crop up when using an
|
251
|
+
# emulated virtual machine.
|
252
|
+
#
|
253
|
+
# The simplest way of doing that, with proper `set -e` behavior,
|
254
|
+
# is to have a separate script for each stage and possibly run
|
255
|
+
# each script twice. (Shell functions don't work the same way.
|
256
|
+
# Bash is complicated.) So here we are going to write out
|
257
|
+
# temporary scripts that we can then invoke.
|
258
|
+
render_command(script, 'scriptdir=$(mktemp -d pkg.XXXXXX)')
|
259
|
+
render_command(script, 'trap "rm -rf $scriptdir" EXIT')
|
260
|
+
skip_line(script)
|
248
261
|
Package::BUILD_STAGES.each do |stage|
|
262
|
+
path = "$scriptdir/#{stage}.sh"
|
263
|
+
render_command(script, "cat > #{path} <<'LBEOF'")
|
264
|
+
render_command(script, '#!/bin/bash')
|
265
|
+
render_command(script, 'set -e')
|
249
266
|
log = package.logfile(stage, phase)
|
250
267
|
render_in_dir(script, build_location) do
|
251
268
|
package.build_commands(stage).each do |command|
|
252
269
|
render_command(script, command, log)
|
253
270
|
end
|
254
271
|
end
|
272
|
+
render_command(script, 'LBEOF')
|
273
|
+
render_command(script, "chmod 755 #{path}")
|
274
|
+
exec_cmd = "#{path} >> #{log} 2>&1"
|
275
|
+
render_command(script, "#{exec_cmd} || MAKEFLAGS='' #{exec_cmd}")
|
255
276
|
end
|
256
277
|
render_restart_trailer(script, restart_file, package.version)
|
257
278
|
end
|
@@ -311,7 +332,6 @@ module Litbuild
|
|
311
332
|
log = package.logfile('pkgusr')
|
312
333
|
pkgusr_dir = "~#{pkgusr}"
|
313
334
|
package.directives['configuration-files'] ||= []
|
314
|
-
package.directives['configuration-files'] << "~#{pkgusr}/options"
|
315
335
|
restart_file = ".#{package.active_phase || 'default'}"
|
316
336
|
render_restart_header(script, restart_file, package.version, pkgusr_dir)
|
317
337
|
pkgusr_srcdir = File.join(pkgusr_dir, package.name_and_version)
|
@@ -366,7 +386,7 @@ module Litbuild
|
|
366
386
|
package.build_dir && options.puts("export build_dir=#{package.build_dir}")
|
367
387
|
render_intree_commands(package, options)
|
368
388
|
Package::BUILD_STAGES.each do |stage|
|
369
|
-
options.puts("function #{stage}_commands
|
389
|
+
options.puts("function #{stage}_commands\n{")
|
370
390
|
cmds = package.build_commands(stage)
|
371
391
|
if cmds.empty?
|
372
392
|
options.puts(':')
|
@@ -425,11 +445,14 @@ module Litbuild
|
|
425
445
|
script.puts('fi')
|
426
446
|
end
|
427
447
|
|
428
|
-
def render_command(script, command, log)
|
448
|
+
def render_command(script, command, log = nil)
|
429
449
|
unfolded_command = command.gsub(/ ?\\\n */, ' ')
|
430
450
|
@all_commands << unfolded_command
|
431
|
-
|
432
|
-
|
451
|
+
|
452
|
+
# If a command's output is being redirected, it can't be logged.
|
453
|
+
# And if logging is being done elsewhere, we don't need to do it
|
454
|
+
# here.
|
455
|
+
if unfolded_command.include?('>') || log.nil?
|
433
456
|
script.puts(unfolded_command)
|
434
457
|
else
|
435
458
|
script.puts("#{unfolded_command} >> #{log} 2>&1")
|
@@ -485,9 +508,8 @@ module Litbuild
|
|
485
508
|
sdirs = spipe['servicedirs']
|
486
509
|
sdirs.each_with_index do |sdir, i|
|
487
510
|
render_service_dir(script, sdir)
|
488
|
-
|
511
|
+
i == sdirs.size - 1 &&
|
489
512
|
script.puts("echo #{pname} > #{sdir['name'].first}/pipeline-name")
|
490
|
-
end
|
491
513
|
if i < sdirs.size - 1
|
492
514
|
next_svc = sdirs[i + 1]['name'].first
|
493
515
|
script.puts("echo #{next_svc} > #{sdir['name'].first}/producer-for")
|
@@ -537,7 +559,10 @@ module Litbuild
|
|
537
559
|
cfgs = blueprint['configuration-files']
|
538
560
|
return unless cfgs
|
539
561
|
|
540
|
-
|
562
|
+
unless cfgs.empty?
|
563
|
+
cmd = "cfggit add #{cfgs.join(' ')}"
|
564
|
+
render_command(script, cmd, log)
|
565
|
+
end
|
541
566
|
render_command(script, 'cfggit stageall', log)
|
542
567
|
bp = "#{blueprint.class.name.split('::').last} #{blueprint.name}"
|
543
568
|
cmd = "cfggit as-default -m 'Configuration files for #{bp}'"
|
@@ -553,11 +578,12 @@ module Litbuild
|
|
553
578
|
# now, if the value contains ' -- backslash-quote everything (incl spaces)
|
554
579
|
# if the value contains " -- single-quote the whole thing
|
555
580
|
# if the value contains other punctuation -- double-quote the whole thing
|
556
|
-
|
581
|
+
case oneline
|
582
|
+
when /'/
|
557
583
|
oneline.gsub(/([\\ "'`$])/, '\\\\\1')
|
558
|
-
|
584
|
+
when /"/
|
559
585
|
"'#{oneline}'"
|
560
|
-
|
586
|
+
when /[\\ `]/
|
561
587
|
"\"#{oneline}\""
|
562
588
|
else
|
563
589
|
oneline
|
data/lib/litbuild/blueprint.rb
CHANGED
@@ -8,7 +8,7 @@ require 'litbuild/visitor'
|
|
8
8
|
|
9
9
|
module Litbuild
|
10
10
|
class Blueprint
|
11
|
-
class <<self
|
11
|
+
class << self
|
12
12
|
# This should simply be the name of the directory where blueprints
|
13
13
|
# of each specific type are expected to be found by Driver.
|
14
14
|
def self.directory_name
|
@@ -16,9 +16,7 @@ module Litbuild
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
attr_reader :active_phase
|
20
|
-
attr_reader :base_grafs
|
21
|
-
attr_writer :logfile_namer
|
19
|
+
attr_reader :active_phase, :base_grafs, :logfile_namer
|
22
20
|
|
23
21
|
def self.descendants
|
24
22
|
ObjectSpace.each_object(Class).select { |c| c < self }
|
@@ -180,7 +178,7 @@ module Litbuild
|
|
180
178
|
# to avoid including two versions of the dependency.
|
181
179
|
def deduped_dependency_names
|
182
180
|
dep_names = self['depends-on'].clone || []
|
183
|
-
deps_with_phase = dep_names.select { |dep| dep.
|
181
|
+
deps_with_phase = dep_names.select { |dep| dep.include?('::') }
|
184
182
|
deps_with_phase.each do |dep|
|
185
183
|
dep_without_phase = dep.split('::')[0]
|
186
184
|
dep_names.delete(dep_without_phase)
|
@@ -209,7 +207,7 @@ module Litbuild
|
|
209
207
|
def resolve_all(parameters, something)
|
210
208
|
case something
|
211
209
|
when Hash
|
212
|
-
something.
|
210
|
+
something.each_value { |element| resolve_all(parameters, element) }
|
213
211
|
when Array
|
214
212
|
something.each { |element| resolve_all(parameters, element) }
|
215
213
|
when String
|
@@ -220,9 +218,8 @@ module Litbuild
|
|
220
218
|
def resolve(parameters:, a_string:)
|
221
219
|
params = a_string.scan(/PARAM\[([A-Z_]+)\]/).flatten.sort.uniq
|
222
220
|
params.each do |p|
|
223
|
-
|
221
|
+
parameters[p] ||
|
224
222
|
raise(ParameterMissing, "Parameter #{p} is not defined")
|
225
|
-
end
|
226
223
|
|
227
224
|
a_string.gsub!(/PARAM\[#{p}\]/, parameters[p])
|
228
225
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'litbuild/commands
|
4
|
-
require 'litbuild/narrative
|
5
|
-
require 'litbuild/package
|
6
|
-
require 'litbuild/section
|
3
|
+
require 'litbuild/commands'
|
4
|
+
require 'litbuild/narrative'
|
5
|
+
require 'litbuild/package'
|
6
|
+
require 'litbuild/section'
|
7
7
|
|
8
8
|
module Litbuild
|
9
9
|
# BlueprintLibrary initializes and sets configuration parameters for
|
@@ -33,9 +33,7 @@ module Litbuild
|
|
33
33
|
def blueprint_for(target:)
|
34
34
|
name, phase = split_name_and_phase(target: target)
|
35
35
|
bp = blueprints[name]
|
36
|
-
|
37
|
-
raise(UnknownBlueprint, "Blueprint #{name} not found in library")
|
38
|
-
end
|
36
|
+
bp || raise(UnknownBlueprint, "Blueprint #{name} not found in library")
|
39
37
|
|
40
38
|
bp.for_phase(phase)
|
41
39
|
end
|
@@ -46,7 +44,7 @@ module Litbuild
|
|
46
44
|
def dependencies_for(blueprint)
|
47
45
|
dep_names = blueprint.deduped_dependency_names
|
48
46
|
dep_names.map do |dep|
|
49
|
-
if dep.
|
47
|
+
if dep.include?('::') # Explicit phase specified
|
50
48
|
blueprint_for(target: dep)
|
51
49
|
else
|
52
50
|
bp = blueprint_for(target: dep)
|
@@ -64,7 +62,7 @@ module Litbuild
|
|
64
62
|
# split a target name, like linux::headers, into a blueprint name
|
65
63
|
# (linux) and a phase name (headers).
|
66
64
|
def split_name_and_phase(target:)
|
67
|
-
if target.
|
65
|
+
if target.include?('::')
|
68
66
|
target.strip.match(/(.*)::(.*)/)[1..2]
|
69
67
|
else
|
70
68
|
[target.strip, nil]
|
@@ -82,13 +80,15 @@ module Litbuild
|
|
82
80
|
# works around the issue, whatever it is.
|
83
81
|
return unless blueprint_type.name
|
84
82
|
|
83
|
+
# All blueprints have a name and a full-name. If a blueprint has
|
84
|
+
# no `name:` or `full-name:` directive, they will be provided at
|
85
|
+
# load time.
|
86
|
+
automatic_directives = %w[name full-name]
|
87
|
+
|
85
88
|
Dir.glob("./#{blueprint_type.directory_name}/*.txt").each do |a_file|
|
86
89
|
bp_text = File.read(a_file)
|
87
90
|
begin
|
88
|
-
|
89
|
-
# has no `name:` or `full-name:` directive, they will be
|
90
|
-
# provided at load time.
|
91
|
-
%w[name full-name].each do |directive|
|
91
|
+
automatic_directives.each do |directive|
|
92
92
|
unless bp_text.match?(/^#{directive}:/)
|
93
93
|
bp_text = "#{directive}: #{File.basename(a_file, '.txt')}\n\n" +
|
94
94
|
bp_text
|
@@ -97,7 +97,7 @@ module Litbuild
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def directives?(paragraph)
|
100
|
-
paragraph.split
|
100
|
+
paragraph.split.first =~ /^[a-z-]+:/
|
101
101
|
end
|
102
102
|
|
103
103
|
def add_directives(directives, parsed)
|
@@ -124,13 +124,11 @@ module Litbuild
|
|
124
124
|
firstline_value = md[2]
|
125
125
|
value_lines = related_lines(directive_line, lines_to_process)
|
126
126
|
value = parse_directive_value(firstline_value, value_lines)
|
127
|
-
if value == "''"
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
graf_directives[directive_name] << value
|
133
|
-
end
|
127
|
+
graf_directives[directive_name] << if value == "''"
|
128
|
+
''
|
129
|
+
else
|
130
|
+
value
|
131
|
+
end
|
134
132
|
graf_directives[directive_name].flatten!
|
135
133
|
end
|
136
134
|
graf_directives
|
@@ -178,7 +176,7 @@ module Litbuild
|
|
178
176
|
end
|
179
177
|
|
180
178
|
def multiline_value(lines)
|
181
|
-
lines.join("\n")
|
179
|
+
"#{lines.join("\n")}\n"
|
182
180
|
end
|
183
181
|
|
184
182
|
def array_value(lines)
|
data/lib/litbuild/commands.rb
CHANGED
@@ -26,9 +26,8 @@ module Litbuild
|
|
26
26
|
protected
|
27
27
|
|
28
28
|
def add_file_content(directive)
|
29
|
-
|
29
|
+
(directive['name'] && directive['content']) ||
|
30
30
|
raise(InvalidDirective, 'file directive missing name or content')
|
31
|
-
end
|
32
31
|
|
33
32
|
content = @files[directive['name'].first] ||= StringIO.new
|
34
33
|
content.puts(directive['content'].first)
|
@@ -8,7 +8,7 @@ module Litbuild
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def path_for(blueprint, phase = nil, stage = nil)
|
11
|
-
count = format('
|
11
|
+
count = format('%<counter>03d', counter: @counter)
|
12
12
|
@counter += 1
|
13
13
|
file_name = build_name(count, blueprint, phase, stage)
|
14
14
|
File.join(@log_dir, file_name)
|
@@ -17,7 +17,7 @@ module Litbuild
|
|
17
17
|
protected
|
18
18
|
|
19
19
|
def build_name(*elements)
|
20
|
-
elements.uniq.compact.join('-')
|
20
|
+
"#{elements.uniq.compact.join('-')}.log"
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -67,14 +67,12 @@ module Litbuild
|
|
67
67
|
end
|
68
68
|
copy_commands = []
|
69
69
|
package.tar_files_needed.each do |filename|
|
70
|
-
|
71
|
-
copy_commands << "cp #{find_tarfile(filename)} ~#{pkgusr}/src"
|
72
|
-
end
|
70
|
+
pkgusr_file_available?(package, filename) ||
|
71
|
+
(copy_commands << "cp #{find_tarfile(filename)} ~#{pkgusr}/src")
|
73
72
|
end
|
74
73
|
package.patch_files.each do |filename|
|
75
|
-
|
76
|
-
copy_commands << "cp #{find_file(filename)} ~#{pkgusr}/patches"
|
77
|
-
end
|
74
|
+
pkgusr_file_available?(package, filename) ||
|
75
|
+
(copy_commands << "cp #{find_file(filename)} ~#{pkgusr}/patches")
|
78
76
|
end
|
79
77
|
mkdir_commands + copy_commands.sort
|
80
78
|
end
|
data/lib/litbuild/version.rb
CHANGED
metadata
CHANGED
@@ -1,40 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: litbuild
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brett Neumeier
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
|
-
cert_chain:
|
11
|
-
-
|
12
|
-
-----BEGIN CERTIFICATE-----
|
13
|
-
MIIEMDCCApigAwIBAgIBATANBgkqhkiG9w0BAQsFADAhMR8wHQYDVQQDDBZicmV0
|
14
|
-
dC9EQz1mcmVlc2EvREM9b3JnMB4XDTE5MDkwMTEyNDkxMFoXDTIwMDgzMTEyNDkx
|
15
|
-
MFowITEfMB0GA1UEAwwWYnJldHQvREM9ZnJlZXNhL0RDPW9yZzCCAaIwDQYJKoZI
|
16
|
-
hvcNAQEBBQADggGPADCCAYoCggGBALKrZnh07ME+wnUpu3EYsKisqaD68WomtNpt
|
17
|
-
pOIPUWtQnRD3iVKmPfIsCrwGbU1NQDohiwz0SdLlLVDHIovwZB/j9sI5tzSfltas
|
18
|
-
5dNgN4mgtURqlILYNmuyDbOOsWtOec9Nz7OJfvV6oat7m4prf+rU0j8JtzCAsFNT
|
19
|
-
B/IdLSqJlJEQ4UMeHPaC06RjOJJJOXSE+yh0Sm2dHjNnUyFnrzfHehMMFJ0wpL42
|
20
|
-
RFaxRNGp/U9fn/h94lXz8h42ksoWXWG8RrsnRA3Olsu6uWQJsggnMbD7zzHlQ9Xf
|
21
|
-
0cV9ePbXmyKm2EfvcoVLBybimPmvYxrXOOxblbIMFl3yWX+YfJKrEsLb5F54RSao
|
22
|
-
N4wy76RNF+d7m2yarhiqPf1dm8kzPRzJmhLLMpPa89N3mQaQtC+jrVEME6ahLNhl
|
23
|
-
lnxLd3zcT7ExrHJQQnQgei5AsJe80Noq9K2+8QjLSYDSNsc80SuBczqMeybHxVVA
|
24
|
-
4CJKSU+amFYp/Z414cJr9AG+/xal8wIDAQABo3MwcTAJBgNVHRMEAjAAMAsGA1Ud
|
25
|
-
DwQEAwIEsDAdBgNVHQ4EFgQUtedZFs4wsrrlPms2Gt+1jV7JYYwwGwYDVR0RBBQw
|
26
|
-
EoEQYnJldHRAZnJlZXNhLm9yZzAbBgNVHRIEFDASgRBicmV0dEBmcmVlc2Eub3Jn
|
27
|
-
MA0GCSqGSIb3DQEBCwUAA4IBgQAfjb44P0zp86q4cvN8Wv/VEyvVLEiTT/DFWmER
|
28
|
-
UBMPB1lIUxxgCs6MqxpRK8icX4IRb/W9qeC2nIBsmY7u4Xoj3JiaOLmoJImXt+tO
|
29
|
-
KdGUu7ygymVZ7991XaAf4dpOcVYMmUDqS+G7mo/nbHBT4440AG2SSL02Nj7zDfn8
|
30
|
-
Ut0XU+6UT3WxpBIA1o/BTmLkPvQhkOEMv7sWBWHdvS0eSxNTSfXpwkjIYpXMsUIg
|
31
|
-
BbgMcxnxUIv5Y+Xb/TIbrRYqiDtqsDT+vsadKk3qjN0bx7vCVdibh2cfGTJA9Spe
|
32
|
-
pi1q/NcnHXSeMFJ4iWyp6lyZxo+B7KIFkgD/irWbBoyZYpbMYJexasmoVuFgyvND
|
33
|
-
VBt/HnbucMCrdU4EqbBQHFimTIyvOaI12/TaU4362smlgZhZdnlHyBeOUBGzDSLX
|
34
|
-
PvrrfEkjwo+u4dPBTaO5ZBa4qsFE5bK/1l6d4AVV5Yi5NohUwmpp1bFFCGPqvzVA
|
35
|
-
bhee2x0YS1uGTnADpv2GLkmNMIA=
|
36
|
-
-----END CERTIFICATE-----
|
37
|
-
date: 2019-09-14 00:00:00.000000000 Z
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-12-25 00:00:00.000000000 Z
|
38
12
|
dependencies: []
|
39
13
|
description: A build system based on Knuth's idea of literate programming.
|
40
14
|
email:
|
@@ -71,8 +45,9 @@ files:
|
|
71
45
|
homepage: http://git.freesa.org/freesa/litbuild
|
72
46
|
licenses:
|
73
47
|
- GPL-3.0
|
74
|
-
metadata:
|
75
|
-
|
48
|
+
metadata:
|
49
|
+
rubygems_mfa_required: 'true'
|
50
|
+
post_install_message:
|
76
51
|
rdoc_options: []
|
77
52
|
require_paths:
|
78
53
|
- lib
|
@@ -80,15 +55,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
80
55
|
requirements:
|
81
56
|
- - ">="
|
82
57
|
- !ruby/object:Gem::Version
|
83
|
-
version: '
|
58
|
+
version: '3.0'
|
84
59
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
60
|
requirements:
|
86
61
|
- - ">="
|
87
62
|
- !ruby/object:Gem::Version
|
88
63
|
version: '0'
|
89
64
|
requirements: []
|
90
|
-
rubygems_version: 3.
|
91
|
-
signing_key:
|
65
|
+
rubygems_version: 3.3.3
|
66
|
+
signing_key:
|
92
67
|
specification_version: 4
|
93
68
|
summary: A literate build system
|
94
69
|
test_files: []
|
checksums.yaml.gz.sig
DELETED
Binary file
|
data.tar.gz.sig
DELETED
Binary file
|
metadata.gz.sig
DELETED