Move argument processing to table form

This commit is contained in:
Kp 2013-05-12 03:16:24 +00:00
parent 336bd53960
commit d4b06ad757

View file

@ -70,7 +70,6 @@ class DXXCommon(LazyObjectConstructor):
# Paths for the Videocore libs/includes on the Raspberry Pi # Paths for the Videocore libs/includes on the Raspberry Pi
RPI_DEFAULT_VC_PATH='/opt/vc' RPI_DEFAULT_VC_PATH='/opt/vc'
default_OGLES_LIB = 'GLES_CM' default_OGLES_LIB = 'GLES_CM'
@property
def default_builddir(self): def default_builddir(self):
builddir_prefix = self.__arguments.get('builddir_prefix') builddir_prefix = self.__arguments.get('builddir_prefix')
builddir_suffix = self.__arguments.get('builddir_suffix') builddir_suffix = self.__arguments.get('builddir_suffix')
@ -94,37 +93,80 @@ class DXXCommon(LazyObjectConstructor):
default_builddir += builddir_prefix default_builddir += builddir_prefix
return default_builddir return default_builddir
# automatic setup for raspberrypi # automatic setup for raspberrypi
@property
def default_opengles(self): def default_opengles(self):
if self.raspberrypi: if self.raspberrypi:
return 1 return 1
return 0 return 0
@property
def selected_OGLES_LIB(self): def selected_OGLES_LIB(self):
if self.raspberrypi: if self.raspberrypi:
return 'GLESv2' return 'GLESv2'
return self.default_OGLES_LIB return self.default_OGLES_LIB
options = (
{
# Process this early since it influences later checks.
'type': int,
'arguments': (
('raspberrypi', 0),
),
},
{
'type': int,
'arguments': (
('debug', 0),
('profiler', 0),
('opengl', 1),
('asm', 0),
('editor', 0),
('sdlmixer', 1),
('ipv6', 0),
('use_udp', 1),
('use_tracker', 1),
('verbosebuild', 0),
('opengles', default_opengles),
),
},
{
'type': str,
'arguments': (
('rpi_vc_path', RPI_DEFAULT_VC_PATH),
('opengles_lib', selected_OGLES_LIB),
),
},
{
'type': None,
'arguments': (
('extra_version',),
('host_platform',),
# This must be last so that default_builddir will
# have access to other properties.
('builddir', default_builddir),
),
},
)
def __init__(self,ARGUMENTS): def __init__(self,ARGUMENTS):
self.__arguments = ARGUMENTS self.__arguments = ARGUMENTS
self.debug = int(ARGUMENTS.get('debug', 0)) if ARGUMENTS is None:
self.profiler = int(ARGUMENTS.get('profiler', 0)) return
self.opengl = int(ARGUMENTS.get('opengl', 1)) for grp in self.options:
self.asm = int(ARGUMENTS.get('asm', 0)) wanted_type = grp.get('type')
self.editor = int(ARGUMENTS.get('editor', 0)) for o in grp['arguments']:
self.extra_version = ARGUMENTS.get('extra_version', None) name = o[0]
self.sdlmixer = int(ARGUMENTS.get('sdlmixer', 1)) value = ARGUMENTS.get(*o)
self.ipv6 = int(ARGUMENTS.get('ipv6', 0)) if callable(value):
self.host_platform = ARGUMENTS.get('host_platform', None) value = value(self)
self.use_udp = int(ARGUMENTS.get('use_udp', 1)) if wanted_type is not None:
self.use_tracker = int(ARGUMENTS.get('use_tracker', 1)) value = wanted_type(value)
self.verbosebuild = int(ARGUMENTS.get('verbosebuild', 0)) setattr(self, name, value)
self.raspberrypi = int(ARGUMENTS.get('raspberrypi', 0))
self.rpi_vc_path = str(ARGUMENTS.get('rpi_vc_path', self.RPI_DEFAULT_VC_PATH))
self.opengles = int(ARGUMENTS.get('opengles', self.default_opengles))
self.opengles_lib = str(ARGUMENTS.get('opengles_lib', self.default_OGLES_LIB))
self.builddir = ARGUMENTS.get('builddir', self.default_builddir)
if self.builddir != '' and self.builddir[-1:] != '/': if self.builddir != '' and self.builddir[-1:] != '/':
self.builddir += '/' self.builddir += '/'
def clone(self):
clone = DXXCommon.UserBuildSettings(None)
for grp in self.options:
for o in grp['arguments']:
name = o[0]
value = getattr(self, name)
setattr(clone, name, value)
return clone
class UserInstallSettings: class UserInstallSettings:
def __init__(self,ARGUMENTS): def __init__(self,ARGUMENTS):
self.DESTDIR = ARGUMENTS.get('DESTDIR') self.DESTDIR = ARGUMENTS.get('DESTDIR')
@ -414,11 +456,10 @@ class DXXArchive(DXXCommon):
def objects_common(self): def objects_common(self):
objects_common = self.__objects_common objects_common = self.__objects_common
return objects_common + self.platform_settings.platform_objects return objects_common + self.platform_settings.platform_objects
def __init__(self,builddir): def __init__(self,user_settings):
self.PROGRAM_NAME = 'DXX-Archive' self.PROGRAM_NAME = 'DXX-Archive'
DXXCommon.__init__(self) DXXCommon.__init__(self)
self.user_settings = self.UserSettings(ARGUMENTS) self.user_settings = user_settings.clone()
self.user_settings.builddir = builddir
self.check_platform() self.check_platform()
self.prepare_environment() self.prepare_environment()
self.check_endian() self.check_endian()
@ -609,7 +650,7 @@ class DXXProgram(DXXCommon):
self.banner() self.banner()
self.user_settings = self.UserSettings(self.ARGUMENTS, self.target) self.user_settings = self.UserSettings(self.ARGUMENTS, self.target)
if not DXXProgram.static_archive_construction.has_key(self.user_settings.builddir): if not DXXProgram.static_archive_construction.has_key(self.user_settings.builddir):
DXXProgram.static_archive_construction[self.user_settings.builddir] = DXXArchive(self.user_settings.builddir) DXXProgram.static_archive_construction[self.user_settings.builddir] = DXXArchive(self.user_settings)
self.check_platform() self.check_platform()
self.prepare_environment() self.prepare_environment()
self.check_endian() self.check_endian()