# class Object

### Public Instance Methods

install_missing_native_package(native_package_info) click to toggle source

    # File ext/cairo/extconf.rb, line 82
    def install_missing_native_package(native_package_info)
      platform = package_platform
      native_package_info = normalize_native_package_info(native_package_info)
      package = native_package_info[platform]
      return false if package.nil?

      need_super_user_priviledge = true
      case platform
      when :debian
        install_command = "apt-get install -V -y #{package}"
      when :fedora, :redhat
        install_command = "yum install -y #{package}"
      when :homebrew
        need_super_user_priviledge = false
        install_command = "brew install #{package}"
      when :macports
        install_command = "port install -y #{package}"
      else
        return false
      end

      have_priviledge = (not need_super_user_priviledge or super_user?)
      unless have_priviledge
        sudo = find_executable("sudo")
      end

      installing_message = "installing '#{package}' native package... "
      message("%s", installing_message)
      failed_to_get_super_user_priviledge = false

      succeeded = false
      execution_result = ""
      File.open("mkmf.log") do |log|
        log.seek(0, IO::SEEK_END)
        if have_priviledge
          succeeded = xsystem(install_command)
        else
          if sudo
            install_command = "#{sudo} #{install_command}"
            succeeded = xsystem(install_command)
          else
            succeeded = false
            failed_to_get_super_user_priviledge = true
          end
        end
        executed_command_line = log.gets
        execution_result = log.read
      end

      if failed_to_get_super_user_priviledge
        result_message = "require super user privilege"
      else
        result_message = succeeded ? "succeeded" : "failed"
      end
      Logging.postpone do
        "#{installing_message}#{result_message}\n"
      end
      message("#{result_message}\n")

      error_message = nil
      unless succeeded
        if failed_to_get_super_user_priviledge
          error_message = <<-EOM
    '#{package}' native package is required.
    Run the following command as super user to install required native package:
      \# #{install_command}
    EOM
        else
          error_message = <<-EOM
    Failed to run '#{install_command}':
    --
    #{execution_result.chomp}
    --
    EOM
        end
      end
      if error_message
        message("%s", error_message)
        Logging.message("%s", error_message)
      end

      Logging.message("--------------------\n\n")

      succeeded
    end

normalize_native_package_info(native_package_info) click to toggle source

    # File ext/cairo/extconf.rb, line 75
    def normalize_native_package_info(native_package_info)
      native_package_info ||= {}
      native_package_info = native_package_info.dup
      native_package_info[:fedora] ||= native_package_info[:redhat]
      native_package_info
    end

package_platform() click to toggle source

    # File ext/cairo/extconf.rb, line 55
    def package_platform
      if File.exist?("/etc/debian_version")
        :debian
      elsif File.exist?("/etc/fedora-release")
        :fedora
      elsif File.exist?("/etc/redhat-release")
        :redhat
      elsif find_executable("brew")
        :homebrew
      elsif find_executable("port")
        :macports
      else
        :unknown
      end
    end

required_pkg_config_package(package_info, native_package_info=nil) click to toggle source

    # File ext/cairo/extconf.rb, line 168
    def required_pkg_config_package(package_info, native_package_info=nil)
      if package_info.is_a?(Array)
        required_package_info = package_info
      else
        required_package_info = [package_info]
      end
      return true if PKGConfig.have_package(*required_package_info)

      native_package_info ||= {}
      return false unless install_missing_native_package(native_package_info)

      PKGConfig.have_package(*required_package_info)
    end

super_user?() click to toggle source

    # File ext/cairo/extconf.rb, line 71
    def super_user?
      Process.uid.zero?
    end