class PaperHouse::BuildTask
Common base class for *.c compilation tasks.
Attributes
cc[W]
@!attribute cc
C compiler name or path.
name[RW]
Name of task.
target_directory[W]
@!attribute target_directory
Directory where *.o files are created.
Public Class Methods
new(name, &block)
click to toggle source
@private
# File lib/paper_house/build_task.rb, line 56 def initialize(name, &block) @name = name.to_s block.call self if block define end
Public Instance Methods
cc()
click to toggle source
# File lib/paper_house/build_task.rb, line 51 def cc ENV['CC'] || @cc || 'gcc' end
target_directory()
click to toggle source
# File lib/paper_house/build_task.rb, line 43 def target_directory @target_directory ||= '.' end
target_path()
click to toggle source
Relative path to target file.
# File lib/paper_house/build_task.rb, line 63 def target_path File.join target_directory, target_file_name.to_s end
Private Instance Methods
ad_cc_options()
click to toggle source
# File lib/paper_house/build_task.rb, line 138 def ad_cc_options (cflags + ['-fPIC'] + i_options).join ' ' end
build()
click to toggle source
# File lib/paper_house/build_task.rb, line 105 def build check_sources_list generate_target end
check_sources_list()
click to toggle source
# File lib/paper_house/build_task.rb, line 110 def check_sources_list fail "Cannot find sources (#{@sources})." if sources_list.empty? end
clobber_targets()
click to toggle source
# File lib/paper_house/build_task.rb, line 119 def clobber_targets [target_path, dependency.path] end
compile(o_file, c_file)
click to toggle source
# File lib/paper_house/build_task.rb, line 127 def compile(o_file, c_file) return if no_need_to_compile?(o_file, c_file) auto_depends = AutoDepends.new(c_file, o_file, cc, ad_cc_options) auto_depends.run dependency.write o_file, auto_depends.data end
define()
click to toggle source
# File lib/paper_house/build_task.rb, line 69 def define define_main_task define_directory_task define_all_c_compile_tasks define_maybe_generate_target_task define_clean_tasks end
define_all_c_compile_tasks()
click to toggle source
# File lib/paper_house/build_task.rb, line 86 def define_all_c_compile_tasks sources_list.zip(objects) do |source, object| define_c_compile_task source, object end end
define_c_compile_task(source, object)
click to toggle source
# File lib/paper_house/build_task.rb, line 92 def define_c_compile_task(source, object) task object => source do |task| compile task.name, task.prerequisites[0] end end
define_clean_tasks()
click to toggle source
# File lib/paper_house/build_task.rb, line 114 def define_clean_tasks CleanTask.new objects, :CLEAN CleanTask.new clobber_targets, :CLOBBER end
define_directory_task()
click to toggle source
# File lib/paper_house/build_task.rb, line 82 def define_directory_task directory target_directory end
define_main_task()
click to toggle source
# File lib/paper_house/build_task.rb, line 77 def define_main_task path = target_path task name => [target_directory, path] end
define_maybe_generate_target_task()
click to toggle source
# File lib/paper_house/build_task.rb, line 98 def define_maybe_generate_target_task file target_path => objects do |task| next if uptodate?(task.name, task.prerequisites) build end end
dependency()
click to toggle source
# File lib/paper_house/build_task.rb, line 142 def dependency @dependency ||= Dependency.new(@name) end
generate_target()
click to toggle source
# File lib/paper_house/build_task.rb, line 146 def generate_target command = ([cc] + cc_options).join(' ') sh(command) do |ok, status| ok || fail(BuildFailed.new(command, status)) end end
no_need_to_compile?(o_file, c_file)
click to toggle source
# File lib/paper_house/build_task.rb, line 134 def no_need_to_compile?(o_file, c_file) uptodate?(o_file, dependency.read(o_file) << c_file) end
objects()
click to toggle source
# File lib/paper_house/build_task.rb, line 123 def objects sources_list.pathmap File.join(target_directory, '%n.o') end