libv8 3.16.14.3 → 3.16.14.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/README.md +26 -15
- data/ext/libv8/builder.rb +32 -20
- data/ext/libv8/compiler.rb +30 -38
- data/ext/libv8/compiler/clang.rb +15 -0
- data/ext/libv8/compiler/gcc.rb +15 -0
- data/ext/libv8/compiler/generic_compiler.rb +38 -0
- data/ext/libv8/patcher.rb +55 -0
- data/lib/libv8/version.rb +1 -1
- data/libv8.gemspec +1 -0
- data/patches/{do-not-imply-vfp3-and-armv7.patch → arm/do-not-imply-vfp3-and-armv7.patch} +0 -0
- data/patches/arm/do-not-use-vfp2.patch +13 -0
- data/patches/clang/no-unused-private-field.patch +28 -0
- data/patches/clang33/silence-nested-anon-types-and-unused-function-warnings.patch +28 -0
- data/patches/clang51/no-unused-variable.patch +12 -0
- data/patches/fPIC-for-static.patch +1 -1
- data/patches/{gcc48-wno-unused-local-typedefs.patch → gcc48/gcc48-wno-unused-local-typedefs.patch} +0 -0
- metadata +1942 -1955
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b5ca0adef389868bd9b38aa3838d79fd4ce0b86
|
4
|
+
data.tar.gz: 9d9b1024787acb57297050fc139a31692b6fce4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a7f48927eaef75a822eca0bd2a8e841f87d4d22784bc989e99577496430f96ded65c6f1eb12e7e4a20335c7b3fb4f14c606e71e8ec77064323abd8b90b06667
|
7
|
+
data.tar.gz: e4cecdcc0c59c16ac14b275a969c6495be3b459fde3b93fabb886a8036e32390b5db1d91fa62be170050ea0e2e384ce0b9f9a428046510899aa347a359f0adaf
|
data/.travis.yml
CHANGED
@@ -1,12 +1,12 @@
|
|
1
1
|
rvm:
|
2
2
|
- 2.0.0
|
3
|
-
- 1.
|
3
|
+
- 2.1.0
|
4
4
|
- 1.9.3
|
5
|
-
- rbx-
|
5
|
+
- rbx-2
|
6
6
|
notifications:
|
7
7
|
recipients:
|
8
8
|
- cowboyd@thefrontside.net
|
9
9
|
- bordjukov@gmail.com
|
10
10
|
before_install:
|
11
11
|
- sudo apt-get update
|
12
|
-
- sudo apt-get install git-svn
|
12
|
+
- sudo apt-get install git-svn
|
data/README.md
CHANGED
@@ -21,10 +21,13 @@ platforms.
|
|
21
21
|
* x86_64-darwin10.7.0
|
22
22
|
* x86_64-darwin-10
|
23
23
|
* x86_64-darwin-11
|
24
|
-
* x86_64-darwin-
|
24
|
+
* x86_64-darwin-12
|
25
|
+
* x86_64-darwin-13
|
25
26
|
* x86_64-linux
|
26
27
|
* x86-linux
|
27
28
|
* x86_64-freebsd-9
|
29
|
+
* x86_64-freebsd-10
|
30
|
+
* x86_64-solaris-2.11
|
28
31
|
|
29
32
|
If you don't see your platform on this list, first, make sure that it
|
30
33
|
installs from source, and second talk to us about setting up a binary
|
@@ -38,19 +41,6 @@ own point release after the main v8 version. So libv8 `3.11.8.5` and
|
|
38
41
|
think about it would be that `3.11.8.14` is the 14th release of the
|
39
42
|
libv8 rubygem based on v8 version `3.11.8`
|
40
43
|
|
41
|
-
### Using a git version
|
42
|
-
|
43
|
-
If you want to use the latest unstable version of the gem you can do
|
44
|
-
so by specifying the git repo as a gem source. Just add the following
|
45
|
-
to your `Gemfile`:
|
46
|
-
|
47
|
-
```Ruby
|
48
|
-
gem "libv8", git: "git://github.com/cowboyd/libv8.git", submodules: true
|
49
|
-
```
|
50
|
-
|
51
|
-
You can find more info on using a git repo as a gem source in
|
52
|
-
[Bundler's documentation](http://bundler.io/v1.3/git.html).
|
53
|
-
|
54
44
|
#### Source and Binary Releases
|
55
45
|
|
56
46
|
Starting with libv8 `3.11.8.0`, all even point releases contain
|
@@ -70,6 +60,19 @@ distribution
|
|
70
60
|
|
71
61
|
> This step release system is a workaround to carlhuda/bundler#1537
|
72
62
|
|
63
|
+
### Using a git version
|
64
|
+
|
65
|
+
If you want to use the latest unstable version of the gem you can do
|
66
|
+
so by specifying the git repo as a gem source. Just make sure you have
|
67
|
+
`git-svn` and add the following to your `Gemfile`:
|
68
|
+
|
69
|
+
```Ruby
|
70
|
+
gem "libv8", git: "git://github.com/cowboyd/libv8.git", submodules: true
|
71
|
+
```
|
72
|
+
|
73
|
+
You can find more info on using a git repo as a gem source in
|
74
|
+
[Bundler's documentation](http://bundler.io/v1.3/git.html).
|
75
|
+
|
73
76
|
### What if I can't install from source?
|
74
77
|
|
75
78
|
If you can fix the "Makefile" so that it correctly compiles for your
|
@@ -88,7 +91,7 @@ To get the source, these commands will get you started:
|
|
88
91
|
Because libv8 is the interface for the V8 engine used by
|
89
92
|
[therubyracer](http://github.com/cowboyd/therubyracer), you may need
|
90
93
|
to use libv8, even if you have V8 installed already. If you wish to
|
91
|
-
use your own V8 installation, rather than have it built for you, use
|
94
|
+
use your own V8 installation, rather than have it built for you, use
|
92
95
|
the `--with-system-v8` option.
|
93
96
|
|
94
97
|
Using RubyGems:
|
@@ -102,6 +105,14 @@ Using Bundler (in your Gemfile):
|
|
102
105
|
Please note that if you intend to run your own V8, you must install
|
103
106
|
both V8 *and its headers* (found in libv8-dev for Debian distros).
|
104
107
|
|
108
|
+
### Bring your own compiler
|
109
|
+
|
110
|
+
You can specify a compiler of your choice by either setting the `CXX`
|
111
|
+
environment variable before compilation, or by adding the
|
112
|
+
`--with-cxx=<compiler>` option to the bundle configuration:
|
113
|
+
|
114
|
+
bundle config build.libv8 --with-cxx=clang++
|
115
|
+
|
105
116
|
### About
|
106
117
|
|
107
118
|
This project spun off of
|
data/ext/libv8/builder.rb
CHANGED
@@ -3,13 +3,18 @@ require File.expand_path '../compiler', __FILE__
|
|
3
3
|
require File.expand_path '../arch', __FILE__
|
4
4
|
require File.expand_path '../make', __FILE__
|
5
5
|
require File.expand_path '../checkout', __FILE__
|
6
|
+
require File.expand_path '../patcher', __FILE__
|
6
7
|
|
7
8
|
module Libv8
|
8
9
|
class Builder
|
9
10
|
include Libv8::Arch
|
10
|
-
include Libv8::Compiler
|
11
11
|
include Libv8::Make
|
12
12
|
include Libv8::Checkout
|
13
|
+
include Libv8::Patcher
|
14
|
+
|
15
|
+
def initialize
|
16
|
+
@compiler = choose_compiler
|
17
|
+
end
|
13
18
|
|
14
19
|
def make_flags(*flags)
|
15
20
|
profile = enable_config('debug') ? 'debug' : 'release'
|
@@ -17,33 +22,38 @@ module Libv8
|
|
17
22
|
# FreeBSD uses gcc 4.2 by default which leads to
|
18
23
|
# compilation failures due to warnings about aliasing.
|
19
24
|
# http://svnweb.freebsd.org/ports/head/lang/v8/Makefile?view=markup
|
20
|
-
flags << "strictaliasing=off" if
|
25
|
+
flags << "strictaliasing=off" if @compiler.is_a?(Compiler::GCC) and @compiler.version < '4.4'
|
21
26
|
|
22
27
|
# Avoid compilation failures on the Raspberry Pi.
|
23
|
-
flags << "vfp2=off vfp3=off" if
|
28
|
+
flags << "vfp2=off vfp3=off" if @compiler.target.include? "arm"
|
24
29
|
|
25
30
|
# FIXME: Determine when to activate this instead of leaving it on by
|
26
31
|
# default.
|
27
|
-
flags << "hardfp=on" if
|
32
|
+
flags << "hardfp=on" if @compiler.target.include? "arm"
|
28
33
|
|
29
34
|
# Fix Malformed archive issue caused by GYP creating thin archives by
|
30
35
|
# default.
|
31
36
|
flags << "ARFLAGS.target=crs"
|
32
37
|
|
33
38
|
# Solaris / Smart OS requires additional -G flag to use with -fPIC
|
34
|
-
flags << "CFLAGS=-G" if
|
39
|
+
flags << "CFLAGS=-G" if @compiler.target =~ /solaris/
|
40
|
+
|
41
|
+
# Disable werror as this version of v8 is getting difficult to maintain
|
42
|
+
# with it on
|
43
|
+
flags << 'werror=no'
|
35
44
|
|
36
45
|
"#{libv8_arch}.#{profile} #{flags.join ' '}"
|
37
46
|
end
|
38
47
|
|
39
48
|
def build_libv8!
|
40
49
|
Dir.chdir(V8_Source) do
|
50
|
+
fail 'No compilers available' if @compiler.nil?
|
41
51
|
checkout!
|
42
52
|
setup_python!
|
43
53
|
setup_build_deps!
|
44
|
-
|
54
|
+
patch! *patch_directories_for(@compiler)
|
45
55
|
print_build_info
|
46
|
-
puts `env CXX=#{compiler} LINK=#{compiler} #{make} #{make_flags}`
|
56
|
+
puts `env CXX=#{@compiler} LINK=#{@compiler} #{make} #{make_flags}`
|
47
57
|
end
|
48
58
|
return $?.exitstatus
|
49
59
|
end
|
@@ -69,19 +79,21 @@ module Libv8
|
|
69
79
|
`ln -fs #{GYP_Source} build/gyp`
|
70
80
|
end
|
71
81
|
|
72
|
-
|
73
|
-
File.open(".applied_patches", File::RDWR|File::CREAT) do |f|
|
74
|
-
available_patches = Dir.glob(File.expand_path '../../../patches/*.patch', __FILE__).sort
|
75
|
-
applied_patches = f.readlines.map(&:chomp)
|
82
|
+
private
|
76
83
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
end
|
84
|
+
def choose_compiler
|
85
|
+
compiler_names = if with_config('cxx') then [with_config('cxx')]
|
86
|
+
elsif ENV['CXX'] then [ENV['CXX']]
|
87
|
+
else Compiler::KNOWN_COMPILERS
|
88
|
+
end
|
83
89
|
|
84
|
-
|
90
|
+
available_compilers = Compiler.available_compilers(*compiler_names)
|
91
|
+
compatible_compilers = available_compilers.select(&:compatible?)
|
92
|
+
|
93
|
+
unless compatible_compilers.empty? then compatible_compilers
|
94
|
+
else available_compilers
|
95
|
+
end.first
|
96
|
+
end
|
85
97
|
|
86
98
|
def python_version
|
87
99
|
if system 'which python 2>&1 > /dev/null'
|
@@ -96,8 +108,8 @@ module Libv8
|
|
96
108
|
|
97
109
|
puts "Using python #{python_version}"
|
98
110
|
|
99
|
-
puts "Using compiler: #{compiler}"
|
100
|
-
unless
|
111
|
+
puts "Using compiler: #{@compiler} (#{@compiler.name} version #{@compiler.version})"
|
112
|
+
unless @compiler.compatible?
|
101
113
|
warn "Unable to find a compiler officially supported by v8."
|
102
114
|
warn "It is recommended to use GCC v4.4 or higher"
|
103
115
|
end
|
data/ext/libv8/compiler.rb
CHANGED
@@ -1,50 +1,42 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
require 'open3'
|
3
|
+
require File.expand_path '../compiler/generic_compiler', __FILE__
|
4
|
+
require File.expand_path '../compiler/gcc', __FILE__
|
5
|
+
require File.expand_path '../compiler/clang', __FILE__
|
6
|
+
|
1
7
|
module Libv8
|
2
8
|
module Compiler
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
cc ||= check_gcc_compiler ENV["CXX"]
|
9
|
-
cc ||= check_gcc_compiler "g++"
|
9
|
+
KNOWN_COMPILERS = [
|
10
|
+
'c++',
|
11
|
+
'g++48', 'g++46', 'g++44', 'g++',
|
12
|
+
'clang++',
|
13
|
+
]
|
10
14
|
|
11
|
-
|
12
|
-
# These are common on BSD's after
|
13
|
-
# GCC has been installed by a port
|
14
|
-
cc ||= check_gcc_compiler "g++44"
|
15
|
-
cc ||= check_gcc_compiler "g++46"
|
16
|
-
cc ||= check_gcc_compiler "g++48"
|
17
|
-
|
18
|
-
if cc.nil?
|
19
|
-
warn "Unable to find a compiler officially supported by v8."
|
20
|
-
warn "It is recommended to use GCC v4.4 or higher"
|
21
|
-
@compiler = cc = 'g++'
|
22
|
-
end
|
23
|
-
|
24
|
-
@compiler = cc
|
25
|
-
end
|
15
|
+
module_function
|
26
16
|
|
27
|
-
|
17
|
+
def system_compilers
|
18
|
+
available_compilers *Compiler::KNOWN_COMPILERS
|
28
19
|
end
|
29
20
|
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
compiler = `which #{name} 2> /dev/null`
|
35
|
-
return nil unless $?.success?
|
36
|
-
|
37
|
-
compiler.chomp!
|
38
|
-
return nil unless `#{compiler} --version` =~ /([0-9]\.[0-9]\.[0-9])/
|
21
|
+
def available_compilers(*compiler_names)
|
22
|
+
compiler_paths = compiler_names.map { |name| find name }.reject &:nil?
|
23
|
+
end
|
39
24
|
|
40
|
-
|
41
|
-
|
25
|
+
def find(name)
|
26
|
+
return nil if name.empty?
|
27
|
+
path, _, status = Open3.capture3 "which #{name}"
|
28
|
+
path.chomp!
|
29
|
+
determine_type(path).new(path) if status.success?
|
42
30
|
end
|
43
31
|
|
44
|
-
def
|
45
|
-
|
46
|
-
|
47
|
-
|
32
|
+
def determine_type(compiler_path)
|
33
|
+
compiler_version = Open3.capture3("#{compiler_path} -v")[0..1].join
|
34
|
+
|
35
|
+
case compiler_version
|
36
|
+
when /\bclang\b/i then Clang
|
37
|
+
when /^gcc/i then GCC
|
38
|
+
else GenericCompiler
|
39
|
+
end
|
48
40
|
end
|
49
41
|
end
|
50
42
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Libv8
|
2
|
+
module Compiler
|
3
|
+
class GenericCompiler
|
4
|
+
VERSION_REGEXP = /(\d+\.\d+(\.\d+)*)/
|
5
|
+
TARGET_REGEXP = /Target: ([a-z0-9\-_.]*)/
|
6
|
+
|
7
|
+
def initialize(path)
|
8
|
+
@path = path
|
9
|
+
end
|
10
|
+
|
11
|
+
def name
|
12
|
+
File.basename @path
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_s
|
16
|
+
@path
|
17
|
+
end
|
18
|
+
|
19
|
+
def version
|
20
|
+
call('-v')[0..1].join =~ VERSION_REGEXP
|
21
|
+
$1
|
22
|
+
end
|
23
|
+
|
24
|
+
def target
|
25
|
+
call('-v')[0..1].join =~ TARGET_REGEXP
|
26
|
+
$1
|
27
|
+
end
|
28
|
+
|
29
|
+
def compatible?
|
30
|
+
false
|
31
|
+
end
|
32
|
+
|
33
|
+
def call(*arguments)
|
34
|
+
Open3.capture3 arguments.unshift(@path).join(' ')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Libv8
|
2
|
+
module Patcher
|
3
|
+
PATCH_DIRECTORY = File.expand_path '../../../patches', __FILE__
|
4
|
+
|
5
|
+
module_function
|
6
|
+
|
7
|
+
def patch_directories_for(compiler)
|
8
|
+
patch_directories = []
|
9
|
+
|
10
|
+
case
|
11
|
+
when compiler.target =~ /arm/
|
12
|
+
patch_directories << 'arm'
|
13
|
+
end
|
14
|
+
|
15
|
+
case compiler
|
16
|
+
when Compiler::GCC
|
17
|
+
patch_directories << 'gcc48' if compiler.version >= '4.8'
|
18
|
+
when Compiler::Clang
|
19
|
+
patch_directories << 'clang'
|
20
|
+
patch_directories << 'clang33' if compiler.version >= '3.3'
|
21
|
+
patch_directories << 'clang51' if compiler.version >= '5.1'
|
22
|
+
end
|
23
|
+
|
24
|
+
patch_directories
|
25
|
+
end
|
26
|
+
|
27
|
+
def patch_directories(*additional_directories)
|
28
|
+
absolute_paths = [PATCH_DIRECTORY]
|
29
|
+
|
30
|
+
additional_directories.each do |directory|
|
31
|
+
absolute_paths << File.join(PATCH_DIRECTORY, directory)
|
32
|
+
end
|
33
|
+
|
34
|
+
absolute_paths.uniq
|
35
|
+
end
|
36
|
+
|
37
|
+
def patches(*additional_directories)
|
38
|
+
patch_directories(*additional_directories).map do |directory|
|
39
|
+
Dir.glob(File.join directory, '*.patch')
|
40
|
+
end.flatten.sort
|
41
|
+
end
|
42
|
+
|
43
|
+
def patch!(*additional_directories)
|
44
|
+
File.open(".applied_patches", File::RDWR|File::CREAT) do |f|
|
45
|
+
available_patches = patches *additional_directories
|
46
|
+
applied_patches = f.readlines.map(&:chomp)
|
47
|
+
|
48
|
+
(available_patches - applied_patches).each do |patch|
|
49
|
+
`patch -p1 -N < #{patch}`
|
50
|
+
f.puts patch
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/lib/libv8/version.rb
CHANGED
data/libv8.gemspec
CHANGED
@@ -32,5 +32,6 @@ Gem::Specification.new do |s|
|
|
32
32
|
s.add_development_dependency "rake-compiler"
|
33
33
|
s.add_development_dependency "rspec"
|
34
34
|
s.add_development_dependency "rspec-spies"
|
35
|
+
s.add_development_dependency "rubysl", "~> 2.0" if RUBY_ENGINE == "rbx"
|
35
36
|
s.add_development_dependency "vulcan"
|
36
37
|
end
|
File without changes
|
@@ -0,0 +1,13 @@
|
|
1
|
+
diff --git a/build/common.gypi b/build/common.gypi
|
2
|
+
index 3a59639..594abe4 100644
|
3
|
+
--- a/build/common.gypi
|
4
|
+
+++ b/build/common.gypi
|
5
|
+
@@ -173,7 +173,6 @@
|
6
|
+
[ 'v8_use_arm_eabi_hardfloat=="true"', {
|
7
|
+
'defines': [
|
8
|
+
'USE_EABI_HARDFLOAT=1',
|
9
|
+
- 'CAN_USE_VFP2_INSTRUCTIONS',
|
10
|
+
],
|
11
|
+
'target_conditions': [
|
12
|
+
['_toolset=="target"', {
|
13
|
+
|