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