class Bindeps::Dependency
Attributes
binaries[R]
libraries[R]
name[R]
version[R]
Public Class Methods
new(name, binaries, versionconfig, urlconfig, unpack, libraries=[])
click to toggle source
# File lib/bindeps.rb, line 66 def initialize(name, binaries, versionconfig, urlconfig, unpack, libraries=[]) @name = name unless binaries.is_a? Array raise ArgumentError, "binaries must be an array" end @binaries = binaries @libraries = libraries @version = versionconfig['number'] @version_cmd = versionconfig['command'] @url = choose_url urlconfig @unpack = unpack end
Public Instance Methods
all_installed?()
click to toggle source
# File lib/bindeps.rb, line 154 def all_installed? @binaries.each do |bin| unless installed? bin return false end end true end
choose_url(urlconfig)
click to toggle source
# File lib/bindeps.rb, line 90 def choose_url urlconfig arch = System.arch if urlconfig.key? arch sys = urlconfig[arch] os = System.os.to_s if sys.key? os return sys[os] else raise UnsupportedSystemError, "bindeps config for #{@name} #{arch} doesn't " + "contain an entry for #{os}" end else raise UnsupportedSystemError, "bindeps config for #{@name} doesn't contain an " + "entry for #{arch}" end end
download()
click to toggle source
# File lib/bindeps.rb, line 109 def download wget = which('wget').first curl = which('curl').first if wget cmd = "#{wget} #{@url}" stdout, stderr, status = Open3.capture3 cmd elsif curl cmd = "#{curl} -O -J -L #{@url}" stdout, stderr, status = Open3.capture3 cmd else msg = "You don't have curl or wget?! What kind of computer is " msg << "this?! Windows?! BeOS? OS/2?" raise DownloadFailedError.new(msg) end if !status.success? raise DownloadFailedError, "download of #{@url} for #{@name} failed:\n#{stdout}\n#{stderr}" end end
install(src, dest, destprefix, destdir = '')
click to toggle source
# File lib/bindeps.rb, line 182 def install(src, dest, destprefix, destdir = '') gem_home = ENV['GEM_HOME'] home = ENV['HOME'] basedir = File.join(home, '.local') if destdir.length > 0 basedir = destdir elsif gem_home.nil? ENV['PATH'] = ENV['PATH'] + ":#{File.join(basedir, 'bin')}" else basedir = ENV['GEM_HOME'] end FileUtils.mkdir_p File.join(basedir, 'bin') FileUtils.mkdir_p File.join(basedir, 'lib') destprefix = 'bin' if destprefix == '.' install_location = File.join(basedir, destprefix, File.basename(dest)) FileUtils.install(src, install_location, :mode => 0775) end
install_missing(destdir='')
click to toggle source
# File lib/bindeps.rb, line 81 def install_missing destdir='' destdir = File.expand_path destdir unless destdir.empty? unless all_installed? puts "Installing #{@name} (#{@version})..." download unpack destdir end end
installed?(bin)
click to toggle source
# File lib/bindeps.rb, line 163 def installed? bin path = which(bin) if path.length > 0 ret = `#{@version_cmd} 2>&1`.split("\n").map{ |l| l.strip }.join('|') if ret && (/#{@version}/ =~ ret) return path end else if Dir.exist?("#{ENV['HOME']}/.local/bin") ENV['PATH'] = ENV['PATH'] + ":#{ENV['HOME']}/.local/bin" path = which(bin) if path.length > 0 return path end end end false end
unpack(destdir = '')
click to toggle source
# File lib/bindeps.rb, line 129 def unpack destdir = '' destdir = File.expand_path destdir unless destdir.empty? archive = File.basename(@url) if @unpack Unpacker.archive? archive Unpacker.unpack(archive) do |dir| Dir.chdir dir do Dir['**/*'].each do |extracted| file = File.basename(extracted) if @binaries.include?(file) || @libraries.include?(file) dir = File.dirname(extracted).split(File::PATH_SEPARATOR).last dir = %w[bin lib].include?(dir) ? dir : '.' unless File.directory?(extracted) install(extracted, extracted, dir, destdir) end end end end end else bin = File.basename(@url) install(bin, @binaries.first, 'bin', destdir) end end