bin/autoproj_bootstrap in autoproj-1.8.2.b14 vs bin/autoproj_bootstrap in autoproj-1.8.2.b15
- old
+ new
@@ -284,10 +284,35 @@
"emerge '%s'",
"emerge --noreplace '%s'")
end
end
+ # Package manager interface for systems that use yum
+ class YumManager < ShellScriptManager
+ def initialize
+ super(['yum'], true,
+ "yum install '%s'",
+ "yum install -y '%s'")
+ end
+
+ def filter_uptodate_packages(packages)
+ result = `LANG=C rpm -q '#{packages.join("' '")}'`
+ if $?.exitstatus != 0
+ Autoproj.warn "cannot run rpm -q #{packages.join(", ")}. I am assuming that no packages are already installed"
+ return packages
+ else
+ result = []
+ result.split("\n").each_with_index do |line, index|
+ if line =~ /is not installed/
+ result << packages[index]
+ end
+ end
+ result
+ end
+ end
+ end
+
# Package manager interface for systems that use APT and dpkg for
# package management
class AptDpkgManager < ShellScriptManager
def initialize
super(['apt-dpkg'], true,
@@ -572,15 +597,17 @@
end
PACKAGE_HANDLERS = [PackageManagers::AptDpkgManager,
PackageManagers::GemManager,
PackageManagers::EmergeManager,
- PackageManagers::PacmanManager]
+ PackageManagers::PacmanManager,
+ PackageManagers::YumManager]
OS_PACKAGE_HANDLERS = {
'debian' => 'apt-dpkg',
'gentoo' => 'emerge',
- 'arch' => 'pacman'
+ 'arch' => 'pacman',
+ 'fedora' => 'yum'
}
# The information contained in the OSdeps files, as a hash
attr_reader :definitions
# All the information contained in all the OSdeps files, as a mapping
@@ -782,10 +809,15 @@
codenames = [File.read('/etc/debian_version').strip]
if codenames.first =~ /sid/
versions = codenames + ["unstable", "sid"]
end
[['debian'], versions]
+ elsif File.exists?('/etc/fedora-release')
+ release_string = File.read('/etc/fedora-release').strip
+ release_string =~ /Fedora release (\d+)/
+ version = $1
+ [['fedora'], [version]]
elsif File.exists?('/etc/gentoo-release')
release_string = File.read('/etc/gentoo-release').strip
release_string =~ /^.*([^\s]+)$/
version = $1
[['gentoo'], [version]]
@@ -946,10 +978,11 @@
# nonexistent keyword was found, and FOUND_PACKAGES if either packages
# or the ignore keyword were found.
#
def partition_osdep_entry(osdep_name, dep_def, handler_names, excluded, *keys)
keys, *additional_keys = *keys
+ keys ||= []
found = false
nonexistent = false
result = []
found_keys = Hash.new
Array(dep_def).each do |names, values|
@@ -977,10 +1010,10 @@
if rec_found == FOUND_NONEXISTENT then nonexistent = true
elsif rec_found == FOUND_PACKAGES then found = true
end
result.concat(rec_result)
end
- elsif keys
+ else
if names.respond_to?(:to_str) # names could be an array already
names = names.split(',')
end
if handler_names