aboutsummaryrefslogtreecommitdiff
path: root/generators.py
diff options
context:
space:
mode:
Diffstat (limited to 'generators.py')
-rwxr-xr-xgenerators.py52
1 files changed, 27 insertions, 25 deletions
diff --git a/generators.py b/generators.py
index 2a11170..a24b5f8 100755
--- a/generators.py
+++ b/generators.py
@@ -68,6 +68,28 @@ class Generator():
os.makedirs(dirname, exist_ok=True)
return dirname
+ def generate_target(self, target, outfile):
+ name = target.get_basename()
+ if name in self.processed_targets:
+ return
+ self.process_target_dependencies(target, outfile)
+ print('Generating target', name)
+ outname = self.get_target_filename(target)
+ obj_list = []
+ if target.has_pch():
+ self.generate_pch(target, outfile)
+ for src in target.get_sources():
+ obj_list.append(self.generate_single_compile(target, outfile, src))
+ self.generate_link(target, outfile, outname, obj_list)
+ self.generate_shlib_aliases(target, self.get_target_dir(target), outfile)
+ self.processed_targets[name] = True
+
+ def process_target_dependencies(self, target, outfile):
+ for t in target.get_dependencies():
+ tname = t.get_basename()
+ if not tname in self.processed_targets:
+ self.generate_target(t, outfile)
+
class NinjaGenerator(Generator):
def __init__(self, build, interp):
@@ -80,6 +102,9 @@ class NinjaGenerator(Generator):
outfile.write('# This is the build file for project "%s"\n' % self.build.get_project())
outfile.write('# It is autogenerated. Do not edit by hand.\n\n')
self.generate_rules(outfile)
+ outfile.write('# Build rules for targets\n\n')
+ [self.generate_target(outfile, t[1]) for t in self.build.get_targets()]
+ outfile.write('# Suffix\n\n')
self.generate_ending(outfile)
def generate_rules(self, outfile):
@@ -88,7 +113,6 @@ class NinjaGenerator(Generator):
outfile.write('# Rules for linking.\n\n')
self.generate_static_link_rules(outfile)
self.generate_dynamic_link_rules(outfile)
- [self.generate_target(outfile, t[1]) for t in self.build.get_targets()]
def generate_static_link_rules(self, outfile):
static_linker = self.build.static_linker
@@ -131,7 +155,7 @@ class NinjaGenerator(Generator):
outfile.write('\n')
outfile.write('\n')
- def generate_target(self, outfile, target):
+ def generate_target(self, target, outfile):
pass
def generate_ending(self, outfile):
@@ -203,7 +227,7 @@ echo Run compile.sh before this or bad things will happen.
cpcommand = ['cp', filename, outdir]
cpcommand = ' '.join(shell_quote(cpcommand)) + ' || exit\n'
outfile.write(cpcommand)
-
+
def generate_configure_files(self):
for cf in self.build.get_configure_files():
infile = os.path.join(self.environment.get_source_dir(),
@@ -400,12 +424,6 @@ echo Run compile.sh before this or bad things will happen.
target = i[1]
self.generate_target(target, outfile)
- def process_target_dependencies(self, target, outfile):
- for t in target.get_dependencies():
- tname = t.get_basename()
- if not tname in self.processed_targets:
- self.generate_target(t, outfile)
-
def generate_pch(self, target, outfile):
print('Generating pch for "%s"' % target.get_basename())
@@ -433,22 +451,6 @@ echo Run compile.sh before this or bad things will happen.
cmd = ['ln', '-s', '-f', basename, aliasfile]
outfile.write(' '.join(shell_quote(cmd)) + '|| exit\n')
- def generate_target(self, target, outfile):
- name = target.get_basename()
- if name in self.processed_targets:
- return
- self.process_target_dependencies(target, outfile)
- print('Generating target', name)
- outname = self.get_target_filename(target)
- obj_list = []
- if target.has_pch():
- self.generate_pch(target, outfile)
- for src in target.get_sources():
- obj_list.append(self.generate_single_compile(target, outfile, src))
- self.generate_link(target, outfile, outname, obj_list)
- self.generate_shlib_aliases(target, self.get_target_dir(target), outfile)
- self.processed_targets[name] = True
-
if __name__ == '__main__':
code = """
project('simple generator')