class Bundler::Source::Path

def generate_bin(spec, disable_extensions = false)

def generate_bin(spec, disable_extensions = false)
  gem_dir  = Pathname.new(spec.full_gem_path)
  # Some gem authors put absolute paths in their gemspec
  # and we have to save them from themselves
  spec.files = spec.files.map do |p|
    next if File.directory?(p)
    begin
      Pathname.new(p).relative_path_from(gem_dir).to_s
    rescue ArgumentError
      p
    end
  end.compact
  gem_file = Bundler.rubygems.build_gem gem_dir, spec
  installer = Path::Installer.new(spec, :env_shebang => false)
  run_hooks(:pre_install, installer)
  installer.build_extensions unless disable_extensions
  run_hooks(:post_build, installer)
  installer.generate_bin
  run_hooks(:post_install, installer)
rescue Gem::InvalidSpecificationException => e
  Bundler.ui.warn "\n#{spec.name} at #{spec.full_gem_path} did not have a valid gemspec.\n" \
                  "This prevents bundler from installing bins or native extensions, but " \
                  "that may not affect its functionality."
  if !spec.extensions.empty? && !spec.email.empty?
    Bundler.ui.warn "If you need to use this package without installing it from a gem " \
                    "repository, please contact #{spec.email} and ask them " \
                    "to modify their .gemspec so it can work with `gem build`."
  end
  Bundler.ui.warn "The validation message from Rubygems was:\n  #{e.message}"
ensure
  if gem_dir && gem_file
    FileUtils.rm_rf(gem_dir.join gem_file)
  end
end