1 """macmodulefinder - Find modules used in a script. Only slightly
2 mac-specific, really."""
10 # This will work if we are frozen ourselves
13 # And this will work otherwise
14 _FREEZEDIR
=os
.path
.join(sys
.prefix
, ':Tools:freeze')
15 sys
.path
.insert(0, _FREEZEDIR
)
19 # Modules that must be included, and modules that need not be included
20 # (but are if they are found)
22 MAC_INCLUDE_MODULES
=['site', 'exceptions']
23 MAC_MAYMISS_MODULES
=['posix', 'os2', 'nt', 'ntpath', 'dos', 'dospath',
25 'nturl2path', 'pwd', 'sitecustomize']
28 Missing
="macmodulefinder.Missing"
30 class Module(modulefinder
.Module
):
33 """Return type of module"""
42 class ModuleFinder(modulefinder
.ModuleFinder
):
44 def add_module(self
, fqname
):
45 if self
.modules
.has_key(fqname
):
46 return self
.modules
[fqname
]
47 self
.modules
[fqname
] = m
= Module(fqname
)
50 def process(program
, modules
=[], module_files
= [], debug
=0):
53 # Add the standard modules needed for startup
55 modules
= modules
+ MAC_INCLUDE_MODULES
57 # search the main source for directives
59 extra_modules
, exclude_modules
, extra_path
= \
60 directives
.findfreezedirectives(program
)
61 for m
in extra_modules
:
64 module_files
.append(m
)
67 # collect all modules of the program
69 dir = os
.path
.dirname(program
)
70 path
[0] = dir # "current dir"
71 path
= extra_path
+ path
73 # Create the module finder and let it do its work
75 modfinder
= ModuleFinder(path
,
76 excludes
=exclude_modules
, debug
=debug
)
78 modfinder
.import_hook(m
)
79 for m
in module_files
:
80 modfinder
.load_file(m
)
81 modfinder
.run_script(program
)
82 module_dict
= modfinder
.modules
84 # Tell the user about missing modules
86 maymiss
= exclude_modules
+ MAC_MAYMISS_MODULES
87 for m
in modfinder
.badmodules
.keys():
93 # Warn the user about unused builtins
95 for m
in sys
.builtin_module_names
:
96 if m
in ('__main__', '__builtin__'):
98 elif not module_dict
.has_key(m
):
101 elif module_dict
[m
].gettype() != 'builtin':
102 # XXXX Can this happen?