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]
env.MergeFlags(flags)
def __lazy_objects(self,name,source,transform_target):
def __lazy_objects(self,name,source):
try:
return self.__lazy_object_cache[name]
except KeyError as e:
if transform_target is None:
transform_target = lambda _, n: os.path.splitext(n)[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]
def __strip_extension(self,name):
return os.path.splitext(name)[0]
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
return value
@staticmethod
def create_lazy_object_property(sources,transform_target=None):
def create_lazy_object_property(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)
def __init__(self):
@ -368,21 +376,31 @@ class DXXProgram(DXXCommon):
static_archive_construction = {}
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 [
objects_similar_arch_ogl = DXXCommon.create_lazy_object_property([{
'source':[os.path.join('similar', f) for f in [
'arch/ogl/gr.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',
]
])
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/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',
'arch/sdl/event.c',
'arch/sdl/init.c',
@ -420,8 +438,11 @@ class DXXProgram(DXXCommon):
'misc/hash.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/centers.c',
'editor/curves.c',
@ -456,7 +477,9 @@ class DXXProgram(DXXCommon):
'editor/texpage.c',
'editor/texture.c',
]
], _apply_target_name)
],
'transform_target':_apply_target_name,
}])
class UserSettings(DXXCommon.UserSettings):
def __init__(self,ARGUMENTS,target):
DXXCommon.UserSettings.__init__(self, ARGUMENTS)