Allow source lists to carry extra attributes

Use it to move the transform_target parameter into the list itself.

Fix the non-OpenGL build, which should have had a transform_target
parameter and did not.
This commit is contained in:
Kp 2013-04-21 19:49:59 +00:00
parent a842e15d94
commit 1efaa50f6a

View file

@ -140,20 +140,28 @@ class DXXCommon:
flags = self.__pkg_config_sdl[cmd] flags = self.__pkg_config_sdl[cmd]
env.MergeFlags(flags) env.MergeFlags(flags)
def __lazy_objects(self,name,source,transform_target): def __lazy_objects(self,name,source):
try: try:
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: def __strip_extension(self,name):
transform_target = lambda _, n: os.path.splitext(n)[0] return os.path.splitext(name)[0]
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] value = []
for s in source:
if isinstance(s, str):
s = {'source': [s]}
transform_target = s.get('transform_target', __strip_extension)
for srcname in s['source']:
t = transform_target(self, srcname)
value.append(self.env.StaticObject(target='%s%s%s' % (self.user_settings.builddir, t, self.env["OBJSUFFIX"]), source=srcname))
self.__lazy_object_cache[name] = value self.__lazy_object_cache[name] = value
return value return value
@staticmethod @staticmethod
def create_lazy_object_property(sources,transform_target=None): def create_lazy_object_property(sources):
name = repr(sources) name = repr(sources)
l = lambda s: s.__lazy_objects(name, sources, transform_target) l = lambda s: s.__lazy_objects(name, sources)
return property(l) return property(l)
def __init__(self): def __init__(self):
@ -368,21 +376,31 @@ class DXXProgram(DXXCommon):
static_archive_construction = {} static_archive_construction = {}
def _apply_target_name(self,name): 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])) 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 [ objects_similar_arch_ogl = DXXCommon.create_lazy_object_property([{
'source':[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) ],
objects_similar_arch_sdl = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [ 'transform_target':_apply_target_name,
}])
objects_similar_arch_sdl = DXXCommon.create_lazy_object_property([{
'source':[os.path.join('similar', f) for f in [
'arch/sdl/gr.c', 'arch/sdl/gr.c',
] ]
]) ],
objects_similar_arch_sdlmixer = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [ 'transform_target':_apply_target_name,
}])
objects_similar_arch_sdlmixer = DXXCommon.create_lazy_object_property([{
'source':[os.path.join('similar', f) for f in [
'arch/sdl/digi_mixer.c', 'arch/sdl/digi_mixer.c',
'arch/sdl/jukebox.c' 'arch/sdl/jukebox.c'
] ]
], _apply_target_name) ],
objects_similar_common = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [ 'transform_target':_apply_target_name,
}])
objects_similar_common = DXXCommon.create_lazy_object_property([{
'source':[os.path.join('similar', f) for f in [
'3d/interp.c', '3d/interp.c',
'arch/sdl/event.c', 'arch/sdl/event.c',
'arch/sdl/init.c', 'arch/sdl/init.c',
@ -420,8 +438,11 @@ class DXXProgram(DXXCommon):
'misc/hash.c', 'misc/hash.c',
'misc/physfsx.c', 'misc/physfsx.c',
] ]
], _apply_target_name) ],
objects_similar_editor = DXXCommon.create_lazy_object_property([os.path.join('similar', f) for f in [ 'transform_target':_apply_target_name,
}])
objects_similar_editor = DXXCommon.create_lazy_object_property([{
'source':[os.path.join('similar', f) for f in [
'editor/autosave.c', 'editor/autosave.c',
'editor/centers.c', 'editor/centers.c',
'editor/curves.c', 'editor/curves.c',
@ -456,7 +477,9 @@ class DXXProgram(DXXCommon):
'editor/texpage.c', 'editor/texpage.c',
'editor/texture.c', 'editor/texture.c',
] ]
], _apply_target_name) ],
'transform_target':_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)