summaryrefslogtreecommitdiffstats
path: root/waftools/waf_customizations.py
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2013-07-16 13:28:28 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2013-11-21 21:22:36 +0100
commit7e2edad8efea55e8df1faa695d1389ef4e326d7c (patch)
treef9662620b8ecaf50f6c67804dd0d99d00d85fe5b /waftools/waf_customizations.py
parent0cb9227a73f03a6ecdf71e837c7c33c823b194b4 (diff)
downloadmpv-7e2edad8efea55e8df1faa695d1389ef4e326d7c.tar.bz2
mpv-7e2edad8efea55e8df1faa695d1389ef4e326d7c.tar.xz
switch the build system to waf
This commit adds a new build system based on waf. configure and Makefile are deprecated effective immediately and someday in the future they will be removed (they are still available by running ./old-configure). You can find how the choice for waf came to be in `DOCS/waf-buildsystem.rst`. TL;DR: we couldn't get the same level of abstraction and customization with other build systems we tried (CMake and autotools). For guidance on how to build the software now, take a look at README.md and the cross compilation guide. CREDITS: This is a squash of ~250 commits. Some of them are not by me, so here is the deserved attribution: - @wm4 contributed some Windows fixes, renamed configure to old-configure and contributed to the bootstrap script. Also, GNU/Linux testing. - @lachs0r contributed some Windows fixes and the bootstrap script. - @Nikoli contributed a lot of testing and discovered many bugs. - @CrimsonVoid contributed changes to the bootstrap script.
Diffstat (limited to 'waftools/waf_customizations.py')
-rw-r--r--waftools/waf_customizations.py46
1 files changed, 46 insertions, 0 deletions
diff --git a/waftools/waf_customizations.py b/waftools/waf_customizations.py
new file mode 100644
index 0000000000..b6798d4235
--- /dev/null
+++ b/waftools/waf_customizations.py
@@ -0,0 +1,46 @@
+from waflib.Configure import conf
+
+@conf
+def get_config_header(self, defines=True, headers=False, define_prefix=''):
+ """
+ Only difference is it outputs `#define VAR 0` or `#define VAR value`
+ instead of `#undef VAR` or `#define VAR val`.
+ """
+ from waflib.Tools.c_config import DEFKEYS, INCKEYS
+ lst = []
+ if headers:
+ for x in self.env[INCKEYS]:
+ lst.append('#include <%s>' % x)
+
+ if defines:
+ for x in self.env[DEFKEYS]:
+ val = self.is_defined(x) and self.get_define(x) or "0"
+ lst.append('#define %s %s' % (define_prefix + x, val))
+
+ return "\n".join(lst)
+
+from waflib import TaskGen
+
+@TaskGen.extension('.m')
+def m_hook(self, node):
+ """
+ Makes waf call the c compiler for objective-c files
+ """
+ return self.create_compiled_task('c', node)
+
+def build(ctx):
+ from waflib import Task
+ cls = Task.classes['cprogram']
+ class cprogram(cls):
+ run_str = cls.hcode + '${LAST_LINKFLAGS}'
+
+ cls = Task.classes['macplist']
+ class macplist(cls):
+ def run(self):
+ from waflib import Utils
+ if getattr(self, 'code', None):
+ txt = self.code
+ else:
+ txt = self.inputs[0].read()
+ txt = Utils.subst_vars(txt, self.env)
+ self.outputs[0].write(txt)