build-tool 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -4,7 +4,7 @@ tags
4
4
  config/website.yml
5
5
  pkg/*
6
6
  *~
7
- *.sw[p-z]
7
+ *.sw[a-z]
8
8
  .yardoc
9
9
  lib/build-tool/cfg/parser.output
10
10
  lib/build-tool/cfg/parser.rb
@@ -1,3 +1,20 @@
1
+ == 0.5.3
2
+ - Feature
3
+ - Errors during a make call are both printed to the logfile and stdout even without verbose
4
+ mode. Currently lines with "error:" and "ld:" are considered as errors. Report more. If the
5
+ progressbar was active it is stopped.
6
+ - Git: Check for a dirty index if asked for rebase. No automatic stashing (Yet?). Build-tool
7
+ will bail out with an error message if you have uncommited changes. This step will be done
8
+ before asking for the ssh key.
9
+ - Enhancements
10
+ - Do not print the classname for BuildTool Error classes. Only the message.
11
+ - First fetch and rebase, then clean out the build-dir. If the fetch rebase fails you still have
12
+ your old build to sort out the problems.
13
+ - Improve the error message if --resume-from is given an invalid/ambiguous module name.
14
+ - Bugfix
15
+ - Fix ssh key handling. Now build-tool will stop if ssh-add fails.
16
+ - Fix the progressbar for build-system not giving progress information(like qmake)
17
+
1
18
  == 0.5.2
2
19
  - Bugfix
3
20
  - Be less verbose about adding ssh-key to the agent. One time is enough.
@@ -0,0 +1,5 @@
1
+ cmd files <doesnotexist>
2
+ > Unhandled exception
3
+
4
+ cmd recipes info kde
5
+ > Unhandled exception
@@ -1,6 +1,7 @@
1
1
  .gitattributes
2
2
  .gitignore
3
3
  History.txt
4
+ KNOWN_PROBLEMS
4
5
  Manifest.txt
5
6
  README.txt
6
7
  Rakefile
@@ -16,6 +17,7 @@ lib/build-tool/build-system/base.rb
16
17
  lib/build-tool/build-system/cmake.rb
17
18
  lib/build-tool/build-system/custom.rb
18
19
  lib/build-tool/build-system/kdel10n.rb
20
+ lib/build-tool/build-system/make.rb
19
21
  lib/build-tool/build-system/none.rb
20
22
  lib/build-tool/build-system/qmake.rb
21
23
  lib/build-tool/build-system/qt.rb
data/Rakefile CHANGED
@@ -1,5 +1,12 @@
1
1
  # -*- ruby -*-
2
2
  require 'rubygems'
3
+
4
+ # http://rubyforge.org/tracker/index.php?func=detail&aid=28920&group_id=1513&atid=5921
5
+ begin
6
+ require 'psych'
7
+ rescue ::LoadError
8
+ end
9
+
3
10
  require 'hoe'
4
11
  require 'fileutils'
5
12
  require './lib/build-tool'
@@ -9,6 +16,7 @@ Hoe.plugin :doofus
9
16
  Hoe.plugin :debugging
10
17
  Hoe.plugin :racc
11
18
 
19
+
12
20
  # Generate all the Rake tasks
13
21
  # Run 'rake -T' to see list of generated tasks (from gem root directory)
14
22
  Hoe.spec( 'build-tool' ) do
@@ -2,6 +2,6 @@
2
2
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
3
 
4
4
  module BuildTool
5
- VERSION = '0.5.2'
5
+ VERSION = '0.5.3'
6
6
  end
7
7
 
@@ -25,6 +25,8 @@ module BuildTool
25
25
  #
26
26
  class Application < Singleton
27
27
 
28
+ attr_writer :configuration
29
+
28
30
  attr_reader :application_root
29
31
  attr_reader :cli
30
32
  attr_reader :database
@@ -1,3 +1,5 @@
1
+ require 'build-tool/build-system/make'
2
+
1
3
  module BuildTool; module BuildSystem
2
4
 
3
5
  #
@@ -7,7 +9,6 @@ class AutoConf < Base
7
9
 
8
10
  include MJ::Tools::SubProcess
9
11
 
10
- class MakeError < BuildTool::Error; end
11
12
  class AutoConfError < BuildTool::Error; end
12
13
 
13
14
  def intitialize( *args )
@@ -90,14 +91,6 @@ def configure
90
91
  rc
91
92
  end
92
93
 
93
- def do_make( target = nil )
94
- rc = self.class.execute( "make #{target ? target : "" }", build_directory, self.module.environment.values )
95
- if rc != 0
96
- raise MakeError, "make #{target || "" } failed with error code #{rc}";
97
- end
98
- rc
99
- end
100
-
101
94
  def install( fast )
102
95
  make( "install" )
103
96
  end
@@ -107,7 +100,7 @@ def install_fast_supported?
107
100
  end
108
101
 
109
102
  def make( target = nil )
110
- do_make( target )
103
+ Make.make( "#{target ? target : "" }", build_directory, self.module.environment.values )
111
104
  end
112
105
 
113
106
  def option_string
@@ -167,6 +167,11 @@ def source_directory
167
167
  def after_rebase
168
168
  end
169
169
 
170
+ def progressbar( title, &block )
171
+ logger.info title
172
+ yield
173
+ end
174
+
170
175
  #
171
176
  ### METHODS
172
177
  #
@@ -229,4 +234,64 @@ def remove_build_directory
229
234
 
230
235
  end # class Base
231
236
 
237
+ class ProgressbarBase < Logging::Appender
238
+
239
+ def initialize( title, &block )
240
+ super( 'Progressbar', :level => :DEBUG )
241
+ @pbar = nil
242
+ @oldlogger = nil
243
+ if Logging.appenders['stdout'].level >= ::Logging::level_num(:INFO)
244
+ # We only do the progressbar thing if there is no verbose output active.
245
+ begin
246
+ # Remove the old stdout logger.
247
+ @oldlogger = Logging.appenders[ 'stdout' ]
248
+ Logging.logger[ 'root' ].remove_appenders( 'stdout' )
249
+ Logging.logger[ 'root' ].add_appenders( self )
250
+ # Add the progressbar logger
251
+ @pbar = ANSI::Progressbar.new( title, 100 )
252
+ yield
253
+ ensure
254
+ @pbar.finish unless @pbar.nil?
255
+ # Reset the logger
256
+ Logging.logger[ 'root' ].remove_appenders( 'Progressbar' )
257
+ Logging.logger[ 'root' ].add_appenders( @oldlogger )
258
+ end
259
+ else
260
+ # If there is verbose output just print the text
261
+ logger.info( title )
262
+ yield
263
+ end
264
+
265
+ end
266
+
267
+ def write( event )
268
+ message = event.data
269
+ return if message.empty?
270
+
271
+ case event.level
272
+ when ::Logging::level_num( :ERROR ), ::Logging::level_num( :WARN )
273
+ begin
274
+ # if we get an error we finish the pbar and print out the error waiting for
275
+ # the end
276
+ @pbar.finish unless @pbar.nil?
277
+ @pbar = nil
278
+ @oldlogger.append( event )
279
+ rescue Exception => e
280
+ puts e
281
+ end
282
+ else
283
+ begin
284
+ grep_progress( message )
285
+ rescue Exception => e
286
+ puts e
287
+ puts e.backtrace
288
+ end
289
+ end
290
+ self
291
+ end
292
+
293
+ end # class Progressbar
294
+
295
+
296
+
232
297
  end; end # module BuildTool::BuildSystem
@@ -1,8 +1,24 @@
1
1
  require 'mj/tools/subprocess'
2
2
  require 'build-tool/build-system/base'
3
+ require 'build-tool/build-system/make'
3
4
 
4
5
  module BuildTool; module BuildSystem
5
6
 
7
+ class Progressbar < ProgressbarBase
8
+
9
+ def grep_progress( message )
10
+
11
+ match = /^\[ *(\d+)%\]/.match( message )
12
+ if match and not @pbar.nil?
13
+ # puts match[ 1 ]
14
+ @pbar.set( match[ 1 ].to_i )
15
+ end
16
+
17
+ end
18
+
19
+ end # class ProgressLayout
20
+
21
+
6
22
 
7
23
  #
8
24
  #
@@ -11,7 +27,6 @@ class CMake < Base
11
27
 
12
28
  include MJ::Tools::SubProcess
13
29
 
14
- class MakeError < BuildTool::Error; end
15
30
  class CMakeError < BuildTool::Error; end
16
31
 
17
32
  def initialize( *args )
@@ -65,14 +80,6 @@ def configure
65
80
  rc
66
81
  end
67
82
 
68
- def do_make( target = nil )
69
- rc = self.class.execute( "make #{target ? target : "" }", build_directory, self.module.environment.values )
70
- if rc != 0
71
- raise MakeError, "make #{target || "" } failed with error code #{rc}";
72
- end
73
- rc
74
- end
75
-
76
83
  def install( fast )
77
84
  if fast
78
85
  make( "install/fast" )
@@ -86,7 +93,7 @@ def install_fast_supported?
86
93
  end
87
94
 
88
95
  def make( target = nil )
89
- do_make( target )
96
+ Make.make( "#{target ? target : "" }", build_directory, self.module.environment.values )
90
97
  end
91
98
 
92
99
  def option_string
@@ -98,6 +105,12 @@ def option_string
98
105
  arr.join(" ")
99
106
  end
100
107
 
108
+ def progressbar( title, &block )
109
+ Progressbar.new( title ) do
110
+ yield
111
+ end
112
+ end
113
+
101
114
  end # class CMake
102
115
 
103
116
 
@@ -0,0 +1,43 @@
1
+ require 'mj/tools/subprocess'
2
+
3
+
4
+ module BuildTool; module BuildSystem
5
+
6
+
7
+ # The make buildsystem.
8
+ #
9
+ # Provides helper methods for other build-system currently.
10
+ class Make
11
+
12
+ include MJ::Tools::SubProcess
13
+
14
+ class MakeError < BuildTool::Error; end
15
+
16
+ # Class Methods
17
+ class << self
18
+
19
+ def make( target, build_directory, environment )
20
+ rc = self.execute( "make #{target ? target : "" }", build_directory, environment ) do |line|
21
+ line.chomp
22
+ if line.index( /[^\w]error:/ )
23
+ logger.error( line )
24
+ elsif line.index( /\/ld:/ )
25
+ logger.error( line )
26
+ else
27
+ logger.verbose( line )
28
+ end
29
+ end
30
+
31
+ if rc != 0
32
+ raise MakeError, "make #{ target || "" } failed with error code #{rc}";
33
+ end
34
+ rc
35
+ end
36
+
37
+ end
38
+
39
+
40
+ end
41
+
42
+
43
+ end; end
@@ -1,5 +1,6 @@
1
1
  require 'mj/tools/subprocess'
2
2
  require 'build-tool/build-system/base'
3
+ require 'build-tool/build-system/make'
3
4
 
4
5
  module BuildTool; module BuildSystem
5
6
 
@@ -10,7 +11,6 @@ class QMake < Base
10
11
 
11
12
  include MJ::Tools::SubProcess
12
13
 
13
- class MakeError < BuildTool::Error; end
14
14
  class QMakeError < BuildTool::Error; end
15
15
 
16
16
  def initialize( *args )
@@ -56,14 +56,6 @@ def configure
56
56
  rc
57
57
  end
58
58
 
59
- def do_make( target = nil )
60
- rc = self.class.execute( "make #{target ? target : "" }", build_directory, self.module.environment.values )
61
- if rc != 0
62
- raise MakeError, "make #{target || "" } failed with error code #{rc}";
63
- end
64
- rc
65
- end
66
-
67
59
  def install( fast )
68
60
  make( "install" )
69
61
  end
@@ -73,7 +65,7 @@ def install_fast_supported?
73
65
  end
74
66
 
75
67
  def make( target = nil )
76
- do_make( target )
68
+ Make.make( "#{target ? target : "" }", build_directory, self.module.environment.values )
77
69
  end
78
70
 
79
71
  def option_string
@@ -1,3 +1,5 @@
1
+ require 'build-tool/build-system/make'
2
+
1
3
  module BuildTool; module BuildSystem
2
4
 
3
5
 
@@ -8,7 +10,6 @@ class Qt < Base
8
10
 
9
11
  include MJ::Tools::SubProcess
10
12
 
11
- class MakeError < BuildTool::Error; end
12
13
  class QMakeError < BuildTool::Error; end
13
14
 
14
15
  def intitialize( *args )
@@ -57,14 +58,6 @@ def configure
57
58
  rc
58
59
  end
59
60
 
60
- def do_make( target = nil )
61
- rc = self.class.execute( "make #{target ? target : "" }", build_directory, self.module.environment.values )
62
- if rc != 0
63
- raise MakeError, "make #{target || "" } failed with error code #{rc}";
64
- end
65
- rc
66
- end
67
-
68
61
  def install( fast )
69
62
  make( "install" )
70
63
  end
@@ -74,7 +67,7 @@ def install_fast_supported?
74
67
  end
75
68
 
76
69
  def make( target = nil )
77
- do_make( target )
70
+ Make.make( "#{target ? target : "" }", build_directory, self.module.environment.values )
78
71
  end
79
72
 
80
73
  # Configure the module
@@ -4,60 +4,6 @@
4
4
 
5
5
  module BuildTool
6
6
 
7
- class Progressbar < Logging::Appender
8
-
9
- def initialize( title, &block )
10
- super( 'Progressbar', :level => :DEBUG )
11
- @pbar = nil
12
- @oldlogger = nil
13
- if Logging.appenders['stdout'].level >= ::Logging::level_num(:INFO)
14
- # We only do the progressbar thing if there is no verbose output active.
15
- begin
16
- # Remove the old stdout logger.
17
- @oldlogger = Logging.appenders[ 'stdout' ]
18
- Logging.logger[ 'root' ].remove_appenders( 'stdout' )
19
- Logging.logger[ 'root' ].add_appenders( self )
20
- # Add the progressbar logger
21
- @pbar = ANSI::Progressbar.new( title, 100 )
22
- yield
23
- ensure
24
- @pbar.finish
25
- # Reset the logger
26
- Logging.logger[ 'root' ].remove_appenders( 'Progressbar' )
27
- Logging.logger[ 'root' ].add_appenders( @oldlogger )
28
- end
29
- else
30
- # If there is verbose output just print the text
31
- logger.info( title )
32
- yield
33
- end
34
-
35
- end
36
-
37
- def write( event )
38
- message = event.data
39
- return if message.empty?
40
-
41
- case event.level
42
- when ::Logging::level_num( :ERROR )
43
- when ::Logging::level_num( :WARN )
44
- # This should never happen. In case of errors an exception is thrown which should
45
- # be catched in the initialize() method above. And this logger is removed there.
46
- raise NotImplementedError
47
-
48
- else
49
- match = /^\[ *(\d+)%\]/.match( message )
50
- if match
51
- # puts match[ 1 ]
52
- @pbar.set( match[ 1 ].to_i )
53
- end
54
- end
55
- self
56
- end
57
-
58
- end # class ProgressLayout
59
-
60
-
61
7
 
62
8
  module ModuleActions
63
9
 
@@ -124,11 +70,9 @@ def while_logging( level = :trace, &block )
124
70
  yield
125
71
  rescue Interrupt => e
126
72
  state = History::ModuleLog::CANCELED_BY_USER
127
- logger.error "User Interrupt!"
128
73
  raise e
129
74
  rescue Exception => e
130
75
  state = History::ModuleLog::FINISHED_WITH_ERRORS
131
- logger.error "#{e.class}:#{e.message}"
132
76
  got_exception = true
133
77
  raise e
134
78
  ensure
@@ -160,6 +104,7 @@ def execute()
160
104
  class Clone < Base
161
105
 
162
106
  def initialize( command, mod )
107
+ logger.info "Cleaning build directory"
163
108
  super( command, 20, :fetch, mod )
164
109
  end
165
110
 
@@ -203,6 +148,19 @@ def execute()
203
148
 
204
149
  end
205
150
 
151
+ class RemoveBuildDirectory < Base
152
+
153
+ def initialize( command, mod )
154
+ super( command, 10, :clean, mod )
155
+ end
156
+
157
+ def execute()
158
+ logger.info "Removing build directory"
159
+ @module.remove_build_directory
160
+ end
161
+
162
+ end
163
+
206
164
  class Configure < Base
207
165
 
208
166
  def initialize( command, mod )
@@ -243,7 +201,7 @@ def initialize( command, mod, target = nil )
243
201
  end
244
202
 
245
203
  def execute()
246
- pb = Progressbar.new( "Make #{@target}" ) do
204
+ @module.build_system_required.progressbar( "Make #{@target}" ) do
247
205
  @module.build_system_required.make( @target )
248
206
  end
249
207
  end
@@ -258,7 +216,7 @@ def initialize( command, mod, fast = false )
258
216
  end
259
217
 
260
218
  def execute()
261
- pb = Progressbar.new( "Install #{@fast ? 'fast' : '' }" ) do
219
+ @module.build_system_required.progressbar( "Install #{@fast ? 'fast' : ''}" ) do
262
220
  @module.build_system_required.install( @fast )
263
221
  end
264
222
  end