"""redo-unlocked: internal tool for building dependencies.""" import sys, os from . import env, logs, state def main(): if len(sys.argv[1:]) < 2: sys.stderr.write('%s: at least 2 arguments expected.\n' % sys.argv[0]) sys.exit(1) env.inherit() logs.setup(tty=sys.stderr, pretty=env.v.PRETTY, color=env.v.COLOR) target = sys.argv[1] deps = sys.argv[2:] for d in deps: assert d != target me = state.File(name=target) # Build the known dependencies of our primary target. This *does* require # grabbing locks. os.environ['REDO_NO_OOB'] = '1' argv = ['redo-ifchange'] + deps rv = os.spawnvp(os.P_WAIT, argv[0], argv) if rv: sys.exit(rv) # We know our caller already owns the lock on target, so we don't have to # acquire another one; tell redo-ifchange about that. Also, REDO_NO_OOB # persists from up above, because we don't want to do OOB now either. # (Actually it's most important for the primary target, since it's the one # who initiated the OOB in the first place.) os.environ['REDO_UNLOCKED'] = '1' argv = ['redo-ifchange', target] rv = os.spawnvp(os.P_WAIT, argv[0], argv) if rv: sys.exit(rv) if __name__ == '__main__': main()