summaryrefslogtreecommitdiffstats
path: root/Mac/Tools/macfreeze/directives.py
blob: 7f6142ed5f5c4a2a5bd2a08b3811ca731a91f062 (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
import re
import os

# The regular expression for freeze directives. These are comments with the
# word macfreeze immedeately followed by a colon, followed by a directive,
# followed by argument(s)
#
# The directives supported are
# include - Include a module or file
# exclude - Exclude a module
# optional - Include a module if it is found, but don't complain if it isn't
# path - Add sys.path entries. Relative paths are relative to the source file.
#
# See the macfreeze.py main program for a real live example.
#
DIRECTIVE_RE=r'^\s*#\s*macfreeze:\s*(\S*)\s*(.*)\s*$'
REPROG=re.compile(DIRECTIVE_RE)

def findfreezedirectives(program):
    extra_modules = []
    exclude_modules = []
    optional_modules = []
    extra_path = []
    progdir, filename = os.path.split(program)
    fp = open(program)
    for line in fp.readlines():
        match = REPROG.match(line)
        if match:
            directive = match.group(1)
            argument = match.group(2)
            if directive == 'include':
                extra_modules.append(argument)
            elif directive == 'exclude':
                exclude_modules.append(argument)
            elif directive == 'optional':
                optional_modules.append(argument)
            elif directive == 'path':
                argument = os.path.join(progdir, argument)
                extra_path.append(argument)
            else:
                print '** Unknown directive', line
    return extra_modules, exclude_modules, optional_modules, extra_path