def install_to_staging(gem_path)
if attributes.include?(:prefix) && ! attributes[:prefix].nil?
installdir = "#{staging_path}/#{attributes[:prefix]}"
else
gemdir = safesystemout(*[attributes[:gem_gem], 'env', 'gemdir']).chomp
installdir = File.join(staging_path, gemdir)
end
::FileUtils.mkdir_p(installdir)
args = [attributes[:gem_gem], "install", "--quiet", "--no-ri", "--no-rdoc",
"--install-dir", installdir, "--ignore-dependencies"]
if attributes[:gem_env_shebang?]
args += ["-E"]
end
if attributes.include?(:gem_bin_path) && ! attributes[:gem_bin_path].nil?
bin_path = File.join(staging_path, attributes[:gem_bin_path])
else
gem_env = safesystemout(*[attributes[:gem_gem], 'env']).split("\n")
gem_bin = gem_env.select{ |line| line =~ /EXECUTABLE DIRECTORY/ }.first.split(': ').last
bin_path = File.join(staging_path, gem_bin)
end
args += ["--bindir", bin_path]
::FileUtils.mkdir_p(bin_path)
args << gem_path
safesystem(*args)
tmp = bin_path
while ::Dir.entries(tmp).size == 2 || tmp == "/"
logger.info("Deleting empty bin_path", :path => tmp)
::Dir.rmdir(tmp)
tmp = File.dirname(tmp)
end
if attributes[:gem_version_bins?] and File.directory?(bin_path)
(::Dir.entries(bin_path) - ['.','..']).each do |bin|
FileUtils.mv("#{bin_path}/#{bin}", "#{bin_path}/#{bin}-#{self.version}")
end
end
end