Sha256: a3af761df704f6c3df8aac44f3d2a67c63f471200a7eebc103a8d69c1b7263b6

Contents?: true

Size: 1.91 KB

Versions: 2

Compression:

Stored size: 1.91 KB

Contents

require "fileutils"
require "rbconfig"
require "shellwords"

module CapybaraWebkitBuilder
  extend self

  SUCCESS_STATUS = 0
  COMMAND_NOT_FOUND_STATUS = 127

  def make_bin
    ENV['MAKE'] || 'make'
  end

  def qmake_bin
    ENV['QMAKE'] || default_qmake_binary
  end

  def spec
    ENV['SPEC'] || os_spec
  end

  def default_qmake_binary
    case RbConfig::CONFIG['host_os']
    when /freebsd/
      "qmake-qt4"
    else
      "qmake"
    end
  end

  def os_spec
    case RbConfig::CONFIG['host_os']
    when /linux/
      "linux-g++"
    when /freebsd/
      "freebsd-g++"
    when /mingw32/
      "win32-g++"
    else
      "macx-g++"
    end
  end

  def sh(command)
    system(command)
    success = $?.exitstatus == SUCCESS_STATUS
    if $?.exitstatus == COMMAND_NOT_FOUND_STATUS
      puts "Command '#{command}' not available"
    elsif !success
      puts "Command '#{command}' failed"
    end
    success
  end

  def makefile(*configs)
    configs += default_configs
    configs = configs.map { |config| config.shellescape}.join(" ")
    sh("#{qmake_bin} -spec #{spec} #{configs}")
  end

  def qmake
    sh("#{make_bin} qmake")
  end

  def path_to_binary
    case RUBY_PLATFORM
    when /mingw32/
      "src/debug/webkit_server.exe"
    else
      "src/webkit_server"
    end
  end

  def build
    sh(make_bin) or return false

    FileUtils.mkdir("bin") unless File.directory?("bin")
    FileUtils.cp(path_to_binary, "bin", :preserve => true)
  end

  def clean
    File.open("Makefile", "w") do |file|
      file.print "all:\n\t@echo ok\ninstall:\n\t@echo ok"
    end
  end

  def default_configs
    configs = []
    libpath = ENV["CAPYBARA_WEBKIT_LIBS"]
    cppflags = ENV["CAPYBARA_WEBKIT_INCLUDE_PATH"]
    if libpath
      configs << "LIBS += #{libpath}"
    end
    if cppflags
      configs << "INCLUDEPATH += #{cppflags}"
    end
    configs
  end

  def build_all
    makefile &&
    qmake &&
    build &&
    clean
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
capybara-webkit-1.4.1 lib/capybara_webkit_builder.rb
capybara-webkit-1.4.0 lib/capybara_webkit_builder.rb