diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/MANIFEST | 1 | ||||
-rw-r--r-- | src/scons/exitfuncs.py | 48 |
2 files changed, 49 insertions, 0 deletions
diff --git a/src/MANIFEST b/src/MANIFEST index 88709ba..33e888c 100644 --- a/src/MANIFEST +++ b/src/MANIFEST @@ -5,6 +5,7 @@ scons/Defaults.py scons/Environment.py scons/Errors.py scons/Job.py +scons/exitfuncs.py scons/Node/__init__.py scons/Node/FS.py scons/Scanner/__init__.py diff --git a/src/scons/exitfuncs.py b/src/scons/exitfuncs.py new file mode 100644 index 0000000..e26a031 --- /dev/null +++ b/src/scons/exitfuncs.py @@ -0,0 +1,48 @@ +"""scons.exitfuncs + +Register functions which are executed when scons exits for any reason. + +""" + +__revision__ = "exitfuncs.py __REVISION__ __DATE__ __DEVELOPER__" + + + +_exithandlers = [] +def _run_exitfuncs(): + """run any registered exit functions + + _exithandlers is traversed in reverse order so functions are executed + last in, first out. + """ + + while _exithandlers: + func, targs, kargs = _exithandlers.pop() + apply(func, targs, kargs) + +def register(func, *targs, **kargs): + """register a function to be executed upon normal program termination + + func - function to be called at exit + targs - optional arguments to pass to func + kargs - optional keyword arguments to pass to func + """ + _exithandlers.append((func, targs, kargs)) + +import sys + +try: + x = sys.exitfunc + + # if x isn't our own exit func executive, assume it's another + # registered exit function - append it to our list... + if x != _run_exitfuncs: + register(x) + +except AttributeError: + pass + +# make our exit function get run by python when it exits: +sys.exitfunc = _run_exitfuncs + +del sys |