In my adventures of building GNOME with JHBuild, it often happens that when I tweak something that affects the build environment (e.g. use system Python instead of JHBuild-built one), I get a heck of a lot of build failures. This will happen even after I run jhbuild clean (which runs make clean on the modules), testimony to the weakness ofthe GNOME build infrastructure (autotools, ...). This means that I need to run make distclean or better still (where applicable) git clean -dfx. Note that I sometimes even have to uninstall one or two modules (on JHBuild path) to get a build failure fixe (jhbuild uninstall modulename). This is laborious work, so I sometimes just wipe out the entire installation.

Note that there's dozens of modules to build, so I wrote this little script to take care of it:

import os
import subprocess
top_level = os.path.expanduser("~/src/gnome")
for filename in os.listdir(top_level):
    full_path = "{}/{}".format(top_level, filename)
    if os.path.isdir(full_path):
        cmd = "cd ~/src/gnome/{} && git clean -dfx".format(filename)
        if subprocess.call(cmd, shell=True) != 0:
            cmd = "cd ~/src/gnome/{} && make distclean".format(filename)
            if subprocess.call(cmd, shell=True) != 0:
                cmd = "cd ~/src/gnome/{} && make clean".format(filename)
                subprocess.call(cmd, shell=True)

update

Someone very kind guy made a bunch of suggestions, making my code much better:

import os
import subprocess
top_level = os.path.expanduser("~/src/gnome")
for filename in os.listdir(top_level):
    full_path = os.path.join(top_level, filename)
    if os.path.isdir(full_path):
        os.chdir(full_path)
        if subprocess.call("git clean -dfx".split()) != 0:
            if subprocess.call("make distclean".split()) != 0:
                subprocess.call("make clean".split())

further reading

modules: os, os.path, subprocess