2010-11-13 00:45:49 -08:00
|
|
|
#!/usr/bin/python
|
2010-11-19 00:57:27 -08:00
|
|
|
import sys, os, errno
|
2010-11-21 21:15:24 -08:00
|
|
|
import vars, state, builder, jwack
|
2010-11-19 03:03:05 -08:00
|
|
|
from helpers import debug, err, mkdirp, unlink
|
2010-11-13 00:45:49 -08:00
|
|
|
|
|
|
|
|
|
2010-11-21 05:25:47 -08:00
|
|
|
def dirty_deps(t, depth):
|
2010-11-24 02:48:27 -08:00
|
|
|
try:
|
|
|
|
|
st = os.stat(t)
|
|
|
|
|
realtime = st.st_mtime
|
|
|
|
|
except OSError:
|
|
|
|
|
st = None
|
|
|
|
|
realtime = 0
|
|
|
|
|
|
2010-11-21 04:14:52 -08:00
|
|
|
debug('%s?%s\n' % (depth, t))
|
2010-11-21 04:57:04 -08:00
|
|
|
if state.isbuilt(t):
|
2010-11-21 04:14:52 -08:00
|
|
|
debug('%s-- DIRTY (built)\n' % depth)
|
|
|
|
|
return True # has already been built during this session
|
2010-11-21 04:57:04 -08:00
|
|
|
if state.ismarked(t):
|
2010-11-21 04:14:52 -08:00
|
|
|
debug('%s-- CLEAN (marked)\n' % depth)
|
2010-11-21 00:54:35 -08:00
|
|
|
return False # has already been checked during this session
|
2010-11-21 04:14:52 -08:00
|
|
|
|
2010-11-21 04:57:04 -08:00
|
|
|
stamptime = state.stamped(t)
|
2010-11-19 03:03:05 -08:00
|
|
|
if stamptime == None:
|
|
|
|
|
debug('%s-- DIRTY (no stamp)\n' % depth)
|
|
|
|
|
return True
|
2010-11-13 00:45:49 -08:00
|
|
|
|
|
|
|
|
if stamptime != realtime:
|
|
|
|
|
debug('%s-- DIRTY (mtime)\n' % depth)
|
|
|
|
|
return True
|
|
|
|
|
|
2010-11-21 04:57:04 -08:00
|
|
|
for mode,name in state.deps(t):
|
2010-11-13 00:45:49 -08:00
|
|
|
if mode == 'c':
|
|
|
|
|
if os.path.exists(name):
|
|
|
|
|
debug('%s-- DIRTY (created)\n' % depth)
|
|
|
|
|
return True
|
|
|
|
|
elif mode == 'm':
|
2010-11-21 04:57:04 -08:00
|
|
|
if dirty_deps(os.path.join(vars.BASE, name), depth + ' '):
|
2010-11-21 04:14:52 -08:00
|
|
|
debug('%s-- DIRTY (sub)\n' % depth)
|
2010-11-21 05:25:47 -08:00
|
|
|
state.unstamp(t) # optimization for future callers
|
2010-11-13 00:45:49 -08:00
|
|
|
return True
|
2010-11-21 04:57:04 -08:00
|
|
|
state.mark(t)
|
2010-11-13 00:45:49 -08:00
|
|
|
return False
|
|
|
|
|
|
|
|
|
|
|
2010-11-21 04:14:52 -08:00
|
|
|
def should_build(t):
|
|
|
|
|
return not state.isbuilt(t) and dirty_deps(t, depth = '')
|
|
|
|
|
|
|
|
|
|
|
2010-11-19 07:32:16 -08:00
|
|
|
rv = 202
|
2010-11-13 02:09:42 -08:00
|
|
|
try:
|
2010-11-21 21:15:24 -08:00
|
|
|
try:
|
2010-11-21 23:33:11 -08:00
|
|
|
targets = sys.argv[1:]
|
|
|
|
|
for t in targets:
|
2010-11-21 21:15:24 -08:00
|
|
|
state.add_dep(vars.TARGET, 'm', t)
|
2010-11-21 23:33:11 -08:00
|
|
|
rv = builder.main(targets, should_build)
|
2010-11-21 21:15:24 -08:00
|
|
|
finally:
|
|
|
|
|
jwack.force_return_tokens()
|
2010-11-13 02:09:42 -08:00
|
|
|
except KeyboardInterrupt:
|
|
|
|
|
sys.exit(200)
|
2010-11-19 07:32:16 -08:00
|
|
|
sys.exit(rv)
|