class MiniPortile

Attributes

configure_options[W]
files[RW]
host[RW]
logger[RW]
name[R]
original_host[R]
patch_files[RW]
target[RW]
version[R]

Public Class Methods

new(name, version) click to toggle source
# File lib/mini_portile.rb, line 14
def initialize(name, version)
  @name = name
  @version = version
  @target = 'ports'
  @files = []
  @patch_files = []
  @logger = STDOUT

  @original_host = @host = detect_host
end

Public Instance Methods

activate() click to toggle source
# File lib/mini_portile.rb, line 116
def activate
  lib_path = File.join(port_path, "lib")
  vars = {
    'PATH'          => File.join(port_path, 'bin'),
    'CPATH'         => File.join(port_path, 'include'),
    'LIBRARY_PATH'  => lib_path
  }.reject { |env, path| !File.directory?(path) }

  output "Activating #{@name} #{@version} (from #{port_path})..."
  vars.each do |var, path|
    full_path = File.expand_path(path)

    # turn into a valid Windows path (if required)
    full_path.gsub!(File::SEPARATOR, File::ALT_SEPARATOR) if File::ALT_SEPARATOR

    # save current variable value
    old_value = ENV[var] || ''

    unless old_value.include?(full_path)
      ENV[var] = "#{full_path}#{File::PATH_SEPARATOR}#{old_value}"
    end
  end

  # rely on LDFLAGS when cross-compiling
  if File.exist?(lib_path) && (@host != @original_host)
    full_path = File.expand_path(lib_path)

    old_value = ENV.fetch("LDFLAGS", "")

    unless old_value.include?(full_path)
      ENV["LDFLAGS"] = "-L#{full_path} #{old_value}".strip
    end
  end
end
compile() click to toggle source
# File lib/mini_portile.rb, line 69
def compile
  execute('compile', make_cmd)
end
configure() click to toggle source
# File lib/mini_portile.rb, line 59
def configure
  return if configured?

  md5_file = File.join(tmp_path, 'configure.md5')
  digest   = Digest::MD5.hexdigest(computed_options)
  File.open(md5_file, "w") { |f| f.write digest }

  execute('configure', %Q(sh configure #{computed_options}))
end
configure_options() click to toggle source
# File lib/mini_portile.rb, line 55
def configure_options
  @configure_options ||= configure_defaults
end
configured?() click to toggle source
# File lib/mini_portile.rb, line 87
def configured?
  configure = File.join(work_path, 'configure')
  makefile  = File.join(work_path, 'Makefile')
  md5_file  = File.join(tmp_path, 'configure.md5')

  stored_md5  = File.exist?(md5_file) ? File.read(md5_file) : ""
  current_md5 = Digest::MD5.hexdigest(computed_options)

  (current_md5 == stored_md5) && newer?(makefile, configure)
end
cook() click to toggle source
# File lib/mini_portile.rb, line 105
def cook
  download unless downloaded?
  extract
  patch
  configure unless configured?
  compile
  install unless installed?

  return true
end
download() click to toggle source
# File lib/mini_portile.rb, line 25
def download
  @files.each do |url|
    filename = File.basename(url)
    download_file(url, File.join(archives_path, filename))
  end
end
downloaded?() click to toggle source
# File lib/mini_portile.rb, line 78
def downloaded?
  missing = @files.detect do |url|
    filename = File.basename(url)
    !File.exist?(File.join(archives_path, filename))
  end

  missing ? false : true
end
extract() click to toggle source
# File lib/mini_portile.rb, line 32
def extract
  @files.each do |url|
    filename = File.basename(url)
    extract_file(File.join(archives_path, filename), tmp_path)
  end
end
install() click to toggle source
# File lib/mini_portile.rb, line 73
def install
  return if installed?
  execute('install', %Q(#{make_cmd} install))
end
installed?() click to toggle source
# File lib/mini_portile.rb, line 98
def installed?
  makefile  = File.join(work_path, 'Makefile')
  target_dir = Dir.glob("#{port_path}/*").find { |d| File.directory?(d) }

  newer?(target_dir, makefile)
end
patch() click to toggle source
# File lib/mini_portile.rb, line 39
def patch
  # Set GIT_DIR while appying patches to work around
  # git-apply doing nothing when started within another
  # git directory.
  ENV['GIT_DIR'], old_git = '.', ENV['GIT_DIR']
  begin
    @patch_files.each do |full_path|
      next unless File.exists?(full_path)
      output "Running git apply with #{full_path}..."
      execute('patch', %Q(git apply #{full_path}))
    end
  ensure
    ENV['GIT_DIR'] = old_git
  end
end
path() click to toggle source
# File lib/mini_portile.rb, line 151
def path
  File.expand_path(port_path)
end