- topological sorting the build graph - what is a graph - running child processes - what a process is - process api - interaction with the filesystem - r/w files - mtime comparisons - how computers store time - what is incremental execution
I would suggest to skip parsing, and use a Python literal to hold the 'Makefile'-equivalent dependency graph data structure.
You let students come up with their own fun build graphs, like making sushi:
tuna_maki -> nori, cooked_rice, tuna_fillet, chef, sushi_roller
cooked_rice -> uncooked_rice, rice_cooker, water, rice_seasoning
tuna_fillet -> tuna_slab, knife
tuna_slab -> fishmonger, money
nori -> algae, dehydrator
And then, when executed, it would print the steps, or say that a target was already made.