def install
package = @platform.package(@spec)
return false if package.nil?
package_name, *options = package
package_command_line = [package_name, *options].collect do |component|
Shellwords.escape(component)
end.join(" ")
install_command = "#{@platform.install_command} #{package_command_line}"
if have_priviledge?
sudo = nil
else
sudo = ExecutableFinder.find("sudo")
end
installing_message = "installing '#{package_name}' native package... "
log_message("%s", installing_message)
failed_to_get_super_user_priviledge = false
if have_priviledge?
succeeded = run_command(install_command)
else
if sudo
prompt = "[sudo] password for %u to install <#{package_name}>: "
sudo_options = "-p #{Shellwords.escape(prompt)}"
install_command = "#{sudo} #{sudo_options} #{install_command}"
succeeded = run_command(install_command)
else
succeeded = false
failed_to_get_super_user_priviledge = true
end
end
if failed_to_get_super_user_priviledge
result_message = "require super user privilege"
else
result_message = succeeded ? "succeeded" : "failed"
end
show_postpone_message do
"#{installing_message}#{result_message}\n"
end
log_message("#{result_message}\n")
error_message = nil
unless succeeded
if failed_to_get_super_user_priviledge
error_message = "'\#{package_name}' native package is required.\nRun the following command as super user to install required native package:\n\\# \#{install_command}\n"
else
error_message = "Failed to run '\#{install_command}'.\n"
end
end
if error_message
log_message("%s", error_message)
show_message("%s", error_message)
end
show_message("--------------------\n\n")
succeeded
end