Module: Libv8::Patcher

Included in:
Builder
Defined in:
ext/libv8/patcher.rb

Constant Summary collapse

PATCH_DIRECTORY =
File.expand_path '../../../patches', __FILE__

Class Method Summary collapse

Class Method Details

.patch!(*additional_directories) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
# File 'ext/libv8/patcher.rb', line 43

def patch!(*additional_directories)
  File.open(".applied_patches", File::RDWR|File::CREAT) do |f|
    available_patches = patches *additional_directories
    applied_patches = f.readlines.map(&:chomp)

    (available_patches - applied_patches).each do |patch|
      `patch -p1 -N < #{patch}`
      f.puts patch
    end
  end
end

.patch_directories(*additional_directories) ⇒ Object



27
28
29
30
31
32
33
34
35
# File 'ext/libv8/patcher.rb', line 27

def patch_directories(*additional_directories)
  absolute_paths = [PATCH_DIRECTORY]

  additional_directories.each do |directory|
    absolute_paths << File.join(PATCH_DIRECTORY, directory)
  end

  absolute_paths.uniq
end

.patch_directories_for(compiler) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'ext/libv8/patcher.rb', line 7

def patch_directories_for(compiler)
  patch_directories = []

  case
  when compiler.target =~ /arm/
    patch_directories << 'arm'
  end

  case compiler
  when Compiler::GCC
    patch_directories << 'gcc48' if compiler.version >= '4.8'
  when Compiler::Clang
    patch_directories << 'clang'
    patch_directories << 'clang33' if compiler.version >= '3.3'
    patch_directories << 'clang51' if compiler.version >= '5.1'
  end

  patch_directories
end

.patches(*additional_directories) ⇒ Object



37
38
39
40
41
# File 'ext/libv8/patcher.rb', line 37

def patches(*additional_directories)
  patch_directories(*additional_directories).map do |directory|
    Dir.glob(File.join directory, '*.patch')
  end.flatten.sort
end