rbbt-util 2.1.0 → 3.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/bin/rbbt_query.rb +63 -0
 - data/lib/rbbt-util.rb +5 -5
 - data/lib/rbbt.rb +2 -11
 - data/lib/rbbt/util/cmd.rb +1 -1
 - data/lib/rbbt/util/fix_width_table.rb +9 -3
 - data/lib/rbbt/util/log.rb +23 -7
 - data/lib/rbbt/util/misc.rb +121 -15
 - data/lib/rbbt/util/open.rb +14 -4
 - data/lib/rbbt/util/persistence.rb +52 -21
 - data/lib/rbbt/util/rake.rb +108 -21
 - data/lib/rbbt/util/resource.rb +338 -0
 - data/lib/rbbt/util/simpleDSL.rb +1 -1
 - data/lib/rbbt/util/simpleopt.rb +1 -1
 - data/lib/rbbt/util/task.rb +340 -0
 - data/lib/rbbt/util/tc_hash.rb +19 -2
 - data/lib/rbbt/util/tsv.rb +15 -10
 - data/lib/rbbt/util/tsv/accessor.rb +16 -7
 - data/lib/rbbt/util/tsv/attach.rb +220 -17
 - data/lib/rbbt/util/tsv/index.rb +6 -1
 - data/lib/rbbt/util/tsv/manipulate.rb +4 -5
 - data/lib/rbbt/util/tsv/parse.rb +45 -21
 - data/lib/rbbt/util/tsv/resource.rb +74 -0
 - data/lib/rbbt/util/workflow.rb +99 -75
 - data/test/rbbt/util/test_filecache.rb +2 -2
 - data/test/rbbt/util/test_misc.rb +7 -2
 - data/test/rbbt/util/test_persistence.rb +40 -5
 - data/test/rbbt/util/test_resource.rb +92 -0
 - data/test/rbbt/util/test_task.rb +118 -0
 - data/test/rbbt/util/test_tsv.rb +5 -1
 - data/test/rbbt/util/test_workflow.rb +77 -62
 - data/test/rbbt/util/tsv/test_attach.rb +95 -7
 - data/test/rbbt/util/tsv/test_index.rb +0 -1
 - data/test/rbbt/util/tsv/test_manipulate.rb +20 -0
 - data/test/rbbt/util/tsv/test_resource.rb +9 -0
 - data/test/test_helper.rb +10 -0
 - data/test/test_rbbt.rb +2 -37
 - metadata +16 -18
 - data/lib/rbbt/util/data_module.rb +0 -93
 - data/lib/rbbt/util/path.rb +0 -155
 - data/lib/rbbt/util/pkg_config.rb +0 -78
 - data/lib/rbbt/util/pkg_data.rb +0 -119
 - data/lib/rbbt/util/pkg_software.rb +0 -145
 - data/test/rbbt/util/test_data_module.rb +0 -50
 - data/test/rbbt/util/test_path.rb +0 -10
 - data/test/rbbt/util/test_pkg_data.rb +0 -129
 - data/test/test_pkg.rb +0 -28
 
    
        data/lib/rbbt/util/rake.rb
    CHANGED
    
    | 
         @@ -1,3 +1,4 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rake'
         
     | 
| 
       1 
2 
     | 
    
         
             
            require 'rbbt/util/tsv'
         
     | 
| 
       2 
3 
     | 
    
         
             
            require 'rbbt/util/open'
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'rbbt/util/log'
         
     | 
| 
         @@ -29,7 +30,11 @@ module RakeHelper 
     | 
|
| 
       29 
30 
     | 
    
         
             
                      end
         
     | 
| 
       30 
31 
     | 
    
         | 
| 
       31 
32 
     | 
    
         
             
                      def self.files
         
     | 
| 
       32 
     | 
    
         
            -
                        @@files
         
     | 
| 
      
 33 
     | 
    
         
            +
                        if defined? @@files
         
     | 
| 
      
 34 
     | 
    
         
            +
                          @@files
         
     | 
| 
      
 35 
     | 
    
         
            +
                        else
         
     | 
| 
      
 36 
     | 
    
         
            +
                          @@file = []
         
     | 
| 
      
 37 
     | 
    
         
            +
                        end
         
     | 
| 
       33 
38 
     | 
    
         
             
                      end
         
     | 
| 
       34 
39 
     | 
    
         
             
                    end
         
     | 
| 
       35 
40 
     | 
    
         | 
| 
         @@ -48,41 +53,123 @@ module RakeHelper 
     | 
|
| 
       48 
53 
     | 
    
         
             
              end
         
     | 
| 
       49 
54 
     | 
    
         | 
| 
       50 
55 
     | 
    
         
             
              def self.run(rakefile, task = :default, chdir = nil)
         
     | 
| 
       51 
     | 
    
         
            -
                 
     | 
| 
       52 
     | 
    
         
            -
             
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
      
 56 
     | 
    
         
            +
                require 'rake'
         
     | 
| 
      
 57 
     | 
    
         
            +
                old_pwd = FileUtils.pwd
         
     | 
| 
      
 58 
     | 
    
         
            +
                FileUtils.chdir chdir if chdir
         
     | 
| 
       54 
59 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
      
 60 
     | 
    
         
            +
                Rake::FileTask.module_eval do
         
     | 
