Remove two-stage definition of lazy objects

This commit is contained in:
Kp 2013-03-24 23:03:46 +00:00
parent c94b48ca33
commit 6025ceaa80

View file

@ -132,14 +132,16 @@ class DXXCommon:
return self.__lazy_object_cache[name] return self.__lazy_object_cache[name]
except KeyError as e: except KeyError as e:
if transform_target is None: if transform_target is None:
transform_target = lambda n: os.path.splitext(n)[0] transform_target = lambda _, n: os.path.splitext(n)[0]
value = [self.env.StaticObject(target='%s%s%s' % (self.user_settings.builddir, transform_target(s), self.env["OBJSUFFIX"]), source=s) for s in source] value = [self.env.StaticObject(target='%s%s%s' % (self.user_settings.builddir, transform_target(self, s), self.env["OBJSUFFIX"]), source=s) for s in source]
self.__lazy_object_cache[name] = value self.__lazy_object_cache[name] = value
return value return value
def create_lazy_object_property(self,name,transform_target=None): @staticmethod
l = lambda s: s.__lazy_objects(name, getattr(s, '%s_sources' % name), transform_target) def create_lazy_object_property(sources,transform_target=None):
setattr(self.__class__, 'objects_%s' % name, property(l)) name = repr(sources)
l = lambda s: s.__lazy_objects(name, sources, transform_target)
return property(l)
def __init__(self): def __init__(self):
self.__lazy_object_cache = {} self.__lazy_object_cache = {}
@ -263,7 +265,7 @@ class DXXArchive(DXXCommon):
# Use a prefix of "common" since that is the source directory # Use a prefix of "common" since that is the source directory
# governed by these arguments. # governed by these arguments.
ARGUMENTS = argumentIndirection('common') ARGUMENTS = argumentIndirection('common')
common_sources = [os.path.join(srcdir, f) for f in [ objects_common = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'2d/2dsline.c', '2d/2dsline.c',
'2d/bitblt.c', '2d/bitblt.c',
'2d/bitmap.c', '2d/bitmap.c',
@ -302,8 +304,8 @@ class DXXArchive(DXXCommon):
'texmap/ntmap.c', 'texmap/ntmap.c',
'texmap/scanline.c' 'texmap/scanline.c'
] ]
] ])
editor_sources = [os.path.join(srcdir, f) for f in [ objects_editor = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'editor/func.c', 'editor/func.c',
'ui/button.c', 'ui/button.c',
'ui/checkbox.c', 'ui/checkbox.c',
@ -326,20 +328,18 @@ class DXXArchive(DXXCommon):
'ui/uidraw.c', 'ui/uidraw.c',
'ui/userbox.c' 'ui/userbox.c'
] ]
] ])
# for non-ogl # for non-ogl
arch_sdl_sources = [os.path.join(srcdir, f) for f in [ objects_arch_sdl = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'texmap/tmapflat.c' 'texmap/tmapflat.c'
] ]
] ])
arch_sdlmixer_sources = [os.path.join(srcdir, f) for f in [ objects_arch_sdlmixer = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'arch/sdl/digi_mixer_music.c', 'arch/sdl/digi_mixer_music.c',
] ]
] ])
def __init__(self,builddir): def __init__(self,builddir):
self.PROGRAM_NAME = 'DXX-Archive' self.PROGRAM_NAME = 'DXX-Archive'
for t in ['arch_sdl', 'arch_sdlmixer', 'common', 'editor']:
self.create_lazy_object_property(t)
DXXCommon.__init__(self) DXXCommon.__init__(self)
self.user_settings = self.UserSettings(ARGUMENTS) self.user_settings = self.UserSettings(ARGUMENTS)
self.user_settings.builddir = builddir self.user_settings.builddir = builddir
@ -354,20 +354,22 @@ class DXXProgram(DXXCommon):
VERSION_MINOR = 57 VERSION_MINOR = 57
VERSION_MICRO = 3 VERSION_MICRO = 3
static_archive_construction = {} static_archive_construction = {}
similar_arch_ogl_sources = [os.path.join('similar', f) for f in [ def _apply_target_name(self,name):
return os.path.join(os.path.dirname(name), '.%s.%s' % (self.target, os.path.splitext(os.path.basename(name))[0]))
objects_similar_arch_ogl = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [
'arch/ogl/gr.c', 'arch/ogl/gr.c',
'arch/ogl/ogl.c', 'arch/ogl/ogl.c',
] ]
] ], _apply_target_name)
similar_arch_sdl_sources = [os.path.join('similar', f) for f in [ objects_similar_arch_sdl = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [
'arch/sdl/gr.c', 'arch/sdl/gr.c',
] ]
] ])
similar_arch_sdlmixer_sources = [os.path.join('similar', f) for f in [ objects_similar_arch_sdlmixer = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [
'arch/sdl/jukebox.c' 'arch/sdl/jukebox.c'
] ]
] ], _apply_target_name)
similar_common_sources = [os.path.join('similar', f) for f in [ objects_similar_common = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [
'arch/sdl/event.c', 'arch/sdl/event.c',
'arch/sdl/init.c', 'arch/sdl/init.c',
'arch/sdl/key.c', 'arch/sdl/key.c',
@ -386,8 +388,8 @@ class DXXProgram(DXXCommon):
'misc/hash.c', 'misc/hash.c',
'misc/physfsx.c', 'misc/physfsx.c',
] ]
] ], _apply_target_name)
similar_editor_sources = [os.path.join('similar', f) for f in [ objects_similar_editor = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [
'editor/autosave.c', 'editor/autosave.c',
'editor/curves.c', 'editor/curves.c',
'editor/eglobal.c', 'editor/eglobal.c',
@ -419,7 +421,7 @@ class DXXProgram(DXXCommon):
'editor/seguvs.c', 'editor/seguvs.c',
'editor/texture.c', 'editor/texture.c',
] ]
] ], _apply_target_name)
class UserSettings(DXXCommon.UserSettings): class UserSettings(DXXCommon.UserSettings):
def __init__(self,ARGUMENTS,target): def __init__(self,ARGUMENTS,target):
DXXCommon.UserSettings.__init__(self, ARGUMENTS) DXXCommon.UserSettings.__init__(self, ARGUMENTS)
@ -470,15 +472,7 @@ class DXXProgram(DXXCommon):
self.libs = env['LIBS'] self.libs = env['LIBS']
env.Append(CPPPATH = [os.path.join(program.srcdir, 'arch/linux/include')]) env.Append(CPPPATH = [os.path.join(program.srcdir, 'arch/linux/include')])
def _apply_target_name(self,name):
return os.path.join(os.path.dirname(name), '.%s.%s' % (self.target, os.path.splitext(os.path.basename(name))[0]))
def __init__(self): def __init__(self):
apply_target_name = lambda n: self._apply_target_name(n)
for t in ['similar_arch_ogl', 'similar_arch_sdl', 'similar_arch_sdlmixer', 'similar_common', 'similar_editor']:
self.create_lazy_object_property(t, apply_target_name)
for t in ['common', 'editor', 'arch_sdlmixer', 'use_udp']:
self.create_lazy_object_property(t)
DXXCommon.__init__(self) DXXCommon.__init__(self)
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):
@ -581,7 +575,7 @@ class D1XProgram(DXXProgram):
self.env.Append(CPPDEFINES = [('DXX_BUILD_DESCENT_I', 1)]) self.env.Append(CPPDEFINES = [('DXX_BUILD_DESCENT_I', 1)])
# general source files # general source files
common_sources = [os.path.join(srcdir, f) for f in [ objects_common = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'2d/font.c', '2d/font.c',
'2d/palette.c', '2d/palette.c',
'2d/pcx.c', '2d/pcx.c',
@ -649,34 +643,34 @@ class D1XProgram(DXXProgram):
'misc/args.c', 'misc/args.c',
#'tracker/client/tracker_client.c' #'tracker/client/tracker_client.c'
] ]
] ])
# for editor # for editor
editor_sources = [os.path.join(srcdir, f) for f in [ objects_editor = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'editor/centers.c', 'editor/centers.c',
'editor/ehostage.c', 'editor/ehostage.c',
'editor/medrobot.c', 'editor/medrobot.c',
'editor/texpage.c', 'editor/texpage.c',
] ]
] ])
use_udp_sources = [os.path.join(srcdir, 'main/net_udp.c')] objects_use_udp = DXXCommon.create_lazy_object_property([os.path.join(srcdir, 'main/net_udp.c')])
# SDL_mixer sound implementation # SDL_mixer sound implementation
arch_sdlmixer_sources = [os.path.join(srcdir, f) for f in [ objects_arch_sdlmixer = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'arch/sdl/digi_mixer.c', 'arch/sdl/digi_mixer.c',
] ]
] ])
# assembler related # assembler related
asm_sources = [os.path.join(srcdir, f) for f in [ objects_asm = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'texmap/tmap_ll.asm', 'texmap/tmap_ll.asm',
'texmap/tmap_flt.asm', 'texmap/tmap_flt.asm',
'texmap/tmapfade.asm', 'texmap/tmapfade.asm',
'texmap/tmap_lin.asm', 'texmap/tmap_lin.asm',
'texmap/tmap_per.asm' 'texmap/tmap_per.asm'
] ]
] ])
def register_program(self): def register_program(self):
versid_cppdefines=self.env['CPPDEFINES'][:] versid_cppdefines=self.env['CPPDEFINES'][:]
if self.user_settings.extra_version: if self.user_settings.extra_version:
@ -696,7 +690,7 @@ class D2XProgram(DXXProgram):
self.env.Append(CPPDEFINES = [('DXX_BUILD_DESCENT_II', 1)]) self.env.Append(CPPDEFINES = [('DXX_BUILD_DESCENT_II', 1)])
# general source files # general source files
common_sources = [os.path.join(srcdir, f) for f in [ objects_common = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'2d/font.c', '2d/font.c',
'2d/palette.c', '2d/palette.c',
'2d/pcx.c', '2d/pcx.c',
@ -771,34 +765,34 @@ class D2XProgram(DXXProgram):
'misc/args.c', 'misc/args.c',
'misc/physfsrwops.c', 'misc/physfsrwops.c',
] ]
] ])
# for editor # for editor
editor_sources = [os.path.join(srcdir, f) for f in [ objects_editor = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'editor/centers.c', 'editor/centers.c',
'editor/medrobot.c', 'editor/medrobot.c',
'editor/texpage.c', 'editor/texpage.c',
'main/bmread.c', 'main/bmread.c',
] ]
] ])
use_udp_sources = [os.path.join(srcdir, 'main/net_udp.c')] objects_use_udp = DXXCommon.create_lazy_object_property([os.path.join(srcdir, 'main/net_udp.c')])
# SDL_mixer sound implementation # SDL_mixer sound implementation
arch_sdlmixer_sources = [os.path.join(srcdir, f) for f in [ objects_arch_sdlmixer = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'arch/sdl/digi_mixer.c', 'arch/sdl/digi_mixer.c',
] ]
] ])
# assembler related # assembler related
asm_sources = [os.path.join(srcdir, f) for f in [ objects_asm = DXXCommon.create_lazy_object_property([os.path.join(srcdir, f) for f in [
'texmap/tmap_ll.asm', 'texmap/tmap_ll.asm',
'texmap/tmap_flt.asm', 'texmap/tmap_flt.asm',
'texmap/tmapfade.asm', 'texmap/tmapfade.asm',
'texmap/tmap_lin.asm', 'texmap/tmap_lin.asm',
'texmap/tmap_per.asm' 'texmap/tmap_per.asm'
] ]
] ])
def register_program(self): def register_program(self):
versid_cppdefines=self.env['CPPDEFINES'][:] versid_cppdefines=self.env['CPPDEFINES'][:]