making ROS_OS_OVERRIDE work properly for #2814

This commit is contained in:
Tully Foote 2011-01-11 00:49:25 +00:00
parent 013af744e4
commit 126ee04c60
1 changed files with 34 additions and 21 deletions

View File

@ -85,6 +85,27 @@ def lsb_get_version():
except:
return None
#### Override class for debugging and unsupported OSs ###########
class OSOverride:
def __init__(self):
self._os_name = "uninitialized from ROS_OS_OVERRIDE=name:version"
self._os_version = "uninitialized from ROS_OS_OVERRIDE=name:version"
def check_presence(self):
try:
(self._os_name, self._os_version) = os.environ["ROS_OS_OVERRIDE"].split(':')
print >> sys.stderr, "Using environment variable ROS_OS_OVERRIDE name = %s version = %s"%(self._os_name, self._os_version)
return True
except:
return False
def get_version(self):
return self._os_version
def get_name(self):
return self._os_name
class OSDetectException(roslib.exceptions.ROSLibException): pass
class OSBase:
@ -113,6 +134,7 @@ class OSBase:
"""
raise OSDetectException("get_version unimplemented")
###### Debian SPECIALIZATION #########################
class Debian(OSBase):
"""
@ -398,25 +420,6 @@ class FreeBSD(OSBase):
###### FreeBSD SPECIALIZATION #########################
#### Override class for debugging and unsupported OSs ###########
class Override(OSBase):
def __init__(self):
self._os_name = "uninitialized from ROS_OS_OVERRIDE=name:version"
self._os_version = "uninitialized from ROS_OS_OVERRIDE=name:version"
def check_presence(self):
try:
(self._os_name, self._os_version) = os.environ["ROS_OS_OVERRIDE"].split(':')
print >> sys.stderr, "Using environment variable ROS_OS_OVERRIDE name = %s version = %s"%(self._os_name, self._os_version)
return True
except:
return False
def get_version(self):
return self._os_version
def get_name(self):
return self._os_name
@ -426,8 +429,7 @@ class OSDetect:
""" This class will iterate over registered classes to lookup the
active OS and version"""
def __init__(self, os_list = [Debian(), Ubuntu(), Mint(), Macports(), Arch(), Fedora(), Rhel(), Gentoo(), Cygwin(), FreeBSD()]):
self._os_list = [ Override()]
self._os_list.extend(os_list)
self._os_list = os_list
for o in self._os_list:
if not isinstance(o, OSBase):
raise OSDetectException("Class [%s] not derived from OSBase"%o.__class__.__name__)
@ -443,12 +445,23 @@ class OSDetect:
# \TODO look at throwing here
def detect_os(self):
override = OSOverride()
if override.check_presence():
for os_class in self._os_list:
if os_class.get_name() == override.get_name():
self._os_name = override.get_name()
self._os_version = override.get_version()
self._os_class = os_class
return True
for os_class in self._os_list:
if os_class.check_presence():
self._os_name = os_class.get_name()
self._os_version = os_class.get_version()
self._os_class = os_class
return True
# No solution found
attempted_oss = [o.get_name() for o in self._os_list]
raise OSDetectException("Could not detect OS, tried %s"%attempted_oss)
return False