blob: 8a2ca76d1fbb30ded055d2eb265ce9024c539dff [file] [log] [blame]
Jack Jansen144fa671998-06-26 14:56:00 +00001"""macfreeze - Main program and GUI
2
3macfreeze allows you to turn Python scripts into fully self-contained
4Mac applications, by including all the Python and C code needed in a single
5executable. Like unix/windows freeze it can produce a config.c allowing you
6to build the application with a development environment (CodeWarrior, to be
7precise), but unlike the standard freeze it is also possible to create frozen
8applications without a development environment, by glueing all the
9shared libraries and extension modules needed together in a single
10executable, using some Code Fragment Manager tricks."""
11
12import macfs
13import sys
14import EasyDialogs
15import string
16
17import macfreezegui
18import macmodulefinder
19
20#
21# Here are the macfreeze directives, used when freezing macfreeze itself
22# (see directives.py for an explanation)
23#
24# macfreeze: path ::::Tools:freeze
25# macfreeze: exclude win32api
26#
27
28def main():
29 if len(sys.argv) < 2:
30 gentype, program, output, debug = macfreezegui.dialog()
31 elif len(sys.argv) == 2:
32 gentype, program, output, debug = macfreezegui.dialog(sys.argv[1])
33 else:
34 EasyDialog.Message(
35 "Please pass a single script. Additional modules can be specified with directives")
36 sys.exit(0)
37 mustwait = process(gentype, program, output, debug=debug)
38 if mustwait:
39 sys.exit(1)
Jack Jansenb5ae3781998-07-31 09:43:36 +000040
Just van Rossum2e5b0f21999-11-04 10:28:59 +000041def process(gentype, program, output, modules=None, module_files=None, debug=0, with_ifdef=0):
42 if modules is None:
43 modules = []
44 if module_files is None:
45 module_files = []
46 module_dict, missing = macmodulefinder.process(program, modules, module_files, debug)
47 if missing:
48 missing.sort()
49 print '** Missing modules:', string.join(missing, ' ')
Jack Jansen144fa671998-06-26 14:56:00 +000050 sys.exit(1)
51 #
52 # And generate
53 #
54 if gentype == 'info':
55 import macgen_info
56 macgen_info.generate(output, module_dict)
57 return 1 # So the user can inspect it
58 elif gentype == 'source':
59 import macgen_src
Jack Jansen91cae851999-10-01 08:28:01 +000060 warnings = macgen_src.generate(output, module_dict, debug, with_ifdef)
Jack Jansen144fa671998-06-26 14:56:00 +000061 return warnings
62 elif gentype == 'resource':
63 import macgen_rsrc
64 macgen_rsrc.generate(output, module_dict, debug)
65 warnings = macgen_rsrc.warnings(module_dict)
66 return warnings
67 elif gentype == 'applet':
68 import macgen_bin
Jack Jansenb5ae3781998-07-31 09:43:36 +000069 architecture = 'fat' # user should choose
70 macgen_bin.generate(program, output, module_dict, architecture, debug)
Jack Jansen144fa671998-06-26 14:56:00 +000071 else:
72 raise 'unknown gentype', gentype
Jack Jansenb5ae3781998-07-31 09:43:36 +000073
Jack Jansen144fa671998-06-26 14:56:00 +000074if __name__ == '__main__':
75 main()