Sha256: f5bab00a918c3f3c6e741184d027c0be17a8163f891feb0ae1a9b8f14e001e6d

Contents?: true

Size: 1.43 KB

Versions: 5

Compression:

Stored size: 1.43 KB

Contents

module Libv8
  module Patcher
    PATCH_DIRECTORY = File.expand_path '../../../patches', __FILE__

    module_function

    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

    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

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

    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
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
libv8-3.16.14.8.rc1 ext/libv8/patcher.rb
libv8-3.16.14.7 ext/libv8/patcher.rb
libv8-3.16.14.6 ext/libv8/patcher.rb
libv8-3.16.14.5 ext/libv8/patcher.rb
libv8-3.16.14.4 ext/libv8/patcher.rb