| 
      
 61 
     | 
    
         
            +
                  if not self.respond_to? :old_define_task
         
     | 
| 
       56 
62 
     | 
    
         
             
                    class << self
         
     | 
| 
       57 
63 
     | 
    
         
             
                      alias_method :old_define_task, :define_task
         
     | 
| 
       58 
64 
     | 
    
         
             
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
       59 
66 
     | 
    
         
             
                    def self.define_task(file, *args, &block)
         
     | 
| 
       60 
67 
     | 
    
         
             
                      @@files ||= []
         
     | 
| 
       61 
68 
     | 
    
         
             
                      @@files << file
         
     | 
| 
       62 
69 
     | 
    
         
             
                      old_define_task(file, *args, &block)
         
     | 
| 
       63 
70 
     | 
    
         
             
                    end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                    def self.files
         
     | 
| 
       66 
     | 
    
         
            -
                      @@files
         
     | 
| 
       67 
     | 
    
         
            -
                    end
         
     | 
| 
       68 
71 
     | 
    
         
             
                  end
         
     | 
| 
       69 
72 
     | 
    
         | 
| 
       70 
     | 
    
         
            -
                   
     | 
| 
       71 
     | 
    
         
            -
                     
     | 
| 
       72 
     | 
    
         
            -
                  else
         
     | 
| 
       73 
     | 
    
         
            -
                    load rakefile
         
     | 
| 
      
 73 
     | 
    
         
            +
                  def self.files
         
     | 
| 
      
 74 
     | 
    
         
            +
                    @@files
         
     | 
| 
       74 
75 
     | 
    
         
             
                  end
         
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
                   
     | 
| 
       77 
     | 
    
         
            -
                     
     | 
| 
      
 76 
     | 
    
         
            +
                  
         
     | 
| 
      
 77 
     | 
    
         
            +
                  def self.clear_files
         
     | 
| 
      
 78 
     | 
    
         
            +
                    @@files = []
         
     | 
| 
       78 
79 
     | 
    
         
             
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
       79 
81 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                 
     | 
| 
       83 
     | 
    
         
            -
             
     | 
| 
      
 82 
     | 
    
         
            +
                Rake::Task.clear
         
     | 
| 
      
 83 
     | 
    
         
            +
                Rake::FileTask.clear_files
         
     | 
| 
      
 84 
     | 
    
         
            +
                if block_given?
         
     | 
| 
      
 85 
     | 
    
         
            +
                  yield
         
     | 
| 
      
 86 
     | 
    
         
            +
                else
         
     | 
| 
      
 87 
     | 
    
         
            +
                  load rakefile
         
     | 
| 
      
 88 
     | 
    
         
            +
                end
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                task(:default) do |t|
         
     | 
| 
      
 91 
     | 
    
         
            +
                  Rake::FileTask.files.each do |file| Rake::Task[file].invoke end
         
     | 
| 
      
 92 
     | 
    
         
            +
                end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                Rake::Task[task].invoke
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                Rake::Task.clear
         
     | 
| 
      
 97 
     | 
    
         
            +
                Rake::FileTask.clear_files
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
                FileUtils.chdir old_pwd
         
     | 
| 
      
 100 
     | 
    
         
            +
              end
         
     | 
| 
       84 
101 
     | 
    
         | 
| 
       85 
     | 
    
         
            -
             
     | 
| 
      
 102 
     | 
    
         
            +
              module WorkFlow
         
     | 
| 
      
 103 
     | 
    
         
            +
                attr_accessor :default_persistence, :stage_options, :run_options
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                def stage_options(stage = :next)
         
     | 
| 
      
 106 
     | 
    
         
            +
                  @stage_options ||= {}
         
     | 
| 
      
 107 
     | 
    
         
            +
                  @stage_options[stage] ||= []
         
     | 
| 
      
 108 
     | 
    
         
            +
                end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                def run_options
         
     | 
| 
      
 111 
     | 
    
         
            +
                  @run_options ||= {}
         
     | 
| 
      
 112 
     | 
    
         
            +
                end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                def stage(stage_name, options = nil)
         
     | 
| 
      
 115 
     | 
    
         
            +
                  dependencies, options = case
         
     | 
| 
      
 116 
     | 
    
         
            +
                                          when ((String === options or Symbol === options) and %w(string marshal yaml tsv tsv_string).include? options.to_s)
         
     | 
| 
      
 117 
     | 
    
         
            +
                                            [nil, {:persistence_type => options}]
         
     | 
| 
      
 118 
     | 
    
         
            +
                                          when Hash === options
         
     | 
| 
      
 119 
     | 
    
         
            +
                                            [nil, options]
         
     | 
| 
      
 120 
     | 
    
         
            +
                                          else
         
     | 
| 
      
 121 
     | 
    
         
            +
                                            [options, {}]
         
     | 
| 
      
 122 
     | 
    
         
            +
                                          end
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                  @stage_options[stage_name] = @stage_options[:next]
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
                  options = Misc.add_defaults options, :persistence_type => default_persistence || :string
         
     | 
| 
      
 127 
     | 
    
         
            +
                  persistence_type = Misc.process_options options, :persistence_type
         
     | 
