mirror of https://gitlab.com/ita1024/waf.git
Example of tracking files in the build directory to force partial rebuilds
This commit is contained in:
parent
d68e1ff072
commit
1985579cb4
|
@ -0,0 +1 @@
|
|||
int kkk() {return 0; }
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
extern int kkk();
|
||||
int main() {
|
||||
return kkk();
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
#! /usr/bin/env python
|
||||
# encoding: utf-8
|
||||
# Thomas Nagy, 2015 (ita)
|
||||
|
||||
VERSION = '0.0.1'
|
||||
APPNAME = 'track_output_files'
|
||||
|
||||
top = '.'
|
||||
|
||||
import os
|
||||
from waflib import Logs, Options
|
||||
|
||||
def options(opt):
|
||||
opt.load('compiler_c')
|
||||
opt.load('build_file_tracker')
|
||||
|
||||
def configure(conf):
|
||||
conf.load('compiler_c')
|
||||
|
||||
test_lib = False
|
||||
def play_test(ctx):
|
||||
if ctx.cmd != 'build':
|
||||
return
|
||||
|
||||
global test_lib
|
||||
if not test_lib:
|
||||
# schedule one more build
|
||||
test_lib = True
|
||||
Options.commands.append('change_the_lib')
|
||||
Options.commands.append(ctx.cmd)
|
||||
|
||||
def change_the_lib(ctx):
|
||||
lst = ctx.path.ant_glob('build/*stlib1.*')
|
||||
if lst:
|
||||
os.utime(lst[0].abspath(), None)
|
||||
Logs.pprint('YELLOW', '-> Touch %r' % lst[0].abspath())
|
||||
Logs.pprint('YELLOW', '-> Expect a rebuild of dependent files')
|
||||
|
||||
def build(bld):
|
||||
bld.stlib(source='foo.c', target='stlib1')
|
||||
bld.program(source='main.c', target='app', use='stlib1')
|
||||
play_test(bld)
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
#! /usr/bin/env python
|
||||
# encoding: utf-8
|
||||
# Thomas Nagy, 2015
|
||||
|
||||
"""
|
||||
Force files to depend on the timestamps of those located in the build directory. You may
|
||||
want to use this to force partial rebuilds, see playground/track_output_files/ for a working example.
|
||||
|
||||
Note that there is a variety of ways to implement this, one may want use timestamps on source files too for example,
|
||||
or one may want to hash the files in the source directory only under certain conditions (md5_tstamp tool)
|
||||
or to hash the file in the build directory with its timestamp (similar to 'update_outputs')
|
||||
"""
|
||||
|
||||
import os
|
||||
from waflib import Node, Utils
|
||||
|
||||
def get_bld_sig(self):
|
||||
try:
|
||||
return self.cache_sig
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
if not self.is_bld() or self.ctx.bldnode is self.ctx.srcnode:
|
||||
self.sig = Utils.h_file(self.abspath())
|
||||
self.cache_sig = ret = self.sig
|
||||
else:
|
||||
# add the
|
||||
self.cache_sig = ret = self.sig + str(os.stat(self.abspath()).st_mtime)
|
||||
return ret
|
||||
|
||||
Node.Node.get_bld_sig = get_bld_sig
|
||||
|
Loading…
Reference in New Issue