build-tool 0.1.4 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +2 -3
- data/History.txt +29 -0
- data/Manifest.txt +39 -10
- data/README.txt +5 -8
- data/Rakefile +14 -6
- data/bin/build-tool +3 -35
- data/db/migrations/001_command_histories.rb +20 -0
- data/db/migrations/002_module_events.rb +24 -0
- data/db/migrations/003_command_histories_add_logfile.rb +19 -0
- data/lib/build-tool.rb +1 -1
- data/lib/build-tool/application.rb +103 -30
- data/lib/build-tool/build-system/autoconf.rb +69 -6
- data/lib/build-tool/build-system/base.rb +2 -25
- data/lib/build-tool/build-system/custom.rb +6 -19
- data/lib/build-tool/build-system/kdel10n.rb +39 -0
- data/lib/build-tool/build-system/none.rb +82 -0
- data/lib/build-tool/cfg/lexer.rb +133 -7
- data/lib/build-tool/cfg/lexer.rex +58 -6
- data/lib/build-tool/cfg/node.rb +13 -1
- data/lib/build-tool/cfg/parser.rb +519 -333
- data/lib/build-tool/cfg/parser.y +74 -11
- data/lib/build-tool/cfg/visitor.rb +182 -20
- data/lib/build-tool/command_actions.rb +202 -0
- data/lib/build-tool/commands.rb +193 -49
- data/lib/build-tool/commands/build.rb +13 -8
- data/lib/build-tool/commands/configure.rb +8 -3
- data/lib/build-tool/commands/environments.rb +4 -8
- data/lib/build-tool/commands/environments/list.rb +8 -0
- data/lib/build-tool/commands/fetch.rb +7 -2
- data/lib/build-tool/commands/gc.rb +53 -0
- data/lib/build-tool/commands/history.rb +111 -0
- data/lib/build-tool/commands/install.rb +6 -1
- data/lib/build-tool/commands/lsfeatures.rb +73 -0
- data/lib/build-tool/commands/modules.rb +3 -7
- data/lib/build-tool/commands/modules/info.rb +15 -6
- data/lib/build-tool/commands/modules/list.rb +10 -5
- data/lib/build-tool/commands/rebase.rb +6 -1
- data/lib/build-tool/commands/recipes.rb +3 -7
- data/lib/build-tool/configuration.rb +24 -1
- data/lib/build-tool/environment.rb +17 -3
- data/lib/build-tool/feature.rb +47 -0
- data/lib/build-tool/history.rb +173 -0
- data/lib/build-tool/module.rb +49 -90
- data/lib/build-tool/recipe.rb +5 -0
- data/lib/build-tool/vcs/archive.rb +140 -0
- data/lib/build-tool/vcs/base.rb +5 -5
- data/lib/build-tool/vcs/git-svn.rb +4 -0
- data/lib/build-tool/vcs/git.rb +4 -0
- data/lib/mj/logging.rb +11 -0
- data/recipes/{kdeqt4.6 → kde}/custom/qt/qtscriptgenerator/compile.sh +0 -0
- data/recipes/{kdeqt4.6 → kde}/custom/qt/qtscriptgenerator/configure.sh +0 -0
- data/recipes/{kdeqt4.6 → kde}/custom/qt/qtscriptgenerator/install.sh +0 -0
- data/recipes/kde/custom/scripting/pyqt4/compile.sh +10 -0
- data/recipes/kde/custom/scripting/pyqt4/configure.sh +14 -0
- data/recipes/kde/custom/scripting/pyqt4/install.sh +10 -0
- data/recipes/kde/custom/scripting/sip/compile.sh +10 -0
- data/recipes/kde/custom/scripting/sip/configure.sh +13 -0
- data/recipes/kde/custom/scripting/sip/install.sh +10 -0
- data/recipes/kde/files/xsession +8 -4
- data/recipes/kde/kde-bindings.recipe +22 -0
- data/recipes/kde/kde-core.recipe +104 -0
- data/recipes/kde/kde-devel.recipe +38 -0
- data/recipes/kde/kde-finance.recipe +17 -0
- data/recipes/kde/kde-graphics.recipe +27 -0
- data/recipes/kde/kde-kdevelop.recipe +116 -0
- data/recipes/kde/kde-l10n.recipe +14 -0
- data/recipes/kde/kde-multimedia.recipe +31 -0
- data/recipes/kde/kde-network.recipe +55 -0
- data/recipes/kde/kde-office.recipe +28 -0
- data/recipes/kde/kde-plasma.recipe +117 -0
- data/recipes/{kdeqt4.6/recipe → kde/kde-qt.recipe} +25 -57
- data/recipes/kde/kde-scripting.recipe +63 -0
- data/recipes/kde/kde-support.recipe +73 -0
- data/recipes/kde/kde-utils.recipe +22 -0
- data/recipes/kde/kde-webdev.recipe +41 -0
- data/recipes/kde/recipe +92 -532
- data/recipes/kde/recipe-local +58 -2
- data/recipes/kde/settings.yaml +17 -0
- data/recipes/kde43/recipe-local +58 -2
- data/test/test_configuration_parser.rb +76 -21
- data/test/test_feature.rb +34 -0
- data/test/test_history.rb +149 -0
- metadata +185 -30
- metadata.gz.sig +0 -0
- data/lib/build-tool/pluginbase.rb +0 -43
- data/recipes/kdeqt4.6/info.yaml +0 -7
- data/recipes/kdeqt4.6/recipe-local +0 -30
- data/recipes/kdeqt4.6/settings.yaml +0 -27
- data/tasks/rdoc.rake +0 -34
- data/test.rb +0 -28
@@ -11,6 +11,11 @@ module BuildTool; module Commands;
|
|
11
11
|
name "build"
|
12
12
|
description "Build a module."
|
13
13
|
|
14
|
+
# Log this command if $noop is not active
|
15
|
+
def log?
|
16
|
+
! $noop
|
17
|
+
end
|
18
|
+
|
14
19
|
def initialize_options
|
15
20
|
|
16
21
|
@clean = false
|
@@ -73,34 +78,34 @@ module BuildTool; module Commands;
|
|
73
78
|
|
74
79
|
def do_execute_module( mod )
|
75
80
|
if @from_scratch or @clean
|
76
|
-
|
81
|
+
clean( mod, @from_scratch )
|
77
82
|
end
|
78
83
|
|
79
84
|
if @update
|
80
85
|
if mod.checkedout?
|
81
|
-
|
82
|
-
|
86
|
+
fetch( mod )
|
87
|
+
rebase( mod )
|
83
88
|
else
|
84
|
-
|
89
|
+
clone( mod )
|
85
90
|
end
|
86
91
|
end
|
87
92
|
|
88
93
|
if $noop or mod.checkedout?
|
89
94
|
if @configure or @reconfigure or !mod.configured?
|
90
95
|
if @reconfigure
|
91
|
-
|
96
|
+
reconfigure( mod )
|
92
97
|
else
|
93
98
|
# See outer if. @configure or !mod.configured?
|
94
|
-
|
99
|
+
configure( mod )
|
95
100
|
end
|
96
101
|
end
|
97
102
|
|
98
103
|
if @build
|
99
|
-
|
104
|
+
make( mod )
|
100
105
|
end
|
101
106
|
|
102
107
|
if @install
|
103
|
-
|
108
|
+
install( mod, true )
|
104
109
|
end
|
105
110
|
|
106
111
|
else
|
@@ -14,6 +14,11 @@ module BuildTool; module Commands;
|
|
14
14
|
name "configure"
|
15
15
|
description "configure the module"
|
16
16
|
|
17
|
+
# Log this command if $noop is not active
|
18
|
+
def log?
|
19
|
+
! $noop
|
20
|
+
end
|
21
|
+
|
17
22
|
def initialize_options
|
18
23
|
|
19
24
|
@rmcache = false
|
@@ -51,13 +56,13 @@ module BuildTool; module Commands;
|
|
51
56
|
def do_execute_module( mod )
|
52
57
|
if mod.checkedout?
|
53
58
|
if @from_scratch or @clean
|
54
|
-
|
59
|
+
clean( mod, @from_scratch )
|
55
60
|
end
|
56
61
|
|
57
62
|
if @rmcache and !@from_scratch
|
58
|
-
|
63
|
+
reconfigure( mod )
|
59
64
|
else
|
60
|
-
|
65
|
+
configure( mod )
|
61
66
|
end
|
62
67
|
else
|
63
68
|
logger.info "Not checked out. Skipping"
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'build-tool/commands'
|
2
2
|
|
3
|
-
module BuildTool; module Commands
|
3
|
+
module BuildTool; module Commands
|
4
4
|
|
5
|
-
class
|
5
|
+
class EnvironmentsCLI < Commands::SubCommands
|
6
6
|
|
7
7
|
name "environments"
|
8
8
|
description "Environment related commands."
|
@@ -19,11 +19,7 @@ module BuildTool; module Commands; module Environments
|
|
19
19
|
raise NotImplementedError
|
20
20
|
end
|
21
21
|
|
22
|
-
end # class
|
22
|
+
end # class EnvironmentsCLI
|
23
23
|
|
24
|
-
|
25
|
-
cmd = CLI.new( *args )
|
26
|
-
end
|
27
|
-
|
28
|
-
end; end; end # module BuildTool::Commands::Environments
|
24
|
+
end; end # module BuildTool::Commands::EnvironmentsCLI
|
29
25
|
|
@@ -11,6 +11,13 @@ module BuildTool; module Commands; module Environments
|
|
11
11
|
description "List all available environments in alphabetical order."
|
12
12
|
cmdalias "lsenv"
|
13
13
|
|
14
|
+
def initialize_options
|
15
|
+
@all = false
|
16
|
+
options.on( "--all", "Show inactive environments." ) { |t|
|
17
|
+
@all = true
|
18
|
+
}
|
19
|
+
end
|
20
|
+
|
14
21
|
def do_execute( args )
|
15
22
|
if args.length != 0
|
16
23
|
return usage( "To many arguments." )
|
@@ -20,6 +27,7 @@ module BuildTool; module Commands; module Environments
|
|
20
27
|
say "------------------------------------------------------------"
|
21
28
|
configuration.environments.keys.sort.each do |name|
|
22
29
|
env = configuration.environment(name)
|
30
|
+
next if !env.active? && !@all
|
23
31
|
if env.parent
|
24
32
|
say "%-15s %s" % [ name, env.parent.name ]
|
25
33
|
else
|
@@ -14,6 +14,11 @@ module BuildTool; module Commands;
|
|
14
14
|
name "fetch"
|
15
15
|
description "fetch remote changes (if applicable)"
|
16
16
|
|
17
|
+
# Log this command if $noop is not active
|
18
|
+
def log?
|
19
|
+
! $noop
|
20
|
+
end
|
21
|
+
|
17
22
|
def applicable?
|
18
23
|
BuildTool::Application.instance.name != "build-tool"
|
19
24
|
end
|
@@ -30,9 +35,9 @@ module BuildTool; module Commands;
|
|
30
35
|
def do_execute_module( mod )
|
31
36
|
|
32
37
|
if mod.checkedout?
|
33
|
-
|
38
|
+
fetch( mod )
|
34
39
|
else
|
35
|
-
|
40
|
+
clone( mod )
|
36
41
|
end
|
37
42
|
|
38
43
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'build-tool/commands'
|
2
|
+
|
3
|
+
module BuildTool; module Commands;
|
4
|
+
|
5
|
+
#
|
6
|
+
# BuildCommand
|
7
|
+
#
|
8
|
+
class Gc < ModuleBasedCommand
|
9
|
+
|
10
|
+
name "gc"
|
11
|
+
description "Remove old stuff"
|
12
|
+
|
13
|
+
def initialize_options
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def applicable?
|
18
|
+
BuildTool::Application.instance.name != "build-tool"
|
19
|
+
end
|
20
|
+
|
21
|
+
def do_execute( args )
|
22
|
+
case args.length
|
23
|
+
|
24
|
+
when 0:
|
25
|
+
# Nothing
|
26
|
+
#
|
27
|
+
else
|
28
|
+
super
|
29
|
+
end
|
30
|
+
|
31
|
+
BuildTool::History::CommandLog.older_than.each do |cmd|
|
32
|
+
if cmd.logdir
|
33
|
+
if $noop
|
34
|
+
say "rm -rf #{cmd.logdir}"
|
35
|
+
else
|
36
|
+
debug("Removing #{cmd.logdir}");
|
37
|
+
File.rm_rf( cmd.logdir ) if File.exist?( cmd.logdir )
|
38
|
+
end
|
39
|
+
end
|
40
|
+
cmd.delete
|
41
|
+
end
|
42
|
+
return 0
|
43
|
+
end
|
44
|
+
|
45
|
+
def do_execute_module( mod )
|
46
|
+
mod.gc
|
47
|
+
end
|
48
|
+
|
49
|
+
end # class Info
|
50
|
+
|
51
|
+
end; end # module BuildTool::Commands
|
52
|
+
|
53
|
+
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'build-tool/commands'
|
2
|
+
|
3
|
+
module BuildTool; module Commands;
|
4
|
+
|
5
|
+
#
|
6
|
+
# BuildCommand
|
7
|
+
#
|
8
|
+
class History < Standard
|
9
|
+
|
10
|
+
name "history"
|
11
|
+
description "show command history"
|
12
|
+
|
13
|
+
def initialize_options
|
14
|
+
|
15
|
+
# Show detailed history. Add start time, duration and success/failure
|
16
|
+
@long = false
|
17
|
+
options.on( "-l", "--long", "Use long list format." ) { |t|
|
18
|
+
@long = true
|
19
|
+
}
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def applicable?
|
24
|
+
BuildTool::Application.instance.name != "build-tool"
|
25
|
+
end
|
26
|
+
|
27
|
+
def do_execute( args )
|
28
|
+
case args.length
|
29
|
+
|
30
|
+
when 0:
|
31
|
+
return show_command_history
|
32
|
+
when 1:
|
33
|
+
return show_detailed_command_history( args[0] ) if args[0] =~ /^[0-9]+/
|
34
|
+
case args[0][0,1]
|
35
|
+
when '+':
|
36
|
+
return show_detailed_command_history( args[0] )
|
37
|
+
else
|
38
|
+
return show_module_history( args[0] )
|
39
|
+
end
|
40
|
+
else
|
41
|
+
return usage( "To many arguments" )
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def show_command( cmd )
|
46
|
+
if @long
|
47
|
+
say " %04d %s %s # %s [%s]" % [ cmd.id, cmd.started_at.strftime("%x %X"), cmd.duration, cmd.command, cmd.state_str ]
|
48
|
+
else
|
49
|
+
say " %04d %s [%s]" % [ cmd.id, cmd.command, cmd.state_str ]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def show_command_history
|
54
|
+
# *TODO* Make the number of printed command configurable
|
55
|
+
BuildTool::History::CommandLog.last(50).reverse().each do |cmd|
|
56
|
+
show_command cmd
|
57
|
+
end
|
58
|
+
|
59
|
+
return 0
|
60
|
+
end
|
61
|
+
|
62
|
+
def show_module_history( modname )
|
63
|
+
mod = Application::instance.configuration.module( modname )
|
64
|
+
if mod.nil?
|
65
|
+
return usage( "Unknown module #{modname}" )
|
66
|
+
end
|
67
|
+
|
68
|
+
BuildTool::History::CommandLog.last_by_module( modname ).reverse.each do |cmd|
|
69
|
+
show_command( cmd )
|
70
|
+
|
71
|
+
last_module=""
|
72
|
+
cmd.module_logs_dataset.filter( :module => modname ).each do |e|
|
73
|
+
if e.module != last_module
|
74
|
+
say "\t#{e.module}"
|
75
|
+
last_module = e.module
|
76
|
+
end
|
77
|
+
say "\t\t %s %s (%s) [%s]" % [ e.duration, e.event, e.logfile, e.state_str ]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
return 0
|
81
|
+
end
|
82
|
+
|
83
|
+
def show_detailed_command_history( id )
|
84
|
+
if id[0,1] == '+'
|
85
|
+
cmd = BuildTool::History::CommandLog.most_recent( id.to_i )
|
86
|
+
return 0 if cmd.nil?
|
87
|
+
else
|
88
|
+
cmd = BuildTool::History::CommandLog[id.to_i]
|
89
|
+
if cmd.nil?
|
90
|
+
logger.error( "No entry with id #{id.to_i} found in history!")
|
91
|
+
return -1
|
92
|
+
end
|
93
|
+
end
|
94
|
+
show_command( cmd )
|
95
|
+
|
96
|
+
last_module=""
|
97
|
+
cmd.module_logs.each do |e|
|
98
|
+
if e.module != last_module
|
99
|
+
say "\t#{e.module}"
|
100
|
+
last_module = e.module
|
101
|
+
end
|
102
|
+
say "\t\t %s %s (%s) [%s]" % [ e.duration, e.event, e.logfile, e.state_str ]
|
103
|
+
end
|
104
|
+
|
105
|
+
return 0
|
106
|
+
end
|
107
|
+
|
108
|
+
end # class Info
|
109
|
+
|
110
|
+
end; end # module BuildTool::Commands
|
111
|
+
|
@@ -14,6 +14,11 @@ module BuildTool; module Commands;
|
|
14
14
|
name "install"
|
15
15
|
description "install the module"
|
16
16
|
|
17
|
+
# Log this command if $noop is not active
|
18
|
+
def log?
|
19
|
+
! $noop
|
20
|
+
end
|
21
|
+
|
17
22
|
def initialize_options
|
18
23
|
|
19
24
|
@fast = false
|
@@ -40,7 +45,7 @@ module BuildTool; module Commands;
|
|
40
45
|
|
41
46
|
def do_execute_module( mod )
|
42
47
|
if mod.checkedout?
|
43
|
-
|
48
|
+
install( mod, @fast )
|
44
49
|
else
|
45
50
|
logger.info "Not checked out. Skipping"
|
46
51
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'build-tool/commands'
|
2
|
+
|
3
|
+
module BuildTool; module Commands;
|
4
|
+
|
5
|
+
#
|
6
|
+
# BuildCommand
|
7
|
+
#
|
8
|
+
class Lsfeatures < Standard
|
9
|
+
|
10
|
+
name "lsfeatures"
|
11
|
+
description "List all available features."
|
12
|
+
|
13
|
+
def initialize_options
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def applicable?
|
18
|
+
BuildTool::Application.instance.name != "build-tool"
|
19
|
+
end
|
20
|
+
|
21
|
+
def do_execute( args )
|
22
|
+
if args.length > 1
|
23
|
+
# *TODO* print better message
|
24
|
+
return usage "To many arguments."
|
25
|
+
end
|
26
|
+
|
27
|
+
if args.length == 1
|
28
|
+
return show_feature( args[0] )
|
29
|
+
else
|
30
|
+
return list_features
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def list_features
|
35
|
+
say "%-30s| %s | %s" % [ "Feature", "A", "Description" ]
|
36
|
+
say "==========================================================="
|
37
|
+
features = configuration.features
|
38
|
+
features.keys.sort.each do |name|
|
39
|
+
feature = features[name]
|
40
|
+
# Skip feature without modules
|
41
|
+
next if feature.modules.empty?
|
42
|
+
active = "N"
|
43
|
+
active = "Y" if feature.active?
|
44
|
+
say "%-30s| %s | %s" % [ name, active, feature.description ]
|
45
|
+
end
|
46
|
+
|
47
|
+
return 0
|
48
|
+
end
|
49
|
+
|
50
|
+
def show_feature( name )
|
51
|
+
feature = configuration.features[name]
|
52
|
+
|
53
|
+
if feature.nil?
|
54
|
+
logger.error( "Unknown feature '%s'" % name )
|
55
|
+
return -1
|
56
|
+
end
|
57
|
+
|
58
|
+
say "Name : %s" % feature.path
|
59
|
+
say "Modules"
|
60
|
+
say "===================================================="
|
61
|
+
feature.modules.each do |mod|
|
62
|
+
next if mod.is_template?
|
63
|
+
say " %-20s: %s" % [ mod.name, mod.description ]
|
64
|
+
end
|
65
|
+
return 0
|
66
|
+
end
|
67
|
+
|
68
|
+
end # class Info
|
69
|
+
|
70
|
+
end; end # module BuildTool::Commands
|
71
|
+
|
72
|
+
|
73
|
+
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'build-tool/commands'
|
2
2
|
|
3
|
-
module BuildTool; module Commands;
|
3
|
+
module BuildTool; module Commands;
|
4
4
|
|
5
5
|
class CLI < Commands::SubCommands
|
6
6
|
|
@@ -19,11 +19,7 @@ module BuildTool; module Commands; module Modules
|
|
19
19
|
raise NotImplementedError
|
20
20
|
end
|
21
21
|
|
22
|
-
end # class
|
22
|
+
end # class ModulesCLI
|
23
23
|
|
24
|
-
|
25
|
-
cmd = CLI.new( *args )
|
26
|
-
end
|
27
|
-
|
28
|
-
end; end; end # module BuildTool::Commands::Modules
|
24
|
+
end; end # module BuildTool::Commands::ModulesCLI
|
29
25
|
|
@@ -11,6 +11,7 @@ module BuildTool; module Commands; module Modules
|
|
11
11
|
description "show detailed information about modules."
|
12
12
|
|
13
13
|
def do_execute_module( mod )
|
14
|
+
say "Active: #{mod.active?}"
|
14
15
|
|
15
16
|
if mod.repository
|
16
17
|
say "Repository: #{mod.repository.url}/#{mod.remote_path}"
|
@@ -26,7 +27,6 @@ module BuildTool; module Commands; module Modules
|
|
26
27
|
say "Build Directory #{mod.build_directory} #{mod.configured? ? '(CONFIGURED)' : '(TODO)' }"
|
27
28
|
else
|
28
29
|
say "Local Checkout: build-prefix not configured"
|
29
|
-
say "Local Checkout: build-prefix not configured"
|
30
30
|
end
|
31
31
|
|
32
32
|
say "Prefix: #{mod.install_prefix.to_s}"
|
@@ -43,26 +43,35 @@ module BuildTool; module Commands; module Modules
|
|
43
43
|
if mod.vcs_configuration
|
44
44
|
case mod.vcs_configuration.name
|
45
45
|
when 'svn'
|
46
|
+
when 'archive'
|
46
47
|
when 'git'
|
47
48
|
say " Remote: %s -> %s" % [ "origin", mod.vcs_configuration.repository.url ]
|
48
49
|
mod.vcs_configuration.remote.each do |key, val|
|
49
50
|
say " Remote: %s -> %s" % [ key, val.url ]
|
50
51
|
end
|
52
|
+
say " Track branch: #{mod.vcs_configuration.track_remote}/#{mod.vcs_configuration.track_branch}"
|
51
53
|
when 'git-svn'
|
54
|
+
say " Remote: %s -> %s" % [ "git-svn", mod.vcs_configuration.repository.url ]
|
55
|
+
mod.vcs_configuration.remote.each do |key, val|
|
56
|
+
say " Remote: %s -> %s" % [ key, val.url ]
|
57
|
+
end
|
52
58
|
mod.vcs_configuration.externals.each do |key, val|
|
53
59
|
say " External: #{key} -> #{val}"
|
54
60
|
end
|
55
61
|
else
|
56
62
|
logger.warn "Unknown vcs #{mod.vcs_configuration.name}"
|
57
63
|
end
|
58
|
-
say " Track branch: #{mod.vcs_configuration.track_remote}/#{mod.vcs_configuration.track_branch}"
|
59
64
|
end # if mod.vcs_configuration
|
60
65
|
|
61
66
|
bs = mod.build_system
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
67
|
+
if bs
|
68
|
+
say "Build System: #{bs.name}"
|
69
|
+
say " Out Of Source Build #{bs.out_of_source}"
|
70
|
+
bs.options.sort.each do |var|
|
71
|
+
say " %-25s %s" % [ var + ":", bs[var] ]
|
72
|
+
end
|
73
|
+
else
|
74
|
+
say "Build System: Not configured"
|
66
75
|
end
|
67
76
|
|
68
77
|
return 0
|