diff options
| author | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-16 18:49:26 +0900 | 
|---|---|---|
| committer | Jari Vetoniemi <jari.vetoniemi@indooratlas.com> | 2020-03-30 00:39:06 +0900 | 
| commit | fcbf63e62c627deae76c1b8cb8c0876c536ed811 (patch) | |
| tree | 64cb17de3f41a2b6fef2368028fbd00349946994 /jni/ruby/lib/rake/loaders | |
Fresh start
Diffstat (limited to 'jni/ruby/lib/rake/loaders')
| -rw-r--r-- | jni/ruby/lib/rake/loaders/makefile.rb | 40 | 
1 files changed, 40 insertions, 0 deletions
| diff --git a/jni/ruby/lib/rake/loaders/makefile.rb b/jni/ruby/lib/rake/loaders/makefile.rb new file mode 100644 index 0000000..4ece432 --- /dev/null +++ b/jni/ruby/lib/rake/loaders/makefile.rb @@ -0,0 +1,40 @@ +module Rake + +  # Makefile loader to be used with the import file loader. +  class MakefileLoader +    include Rake::DSL + +    SPACE_MARK = "\0" + +    # Load the makefile dependencies in +fn+. +    def load(fn) +      lines = File.read fn +      lines.gsub!(/\\ /, SPACE_MARK) +      lines.gsub!(/#[^\n]*\n/m, "") +      lines.gsub!(/\\\n/, ' ') +      lines.each_line do |line| +        process_line(line) +      end +    end + +    private + +    # Process one logical line of makefile data. +    def process_line(line) +      file_tasks, args = line.split(':', 2) +      return if args.nil? +      dependents = args.split.map { |d| respace(d) } +      file_tasks.scan(/\S+/) do |file_task| +        file_task = respace(file_task) +        file file_task => dependents +      end +    end + +    def respace(str) +      str.tr SPACE_MARK, ' ' +    end +  end + +  # Install the handler +  Rake.application.add_loader('mf', MakefileLoader.new) +end | 
