Sha256: 728123c8ccbfae3e5fd315552068709fa167429f2d646bdc417a01638580a38c

Contents?: true

Size: 1.8 KB

Versions: 1

Compression:

Stored size: 1.8 KB

Contents

module Rake::Builder::Presenters; end

module Rake::Builder::Presenters::Makefile
  class BuilderPresenter
    def initialize(builder)
      @builder = builder
    end

    def to_s
      objects      = @builder.object_files.collect { |f| f.sub(@builder.objects_path, '$(OBJECT_DIR)') }
      objects_list = objects.join( ' ' )
      case @builder.target_type
      when :executable
        target_name = 'EXECUTABLE_TARGET'
        target_ref  = "$(#{target_name})"
        target_actions =
"	$(LINKER) $(LINK_FLAGS) -o #{target_ref} $(OBJECTS)
"
      when :static_library
        target_name = 'LIB_TARGET'
        target_ref  = "$(#{target_name})"
        target_actions =
"	rm -f #{target_ref}
	ar -cq #{target_ref} $(OBJECTS)
	ranlib #{target_ref}
"
      when :shared_library
        target_name = 'LIB_TARGET'
        target_ref  = "$(#{target_name})"
        target_actions =
"	$(LINKER) -shared -o #{target_ref} $(OBJECTS) $(LINK_FLAGS)
"
      end

      variables = <<EOT
COMPILER       = #{@builder.compiler}
COMPILER_FLAGS = #{@builder.compiler_flags}
LINKER         = #{@builder.linker}
LINK_FLAGS     = #{@builder.link_flags}
OBJECT_DIR     = #{@builder.objects_path}
OBJECTS        = #{objects_list}
#{ target_name } = #{@builder.target}
EOT
      rules = <<EOT

all: #{target_ref}

clean:
	rm -f $(OBJECTS)
	rm -f #{target_ref}

#{target_ref}: $(OBJECTS)
#{target_actions}
EOT

      source_groups = group_files_by_path(@builder.source_files)
      source_groups.each.with_index do | gp, i |
        variables << "SOURCE_#{i + 1} = #{gp[0]}\n"
        rules     << <<EOT

$(OBJECT_DIR)/%.o: $(SOURCE_#{i + 1})/%.cpp
	$(COMPILER) -c $(COMPILER_FLAGS) -o $@ $<
EOT
      end
      variables + rules
    end

    def save
      File.open(@builder.makefile_name, 'w') do |file|
        file.write to_s
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rake-builder-0.0.19 lib/rake/builder/presenters/makefile/builder_presenter.rb