# File lib/rubygems/installer.rb, line 60
    def install(force=false, install_dir=Gem.dir, ignore_this_parameter=false)
      # if we're forcing the install, then disable security, _unless_
      # the security policy says that we only install singed gems
      # (this includes Gem::Security::HighSecurity)
      security_policy = @options[:security_policy]
      security_policy = nil if force && security_policy && security_policy.only_signed != true

      begin
        format = Gem::Format.from_file_by_path @gem, security_policy
      rescue Gem::Package::FormatError
        raise Gem::InstallError, "invalid gem format for #{@gem}"
      end
      unless force
        spec = format.spec
        # Check the Ruby version.
        if (rrv = spec.required_ruby_version)
          unless rrv.satisfied_by?(Gem::Version.new(RUBY_VERSION))
            raise Gem::InstallError, "#{spec.name} requires Ruby version #{rrv}"
          end
        end
        unless @options[:ignore_dependencies]
          spec.dependencies.each do |dep_gem|
            ensure_dependency!(spec, dep_gem)
          end
        end
      end

      if @options[:build_root]
        build_root = @options[:build_root]
        FileUtils.mkdir_p build_root
        raise Gem::FilePermissionError.new(build_root) unless File.writable?(build_root)
        install_dir = build_root + install_dir
        FileUtils.mkdir_p install_dir
      end

      raise Gem::FilePermissionError.new(Pathname.new(install_dir).expand_path) unless File.writable?(install_dir)

      # Build spec dir.
      @directory = File.join(install_dir, "gems", format.spec.full_name).untaint
      FileUtils.mkdir_p @directory

      extract_files(@directory, format)
      generate_bin(format.spec, install_dir)
      build_extensions(@directory, format.spec)

      # Build spec/cache/doc dir.
      build_support_directories(install_dir)

      # Write the spec and cache files.
      write_spec(format.spec, File.join(install_dir, "specifications"))
      unless File.exist? File.join(install_dir, "cache", @gem.split(/\//).pop)
        FileUtils.cp @gem, File.join(install_dir, "cache")
      end

      puts format.spec.post_install_message unless format.spec.post_install_message.nil?

      format.spec.loaded_from = File.join(install_dir, 'specifications', format.spec.full_name+".gemspec")
      return format.spec
    rescue Zlib::GzipFile::Error
      raise InstallError, "gzip error installing #{@gem}"
    end