From 3661071ce4d812013bf95b4230e9ed2e6869cee7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Siwek?= Date: Sat, 31 Aug 2013 17:00:59 +0200 Subject: [PATCH] Beign rewriting everything in Ruby :p --- cbrew | 65 ++++++++++++++++++ cbrew.coffee | 105 ----------------------------- device.json | 6 ++ formulas/binutils.coffee | 17 ----- lib/package.rb | 5 ++ lib/package_helpers.rb | 5 ++ network.coffee | 25 ------- packages/binutils.coffee | 4 ++ packages/binutils.rb | 12 ++++ packages/gcc.coffee | 10 +++ packages/glibc.coffee | 4 ++ packages/gmp.coffee | 4 ++ packages/linux-headers.coffee | 4 ++ packages/make.coffee | 4 ++ packages/mpc.coffee | 8 +++ {formulas => packages}/mpfr.coffee | 0 test.rb | 11 +++ 17 files changed, 142 insertions(+), 147 deletions(-) create mode 100755 cbrew delete mode 100644 cbrew.coffee create mode 100644 device.json delete mode 100644 formulas/binutils.coffee create mode 100644 lib/package.rb create mode 100644 lib/package_helpers.rb delete mode 100644 network.coffee create mode 100644 packages/binutils.coffee create mode 100644 packages/binutils.rb create mode 100644 packages/gcc.coffee create mode 100644 packages/glibc.coffee create mode 100644 packages/gmp.coffee create mode 100644 packages/linux-headers.coffee create mode 100644 packages/make.coffee create mode 100644 packages/mpc.coffee rename {formulas => packages}/mpfr.coffee (100%) create mode 100644 test.rb diff --git a/cbrew b/cbrew new file mode 100755 index 000000000..42a7afc2f --- /dev/null +++ b/cbrew @@ -0,0 +1,65 @@ +#!/usr/bin/env ruby +require 'find' +require 'net/http' +require 'uri' +require 'digest/sha1' +require 'json' + +@command = ARGV[0] +@pkgName = ARGV[1] + +@device = JSON.parse(File.read('./device.json'), symbolize_names: true) +@device.each do |key, elem| #symbolize also values + @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}" +end + +def search (pkgName) + Find.find ('packages') do |filename| + return setPkg if filename == 'packages/' + pkgName + '.rb' + end + puts "package #{pkgName} not found :(" +end + +def download + if @pkg.binary_url && @pkg.binary_url.has_key?(@device[:architecture]) + url = @pkg.binary_url[@device[:architecture]] + source = false + else + url = @pkg.source_url + source = true + end + 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]] + return {source: source, filename: filename} +end + +def install + meta = download + if meta[:source] == true + @pkg.build + @pkg.install + else#if meta[:source] == false + system "tar", "zxf", meta[:filename] + end +end + +case @command +when "search" + search @pkgName +when "download" + search @pkgName + download +when "install" + search @pkgName + install +else + puts "I have no idea how to do #{@command} :(" +end diff --git a/cbrew.coffee b/cbrew.coffee deleted file mode 100644 index 88e43a174..000000000 --- a/cbrew.coffee +++ /dev/null @@ -1,105 +0,0 @@ -#!/usr/local/bin/coffee - -program = require 'commander' -fs = require 'fs' -events = require 'events' -global.eventDispatch = new events.EventEmitter -crypto = require 'crypto' -tgz = require 'tar.gz' -ncp = require 'ncp' -ncp = ncp.ncp -network = require './network.coffee' - -ncp.limit = 16 -program.version '0.0.1' -program.parse process.argv - -@device = require './device.json' -action = process.argv[2] -pkgName = process.argv[3] - -@pkg = (pkgName) -> - eventDispatch.on 'packageFound', -> - @pkg = require './formulas/' + pkgName + '.coffee' - global.pkgVersion = @pkg.version - eventDispatch.on 'packageNotFound', -> - console.log 'package ' + pkgName + ' not found :(' - process.exit 1 - - look_for pkgName - -look_for = (pkgName) -> - fs.readdir 'formulas', (err, files) -> - return eventDispatch.emit 'packageFound' for file in files when file.indexOf(pkgName) isnt -1 - return eventDispatch.emit 'packageNotFound' - -search = (pkgName) => - @pkg pkgName - eventDispatch.on 'packageFound', -> - console.log pkgName + ' found!' - -download = (pkgName) => - @pkg pkgName - eventDispatch.on 'packageFound', -> - if @pkg.binary_url then network.getFile @pkg.binary_url else network.getFile @pkg.source_url - - eventDispatch.on 'filename', (filename) -> - @pkg.filename = filename - eventDispatch.on 'gotPackage', -> - sha1sum = crypto.createHash 'sha1' - stream = fs.ReadStream @pkg.filename - stream.on 'data', (data) -> - sha1sum.update data - stream.on 'end', => - digest = sha1sum.digest 'hex' - checksum = @pkg.binary_sha1 or @pkg.source_sha1 - eventDispatch.emit 'packageSumOk' unless digest isnt checksum - -install = (pkgName) => - eventDispatch.on 'extractedPackage', => - console.log 'installing package...' - fs.rename './usr', './xd', => - @device.installed_packages.push { name: pkgName, version: pkgVersion } - fs.writeFile './device.json', JSON.stringify @device, null, 2 - fs.rename './dlist', './meta/' + pkgName + '.directorylist' - fs.rename './filelist', './meta/' + pkgName + '.filelist', -> - console.log 'package ' + pkgName + ' installed!' - - eventDispatch.on 'packageSumOk', -> - console.log 'extracting archive...' - new tgz().extract './' + @pkg.filename, '.', (error) => - eventDispatch.emit 'extractedPackage' unless error - fs.unlink './' + @pkg.filename, (error) -> - throw error if error - - download pkgName - -remove = (pkgName) => - fs.readFile './meta/' + pkgName + '.filelist', (error, data) => - throw error if error - filelist_lines = data.toString().split '\n' - for line in filelist_lines - unless not line - fs.unlink '.' + line, (error) -> - throw error if error - fs.readFile './meta/' + pkgName + '.directorylist', (error, data) -> - throw error if error - directorylist_lines = data.toString().split '\n' - for line in directorylist_lines.reverse() - unless not line - fs.rmdirSync '.' + line - @device.installed_packages = @device.installed_packages.filter (pkg) -> pkg.name isnt pkgName - fs.writeFileSync './device.json', JSON.stringify @device, null, 2 - fs.unlink './meta/' + pkgName + '.filelist' - fs.unlink './meta/' + pkgName + '.directorylist' - console.log pkgName + ' removed!' - -showStatus = => - console.log pkg.name + ': ' + pkg.version for pkg in @device.installed_packages - -switch action - when "search" then search pkgName - when "download" then download pkgName - when "install" then install pkgName - when "remove" then remove pkgName - when "status" then showStatus() diff --git a/device.json b/device.json new file mode 100644 index 000000000..5b09abeb2 --- /dev/null +++ b/device.json @@ -0,0 +1,6 @@ +{ + "architecture": "i686", + "installed_packages": [ + + ] +} diff --git a/formulas/binutils.coffee b/formulas/binutils.coffee deleted file mode 100644 index 0da8d4c38..000000000 --- a/formulas/binutils.coffee +++ /dev/null @@ -1,17 +0,0 @@ -network = require '../network.coffee' - -module.exports = - binary_url: "https://dl.dropboxusercontent.com/s/u3cp7mpdyfx99ij/binutils-2.23.2-chromeos-i686.tar.gz?token_hash=AAGsFB9HXNb5tSAm_Wd2GyIUL59BkZYgMTHkj4CkHLxggg&dl=1" - binary_sha1: "" - - binary_install: -> - - getBinary: -> - network.getFile @binary_url - - build: -> - system './configure' - system 'make' - - install: -> - system 'make install' diff --git a/lib/package.rb b/lib/package.rb new file mode 100644 index 000000000..6749069be --- /dev/null +++ b/lib/package.rb @@ -0,0 +1,5 @@ +require './lib/package_helpers' + +class Package + property :version, :binary_url, :binary_sha1, :source_url +end diff --git a/lib/package_helpers.rb b/lib/package_helpers.rb new file mode 100644 index 000000000..4a2afe67f --- /dev/null +++ b/lib/package_helpers.rb @@ -0,0 +1,5 @@ +def property(*properties) + properties.each do |prop| + self.class_eval("def self.#{prop}(#{prop} = nil); @#{prop} = #{prop} if #{prop}; @#{prop}; end") + end +end diff --git a/network.coffee b/network.coffee deleted file mode 100644 index a79fdc4cd..000000000 --- a/network.coffee +++ /dev/null @@ -1,25 +0,0 @@ -https = require 'https' -progressbar = require 'progress' -fs = require 'fs' - -module.exports.getFile = (url) -> - https.get url, (res) -> - len = parseInt res.headers['content-length'], 10 - content_disposition = res.headers['content-disposition'] - filename = content_disposition.substring content_disposition.indexOf('"')+1, content_disposition.length-1 - eventDispatch.emit 'filename', filename - - console.log(); - bar = new progressbar ' downloading [:bar] :percent :etas', { - complete: '=' - incomplete: ' ' - width: 20 - total: len - } - - res.on 'data', (chunk) -> - fs.appendFileSync filename, chunk - bar.tick chunk.length - - res.on 'end', -> - eventDispatch.emit 'gotPackage' diff --git a/packages/binutils.coffee b/packages/binutils.coffee new file mode 100644 index 000000000..ff9ee545b --- /dev/null +++ b/packages/binutils.coffee @@ -0,0 +1,4 @@ +module.exports = + version: "2.23.2" + binary_url: "https://dl.dropboxusercontent.com/s/u3cp7mpdyfx99ij/binutils-2.23.2-chromeos-i686.tar.gz?token_hash=AAGsFB9HXNb5tSAm_Wd2GyIUL59BkZYgMTHkj4CkHLxggg&dl=1" + binary_sha1: "a7edc9bdaf9fc72112fe6b370f158a9a1aee87ac" diff --git a/packages/binutils.rb b/packages/binutils.rb new file mode 100644 index 000000000..47652f1d4 --- /dev/null +++ b/packages/binutils.rb @@ -0,0 +1,12 @@ +require './lib/package' + +class Binutils < Package + version '2.12' + binary_url ({ + i686: 'https://dl.dropboxusercontent.com/s/u3cp7mpdyfx99ij/binutils-2.23.2-chromeos-i686.tar.gz?token_hash=AAGsFB9HXNb5tSAm_Wd2GyIUL59BkZYgMTHkj4CkHLxggg&dl=1' + }) + binary_sha1 ({ + i686: 'a7edc9bdaf9fc72112fe6b370f158a9a1aee87ac' + }) + source_url "http://xd.xd/" +end diff --git a/packages/gcc.coffee b/packages/gcc.coffee new file mode 100644 index 000000000..2c61a7f67 --- /dev/null +++ b/packages/gcc.coffee @@ -0,0 +1,10 @@ +module.exports = + version: "4.8.1-baseline" + binary_url: "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: "d720c9a804d26728d730b93748072ffa6df7ee3d" + dependencies: [ + "binutils" + "gmp" + "mpc" + "mpfr" + ] diff --git a/packages/glibc.coffee b/packages/glibc.coffee new file mode 100644 index 000000000..2180516cd --- /dev/null +++ b/packages/glibc.coffee @@ -0,0 +1,4 @@ +module.exports = + version: "2.17.90-baseline" + binary_url: "https://dl.dropboxusercontent.com/s/dic47f8eqxhpf89/glibc-2.17.90-baseline-chromeos-i686.tar.gz?token_hash=AAHx_77YtWLLnkjCJRaCJt7RsdKrfkT6lgKS9BZc4O-0Pg&dl=1" + binary_sha1: "defebdeeafd71c40193debf3b786938399ece844" diff --git a/packages/gmp.coffee b/packages/gmp.coffee new file mode 100644 index 000000000..972e16b15 --- /dev/null +++ b/packages/gmp.coffee @@ -0,0 +1,4 @@ +module.exports = + version: "5.1.2" + binary_url: "https://dl.dropboxusercontent.com/s/9cwila1kaomsyl2/gmp-5.1.2-chromeos-i686.tar.gz?token_hash=AAHO9VxBpvXU2GPWBwimsp4hL8DADIItfNnIaFbfcyynMg&dl=1" + binary_sha1: "b03b9508463588bfe9d09303c0725068cddd8810" diff --git a/packages/linux-headers.coffee b/packages/linux-headers.coffee new file mode 100644 index 000000000..fffa4cb80 --- /dev/null +++ b/packages/linux-headers.coffee @@ -0,0 +1,4 @@ +module.exports = + version: "3.4.0" + binary_url: "https://dl.dropboxusercontent.com/s/mdzdoyq7dtnz682/linux-headers-3.4.0-chromeos-i686.tar.gz?token_hash=AAE4yw5oH_SfZ3lAx02mFP603rnjmoB9Gp4vqTY14NsA-A&dl=1" + binary_sha1: "31c933f3a4e82fd9310b0f5b32d79c9a51514fee" diff --git a/packages/make.coffee b/packages/make.coffee new file mode 100644 index 000000000..d7f93b850 --- /dev/null +++ b/packages/make.coffee @@ -0,0 +1,4 @@ +module.exports = + version: "3.82" + binary_url: "https://dl.dropboxusercontent.com/s/f6pg4bkg6m3vn7q/make-3.82-chromeos-i686.tar.gz?token_hash=AAHP__I3leN8BCLdP0pLbkNopoFGGhDuKX0sN-I6Zx4JYg&dl=1" + binary_sha1: "86321098f3f31daa49abb1bb38045dffb1f168b4" diff --git a/packages/mpc.coffee b/packages/mpc.coffee new file mode 100644 index 000000000..f353cae4a --- /dev/null +++ b/packages/mpc.coffee @@ -0,0 +1,8 @@ +module.exports = + version: "1.0.1" + binary_url: "https://dl.dropboxusercontent.com/s/3o6uc8n4uy3oved/mpc-1.0.1-chromeos-i686.tar.gz?token_hash=AAH_OlvQWGUF7lyFhV3DXXgYRM1fupgKoHIwyiVmmVyWUQ&dl=1" + binary_sha1: "86321098f3f31daa49abb1bb38045dffb1f168b4" + dependencies: [ + "mpfr" + "gmp" + ] diff --git a/formulas/mpfr.coffee b/packages/mpfr.coffee similarity index 100% rename from formulas/mpfr.coffee rename to packages/mpfr.coffee diff --git a/test.rb b/test.rb new file mode 100644 index 000000000..53de77850 --- /dev/null +++ b/test.rb @@ -0,0 +1,11 @@ +require './packages/binutils' +require 'json' + +@device = JSON.parse(File.read('./device.json'), symbolize_names: true) +@device.each do |key, elem| + @device[key] = @device[key].to_sym rescue @device[key] +end + +Binutils.version +Binutils.binary_url[@device[:architecture]] +Binutils.binary_sha1[:i686]