You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
Python
80 lines
2.1 KiB
Python
#! /usr/bin/env python
|
|
# encoding: utf-8
|
|
# Thomas Nagy, 2010 (ita)
|
|
|
|
"""
|
|
Calling 'waf build' executes a normal build with Waf
|
|
Calling 'waf clean dump' will create a makefile corresponding to the build
|
|
The dependencies will be extracted too
|
|
"""
|
|
|
|
VERSION='0.0.1'
|
|
APPNAME='cc_test'
|
|
|
|
top = '.'
|
|
|
|
def options(opt):
|
|
opt.load('compiler_c')
|
|
|
|
def configure(conf):
|
|
conf.load('compiler_c')
|
|
|
|
def build(bld):
|
|
bld.program(source='main.c', target='app', use='mylib', cflags=['-O2'])
|
|
bld.stlib(source='a.c', target='mylib')
|
|
|
|
# ---------------------------------------------------------------------------
|
|
|
|
from waflib import Build, Logs
|
|
class Dumper(Build.BuildContext):
|
|
fun = 'dump'
|
|
cmd = 'dump'
|
|
|
|
def dump(bld):
|
|
# call the build function as if a real build were performed
|
|
build(bld)
|
|
|
|
from waflib import Task
|
|
bld.commands = []
|
|
bld.targets = []
|
|
|
|
# store the command executed
|
|
old_exec = Task.Task.exec_command
|
|
def exec_command(self, *k, **kw):
|
|
ret = old_exec(self, *k, **kw)
|
|
self.command_executed = k[0]
|
|
self.path = kw['cwd'] or self.generator.bld.cwd
|
|
return ret
|
|
Task.Task.exec_command = exec_command
|
|
|
|
# perform a fake build, and accumulate the makefile bits
|
|
old_process = Task.Task.process
|
|
def process(self):
|
|
old_process(self)
|
|
|
|
lst = []
|
|
for x in self.outputs:
|
|
lst.append(x.path_from(self.generator.bld.bldnode))
|
|
bld.targets.extend(lst)
|
|
lst.append(':')
|
|
for x in self.inputs + self.dep_nodes + self.generator.bld.node_deps.get(self.uid(), []):
|
|
lst.append(x.path_from(self.generator.bld.bldnode))
|
|
try:
|
|
if isinstance(self.command_executed, list):
|
|
self.command_executed = ' '.join(self.command_executed)
|
|
except Exception as e:
|
|
print(e)
|
|
else:
|
|
bld.commands.append(' '.join(lst))
|
|
bld.commands.append('\tcd %s && %s' % (self.path, self.command_executed))
|
|
Task.Task.process = process
|
|
|
|
# write the makefile after the build is complete
|
|
def output_makefile(self):
|
|
self.commands.insert(0, "all: %s" % " ".join(self.targets))
|
|
node = self.bldnode.make_node('Makefile')
|
|
node.write('\n'.join(self.commands))
|
|
Logs.warn('Wrote %r', node)
|
|
bld.add_post_fun(output_makefile)
|
|
|