Commit f1eba9f7 authored by Michał Siwek's avatar Michał Siwek

Implement resolving dependencies

parent 65e80514
......@@ -10,21 +10,22 @@ require 'fileutils'
@pkgName = ARGV[1]
@device = JSON.parse(File.read('./device.json'), symbolize_names: true)
@device.each do |key, elem| #symbolize also values
#symbolize also values
@device.each do |key, elem|
@device[key] = @device[key].to_sym rescue @device[key]
end
def setPkg
require './packages/' + @pkgName
@pkg = Object.const_get(@pkgName.capitalize)
puts "Found #{@pkgName}, version #{@pkg.version}"
def setPkg (pkgName, silent = false)
require './packages/' + pkgName
@pkg = Object.const_get(pkgName.capitalize)
puts "Found #{pkgName}, version #{@pkg.version}" unless silent
end
def search (pkgName)
def search (pkgName, silent = false)
Find.find ('packages') do |filename|
return setPkg if filename == 'packages/' + pkgName + '.rb'
return setPkg(pkgName, silent) if filename == 'packages/' + pkgName + '.rb'
end
puts "package #{pkgName} not found :("
abort "package #{pkgName} not found :("
end
def download
......@@ -40,27 +41,82 @@ def download
uri = URI.parse url
filename = File.basename(uri.path)
system('wget', '--content-disposition', url)
abort 'Checksum mismatch, try again' unless Digest::SHA1.hexdigest( File.read("./#{filename}") ) == @pkg.binary_sha1[@device[:architecture]]
abort 'Checksum mismatch :/ try again' unless Digest::SHA1.hexdigest( File.read("./#{filename}") ) == @pkg.binary_sha1[@device[:architecture]]
puts "Archive downloaded"
return {source: source, filename: filename}
end
def install
meta = download
if meta[:source] == true
puts "Building from source, this may take a while..."
@pkg.build
puts "Installing..."
@pkg.install
def resolveDependenciesAndInstall
origin = @pkgName
resolveDependencies
search origin
install
end
def resolveDependencies
@dependencies = []
def pushDeps
if @pkg.dependencies
@dependencies << @pkg.dependencies
@pkg.dependencies.each do |dep|
search dep, true
pushDeps
end
end
end
pushDeps
puts "Following packages also need to be installed: "
@dependencies.flatten!.each do |dep|
print dep + " "
end
puts ""
puts "Do you agree? [Y/n]"
response = STDIN.getc
case response
when "n"
abort "No changes made."
when "\n", "y", "Y"
puts "Proceeding..."
proceed = true
else
puts "Unpacking archive, this may take a while..."
system "tar", "zxf", meta[:filename]
puts "Installing..."
FileUtils.mv './usr', './xd'
FileUtils.mv './dlist', "./meta/#{@pkgName}.directorylist"
FileUtils.mv './filelist', "./meta/#{@pkgName}.filelist"
puts "I don't understand '#{response}' :("
abort "No changes made."
end
if proceed
@dependencies.each do |dep|
search dep
install
end
end
end
def install
unless @pkg.is_fake
meta = download
if meta[:source] == true
puts "Building from source, this may take a while..."
@pkg.build
puts "Installing..."
@pkg.install
else
puts "Unpacking archive, this may take a while..."
system "tar", "zxf", meta[:filename]
puts "Installing..."
#system "mv", "./usr/*", "./xd"
FileUtils.mv './dlist', "./meta/#{@pkgName}.directorylist"
FileUtils.mv './filelist', "./meta/#{@pkgName}.filelist"
end
end
#add to installed packages
@device[:installed_packages].push(name: @pkgName, version: @pkg.version)
File.open('./device.json', 'w') do |file|
......@@ -104,7 +160,7 @@ when "download"
download
when "install"
search @pkgName
install
resolveDependenciesAndInstall
when "remove"
search @pkgName
remove
......
require './lib/package_helpers'
class Package
property :version, :binary_url, :binary_sha1, :source_url
property :version, :binary_url, :binary_sha1, :source_url, :is_fake
class << self
attr_reader :dependencies
attr_reader :dependencies, :is_fake
end
def self.depends_on (dependency = nil)
@dependencies = [] unless @dependencies
......@@ -13,4 +13,8 @@ class Package
end
@dependencies
end
def self.is_fake
end
end
require './lib/package'
class Buildessential < Package
version '1.0'
is_fake
depends_on 'gcc'
depends_on 'make'
depends_on 'linuxheaders'
end
require './lib/package'
class Gcc < Package
version '4.8.1-baseline'
binary_url ({
i686: "https://dl.dropboxusercontent.com/s/c06pcge8ogsqfcd/gcc-4.8.1-baseline-chromeos-i686.tar.gz?token_hash=AAFLnE_8iL_lAnGtAAVM5G_sYqejA44jGW8D9r0a8xCjrQ&dl=1"
})
binary_sha1 ({
i686: "d720c9a804d26728d730b93748072ffa6df7ee3d"
})
depends_on 'binutils'
depends_on 'gmp'
depends_on 'mpc'
depends_on 'mpfr'
depends_on 'glibc'
end
require './lib/package'
class Glibc < Package
version '2.17.90-baseline'
binary_url ({
i686: "https://dl.dropboxusercontent.com/s/dic47f8eqxhpf89/glibc-2.17.90-baseline-chromeos-i686.tar.gz?token_hash=AAHx_77YtWLLnkjCJRaCJt7RsdKrfkT6lgKS9BZc4O-0Pg&dl=1"
})
binary_sha1 ({
i686: "defebdeeafd71c40193debf3b786938399ece844"
})
end
require './lib/package'
class Gmp < Package
version "5.1.2"
binary_url ({
i686: "https://dl.dropboxusercontent.com/s/9cwila1kaomsyl2/gmp-5.1.2-chromeos-i686.tar.gz?token_hash=AAHO9VxBpvXU2GPWBwimsp4hL8DADIItfNnIaFbfcyynMg&dl=1"
})
binary_sha1 ({
i686: "b03b9508463588bfe9d09303c0725068cddd8810"
})
end
require './lib/package'
class Linuxheaders < Package
version '3.4.0'
binary_url ({
i686: "https://dl.dropboxusercontent.com/s/mdzdoyq7dtnz682/linux-headers-3.4.0-chromeos-i686.tar.gz?token_hash=AAE4yw5oH_SfZ3lAx02mFP603rnjmoB9Gp4vqTY14NsA-A&dl=1"
})
binary_sha1 ({
i686: "31c933f3a4e82fd9310b0f5b32d79c9a51514fee"
})
end
require './lib/package'
class Make < Package
version '3.82'
binary_url ({
i686: "https://dl.dropboxusercontent.com/s/f6pg4bkg6m3vn7q/make-3.82-chromeos-i686.tar.gz?token_hash=AAHP__I3leN8BCLdP0pLbkNopoFGGhDuKX0sN-I6Zx4JYg&dl=1"
})
binary_sha1 ({
i686: "86321098f3f31daa49abb1bb38045dffb1f168b4"
})
end
require './lib/package'
class Mpc < Package
version '1.0.1'
binary_url ({
i686: "https://dl.dropboxusercontent.com/s/3o6uc8n4uy3oved/mpc-1.0.1-chromeos-i686.tar.gz?token_hash=AAH_OlvQWGUF7lyFhV3DXXgYRM1fupgKoHIwyiVmmVyWUQ&dl=1"
})
binary_sha1 ({
i686: "86321098f3f31daa49abb1bb38045dffb1f168b4"
})
end
require './lib/package'
class Mpfr < Package
version '3.1.2'
binary_url ({
i686: "https://dl.dropboxusercontent.com/s/lo9ks3g7ar3zpfu/mpfr-3.1.2-chromeos-i686.tar.gz?token_hash=AAH1GlLfYtUs4uxl1ayeGTBe8RJ5uTXzOAsXgSlv8G5rrA&dl=1"
})
binary_sha1 ({
i686: "eb81b9bb83ebb43b94ab33e43293f1df3bcbad7c"
})
end
require './packages/binutils'
require './packages/gcc'
require 'json'
require 'pathname'
......@@ -7,4 +7,4 @@ require 'pathname'
@device[key] = @device[key].to_sym rescue @device[key]
end
Binutils.dependencies
Gcc.dependencies
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment