aboutsummaryrefslogtreecommitdiff
path: root/backends.py
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2014-07-27 02:54:23 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2014-07-27 02:54:23 +0300
commitbae850775328650c3fc326221a97cf74ea3f04c3 (patch)
tree1d98131f07a2a0d86a98a14f24ca4b59bf5c0542 /backends.py
parent5736f8dc60b1f54aeb39a140fc605711f5d4e544 (diff)
downloadmeson-bae850775328650c3fc326221a97cf74ea3f04c3.zip
meson-bae850775328650c3fc326221a97cf74ea3f04c3.tar.gz
meson-bae850775328650c3fc326221a97cf74ea3f04c3.tar.bz2
Make it possible to generate source files in custom targets.
Diffstat (limited to 'backends.py')
-rw-r--r--backends.py32
1 files changed, 29 insertions, 3 deletions
diff --git a/backends.py b/backends.py
index 574d8f9..380af92 100644
--- a/backends.py
+++ b/backends.py
@@ -85,6 +85,16 @@ def do_conf_file(src, dst, confdata):
open(dst_tmp, 'w').writelines(result)
replace_if_different(dst, dst_tmp)
+class RawFilename():
+ def __init__(self, fname):
+ self.fname = fname
+
+ def split(self, c):
+ return self.fname.split(c)
+
+ def startswith(self, s):
+ return self.fname.startswith(s)
+
class TestSerialisation:
def __init__(self, name, fname, is_cross, exe_wrapper, is_parallel, cmd_args, env):
self.name = name
@@ -121,7 +131,10 @@ class Backend():
def get_target_filename(self, target):
targetdir = self.get_target_dir(target)
- filename = os.path.join(targetdir, target.get_filename())
+ fname = target.get_filename()
+ if isinstance(fname, list):
+ fname = fname[0] # HORROR, HORROR! Fix this.
+ filename = os.path.join(targetdir, fname)
return filename
def get_target_dir(self, target):
@@ -231,8 +244,21 @@ class Backend():
header_deps = gen_other_deps
unity_src = []
unity_deps = [] # Generated sources that must be built before compiling a Unity target.
- for genlist in target.get_generated_sources():
- for src in genlist.get_outfilelist():
+ for gensource in target.get_generated_sources():
+ if isinstance(gensource, build.CustomTarget):
+ for src in gensource.output:
+ src = os.path.join(gensource.subdir, src)
+ if self.environment.is_header(src):
+ header_deps.append(RawFilename(src))
+ elif self.environment.is_source(src):
+ if is_unity:
+ unity_deps.append(os.path.join(self.environment.get_build_dir(), RawFilename(src)))
+ else:
+ obj_list.append(self.generate_single_compile(target, outfile, RawFilename(src), True))
+ else:
+ pass # perhaps print warning about the unknown file?
+ break # just to cut down on indentation size
+ for src in gensource.get_outfilelist():
if self.environment.is_object(src):
obj_list.append(os.path.join(self.get_target_dir(target), target.get_basename() + '.dir', src))
elif not self.environment.is_header(src):