| 
      
 128 
     | 
    
         
            +
                  dependencies = Misc.process_options options, :dependencies if options.include? :dependencies
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                  re = Regexp.new(/(?:^|\/)#{Regexp.quote stage_name.to_s}\/.*$/)
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
                  @last_step             = nil unless defined? @last_step
         
     | 
| 
      
 133 
     | 
    
         
            +
                  @last_persistence_type = nil unless defined? @last_persistence_type
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
                  if dependencies.nil? && ! @last_step.nil?
         
     | 
| 
      
 136 
     | 
    
         
            +
                    dependencies = @last_step
         
     | 
| 
      
 137 
     | 
    
         
            +
                  end
         
     | 
| 
      
 138 
     | 
    
         
            +
                  @last_step = stage_name
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
                  # Generate the Hash definition
         
     | 
| 
      
 141 
     | 
    
         
            +
                  rule_def = case 
         
     | 
| 
      
 142 
     | 
    
         
            +
                             when dependencies.nil?
         
     | 
| 
      
 143 
     | 
    
         
            +
                               re
         
     | 
| 
      
 144 
     | 
    
         
            +
                             when String === dependencies 
         
     | 
| 
      
 145 
     | 
    
         
            +
                               {re => dependencies}
         
     | 
| 
      
 146 
     | 
    
         
            +
                             when Symbol === dependencies
         
     | 
| 
      
 147 
     | 
    
         
            +
                               {re => lambda{|filename| filename.sub(stage_name.to_s, dependencies.to_s) }}
         
     | 
| 
      
 148 
     | 
    
         
            +
                             when Array === dependencies
         
     | 
| 
      
 149 
     | 
    
         
            +
                               {re => lambda{|filename| dependencies.collect{|dep| filename.sub(stage_name.to_s, dep.to_s) } }}
         
     | 
| 
      
 150 
     | 
    
         
            +
                             when Proc === dependencies
         
     | 
| 
      
 151 
     | 
    
         
            +
                               {re => dependencies}
         
     | 
| 
      
 152 
     | 
    
         
            +
                             end
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
                  @last_step = stage_name
         
     | 
| 
      
 155 
     | 
    
         
            +
                  last_persistence_type, @last_persistence_type = @last_persistence_type, persistence_type
         
     | 
| 
      
 156 
     | 
    
         
            +
             
     | 
| 
      
 157 
     | 
    
         
            +
                  rule rule_def do |t|
         
     | 
| 
      
 158 
     | 
    
         
            +
                    Persistence.persist(t, "", persistence_type, :persistence_file => t.name) do |t, options|
         
     | 
| 
      
 159 
     | 
    
         
            +
                      data = case
         
     | 
| 
      
 160 
     | 
    
         
            +
                             when (t.prerequisites.nil? or (Array === t.prerequisites and t.prerequisites.empty?))
         
     | 
| 
      
 161 
     | 
    
         
            +
                               nil
         
     | 
| 
      
 162 
     | 
    
         
            +
                             else
         
     | 
| 
      
 163 
     | 
    
         
            +
                               Persistence.persist(t.prerequisites.first, "", last_persistence_type, :persistence_file => t.prerequisites.first) do
         
     | 
| 
      
 164 
     | 
    
         
            +
                                 raise "Error, this file should be produced already"
         
     | 
| 
      
 165 
     | 
    
         
            +
                               end
         
     | 
| 
      
 166 
     | 
    
         
            +
                             end
         
     | 
| 
      
 167 
     | 
    
         
            +
                      options = @run_options.values_at *stage_options
         
     | 
| 
      
 168 
     | 
    
         
            +
                      step stage_name, "Executing step [#{ stage_name }]"
         
     | 
| 
      
 169 
     | 
    
         
            +
                      yield t, *options
         
     | 
| 
      
 170 
     | 
    
         
            +
                    end
         
     | 
| 
      
 171 
     | 
    
         
            +
                  end
         
     | 
| 
      
 172 
     | 
    
         
            +
                end
         
     | 
| 
       86 
173 
     | 
    
         
             
              end
         
     | 
| 
       87 
174 
     | 
    
         
             
            end
         
     | 
| 
       88 
175 
     | 
    
         | 
| 
         @@ -0,0 +1,338 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'rbbt/util/open'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rbbt/util/rake'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            module Resource
         
     | 
| 
      
 5 
     | 
    
         
            +
              class << self
         
     | 
| 
      
 6 
     | 
    
         
            +
                attr_accessor :resources, :rake_dirs
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              def self.extended(base)
         
     | 
| 
      
 10 
     | 
    
         
            +
                class << base
         
     | 
| 
      
 11 
     | 
    
         
            +
                  attr_accessor :pkgdir, :lib_dir, :base, :offsetdir, :namespace
         
     | 
| 
      
 12 
     | 
    
         
            +
                end
         
     | 
| 
      
 13 
     | 
    
         
            +
                base.base = base
         
     | 
| 
      
 14 
     | 
    
         
            +
                base.lib_dir = caller_lib_dir
         
     | 
| 
      
 15 
     | 
    
         
            +
                base.pkgdir = base.to_s.downcase unless base.to_s == "Rbbt"
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              def self.caller_base_dir(file = nil)
         
     | 
| 
      
 19 
     | 
    
         
            +
                file = caller.reject{|l| l =~ /\/util\/(?:resource\.rb|progress-monitor\.rb|workflow\.rb)/ }.first.sub(/\.rb.*/,'.rb') if file.nil?
         
     | 
| 
      
 20 
     | 
    
         
            +
                File.dirname(File.expand_path(file))
         
     | 
| 
      
 21 
     | 
    
         
            +
              end
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              def self.caller_lib_dir(file = nil)
         
     | 
| 
      
 24 
     | 
    
         
            +
                file = caller.reject{|l| l =~ /\/util\/(?:resource\.rb|progress-monitor\.rb|workflow\.rb)/ }.first.sub(/\.rb.*/,'.rb') if file.nil?
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
                file = File.expand_path file
         
     | 
| 
      
 27 
     | 
    
         
            +
                while file != '/'
         
     | 
| 
      
 28 
     | 
    
         
            +
                  dir = File.dirname file
         
     | 
| 
      
 29 
     | 
    
         
            +
                  return dir if File.exists? File.join(dir, 'lib')
         
     | 
| 
      
 30 
     | 
    
         
            +
                  file = File.dirname file
         
     | 
| 
      
 31 
     | 
    
         
            +
                end
         
     | 
| 
      
 32 
     | 
    
         
            +
                return nil
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              def self.resolve(path, pkgdir, type = :find, lib_dir = nil)
         
     | 
| 
      
 36 
     | 
    
         
            +
                if path.match(/(.*?)\/(.*)/)
         
     | 
| 
      
 37 
     | 
    
         
            +
                  location, subpath = path.match(/(.*?)\/(.*)/).values_at 1, 2
         
     | 
| 
      
 38 
     | 
    
         
            +
                else
         
     | 
| 
      
 39 
     | 
    
         
            +
                  location, subpath = path, ""
         
     | 
| 
      
 40 
     | 
    
         
            +
                end
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
                case type.to_sym
         
     | 
| 
      
 43 
     | 
    
         
            +
                when :user
         
     | 
| 
      
 44 
     | 
    
         
            +
                  pkgdir = 'rbbt' if pkgdir.nil? or pkgdir.empty?
         
     | 
| 
      
 45 
     | 
    
         
            +
                  File.join(ENV['HOME'], '.' + pkgdir, location, subpath)
         
     | 
| 
      
 46 
     | 
    
         
            +
                when :local
         
     | 
| 
      
 47 
     | 
    
         
            +
                  File.join('/usr/local', location, pkgdir, subpath)
         
     | 
| 
      
 48 
     | 
    
         
            +
                when :global
         
     | 
| 
      
 49 
     | 
    
         
            +
                  File.join('/', location, pkgdir, subpath)
         
     | 
| 
      
 50 
     | 
    
         
            +
                when :lib
         
     | 
| 
      
 51 
     | 
    
         
            +
                  if not caller_lib_dir.nil? and not caller_lib_dir == "/"
         
     | 
| 
      
 52 
     | 
    
         
            +
                    path = File.join(caller_lib_dir, location, subpath)
         
     | 
| 
      
 53 
     | 
    
         
            +
                    return path if File.exists?(path) or lib_dir.nil?
         
     | 
| 
      
 54 
     | 
    
         
            +
                  end
         
     | 
| 
      
 55 
     | 
    
         
            +
                  raise "Root of library not found" if lib_dir.nil?
         
     | 
| 
      
 56 
     | 
    
         
            +
                  File.join(lib_dir, location, subpath)
         
     | 
| 
      
 57 
     | 
    
         
            +
                when :find
         
     | 
| 
      
 58 
     | 
    
         
            +
                  %w(user local global lib).each do |_type|
         
     | 
| 
      
 59 
     | 
    
         
            +
                    file = resolve(path, pkgdir, _type.to_sym, lib_dir)
         
     | 
| 
      
 60 
     | 
    
         
            +
                    return file if File.exists? file
         
     | 
| 
      
 61 
     | 
    
         
            +
                  end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                  resolve(path, pkgdir, :user)
         
     | 
| 
      
 64 
     | 
    
         
            +
                end 
         
     | 
| 
      
 65 
     | 
    
         
            +
              end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
              def self.define_rake(path, rakefile)
         
     | 
| 
      
 68 
     | 
    
         
            +
                @rake_dirs ||= {}
         
     | 
| 
      
 69 
     | 
    
         
            +
                @rake_dirs[path.find] = rakefile
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              def self.define_resource(path, type, content)
         
     | 
| 
      
 73 
     | 
    
         
            +
                @resources ||= {}
         
     | 
| 
      
 74 
     | 
    
         
            +
                @resources[path.find] = [type, content]
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
              def self.set_software_env(software_dir)
         
     | 
| 
      
 78 
     | 
    
         
            +
                bin_dir = File.join(software_dir, 'bin')
         
     | 
| 
      
 79 
     | 
    
         
            +
                opt_dir = File.join(software_dir, 'opt')
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                Misc.env_add 'PATH', bin_dir
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                FileUtils.mkdir_p opt_dir unless File.exists? opt_dir
         
     | 
| 
      
 84 
     | 
    
         
            +
                %w(.ld-paths .pkgconfig-paths .aclocal-paths .java-classpaths).each do |file|
         
     | 
| 
      
 85 
     | 
    
         
            +
                  filename = File.join(opt_dir, file)
         
     | 
| 
      
 86 
     | 
    
         
            +
                  FileUtils.touch filename unless File.exists? filename
         
     | 
| 
      
 87 
     | 
    
         
            +
                end
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
                if not File.exists? File.join(opt_dir,'.post_install')
         
     | 
| 
      
 90 
     | 
    
         
            +
                  Open.write(File.join(opt_dir,'.post_install'),"#!/bin/bash\n")
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                Open.read(File.join opt_dir, '.ld-paths').split(/\n/).each do |line|
         
     | 
| 
      
 94 
     | 
    
         
            +
                  Misc.env_add('LD_LIBRARY_PATH',line.chomp)
         
     | 
| 
      
 95 
     | 
    
         
            +
                  Misc.env_add('LD_RUN_PATH',line.chomp)
         
     | 
| 
      
 96 
     | 
    
         
            +
                end
         
     | 
| 
      
 97 
     | 
    
         
            +
             
     | 
| 
      
 98 
     | 
    
         
            +
                Open.read(File.join opt_dir, '.pkgconfig-paths').split(/\n/).each do |line|
         
     | 
| 
      
 99 
     | 
    
         
            +
                  Misc.env_add('PKG_CONFIG_PATH',line.chomp)
         
     | 
| 
      
 100 
     | 
    
         
            +
                end
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                Open.read(File.join opt_dir, '.ld-paths').split(/\n/).each do |line|
         
     | 
| 
      
 103 
     | 
    
         
            +
                  Misc.env_add('LD_LIBRARY_PATH',line.chomp)
         
     | 
| 
      
 104 
     | 
    
         
            +
                end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                Open.read(File.join opt_dir, '.ld-paths').split(/\n/).each do |line|
         
     | 
| 
      
 107 
     | 
    
         
            +
                  Misc.env_add('LD_LIBRARY_PATH',line.chomp)
         
     | 
| 
      
 108 
     | 
    
         
            +
                end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                Open.read(File.join opt_dir, '.aclocal-paths').split(/\n/).each do |line|
         
     | 
| 
      
 111 
     | 
    
         
            +
                  Misc.env_add('ACLOCAL_FLAGS', "-I#{File.join(opt_dir, line.chomp)}", ' ')
         
     | 
| 
      
 112 
     | 
    
         
            +
                end
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                Open.read(File.join opt_dir, '.java-classpaths').split(/\n/).each do |line|
         
     | 
| 
      
 115 
     | 
    
         
            +
                  Misc.env_add('CLASSPATH', "#{File.join(opt_dir,'java', 'lib', line.chomp)}")
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                Dir.glob(File.join opt_dir, 'jars', '*').each do |file|
         
     | 
| 
      
 119 
     | 
    
         
            +
                  Misc.env_add('CLASSPATH', "#{File.expand_path(file)}")
         
     | 
| 
      
 120 
     | 
    
         
            +
                end
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                File.chmod 0774, File.join(opt_dir, '.post_install')
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                CMD.cmd(File.join(opt_dir, '.post_install'))
         
     | 
| 
      
 125 
     | 
    
         
            +
              end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
              def self.produce(resource)
         
     | 
| 
      
 128 
     | 
    
         
            +
                resource = resource.find if Path === resource
         
     | 
| 
      
 129 
     | 
    
         
            +
                return resource if File.exists? resource
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
                @resources ||= {}
         
     | 
| 
      
 132 
     | 
    
         
            +
                @rake_dirs ||= {}
         
     | 
| 
      
 133 
     | 
    
         
            +
                case
         
     | 
| 
      
 134 
     | 
    
         
            +
                when @resources.include?(resource)
         
     | 
| 
      
 135 
     | 
    
         
            +
                  type, content = @resources[resource]
         
     | 
| 
      
 136 
     | 
    
         
            +
                  
         
     | 
| 
      
 137 
     | 
    
         
            +
                  case type
         
     | 
| 
      
 138 
     | 
    
         
            +
                  when :string
         
     | 
| 
      
 139 
     | 
    
         
            +
                    Open.write(resource, content)
         
     | 
| 
      
 140 
     | 
    
         
            +
                  when :url
         
     | 
| 
      
 141 
     | 
    
         
            +
                    Open.write(resource, Open.read(content))
         
     | 
| 
      
 142 
     | 
    
         
            +
                  when :proc
         
     | 
| 
      
 143 
     | 
    
         
            +
                    Open.write(resource, content.call)
         
     | 
| 
      
 144 
     | 
    
         
            +
                  when :install
         
     | 
| 
      
 145 
     | 
    
         
            +
                    software_dir = File.dirname(File.dirname(resource.to_s))
         
     | 
| 
      
 146 
     | 
    
         
            +
                    preamble = <<-EOF
         
     | 
| 
      
 147 
     | 
    
         
            +
            #!/bin/bash
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            RBBT_SOFTWARE_DIR="#{software_dir}"
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
            INSTALL_HELPER_FILE="#{Rbbt.share.install.software.lib.install_helpers.find :lib, caller_lib_dir(__FILE__)}"
         
     | 
| 
      
 152 
     | 
    
         
            +
            source "$INSTALL_HELPER_FILE"
         
     | 
| 
      
 153 
     | 
    
         
            +
                    EOF
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                    CMD.cmd('bash', :in => preamble + "\n" + content.read)
         
     | 
| 
      
 156 
     | 
    
         
            +
                    set_software_env(software_dir)
         
     | 
| 
      
 157 
     | 
    
         
            +
                  else
         
     | 
| 
      
 158 
     | 
    
         
            +
                    raise "Could not produce #{ resource }. (#{ type }, #{ content })"
         
     | 
| 
      
 159 
     | 
    
         
            +
                  end
         
     | 
| 
      
 160 
     | 
    
         
            +
                  resource
         
     | 
| 
      
 161 
     | 
    
         
            +
             
     | 
| 
      
 162 
     | 
    
         
            +
                when @rake_dirs.select{|dir,rakefile| resource.in_dir?(dir)}.any?
         
     | 
| 
      
 163 
     | 
    
         
            +
                  dir, rakefile = @rake_dirs.select{|dir,rakefile| resource.in_dir?(dir)}.first
         
     | 
| 
      
 164 
     | 
    
         
            +
                  file = resource.sub(dir, '').sub(/^\//,'')
         
     | 
| 
      
 165 
     | 
    
         
            +
                  rakefile = rakefile.find if Resource::Path === rakefile
         
     | 
| 
      
 166 
     | 
    
         
            +
                  dir = dir.find if Resource::Path === dir
         
     | 
| 
      
 167 
     | 
    
         
            +
                  FileUtils.mkdir_p dir unless File.exists? dir
         
     | 
| 
      
 168 
     | 
    
         
            +
                  RakeHelper.run(rakefile, file, dir)
         
     | 
| 
      
 169 
     | 
    
         
            +
                  resource
         
     | 
| 
      
 170 
     | 
    
         
            +
                end
         
     | 
| 
      
 171 
     | 
    
         
            +
              end
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
              def relative_to(klass, path)
         
     | 
| 
      
 174 
     | 
    
         
            +
                self.offsetdir = path
         
     | 
| 
      
 175 
     | 
    
         
            +
                if Rbbt == klass
         
     | 
| 
      
 176 
     | 
    
         
            +
                  self.pkgdir = ""
         
     | 
| 
      
 177 
     | 
    
         
            +
                else
         
     | 
| 
      
 178 
     | 
    
         
            +
                  self.pkgdir = klass.to_s.downcase
         
     | 
| 
      
 179 
     | 
    
         
            +
                end
         
     | 
| 
      
 180 
     | 
    
         
            +
              end
         
     | 
| 
      
 181 
     | 
    
         
            +
             
     | 
| 
      
 182 
     | 
    
         
            +
              def data_module(klass)
         
     | 
| 
      
 183 
     | 
    
         
            +
                relative_to klass, "share/#{self.to_s.downcase}"
         
     | 
| 
      
 184 
     | 
    
         
            +
                rakefile = klass.share.install[self.to_s].Rakefile
         
     | 
| 
      
 185 
     | 
    
         
            +
                rakefile.lib_dir = Resource.caller_lib_dir
         
     | 
| 
      
 186 
     | 
    
         
            +
             
     | 
| 
      
 187 
     | 
    
         
            +
                self[''].define_as_rake rakefile
         
     | 
| 
      
 188 
     | 
    
         
            +
                self.namespace = base.to_s
         
     | 
| 
      
 189 
     | 
    
         
            +
                self.lib_dir = caller_lib_dir
         
     | 
| 
      
 190 
     | 
    
         
            +
              end
         
     | 
| 
      
 191 
     | 
    
         
            +
             
     | 
| 
      
 192 
     | 
    
         
            +
              module Path
         
     | 
| 
      
 193 
     | 
    
         
            +
                attr_accessor :pkgdir, :namespace, :lib_dir
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
                def self.path(name = nil, pkgdir = nil, namespace = nil, lib_dir = nil)
         
     | 
| 
      
 196 
     | 
    
         
            +
                  name = name.nil? ? "" : name.to_s
         
     | 
| 
      
 197 
     | 
    
         
            +
                  name.extend Path
         
     | 
| 
      
 198 
     | 
    
         
            +
                  name.pkgdir = pkgdir
         
     | 
| 
      
 199 
     | 
    
         
            +
                  name.namespace = namespace
         
     | 
| 
      
 200 
     | 
    
         
            +
                  name.lib_dir = lib_dir
         
     | 
| 
      
 201 
     | 
    
         
            +
                  name
         
     | 
| 
      
 202 
     | 
    
         
            +
                end
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
                def find(type = :find, lib_dir = nil)
         
     | 
| 
      
 205 
     | 
    
         
            +
                  lib_dir ||= @lib_dir
         
     | 
| 
      
 206 
     | 
    
         
            +
                  return  self if pkgdir.nil?
         
     | 
| 
      
 207 
     | 
    
         
            +
                  path = Path.path(Resource.resolve(self, pkgdir, type, lib_dir), nil)
         
     | 
| 
      
 208 
     | 
    
         
            +
                  path.namespace = namespace
         
     | 
| 
      
 209 
     | 
    
         
            +
                  path
         
     | 
| 
      
 210 
     | 
    
         
            +
                end
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
                def produce
         
     | 
| 
      
 213 
     | 
    
         
            +
                  Resource.produce self.find
         
     | 
| 
      
 214 
     | 
    
         
            +
                end
         
     | 
| 
      
 215 
     | 
    
         
            +
             
     | 
| 
      
 216 
     | 
    
         
            +
                def dirname
         
     | 
| 
      
 217 
     | 
    
         
            +
                  Path.path(File.dirname(self), pkgdir, namespace, lib_dir)
         
     | 
| 
      
 218 
     | 
    
         
            +
                end
         
     | 
| 
      
 219 
     | 
    
         
            +
             
     | 
| 
      
 220 
     | 
    
         
            +
                def join(name)
         
     | 
| 
      
 221 
     | 
    
         
            +
                  Path.path(File.join(self, name.to_s), pkgdir, namespace, lib_dir)
         
     | 
| 
      
 222 
     | 
    
         
            +
                end
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
                def [](name)
         
     | 
| 
      
 225 
     | 
    
         
            +
                  join name
         
     | 
| 
      
 226 
     | 
    
         
            +
                end
         
     | 
| 
      
 227 
     | 
    
         
            +
                
         
     | 
| 
      
 228 
     | 
    
         
            +
                def method_missing(name, prev = nil)
         
     | 
| 
      
 229 
     | 
    
         
            +
                  join prev unless prev.nil?
         
     | 
| 
      
 230 
     | 
    
         
            +
                  join name
         
     | 
| 
      
 231 
     | 
    
         
            +
                end
         
     | 
| 
      
 232 
     | 
    
         
            +
             
     | 
| 
      
 233 
     | 
    
         
            +
                def open(*args)
         
     | 
| 
      
 234 
     | 
    
         
            +
                  Resource.produce self.find
         
     | 
| 
      
 235 
     | 
    
         
            +
                  Open.open self.find, *args
         
     | 
| 
      
 236 
     | 
    
         
            +
                end
         
     | 
| 
      
 237 
     | 
    
         
            +
             
     | 
| 
      
 238 
     | 
    
         
            +
                def read(*args)
         
     | 
| 
      
 239 
     | 
    
         
            +
                  Resource.produce self.find
         
     | 
| 
      
 240 
     | 
    
         
            +
                  Open.read self.find, *args
         
     | 
| 
      
 241 
     | 
    
         
            +
                end
         
     | 
| 
      
 242 
     | 
    
         
            +
             
     | 
| 
      
 243 
     | 
    
         
            +
                def write(content, *args)
         
     | 
| 
      
 244 
     | 
    
         
            +
                  FileUtils.mkdir_p File.dirname(self.find) unless File.exists? self.find
         
     | 
| 
      
 245 
     | 
    
         
            +
                  Open.write(self.find, content, *args)
         
     | 
| 
      
 246 
     | 
    
         
            +
                end
         
     | 
| 
      
 247 
     | 
    
         
            +
             
     | 
| 
      
 248 
     | 
    
         
            +
                def define_as_string(content)
         
     | 
| 
      
 249 
     | 
    
         
            +
                  Resource.define_resource(self, :string, content)
         
     | 
| 
      
 250 
     | 
    
         
            +
                end
         
     | 
| 
      
 251 
     | 
    
         
            +
                
         
     | 
| 
      
 252 
     | 
    
         
            +
                def define_as_url(url)
         
     | 
| 
      
 253 
     | 
    
         
            +
                  Resource.define_resource(self, :url, url)
         
     | 
| 
      
 254 
     | 
    
         
            +
                end
         
     | 
| 
      
 255 
     | 
    
         
            +
             
         
     | 
| 
      
 256 
     | 
    
         
            +
                def define_as_rake(rakefile)
         
     | 
| 
      
 257 
     | 
    
         
            +
                  Resource.define_rake(self, rakefile)
         
     | 
| 
      
 258 
     | 
    
         
            +
                end
         
     | 
| 
      
 259 
     | 
    
         
            +
                
         
     | 
| 
      
 260 
     | 
    
         
            +
                def define_as_proc(&block)
         
     | 
| 
      
 261 
     | 
    
         
            +
                  Resource.define_resource(self, :proc, &block)
         
     | 
| 
      
 262 
     | 
    
         
            +
                end
         
     | 
| 
      
 263 
     | 
    
         
            +
             
         
     | 
| 
      
 264 
     | 
    
         
            +
             
         
     | 
| 
      
 265 
     | 
    
         
            +
                def define_as_install(install_file)
         
     | 
| 
      
 266 
     | 
    
         
            +
                  Resource.define_resource(self, :install, install_file.find)
         
     | 
| 
      
 267 
     | 
    
         
            +
                  self.produce
         
     | 
| 
      
 268 
     | 
    
         
            +
                  software_dir = File.dirname(File.dirname(self.to_s))
         
     | 
| 
      
 269 
     | 
    
         
            +
                  Resource.set_software_env(software_dir)
         
     | 
| 
      
 270 
     | 
    
         
            +
                end
         
     | 
| 
      
 271 
     | 
    
         
            +
             
     | 
| 
      
 272 
     | 
    
         
            +
                def in_dir?(dir)
         
     | 
| 
      
 273 
     | 
    
         
            +
                  ! ! File.expand_path(self).match(/^#{Regexp.quote dir}/)
         
     | 
| 
      
 274 
     | 
    
         
            +
                end
         
     | 
| 
      
 275 
     | 
    
         
            +
             
     | 
| 
      
 276 
     | 
    
         
            +
                def to_s
         
     | 
| 
      
 277 
     | 
    
         
            +
                  self.find
         
     | 
| 
      
 278 
     | 
    
         
            +
                end
         
     | 
| 
      
 279 
     | 
    
         
            +
             
     | 
| 
      
 280 
     | 
    
         
            +
                def filename
         
     | 
| 
      
 281 
     | 
    
         
            +
                  self.find
         
     | 
| 
      
 282 
     | 
    
         
            +
                end
         
     | 
| 
      
 283 
     | 
    
         
            +
             
     | 
| 
      
 284 
     | 
    
         
            +
                def exists?
         
     | 
| 
      
 285 
     | 
    
         
            +
                  begin
         
     | 
| 
      
 286 
     | 
    
         
            +
                    self.produce
         
     | 
| 
      
 287 
     | 
    
         
            +
                    File.exists? self.find
         
     | 
| 
      
 288 
     | 
    
         
            +
                  rescue
         
     | 
| 
      
 289 
     | 
    
         
            +
                    false
         
     | 
| 
      
 290 
     | 
    
         
            +
                  end
         
     | 
| 
      
 291 
     | 
    
         
            +
                end
         
     | 
| 
      
 292 
     | 
    
         
            +
              end
         
     | 
| 
      
 293 
     | 
    
         
            +
             
     | 
| 
      
 294 
     | 
    
         
            +
              module WithKey
         
     | 
| 
      
 295 
     | 
    
         
            +
                def self.extended(base)
         
     | 
| 
      
 296 
     | 
    
         
            +
                  class << base
         
     | 
| 
      
 297 
     | 
    
         
            +
                    attr_accessor :klass, :key
         
     | 
| 
      
 298 
     | 
    
         
            +
                  end
         
     | 
| 
      
 299 
     | 
    
         
            +
                end
         
     | 
| 
      
 300 
     | 
    
         
            +
             
     | 
| 
      
 301 
     | 
    
         
            +
                def method_missing(name, *args)
         
     | 
| 
      
 302 
     | 
    
         
            +
                  if key
         
     | 
| 
      
 303 
     | 
    
         
            +
                    klass.send(name, key, *args)
         
     | 
| 
      
 304 
     | 
    
         
            +
                  else
         
     | 
| 
      
 305 
     | 
    
         
            +
                    klass.send(name, *args)
         
     | 
| 
      
 306 
     | 
    
         
            +
                  end
         
     | 
| 
      
 307 
     | 
    
         
            +
                end
         
     | 
| 
      
 308 
     | 
    
         
            +
              end
         
     | 
| 
      
 309 
     | 
    
         
            +
             
     | 
| 
      
 310 
     | 
    
         
            +
              def with_key(key)
         
     | 
| 
      
 311 
     | 
    
         
            +
                klass = self
         
     | 
| 
      
 312 
     | 
    
         
            +
                o     = Object.new
         
     | 
| 
      
 313 
     | 
    
         
            +
                o.extend WithKey
         
     | 
| 
      
 314 
     | 
    
         
            +
                o.klass = self
         
     | 
| 
      
 315 
     | 
    
         
            +
                o.key   = key
         
     | 
| 
      
 316 
     | 
    
         
            +
                o
         
     | 
| 
      
 317 
     | 
    
         
            +
              end
         
     | 
| 
      
 318 
     | 
    
         
            +
             
     | 
| 
      
 319 
     | 
    
         
            +
              def [](name)
         
     | 
| 
      
 320 
     | 
    
         
            +
                if pkgdir.nil?
         
     | 
| 
      
 321 
     | 
    
         
            +
                  @pkgdir = (base == Rbbt ? '' : base.to_s.downcase) 
         
     | 
| 
      
 322 
     | 
    
         
            +
                end
         
     | 
| 
      
 323 
     | 
    
         
            +
                name = File.join(offsetdir.to_s, name.to_s) unless offsetdir.nil? or offsetdir.empty?
         
     | 
| 
      
 324 
     | 
    
         
            +
                Path.path(name, pkgdir, namespace, lib_dir)
         
     | 
| 
      
 325 
     | 
    
         
            +
              end
         
     | 
| 
      
 326 
     | 
    
         
            +
             
     | 
| 
      
 327 
     | 
    
         
            +
              def method_missing(name, prev = nil)
         
     | 
| 
      
 328 
     | 
    
         
            +
                if prev
         
     | 
| 
      
 329 
     | 
    
         
            +
                  self[prev][name]
         
     | 
| 
      
 330 
     | 
    
         
            +
                else
         
     | 
| 
      
 331 
     | 
    
         
            +
                  self[name]
         
     | 
| 
      
 332 
     | 
    
         
            +
                end
         
     | 
| 
      
 333 
     | 
    
         
            +
              end
         
     | 
| 
      
 334 
     | 
    
         
            +
            end
         
     | 
| 
      
 335 
     | 
    
         
            +
             
     | 
| 
      
 336 
     | 
    
         
            +
            def resource_path(path)
         
     | 
| 
      
 337 
     | 
    
         
            +
              Resource::Path.path(path)
         
     | 
| 
      
 338 
     | 
    
         
            +
            end
         
     |