Skip to content
This repository was archived by the owner on Mar 29, 2024. It is now read-only.

Add packaging and update to v8 5.4.420 #2

Merged
merged 2 commits into from
Aug 16, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ env:
- NO_INTERACTION=1
- TEST_TIMEOUT=120
matrix:
- V8=5.2
- V8=5.2 TEST_PHP_ARGS=-m
- V8=5.4
- V8=5.4 TEST_PHP_ARGS=-m

before_install:
- sudo add-apt-repository ppa:pinepain/libv8-${V8} -y
Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,15 @@ you from V8 API utilizing to implement more amazing stuff.

### Requirements

You will need some fresh v8 Google JavaScript enging version installed. At this time extension tested on 5.2.371.
You will need some fresh v8 Google JavaScript enging version installed. At this time extension tested on 5.4.420.

- For Ubuntu there are [pinepain/libv8-5.2](https://launchpad.net/~pinepain/+archive/ubuntu/libv8-5.2) PPA.
- For Ubuntu there are [pinepain/libv8-5.4](https://launchpad.net/~pinepain/+archive/ubuntu/libv8-5.4) PPA.
To install fresh libv8 do:

```
$ sudo add-apt-repository ppa:pinepain/libv8-5.2 -y
$ sudo add-apt-repository ppa:pinepain/libv8-5.4 -y
$ sudo apt-get update -q
$ sudo apt-get install -y libv8-5.2-dev
$ sudo apt-get install -y libv8-5.4-dev
```
- For OS X there are [v8.rb](https://github.com/pinepain/php-v8/blob/master/scripts/homebrew/v8.rb) homebrew formula.
To install fresh libv8 do:
Expand Down
1 change: 1 addition & 0 deletions scripts/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pyc
13 changes: 0 additions & 13 deletions scripts/build_v8.sh

This file was deleted.

148 changes: 70 additions & 78 deletions scripts/load_deps.py → scripts/deps.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
#!/usr/bin/env python

import sys
import os
import urllib
import base64

import hashlib

class VarImpl(object):
"""
Expand Down Expand Up @@ -54,24 +55,10 @@ def Lookup(self, var_name):
raise gclient_utils.Error("Var is not defined: %s" % var_name)


def FileRead(filename, mode='rU'):
with open(filename, mode=mode) as f:
return f.read()


if len(sys.argv) < 2 or len(sys.argv) > 3:
# print("Usage: %s <path to DEPS file>" % sys.argv[0])
print("Usage: %s <v8 version>" % sys.argv[0])
print("Options:")
print(" --homebrew Generate hombrew output")
exit(1)


# https://chromium.googlesource.com/v8/v8.git/+archive/5.0.71.11.tar.gz
# https://chromium.googlesource.com/v8/v8.git/+/5.0.71.11/DEPS?format=TEXT


class V8DepsFileLoader(object):
class V8DepsRemoteFileLoader(object):
def __init__(self, version):
self.version = version

Expand All @@ -83,22 +70,16 @@ def load(self):

return base64.b64decode(s)

class V8DepsLocalFileLoader(object):
def __init__(self, path):
self.path = path

class V8DepsResolver(object):
def __init__(self, version):
self.version = version

def get_deps(self):
url = 'https://chromium.googlesource.com/v8/v8.git/+archive/%s.tar.gz' % self.version

return {url: 'v8'}

def output_deps(self):
for k, v in self.get_deps().items():
print ("%s %s" % (k, v))
def load(self):
with open(self.path) as f:
return f.read()


class DepsResolver(object):
class AbstractDepsResolver(object):
def __init__(self, deps_content):
self.deps_content = deps_content

Expand All @@ -124,9 +105,17 @@ def convert_parsed_deps(self, deps):
deps_converted = {}

for k, v in deps.items():
v = v.replace('@', '/+archive/') + '.tar.gz'
url, revision = v.split('@', 2)

resource = url.rsplit('/', 1)[1].split('.', 1)[0]
target = k.replace('v8/', '')

deps_converted[v] = k
deps_converted[resource] = {
'url': url,
'revision': revision,
'resource': resource,
'target': target
}

return deps_converted

Expand All @@ -135,70 +124,73 @@ def get_deps(self):

return self.convert_parsed_deps(parsed)

def output_deps(self):
for k, v in self.get_deps().items():
print ("%s %s" % (k, v))

class HomebrewDepsResolver(AbstractDepsResolver):
def __init__(self, deps_content, version, tpl_path, out_path):
self.deps_content = deps_content
self.version = version
self.tpl_path = tpl_path
self.out_path = out_path

class HomebrewDepsResolver(DepsResolver):
def convert_parsed_deps(self, deps):
deps_converted = {}
def import_deps_fast(self):
vars = {}

for k, v in deps.items():
url, revision = v.split('@', 2)
url = "https://chromium.googlesource.com/v8/v8.git/+archive/%s.tar.gz" % self.version

resource = url.rsplit('/', 1)[1].split('.', 1)[0]
target = k.replace('v8/', '')
f = urllib.urlopen(url)
s = f.read()
f.close()

deps_converted[resource] = {
'url': url,
'revision': revision,
'resource': resource,
'target': target
}
sha256 = hashlib.sha256(s).hexdigest()

return deps_converted
vars['{{ URL }}'] = 'url "%s"' % url
vars['{{ SHA256 }}'] = 'sha256 "%s"' % sha256

def output_deps(self):
print (" # resources definition, do not edit, autogenerated")
print ("")
resources_def = []
resources_def.append(" # resources definition, do not edit, autogenerated")
resources_def.append("")

for k, v in self.get_deps().items():
print (" resource \"%s\" do " % (v['resource']))
print (" url \"%s\"," % (v['url']))
print (" :revision => \"%s\"" % (v['revision']))
print (" end")
print ("")
resources_def.append(" resource \"%s\" do" % (v['resource']))
resources_def.append(" url \"%s\"," % (v['url']))
resources_def.append(" :revision => \"%s\"" % (v['revision']))
resources_def.append(" end")
resources_def.append("")

vars['{{ RESOURCES_DEFINITION }}'] = "\n".join(resources_def).strip()

print ("")
print ("")
print (" # resources installation, do not edit, autogenerated")
resources_inst = []
resources_inst.append(" # resources installation, do not edit, autogenerated")

for k, v in self.get_deps().items():
print (" (buildpath/\"{target}\").install resource(\"{resource}\")".format(**v))
resources_inst.append(" (buildpath/\"{target}\").install resource(\"{resource}\")".format(**v))

vars['{{ RESOURCES_INSTALLATION }}'] = "\n".join(resources_inst).strip()

print ("")
tpl = ""
with open(self.tpl_path) as f:
tpl = f.read()

if len(sys.argv) == 2:
version = sys.argv[1]
is_homebrew = False
else:
version = sys.argv[2]
is_homebrew = True
for k, v in vars.iteritems():
tpl = tpl.replace(k, v)

deps_loader = V8DepsFileLoader(version)
with open(self.out_path, 'w') as f:
f.write(tpl)

deps_content = deps_loader.load()

# print(deps_content)
# deps_content = FileRead(sys.argv[1])
class PPAPackagingDepsResolver(AbstractDepsResolver):
def import_deps_fast(self):
for k, v in self.get_deps().items():
tgz = v['url'] + '/+archive/' + v['revision']+ '.tar.gz'

cmd = "mkdir -p " + v['target']

v8_deps_resolver = V8DepsResolver(version)
if is_homebrew:
deps_resolver = HomebrewDepsResolver(deps_content)
else:
deps_resolver = DepsResolver(deps_content)
if os.path.isdir(v['target']):
cmd = "rm -rf " + v['target'] + " && " + cmd

v8_deps_resolver.output_deps()
print(cmd)
os.system(cmd)

deps_resolver.output_deps()
cmd = "curl -s " + tgz + " | tar zxf - -C " + v['target']
print (cmd)
os.system(cmd)
21 changes: 21 additions & 0 deletions scripts/homebrew/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Homebrew formula for v8 JavaScript engling and semi-automated script to update it
==============================

Prerequisites
-------------

You need up to date homebrew and supported OS X

Refreshing formula
------------------

The process is very much automated and the following command can be used to update formula to desired v8 version.

./load_deps.py <v8 version>

Installing v8
-------------

You can install it a same way as other Hombrew formulae:

brew install v8.rb
25 changes: 25 additions & 0 deletions scripts/homebrew/load_deps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/usr/bin/env python

import sys
import os

parentdir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
os.sys.path.insert(0, parentdir)

import deps

if len(sys.argv) != 2:
# print("Usage: %s <path to DEPS file>" % sys.argv[0])
print("Usage: %s <v8 version>" % sys.argv[0])
exit(1)

version = sys.argv[1]

deps_loader = deps.V8DepsRemoteFileLoader(version)
deps_content = deps_loader.load()

dir_path = os.path.dirname(os.path.realpath(__file__))

deps_resolver = deps.HomebrewDepsResolver(deps_content, version, dir_path +'/v8.rb.in', dir_path + '/v8.rb')

deps_resolver.import_deps_fast()
Loading