Can generate custom rules for dependencies.

This commit is contained in:
Jussi Pakkanen 2013-04-01 18:06:27 +03:00
parent 71ce75899a
commit a869da185f
3 changed files with 39 additions and 0 deletions

View File

@ -418,12 +418,30 @@ class NinjaBackend(Backend):
datafile.write(self.get_target_filename(t.get_exe()) + '\n')
datafile.close()
def generate_dep_gen_rules(self, outfile):
outfile.write('# Rules for external dependency generators.\n\n')
processed = {}
for dep in self.environment.coredata.deps.values():
name = dep.get_name()
if name in processed:
continue
processed[name] = True
for rule in dep.get_generate_rules():
outfile.write('rule %s\n' % rule.name)
command = ' '.join([ninja_quote(x) for x in rule.cmd_list])
command = command.replace('@INFILE@', '$in').replace('@OUTFILE@', '$out')
outfile.write(' command = %s\n' % command)
desc = rule.description.replace('@INFILE@', '$in')
outfile.write(' description = %s\n' % desc)
outfile.write('\n')
def generate_rules(self, outfile):
outfile.write('# Rules for compiling.\n\n')
self.generate_compile_rules(outfile)
outfile.write('# Rules for linking.\n\n')
self.generate_static_link_rules(outfile)
self.generate_dynamic_link_rules(outfile)
self.generate_dep_gen_rules(outfile)
outfile.write('# Other rules\n\n')
outfile.write('rule CUSTOM_COMMAND\n')
outfile.write(' command = $COMMAND\n')

View File

@ -28,6 +28,14 @@ class DependencyException(MesonException):
def __init__(self, *args, **kwargs):
MesonException.__init__(self, *args, **kwargs)
class CustomRule:
def __init__(self, cmd_list, name_templ, src_keyword, name, description):
self.cmd_list = cmd_list
self.name_templ = name_templ
self.src_keyword = src_keyword
self.name = name
self.description = description
class Dependency():
def __init__(self):
self.name = "null"
@ -49,6 +57,11 @@ class Dependency():
def get_name(self):
return self.name
# Rules for commands to execute before compilation
# such as Qt's moc preprocessor.
def get_generate_rules(self):
return []
class PkgConfigDependency(Dependency):
pkgconfig_found = False
@ -316,6 +329,13 @@ class Qt5Dependency(Dependency):
return False
return True
def get_generate_rules(self):
moc_rule = CustomRule([self.moc.get_command(), '@INFILE@', '-o', '@OUTFILE@'],
'moc_%BASENAME%.cpp','moc_headers', 'moc_compile',
'Compiling @INFILE@ with the moc preprocessor')
return [moc_rule]
def get_dep_identifier(name, kwargs):
elements = [name]
modlist = kwargs.get('modules', [])

View File

@ -1,3 +1,4 @@
#include <QObject>
#include <QMainWindow>
#include "ui_mainWindow.h"