summaryrefslogtreecommitdiffstats
path: root/src/engine/SCons/exitfuncs.py
blob: d088c11f529d381d5fa7544c4f0808d97a01493d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
"""SCons.exitfuncs

Register functions which are executed when SCons exits for any reason.

"""

__revision__ = "__FILE__ __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