aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2013-04-01 18:06:27 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2013-04-01 18:06:27 +0300
commita869da185f076a81b65ebd55f074a26c6e6b8466 (patch)
treebe3ed630952190e801bbf60b0909578d6f406d31
parent71ce75899a58f400a16fbee803ec0ad6fae6ae40 (diff)
downloadmeson-a869da185f076a81b65ebd55f074a26c6e6b8466.zip
meson-a869da185f076a81b65ebd55f074a26c6e6b8466.tar.gz
meson-a869da185f076a81b65ebd55f074a26c6e6b8466.tar.bz2
Can generate custom rules for dependencies.
-rwxr-xr-xbackends.py18
-rw-r--r--dependencies.py20
-rw-r--r--test cases/frameworks/4 qt5/mainWindow.h1
3 files changed, 39 insertions, 0 deletions
diff --git a/backends.py b/backends.py
index f45c472..b2f8ba5 100755
--- a/backends.py
+++ b/backends.py
@@ -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')
diff --git a/dependencies.py b/dependencies.py
index f689f8b..d14f68c 100644
--- a/dependencies.py
+++ b/dependencies.py
@@ -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', [])
diff --git a/test cases/frameworks/4 qt5/mainWindow.h b/test cases/frameworks/4 qt5/mainWindow.h
index 369c6d3..6fcedc2 100644
--- a/test cases/frameworks/4 qt5/mainWindow.h
+++ b/test cases/frameworks/4 qt5/mainWindow.h
@@ -1,3 +1,4 @@
+#include <QObject>
#include <QMainWindow>
#include "ui_mainWindow.h"