rake-builder 0.0.18 → 0.0.19

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,51 @@
1
+ class Rake::Builder
2
+ class Version
3
+ def initialize(parameter_version = nil)
4
+ @parameter_version = parameter_version
5
+ end
6
+
7
+ def decide
8
+ acceptable_version_string = %r(^(\d+)\.(\d+)\.(\d+)$)
9
+ if @parameter_version && @parameter_version !~ acceptable_version_string
10
+ raise "The supplied version number '#{@parameter_version}' is badly formatted. It should consist of three numbers separated by ."
11
+ end
12
+ file_version = load_file_version
13
+ if file_version && file_version !~ acceptable_version_string
14
+ raise "Your VERSION file contains a version number '#{file_version}' which is badly formatted. It should consist of three numbers separated by ."
15
+ end
16
+ case
17
+ when @parameter_version.nil? && file_version.nil?
18
+ raise <<-EOT
19
+ This task requires a project version: major.minor.revision (e.g. 1.03.0567)
20
+ Please do one of the following:
21
+ - supply a version parameter: rake autoconf[project_name,version]
22
+ - create a VERSION file.
23
+ EOT
24
+ when file_version.nil?
25
+ save_file_version @parameter_version
26
+ return @parameter_version
27
+ when @parameter_version.nil?
28
+ return file_version
29
+ when file_version != @parameter_version
30
+ raise <<-EOT
31
+ The version parameter supplied is different to the value in the VERSION file
32
+ EOT
33
+ else
34
+ return file_version
35
+ end
36
+ end
37
+
38
+ private
39
+
40
+ def load_file_version
41
+ return nil unless File.exist?('VERSION')
42
+ version = File.read('VERSION')
43
+ version.strip
44
+ end
45
+
46
+ def save_file_version(version)
47
+ File.open('VERSION', 'w') { |f| f.write "#{version}\n" }
48
+ end
49
+ end
50
+ end
51
+
@@ -0,0 +1,51 @@
1
+ class Rake::Builder
2
+ class ConfigureAc
3
+ # source_file - the relative path to any one source file in the project
4
+ def initialize(project_title, version, source_file)
5
+ @project_title, @version, @source_file = project_title, version, source_file
6
+ end
7
+
8
+ def to_s
9
+ <<EOT
10
+ AC_PREREQ(2.61)
11
+ AC_INIT(#{@project_title}, #{@version})
12
+ AC_CONFIG_SRCDIR([#{@source_file}])
13
+ AC_CONFIG_HEADER([config.h])
14
+ AM_INIT_AUTOMAKE([#{@project_title}], [#{@version}])
15
+
16
+ # Checks for programs.
17
+ AC_PROG_CXX
18
+ AC_PROG_CC
19
+ AC_PROG_RANLIB
20
+
21
+ # Checks for libraries.
22
+
23
+ # Checks for header files.
24
+
25
+ # Checks for typedefs, structures, and compiler characteristics.
26
+ AC_HEADER_STDBOOL
27
+ AC_C_CONST
28
+ AC_C_INLINE
29
+ AC_STRUCT_TM
30
+
31
+ # Checks for library functions.
32
+ AC_FUNC_LSTAT
33
+ AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
34
+ AC_FUNC_MEMCMP
35
+ AC_HEADER_STDC
36
+ AC_CHECK_FUNCS([memset strcasecmp])
37
+
38
+ AC_CONFIG_FILES([Makefile])
39
+
40
+ AC_OUTPUT
41
+ EOT
42
+ end
43
+
44
+ def save
45
+ File.open('configure.ac', 'w') do |f|
46
+ f.write to_s
47
+ end
48
+ end
49
+ end
50
+ end
51
+
@@ -0,0 +1,17 @@
1
+ class Rake::Builder
2
+ class Error < StandardError
3
+ attr_accessor :namespace
4
+
5
+ def initialize(message, namespace = nil)
6
+ super(message)
7
+ @namespace = namespace
8
+ end
9
+
10
+ def to_s
11
+ message = super
12
+ message = "#{@namespace}: #{message}" if @namespace
13
+ message
14
+ end
15
+ end
16
+ end
17
+
@@ -0,0 +1,8 @@
1
+ class Rake::Builder
2
+ class Formatter < Logger::Formatter
3
+ def call(severity, time, progname, msg)
4
+ msg2str(msg) << "\n"
5
+ end
6
+ end
7
+ end
8
+
@@ -0,0 +1,75 @@
1
+ module Rake::Builder::Presenters; end
2
+
3
+ module Rake::Builder::Presenters::Makefile
4
+ class BuilderPresenter
5
+ def initialize(builder)
6
+ @builder = builder
7
+ end
8
+
9
+ def to_s
10
+ objects = @builder.object_files.collect { |f| f.sub(@builder.objects_path, '$(OBJECT_DIR)') }
11
+ objects_list = objects.join( ' ' )
12
+ case @builder.target_type
13
+ when :executable
14
+ target_name = 'EXECUTABLE_TARGET'
15
+ target_ref = "$(#{target_name})"
16
+ target_actions =
17
+ " $(LINKER) $(LINK_FLAGS) -o #{target_ref} $(OBJECTS)
18
+ "
19
+ when :static_library
20
+ target_name = 'LIB_TARGET'
21
+ target_ref = "$(#{target_name})"
22
+ target_actions =
23
+ " rm -f #{target_ref}
24
+ ar -cq #{target_ref} $(OBJECTS)
25
+ ranlib #{target_ref}
26
+ "
27
+ when :shared_library
28
+ target_name = 'LIB_TARGET'
29
+ target_ref = "$(#{target_name})"
30
+ target_actions =
31
+ " $(LINKER) -shared -o #{target_ref} $(OBJECTS) $(LINK_FLAGS)
32
+ "
33
+ end
34
+
35
+ variables = <<EOT
36
+ COMPILER = #{@builder.compiler}
37
+ COMPILER_FLAGS = #{@builder.compiler_flags}
38
+ LINKER = #{@builder.linker}
39
+ LINK_FLAGS = #{@builder.link_flags}
40
+ OBJECT_DIR = #{@builder.objects_path}
41
+ OBJECTS = #{objects_list}
42
+ #{ target_name } = #{@builder.target}
43
+ EOT
44
+ rules = <<EOT
45
+
46
+ all: #{target_ref}
47
+
48
+ clean:
49
+ rm -f $(OBJECTS)
50
+ rm -f #{target_ref}
51
+
52
+ #{target_ref}: $(OBJECTS)
53
+ #{target_actions}
54
+ EOT
55
+
56
+ source_groups = group_files_by_path(@builder.source_files)
57
+ source_groups.each.with_index do | gp, i |
58
+ variables << "SOURCE_#{i + 1} = #{gp[0]}\n"
59
+ rules << <<EOT
60
+
61
+ $(OBJECT_DIR)/%.o: $(SOURCE_#{i + 1})/%.cpp
62
+ $(COMPILER) -c $(COMPILER_FLAGS) -o $@ $<
63
+ EOT
64
+ end
65
+ variables + rules
66
+ end
67
+
68
+ def save
69
+ File.open(@builder.makefile_name, 'w') do |file|
70
+ file.write to_s
71
+ end
72
+ end
73
+ end
74
+ end
75
+
@@ -10,6 +10,12 @@ module Rake; class Builder; module Presenters; module MakefileAm
10
10
  programs_list + program_sections + libraries_list + library_sections
11
11
  end
12
12
 
13
+ def save
14
+ File.open('Makefile.am', 'w') do |f|
15
+ f.write to_s
16
+ end
17
+ end
18
+
13
19
  private
14
20
 
15
21
  def programs
@@ -34,7 +34,7 @@ module Rake
34
34
  @framework_paths = [ '/Library/Frameworks' ]
35
35
  @moc_defines = [ '-D__APPLE__', '-D__GNUC__' ]
36
36
  else
37
- raise BuilderError.new( "Unrecognised platform" )
37
+ raise Error.new( "Unrecognised platform" )
38
38
  end
39
39
  @compilation_defines = [ '-DQT_GUI_LIB', '-DQT_CORE_LIB', '-DQT_SHARED' ]
40
40
  @resource_files = []
@@ -42,8 +42,8 @@ module Rake
42
42
  end
43
43
 
44
44
  def configure
45
- raise BuilderError.new( 'programming_language must be C++' ) if @programming_language.downcase != 'c++'
46
- raise BuilderError.new( 'qt_version must be set' ) if ! @qt_version
45
+ raise Error.new( 'programming_language must be C++' ) if @programming_language.downcase != 'c++'
46
+ raise Error.new( 'qt_version must be set' ) if ! @qt_version
47
47
 
48
48
  super
49
49
 
@@ -0,0 +1,150 @@
1
+ require 'rake/file_task_alias'
2
+ require 'rake/local_config'
3
+
4
+ include Rake::DSL
5
+
6
+ class Rake::Builder
7
+ class TaskDefiner
8
+ def initialize(builder)
9
+ @builder = builder
10
+ end
11
+
12
+ def run
13
+ if @builder.task_namespace
14
+ namespace @builder.task_namespace do
15
+ define
16
+ end
17
+ else
18
+ define
19
+ end
20
+ define_default
21
+ end
22
+
23
+ private
24
+
25
+ def define
26
+ once_task :environment do
27
+ @builder.logger.level = Logger::DEBUG if ENV['DEBUG']
28
+ end
29
+
30
+ if @builder.target_type == :executable
31
+ desc "Run '#{@builder.target_basename}'"
32
+ task :run => :build do
33
+ @builder.run
34
+ end
35
+ end
36
+
37
+ desc "Compile and build '#{@builder.target_basename}'"
38
+ Rake::FileTaskAlias.define_task(:build, @builder.target)
39
+
40
+ desc "Build '#{@builder.target_basename}'"
41
+ microsecond_file @builder.target => [
42
+ scoped_task(:environment),
43
+ scoped_task(:compile),
44
+ *@builder.target_prerequisites
45
+ ] do
46
+ @builder.build
47
+ end
48
+
49
+ desc "Compile all sources"
50
+ # Only import dependencies when we're compiling
51
+ # otherwise makedepend gets run on e.g. 'rake -T'
52
+ once_task :compile => [
53
+ scoped_task(:environment),
54
+ @builder.makedepend_file,
55
+ scoped_task(:load_makedepend),
56
+ *@builder.object_files
57
+ ]
58
+
59
+ @builder.source_files.each do |src|
60
+ define_compile_task(src)
61
+ end
62
+
63
+ # TODO: Does this need to be microsecond?
64
+ microsecond_directory @builder.objects_path
65
+
66
+ file scoped_task(@builder.local_config) do
67
+ @builder.create_local_config
68
+ end
69
+
70
+ microsecond_file @builder.makedepend_file => [
71
+ scoped_task(:load_local_config),
72
+ scoped_task(:missing_headers),
73
+ @builder.objects_path,
74
+ *@builder.project_files
75
+ ] do
76
+ @builder.create_makedepend_file
77
+ end
78
+
79
+ once_task scoped_task(:load_local_config) => scoped_task(@builder.local_config) do
80
+ @builder.load_local_config
81
+ end
82
+
83
+ once_task scoped_task(:missing_headers) => [*@builder.generated_headers] do
84
+ @builder.missing_headers
85
+ end
86
+
87
+ # Reimplemented mkdepend file loading to make objects depend on
88
+ # sources with the correct paths:
89
+ # the standard rake mkdepend loader doesn't do what we want,
90
+ # as it assumes files will be compiled in their own directory.
91
+ task :load_makedepend => @builder.makedepend_file do
92
+ @builder.load_makedepend
93
+ end
94
+
95
+ desc "List generated files (which are removed with 'rake #{scoped_task(:clean)}')"
96
+ task :generated_files do
97
+ puts @builder.generated_files.to_json
98
+ end
99
+
100
+ # Re-implement :clean locally for project and within namespace
101
+ # Standard :clean is a singleton
102
+ desc "Remove temporary files"
103
+ task :clean do
104
+ @builder.clean
105
+ end
106
+
107
+ desc "Install '#{@builder.target_basename}' in '#{@builder.install_path}'"
108
+ task :install, [] => [scoped_task(:build)] do
109
+ @builder.install
110
+ end
111
+
112
+ desc "Uninstall '#{@builder.target_basename}' from '#{@builder.install_path}'"
113
+ task :uninstall, [] => [] do
114
+ @builder.uninstall
115
+ end
116
+
117
+ desc "Create a '#{@builder.makefile_name}' to build the project"
118
+ file "#{@builder.makefile_name}" => [@builder.makedepend_file, scoped_task(:load_makedepend)] do
119
+ Rake::Builder::Presenters::Makefile::BuilderPresenter.new(@builder).save
120
+ end
121
+ end
122
+
123
+ def define_default
124
+ name = scoped_task(@builder.default_task)
125
+ desc "Equivalent to 'rake #{name}'"
126
+ if @builder.task_namespace
127
+ task @builder.task_namespace => [name]
128
+ else
129
+ task :default => [name]
130
+ end
131
+ end
132
+
133
+ def define_compile_task(source)
134
+ object = @builder.object_path(source)
135
+ @builder.generated_files << object
136
+ file object => [ source ] do |t|
137
+ @builder.compile(source, object)
138
+ end
139
+ end
140
+
141
+ def scoped_task(task)
142
+ if @builder.task_namespace
143
+ "#{@builder.task_namespace}:#{task}"
144
+ else
145
+ task
146
+ end
147
+ end
148
+ end
149
+ end
150
+
@@ -6,7 +6,7 @@ module Rake
6
6
  module VERSION #:nodoc:
7
7
  MAJOR = 0
8
8
  MINOR = 0
9
- TINY = 18
9
+ TINY = 19
10
10
 
11
11
  STRING = [ MAJOR, MINOR, TINY ].join('.')
12
12
  end
data/lib/rake/builder.rb CHANGED
@@ -3,11 +3,15 @@ require 'logger'
3
3
  require 'rake'
4
4
  require 'rake/tasklib'
5
5
 
6
+ require 'rake/builder/autoconf/version'
7
+ require 'rake/builder/configure_ac'
8
+ require 'rake/builder/error'
9
+ require 'rake/builder/logger/formatter'
10
+ require 'rake/builder/presenters/makefile/builder_presenter'
6
11
  require 'rake/builder/presenters/makefile_am/builder_presenter'
7
12
  require 'rake/builder/presenters/makefile_am/builder_collection_presenter'
13
+ require 'rake/builder/task_definer'
8
14
  require 'rake/path'
9
- require 'rake/local_config'
10
- require 'rake/file_task_alias'
11
15
  require 'rake/microsecond'
12
16
  require 'rake/once_task'
13
17
  require 'compiler'
@@ -15,33 +19,9 @@ require 'compiler'
15
19
  include Rake::DSL
16
20
 
17
21
  module Rake
18
-
19
- class Formatter < Logger::Formatter
20
- def call(severity, time, progname, msg)
21
- msg2str(msg) << "\n"
22
- end
23
- end
24
-
25
- class Builder < TaskLib
26
-
27
- class BuilderError < StandardError
28
- attr_accessor :namespace
29
-
30
- def initialize( message, namespace = nil )
31
- super( message )
32
- @namespace = namespace
33
- end
34
-
35
- def to_s
36
- message = super
37
- message = "#{ @namespace }: #{ message }" if @namespace
38
- message
39
- end
40
- end
41
-
22
+ class Builder
42
23
  # Error indicating that the project failed to build.
43
- class BuildFailure < BuilderError
44
- end
24
+ class BuildFailure < Error; end
45
25
 
46
26
  # The file to be built
47
27
  attr_accessor :target
@@ -57,6 +37,8 @@ module Rake
57
37
  # processor type: 'i386', 'x86_64', 'ppc' or 'ppc64'.
58
38
  attr_accessor :architecture
59
39
 
40
+ attr_accessor :compiler_data
41
+
60
42
  # The programming language: 'c++', 'c' or 'objective-c' (default 'c++')
61
43
  # This also sets defaults for source_file_extension
62
44
  attr_accessor :programming_language
@@ -182,122 +164,125 @@ module Rake
182
164
  @instances
183
165
  end
184
166
 
185
- def self.define_global
186
- desc "Create input files for configure script creation"
187
- task :autoconf, [:project_title, :version] => [] do | task, args |
188
- project_title = args.project_title or raise "Please supply a project_title parameter"
189
- version = decide_version( args.version )
190
- if File.exist?('configure.ac')
191
- raise "The file 'configure.ac' already exists"
192
- end
193
- if File.exist?('Makefile.am')
194
- raise "The file 'Makefile.am' already exists"
195
- end
196
- create_configure_ac project_title, version
197
- create_makefile_am
167
+ def self.create_autoconf(project_title, version, source_file)
168
+ raise "Please supply a project_title parameter" if project_title.nil?
169
+ version = Rake::Builder::Version.new(version).decide
170
+ if File.exist?('configure.ac')
171
+ raise "The file 'configure.ac' already exists"
198
172
  end
173
+ if File.exist?('Makefile.am')
174
+ raise "The file 'Makefile.am' already exists"
175
+ end
176
+ ConfigureAc.new(project_title, version, source_file).save
177
+ Presenters::MakefileAm::BuilderCollectionPresenter.new(instances).save
178
+ end
179
+
180
+ desc "Create input files for configure script creation"
181
+ task :autoconf, [:project_title, :version] => [] do |task, args|
182
+ source = Rake::Path.relative_path(instances[0].source_files[0], instances[0].rakefile_path)
183
+ create_autoconf(args.project_title, args.version, source)
199
184
  end
200
185
 
201
- def self.create_configure_ac( project_title, version )
202
- source = Rake::Path.relative_path( instances[ 0 ].source_files[ 0 ], instances[ 0 ].rakefile_path )
203
- File.open('configure.ac', 'w') do | f |
204
- f.write <<EOT
205
- AC_PREREQ(2.61)
206
- AC_INIT(#{project_title}, #{ version })
207
- AC_CONFIG_SRCDIR([#{ source }])
208
- AC_CONFIG_HEADER([config.h])
209
- AM_INIT_AUTOMAKE([#{project_title}], [#{ version }])
210
-
211
- # Checks for programs.
212
- AC_PROG_CXX
213
- AC_PROG_CC
214
- AC_PROG_RANLIB
186
+ def initialize( &block )
187
+ save_rakefile_info( block )
188
+ set_defaults
189
+ block.call( self )
190
+ configure
191
+ TaskDefiner.new(self).run
192
+ self.class.instances << self
193
+ end
215
194
 
216
- # Checks for libraries.
195
+ def run
196
+ command = "cd #{rakefile_path} && #{target}"
197
+ puts shell(command, Logger::INFO)
198
+ end
217
199
 
218
- # Checks for header files.
200
+ def build
201
+ system "rm -f #{target}"
202
+ build_commands.each do |command|
203
+ stdout, stderr = shell(command)
204
+ raise BuildFailure.new("Error: command '#{command}' failed: #{stderr} #{stdout}") if not $?.success?
205
+ end
206
+ raise BuildFailure.new("'#{target}' not created") if not File.exist?(target)
207
+ end
219
208
 
220
- # Checks for typedefs, structures, and compiler characteristics.
221
- AC_HEADER_STDBOOL
222
- AC_C_CONST
223
- AC_C_INLINE
224
- AC_STRUCT_TM
209
+ def create_local_config
210
+ logger.add(Logger::DEBUG, "Creating file '#{local_config }'")
211
+ added_includes = compiler_data.include_paths(missing_headers)
212
+ config = Rake::LocalConfig.new(local_config)
213
+ config.include_paths = added_includes
214
+ config.save
215
+ end
225
216
 
226
- # Checks for library functions.
227
- AC_FUNC_LSTAT
228
- AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
229
- AC_FUNC_MEMCMP
230
- AC_HEADER_STDC
231
- AC_CHECK_FUNCS([memset strcasecmp])
217
+ def create_makedepend_file
218
+ system('which makedepend >/dev/null')
219
+ raise 'makedepend not found' unless $?.success?
220
+ logger.add(Logger::DEBUG, "Analysing dependencies")
221
+ command = "makedepend -f- -- #{include_path} -- #{file_list(source_files)} 2>/dev/null > #{makedepend_file}"
222
+ shell command
223
+ end
232
224
 
233
- AC_CONFIG_FILES([Makefile])
225
+ def load_local_config
226
+ config = Rake::LocalConfig.new(local_config)
227
+ config.load
228
+ @include_paths += Rake::Path.expand_all_with_root(config.include_paths, rakefile_path)
229
+ @compilation_options += config.compilation_options
230
+ end
234
231
 
235
- AC_OUTPUT
236
- EOT
232
+ def load_makedepend
233
+ object_to_source = source_files.inject({}) do |memo, source|
234
+ mapped_object = source.gsub('.' + source_file_extension, '.o')
235
+ memo[mapped_object] = source
236
+ memo
237
+ end
238
+ File.open(makedepend_file).each_line do |line|
239
+ next if line !~ /:\s/
240
+ mapped_object_file = $`
241
+ header_files = $'.chomp
242
+ # TODO: Why does it work,
243
+ # if I make the object (not the source) depend on the header?
244
+ source_file = object_to_source[mapped_object_file]
245
+ object_file = object_path(source_file)
246
+ object_file_task = Rake.application[object_file]
247
+ object_file_task.enhance(header_files.split(' '))
237
248
  end
238
249
  end
239
250
 
240
- def self.create_makefile_am
241
- presenter = Rake::Builder::Presenters::MakefileAm::BuilderCollectionPresenter.new(instances)
242
- File.open('Makefile.am', 'w') do |f|
243
- f.write presenter.to_s
251
+ def clean
252
+ generated_files.each do |file|
253
+ system "rm -f #{file}"
244
254
  end
245
255
  end
246
256
 
247
- #########################################
248
- # VERSION file
257
+ def install
258
+ destination = File.join(install_path, target_basename)
259
+ install_file(target, destination)
260
+ install_headers if target_type == :static_library
261
+ end
249
262
 
250
- def self.decide_version( parameter_version )
251
- acceptable_version_string = %r(^(\d+)\.(\d+)\.(\d+)$)
252
- if parameter_version && parameter_version !~ acceptable_version_string
253
- raise "The supplied version number '#{parameter_version}' is badly formatted. It should consist of three numbers separated by ."
263
+ def uninstall
264
+ destination = File.join(install_path, target_basename)
265
+ if not File.exist?(destination)
266
+ logger.add(Logger::INFO, "The file '#{destination}' does not exist")
267
+ return
254
268
  end
255
- file_version = load_file_version
256
- if file_version && file_version !~ acceptable_version_string
257
- raise "Your VERSION file contains a version number '#{file_version}' which is badly formatted. It should consist of three numbers separated by ."
258
- end
259
- case
260
- when parameter_version.nil? && file_version.nil?
261
- raise <<-EOT
262
- This task requires a project version: major.minor.revision (e.g. 1.03.0567)
263
- Please do one of the following:
264
- - supply a version parameter: rake autoconf[project_name,version]
265
- - create a VERSION file.
266
- EOT
267
- when file_version.nil?
268
- save_file_version parameter_version
269
- return parameter_version
270
- when parameter_version.nil?
271
- return file_version
272
- when file_version != parameter_version
273
- raise <<-EOT
274
- The version parameter supplied is different to the value in the VERSION file
275
- EOT
276
- else
277
- return file_version
269
+ begin
270
+ shell "rm '#{destination}'", Logger::INFO
271
+ rescue Errno::EACCES => e
272
+ raise Error.new("You do not have permission to uninstall '#{destination}'\nTry re-running the command with 'sudo'", task_namespace)
278
273
  end
279
274
  end
280
275
 
281
- def self.load_file_version
282
- return nil unless File.exist?('VERSION')
283
- version = File.read('VERSION')
284
- version.strip
285
- end
286
-
287
- def self.save_file_version( version )
288
- File.open('VERSION', 'w') { |f| f.write "#{version}\n" }
276
+ def compile(source, object)
277
+ logger.add(Logger::DEBUG, "Compiling '#{source}'")
278
+ command = "#{compiler} -c #{compiler_flags} -o #{object} #{source}"
279
+ stdout, stderr = shell(command)
280
+ raise BuildFailure.new("Error: command '#{command}' failed: #{stderr} #{stdout}") if not $?.success?
289
281
  end
290
-
291
- self.define_global
292
282
 
293
- def initialize( &block )
294
- save_rakefile_info( block )
295
- initialize_attributes
296
- block.call( self )
297
- configure
298
- define_tasks
299
- define_default
300
- self.class.instances << self
283
+ # TODO: make private
284
+ def file_list( files, delimiter = ' ' )
285
+ files.join( delimiter )
301
286
  end
302
287
 
303
288
  # Source files found in source_search_paths
@@ -328,9 +313,18 @@ EOT
328
313
  source_files.map{ |file| Rake::Path.relative_path(file, rakefile_path) }
329
314
  end
330
315
 
316
+ def object_files
317
+ source_files.map { |file| object_path(file) }
318
+ end
319
+
320
+ def object_path(source_path_name)
321
+ o_name = File.basename(source_path_name).gsub('.' + source_file_extension, '.o')
322
+ Rake::Path.expand_with_root(o_name, objects_path)
323
+ end
324
+
331
325
  def compiler_flags
332
326
  flags = include_path
333
- options = compilation_options.join( ' ' )
327
+ options = compilation_options.join(' ')
334
328
  flags << ' ' + options if options != ''
335
329
  flags << ' ' + architecture_option if RUBY_PLATFORM =~ /darwin/i
336
330
  flags
@@ -340,12 +334,42 @@ EOT
340
334
  @library_dependencies.map { |lib| "-l#{ lib }"}.join('')
341
335
  end
342
336
 
337
+ def target_basename
338
+ File.basename(@target)
339
+ end
340
+
341
+ def makefile_name
342
+ extension = if ! task_namespace.nil? && ! task_namespace.to_s.empty?
343
+ '.' + task_namespace.to_s
344
+ else
345
+ ''
346
+ end
347
+ "Makefile#{ extension }"
348
+ end
349
+
350
+ def project_files
351
+ source_files + header_files
352
+ end
353
+
354
+ def generated_headers
355
+ []
356
+ end
357
+
358
+ # Discovery
359
+
360
+ def missing_headers
361
+ return @missing_headers if @missing_headers
362
+ default_includes = @compiler_data.default_include_paths( @programming_language )
363
+ all_includes = default_includes + @include_paths
364
+ @missing_headers = @compiler_data.missing_headers( all_includes, source_files )
365
+ end
366
+
343
367
  private
344
368
 
345
- def initialize_attributes
369
+ def set_defaults
346
370
  @architecture = 'i386'
347
- @compiler_data = Compiler::Base.for( :gcc )
348
- @logger = Logger.new( STDOUT )
371
+ @compiler_data = Compiler::Base.for(:gcc)
372
+ @logger = Logger.new(STDOUT)
349
373
  @logger.level = Logger::UNKNOWN
350
374
  @logger.formatter = Formatter.new
351
375
  @programming_language = 'c++'
@@ -354,8 +378,8 @@ EOT
354
378
  @library_paths = []
355
379
  @library_dependencies = []
356
380
  @target_prerequisites = []
357
- @source_search_paths = [ @rakefile_path.dup ]
358
- @header_search_paths = [ @rakefile_path.dup ]
381
+ @source_search_paths = [@rakefile_path.dup]
382
+ @header_search_paths = [@rakefile_path.dup]
359
383
  @target = 'a.out'
360
384
  @generated_files = []
361
385
  @compilation_options = []
@@ -363,11 +387,11 @@ EOT
363
387
  end
364
388
 
365
389
  def configure
366
- @compilation_options += [ architecture_option ] if RUBY_PLATFORM =~ /apple/i
390
+ @compilation_options += [architecture_option] if RUBY_PLATFORM =~ /apple/i
367
391
  @compilation_options.uniq!
368
392
 
369
393
  @programming_language = @programming_language.to_s.downcase
370
- raise BuilderError.new( "Don't know how to build '#{ @programming_language }' programs", task_namespace ) if KNOWN_LANGUAGES[ @programming_language ].nil?
394
+ raise Error.new( "Don't know how to build '#{ @programming_language }' programs", task_namespace ) if KNOWN_LANGUAGES[ @programming_language ].nil?
371
395
  @compiler ||= KNOWN_LANGUAGES[ @programming_language ][ :compiler ]
372
396
  @linker ||= KNOWN_LANGUAGES[ @programming_language ][ :linker ]
373
397
  @ar ||= KNOWN_LANGUAGES[ @programming_language ][ :ar ]
@@ -378,12 +402,14 @@ EOT
378
402
  @header_search_paths = Rake::Path.expand_all_with_root( @header_search_paths, @rakefile_path )
379
403
  @library_paths = Rake::Path.expand_all_with_root( @library_paths, @rakefile_path )
380
404
 
381
- raise BuilderError.new( "The target name cannot be nil", task_namespace ) if @target.nil?
382
- raise BuilderError.new( "The target name cannot be an empty string", task_namespace ) if @target == ''
405
+ raise Error.new( "The target name cannot be nil", task_namespace ) if @target.nil?
406
+ raise Error.new( "The target name cannot be an empty string", task_namespace ) if @target == ''
383
407
  @objects_path = Rake::Path.expand_with_root( @objects_path, @rakefile_path )
408
+
384
409
  @target = File.expand_path( @target, @rakefile_path )
385
410
  @target_type ||= to_target_type( @target )
386
- raise BuilderError.new( "Building #{ @target_type } targets is not supported", task_namespace ) if ! TARGET_TYPES.include?( @target_type )
411
+ raise Error.new( "Building #{ @target_type } targets is not supported", task_namespace ) if ! TARGET_TYPES.include?( @target_type )
412
+ @generated_files << @target
387
413
 
388
414
  @install_path ||= default_install_path( @target_type )
389
415
 
@@ -397,264 +423,9 @@ EOT
397
423
  @local_config = Rake::Path.expand_with_root( '.rake-builder', @rakefile_path )
398
424
 
399
425
  @makedepend_file = @objects_path + '/.' + target_basename + '.depend.mf'
400
-
401
- raise BuilderError.new( "No source files found", task_namespace ) if source_files.length == 0
402
- end
403
-
404
- def define_tasks
405
- if @task_namespace
406
- namespace @task_namespace do
407
- define
408
- end
409
- else
410
- define
411
- end
412
- end
413
-
414
- def define_default
415
- name = scoped_task( @default_task )
416
- desc "Equivalent to 'rake #{ name }'"
417
- if @task_namespace
418
- task @task_namespace => [ name ]
419
- else
420
- task :default => [ name ]
421
- end
422
- end
423
-
424
- def define
425
- once_task :environment do
426
- logger.level = Logger::DEBUG if ENV[ 'DEBUG' ]
427
- end
428
-
429
- if @target_type == :executable
430
- desc "Run '#{ target_basename }'"
431
- task :run => :build do
432
- command = "cd #{ @rakefile_path } && #{ @target }"
433
- puts shell( command, Logger::INFO )
434
- end
435
- end
436
-
437
- desc "Compile and build '#{ target_basename }'"
438
- FileTaskAlias.define_task( :build, @target )
439
-
440
- desc "Build '#{ target_basename }'"
441
- microsecond_file @target => [ scoped_task( :environment ),
442
- scoped_task( :compile ),
443
- *@target_prerequisites ] do | t |
444
- shell "rm -f #{ t.name }"
445
- build_commands.each do | command |
446
- stdout, stderr = shell(command)
447
- raise BuildFailure.new("Error: command '#{command}' failed: #{stderr} #{stdout}") if not $?.success?
448
- end
449
- raise BuildFailure.new("'#{@target}' not created") if not File.exist?(@target)
450
- end
451
-
452
- desc "Compile all sources"
453
- # Only import dependencies when we're compiling
454
- # otherwise makedepend gets run on e.g. 'rake -T'
455
- once_task :compile => [ scoped_task( :environment ),
456
- @makedepend_file,
457
- scoped_task( :load_makedepend ),
458
- *object_files ]
459
-
460
- source_files.each do |src|
461
- define_compile_task( src )
462
- end
463
-
464
- microsecond_directory @objects_path
465
-
466
- file scoped_task( local_config ) do
467
- @logger.add( Logger::DEBUG, "Creating file '#{ local_config }'" )
468
- added_includes = @compiler_data.include_paths( missing_headers )
469
- config = Rake::LocalConfig.new( local_config )
470
- config.include_paths = added_includes
471
- config.save
472
- end
473
-
474
- microsecond_file @makedepend_file => [
475
- scoped_task( :load_local_config ),
476
- scoped_task( :missing_headers ),
477
- @objects_path,
478
- *project_files
479
- ] do
480
- system('which makedepend >/dev/null')
481
- raise 'makedepend not found' unless $?.success?
482
- @logger.add( Logger::DEBUG, "Analysing dependencies" )
483
- command = "makedepend -f- -- #{ include_path } -- #{ file_list( source_files ) } 2>/dev/null > #{ @makedepend_file }"
484
- shell command
485
- end
486
-
487
- once_task scoped_task( :load_local_config ) => scoped_task( local_config ) do
488
- config = LocalConfig.new( local_config )
489
- config.load
490
- @include_paths += Rake::Path.expand_all_with_root( config.include_paths, @rakefile_path )
491
- @compilation_options += config.compilation_options
492
- end
493
-
494
- once_task scoped_task( :missing_headers ) => [ *generated_headers ] do
495
- missing_headers
496
- end
497
-
498
- # Reimplemented mkdepend file loading to make objects depend on
499
- # sources with the correct paths:
500
- # the standard rake mkdepend loader doesn't do what we want,
501
- # as it assumes files will be compiled in their own directory.
502
- task :load_makedepend => @makedepend_file do
503
- object_to_source = source_files.inject( {} ) do | memo, source |
504
- mapped_object = source.gsub( '.' + @source_file_extension, '.o' )
505
- memo[ mapped_object ] = source
506
- memo
507
- end
508
- File.open( @makedepend_file ).each_line do |line|
509
- next if line !~ /:\s/
510
- mapped_object_file = $`
511
- header_files = $'.chomp
512
- # TODO: Why does it work,
513
- # if I make the object (not the source) depend on the header?
514
- source_file = object_to_source[ mapped_object_file ]
515
- object_file = object_path( source_file )
516
- object_file_task = Rake.application[ object_file ]
517
- object_file_task.enhance(header_files.split(' '))
518
- end
519
- end
520
-
521
- desc "List generated files (which are removed with 'rake #{ scoped_task( :clean ) }')"
522
- task :generated_files do
523
- puts generated_files.to_json
524
- end
525
-
526
- # Re-implement :clean locally for project and within namespace
527
- # Standard :clean is a singleton
528
- desc "Remove temporary files"
529
- task :clean do
530
- generated_files.each do |file|
531
- shell "rm -f #{ file }"
532
- end
533
- end
534
-
535
- @generated_files << @target
536
426
  @generated_files << @makedepend_file
537
427
 
538
- desc "Install '#{ target_basename }' in '#{ @install_path }'"
539
- task :install, [] => [ scoped_task( :build ) ] do
540
- destination = File.join( @install_path, target_basename )
541
- install( @target, destination )
542
- install_headers if @target_type == :static_library
543
- end
544
-
545
- desc "Uninstall '#{ target_basename }' from '#{ @install_path }'"
546
- task :uninstall, [] => [] do
547
- destination = File.join( @install_path, target_basename )
548
- if ! File.exist?( destination )
549
- @logger.add( Logger::INFO, "The file '#{ destination }' does not exist" )
550
- next
551
- end
552
- begin
553
- shell "rm '#{ destination }'", Logger::INFO
554
- rescue Errno::EACCES => e
555
- raise BuilderError.new( "You do not have permission to uninstall '#{ destination }'\nTry\n $ sudo rake #{ scoped_task( :uninstall ) }", task_namespace )
556
- end
557
- end
558
-
559
- desc "Create a '#{ makefile_name }' to build the project"
560
- file "#{ makefile_name }" => [ @makedepend_file, scoped_task( :load_makedepend ) ] do | t |
561
- objects = object_files.collect { | f | f.sub( "#{ @objects_path }", '$(OBJECT_DIR)' ) }
562
- objects_list = objects.join( ' ' )
563
- case @target_type
564
- when :executable
565
- target_name = 'EXECUTABLE_TARGET'
566
- target_ref = "$(#{ target_name })"
567
- target_actions =
568
- " $(LINKER) $(LINK_FLAGS) -o #{ target_ref } $(OBJECTS)
569
- "
570
- when :static_library
571
- target_name = 'LIB_TARGET'
572
- target_ref = "$(#{ target_name })"
573
- target_actions =
574
- " rm -f #{ target_ref }
575
- ar -cq #{ target_ref } $(OBJECTS)
576
- ranlib #{ target_ref }
577
- "
578
- when :shared_library
579
- target_name = 'LIB_TARGET'
580
- target_ref = "$(#{ target_name })"
581
- target_actions =
582
- " $(LINKER) -shared -o #{ target_ref } $(OBJECTS) $(LINK_FLAGS)
583
- "
584
- end
585
-
586
- variables = <<EOT
587
- COMPILER = #{ @compiler }
588
- COMPILER_FLAGS = #{ compiler_flags }
589
- LINKER = #{ @linker }
590
- LINK_FLAGS = #{ link_flags }
591
- OBJECT_DIR = #{ @objects_path }
592
- OBJECTS = #{ objects_list }
593
- #{ target_name } = #{ @target }
594
- EOT
595
- rules = <<EOT
596
-
597
- all: #{ target_ref }
598
-
599
- clean:
600
- rm -f $(OBJECTS)
601
- rm -f #{ target_ref }
602
-
603
- #{ target_ref }: $(OBJECTS)
604
- #{ target_actions }
605
- EOT
606
-
607
- source_groups = group_files_by_path( source_files )
608
- source_groups.each.with_index do | gp, i |
609
- variables << "SOURCE_#{ i + 1 } = #{ gp[ 0 ] }\n"
610
- rules << <<EOT
611
-
612
- $(OBJECT_DIR)/%.o: $(SOURCE_#{ i + 1 })/%.cpp
613
- $(COMPILER) -c $(COMPILER_FLAGS) -o $@ $<
614
- EOT
615
- end
616
-
617
- File.open( t.name, 'w' ) do | file |
618
- file.write variables
619
- file.write rules
620
- end
621
- end
622
-
623
- end
624
-
625
- def generated_headers
626
- []
627
- end
628
-
629
- def scoped_task( task )
630
- if @task_namespace
631
- "#{ task_namespace }:#{ task }"
632
- else
633
- task
634
- end
635
- end
636
-
637
- def define_compile_task( source )
638
- object = object_path( source )
639
- @generated_files << object
640
- file object => [ source ] do |t|
641
- @logger.add( Logger::DEBUG, "Compiling '#{ source }'" )
642
- command = "#{ @compiler } -c #{ compiler_flags } -o #{ object } #{ source }"
643
- stdout, stderr = shell(command)
644
- raise BuildFailure.new("Error: command '#{command}' failed: #{stderr} #{stdout}") if not $?.success?
645
- end
646
- end
647
-
648
- def build_commands
649
- case @target_type
650
- when :executable
651
- [ "#{ @linker } -o #{ @target } #{ file_list( object_files ) } #{ link_flags }" ]
652
- when :static_library
653
- [ "#{ @ar } -cq #{ @target } #{ file_list( object_files ) }",
654
- "#{ @ranlib } #{ @target }" ]
655
- when :shared_library
656
- [ "#{ @linker } -shared -o #{ @target } #{ file_list( object_files ) } #{ link_flags }" ]
657
- end
428
+ raise Error.new( "No source files found", task_namespace ) if source_files.length == 0
658
429
  end
659
430
 
660
431
  def to_target_type(target)
@@ -668,15 +439,6 @@ EOT
668
439
  end
669
440
  end
670
441
 
671
- # Discovery
672
-
673
- def missing_headers
674
- return @missing_headers if @missing_headers
675
- default_includes = @compiler_data.default_include_paths( @programming_language )
676
- all_includes = default_includes + @include_paths
677
- @missing_headers = @compiler_data.missing_headers( all_includes, source_files )
678
- end
679
-
680
442
  # Compiling and linking parameters
681
443
 
682
444
  def include_path
@@ -707,11 +469,6 @@ EOT
707
469
  @rakefile_path = File.dirname( @rakefile )
708
470
  end
709
471
 
710
- def object_path( source_path_name )
711
- o_name = File.basename( source_path_name ).gsub( '.' + @source_file_extension, '.o' )
712
- Rake::Path.expand_with_root( o_name, @objects_path )
713
- end
714
-
715
472
  def default_install_path( target_type )
716
473
  case target_type
717
474
  when :executable
@@ -730,39 +487,12 @@ EOT
730
487
 
731
488
  # Files
732
489
 
733
- def target_basename
734
- File.basename( @target )
735
- end
736
-
737
- def makefile_name
738
- extension = if ! task_namespace.nil? && ! task_namespace.to_s.empty?
739
- '.' + task_namespace.to_s
740
- else
741
- ''
742
- end
743
- "Makefile#{ extension }"
744
- end
745
-
746
490
  # Lists of files
747
491
 
748
492
  def find_files( paths, extension )
749
493
  files = Rake::Path.find_files( paths, extension )
750
494
  Rake::Path.expand_all_with_root( files, @rakefile_path )
751
495
  end
752
-
753
- # TODO: make this return a FileList, not a plain Array
754
- def object_files
755
- source_files.map { |file| object_path( file ) }
756
- end
757
-
758
- def project_files
759
- source_files + header_files
760
- end
761
- public :project_files
762
-
763
- def file_list( files, delimiter = ' ' )
764
- files.join( delimiter )
765
- end
766
496
 
767
497
  def library_paths_list
768
498
  @library_paths.map { | path | "-L#{ path }" }.join( " " )
@@ -777,9 +507,9 @@ EOT
777
507
  begin
778
508
  `mkdir -p '#{ destination_path }'`
779
509
  rescue Errno::EACCES => e
780
- raise BuilderError.new( "Permission denied to created directory '#{ destination_path }'", task_namespace )
510
+ raise Error.new( "Permission denied to created directory '#{ destination_path }'", task_namespace )
781
511
  end
782
- install( installable_header[ :source_file ], destination_path )
512
+ install_file( installable_header[ :source_file ], destination_path )
783
513
  end
784
514
  end
785
515
 
@@ -811,12 +541,26 @@ EOT
811
541
  end
812
542
  end
813
543
 
814
- def install( source_pathname, destination_path )
544
+ def build_commands
545
+ case target_type
546
+ when :executable
547
+ [ "#{ linker } -o #{ target } #{ file_list( object_files ) } #{ link_flags }" ]
548
+ when :static_library
549
+ [ "#{ ar } -cq #{ target } #{ file_list( object_files ) }",
550
+ "#{ ranlib } #{ target }" ]
551
+ when :shared_library
552
+ [ "#{ linker } -shared -o #{ target } #{ file_list( object_files ) } #{ link_flags }" ]
553
+ else
554
+ # TODO: raise an error
555
+ end
556
+ end
557
+
558
+ def install_file(source_pathname, destination_path)
815
559
  begin
816
560
  shell "cp '#{ source_pathname }' '#{ destination_path }'", Logger::INFO
817
561
  rescue Errno::EACCES => e
818
562
  source_filename = File.basename( source_pathname ) rescue '????'
819
- raise BuilderError.new( "You do not have permission to install '#{ source_filename }' to '#{ destination_path }'\nTry\n $ sudo rake install", task_namespace )
563
+ raise Error.new( "You do not have permission to install '#{ source_filename }' to '#{ destination_path }'\nTry\n $ sudo rake install", task_namespace )
820
564
  end
821
565
  end
822
566
 
@@ -829,8 +573,6 @@ EOT
829
573
  $stdout, $stderr = *originals
830
574
  [stdout.read, stderr.read]
831
575
  end
832
-
833
576
  end
834
-
835
577
  end
836
578
 
@@ -22,7 +22,7 @@ module Rake
22
22
  @include_paths = config[:include_paths]
23
23
  @compilation_options = config[:compilation_options]
24
24
  if not VERSIONS.find_index(version)
25
- raise Rake::Builder::BuilderError.new('Config file version incorrect')
25
+ raise Rake::Builder::Error.new('Config file version incorrect')
26
26
  end
27
27
  end
28
28
 
@@ -5,9 +5,6 @@ describe 'autoconf' do
5
5
  include RakeBuilderHelper
6
6
 
7
7
  before :each do
8
- Rake::Task.clear
9
- Rake::Builder.define_global
10
-
11
8
  @project = cpp_task(:executable)
12
9
 
13
10
  @args = Rake::TaskArguments.new(
@@ -160,11 +157,10 @@ describe 'autoconf' do
160
157
 
161
158
  context 'Makefile.am' do
162
159
  it 'is created' do
163
- Rake::Builder.should_receive(:create_makefile_am)
160
+ Rake::Builder.should_receive(:create_autoconf)
164
161
 
165
162
  Rake::Task['autoconf'].execute(@args)
166
163
  end
167
164
  end
168
-
169
165
  end
170
166
 
@@ -36,7 +36,7 @@ describe 'local config files' do
36
36
  lambda do
37
37
  config = Rake::LocalConfig.new( @local_config_file )
38
38
  config.load
39
- end.should raise_error( Rake::Builder::BuilderError, 'Config file version incorrect' )
39
+ end.should raise_error(Rake::Builder::Error, 'Config file version incorrect')
40
40
  end
41
41
 
42
42
  context 'dependencies' do
data/spec/target_spec.rb CHANGED
@@ -16,7 +16,7 @@ describe 'when creating tasks' do
16
16
  builder.target = ''
17
17
  builder.source_search_paths = [ 'cpp_project' ]
18
18
  end
19
- end.should raise_error( Rake::Builder::BuilderError, 'The target name cannot be an empty string' )
19
+ end.should raise_error(Rake::Builder::Error, 'The target name cannot be an empty string')
20
20
  end
21
21
 
22
22
  it 'raises an error when the target is set to nil' do
@@ -25,7 +25,7 @@ describe 'when creating tasks' do
25
25
  builder.target = nil
26
26
  builder.source_search_paths = [ 'cpp_project' ]
27
27
  end
28
- end.should raise_error( Rake::Builder::BuilderError, 'The target name cannot be nil' )
28
+ end.should raise_error(Rake::Builder::Error, 'The target name cannot be nil')
29
29
  end
30
30
 
31
31
  it 'sets the target to \'a.out\' if it is not set' do
@@ -1,28 +1,51 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Rake::Builder do
4
- context '.create_makefile_am' do
5
- let(:presenter) { stub('Rake::Builder::Presenters::MakefileAm::BuilderCollectionPresenter', :to_s => 'contents') }
4
+ context '.create_autoconf' do
5
+ let(:version) { stub('Rake::Builder::Autoconf::Version', :decide => 'qux') }
6
+ let(:presenter) { stub('Rake::Builder::Presenters::MakefileAm::BuilderCollectionPresenter', :save => nil) }
7
+ let(:configure_ac) { stub('Rake::Builder::ConfigureAc', :save => nil) }
6
8
 
7
9
  before do
10
+ Rake::Builder::Version.stub(:new).and_return(version)
11
+ File.stub(:exist?).with('configure.ac').and_return(false)
12
+ File.stub(:exist?).with('Makefile.am').and_return(false)
13
+ Rake::Builder::ConfigureAc.stub(:new => configure_ac)
8
14
  Rake::Builder::Presenters::MakefileAm::BuilderCollectionPresenter.stub(:new).and_return(presenter)
9
- File.stub(:open).with('Makefile.am', 'w')
10
15
  end
11
16
 
12
- it 'uses the presenter' do
13
- Rake::Builder::Presenters::MakefileAm::BuilderCollectionPresenter.should_receive(:new).and_return(presenter)
17
+ it 'fails if project_title is nil' do
18
+ expect {
19
+ Rake::Builder.create_autoconf(nil, 'bar', 'baz')
20
+ }.to raise_error(RuntimeError, 'Please supply a project_title parameter')
21
+ end
22
+
23
+ it 'fails if configure.ac exists' do
24
+ File.should_receive(:exist?).with('configure.ac').and_return(true)
25
+
26
+ expect {
27
+ Rake::Builder.create_autoconf('foo', 'bar', 'baz')
28
+ }.to raise_error(RuntimeError, "The file 'configure.ac' already exists")
29
+ end
14
30
 
15
- Rake::Builder.create_makefile_am
31
+ it 'fails if Makefile.am exists' do
32
+ File.should_receive(:exist?).with('Makefile.am').and_return(true)
33
+
34
+ expect {
35
+ Rake::Builder.create_autoconf('foo', 'bar', 'baz')
36
+ }.to raise_error(RuntimeError, "The file 'Makefile.am' already exists")
16
37
  end
17
38
 
18
- it 'writes Makefile.am' do
19
- file = stub('File')
20
- file.should_receive(:write).with('contents')
21
- File.should_receive(:open).with('Makefile.am', 'w') do |&block|
22
- block.call file
23
- end
39
+ it 'creates configure.ac' do
40
+ Rake::Builder::ConfigureAc.should_receive(:new).and_return(configure_ac)
41
+
42
+ Rake::Builder.create_autoconf('foo', 'bar', 'baz')
43
+ end
44
+
45
+ it 'creates Makefile.am' do
46
+ Rake::Builder::Presenters::MakefileAm::BuilderCollectionPresenter.should_receive(:new).and_return(presenter)
24
47
 
25
- Rake::Builder.create_makefile_am
48
+ Rake::Builder.create_autoconf('foo', 'bar', 'baz')
26
49
  end
27
50
  end
28
51
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rake-builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -90,10 +90,16 @@ files:
90
90
  - lib/rake/once_task.rb
91
91
  - lib/rake/microsecond.rb
92
92
  - lib/rake/file_task_alias.rb
93
+ - lib/rake/builder/logger/formatter.rb
93
94
  - lib/rake/builder/qt_builder.rb
95
+ - lib/rake/builder/error.rb
94
96
  - lib/rake/builder/version.rb
97
+ - lib/rake/builder/task_definer.rb
98
+ - lib/rake/builder/autoconf/version.rb
95
99
  - lib/rake/builder/presenters/makefile_am/builder_presenter.rb
96
100
  - lib/rake/builder/presenters/makefile_am/builder_collection_presenter.rb
101
+ - lib/rake/builder/presenters/makefile/builder_presenter.rb
102
+ - lib/rake/builder/configure_ac.rb
97
103
  - lib/rake/local_config.rb
98
104
  - lib/rake/path.rb
99
105
  - lib/rake/builder.rb
@@ -165,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
171
  version: '0'
166
172
  segments:
167
173
  - 0
168
- hash: -4521436096979884439
174
+ hash: 1943333437698493637
169
175
  required_rubygems_version: !ruby/object:Gem::Requirement
170
176
  none: false
171
177
  requirements:
@@ -174,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
174
180
  version: '0'
175
181
  segments:
176
182
  - 0
177
- hash: -4521436096979884439
183
+ hash: 1943333437698493637
178
184
  requirements: []
179
185
  rubyforge_project: nowarning
180
186
  rubygems_version: 1.8.23