| """macfreeze - Main program and GUI |
| |
| macfreeze allows you to turn Python scripts into fully self-contained |
| Mac applications, by including all the Python and C code needed in a single |
| executable. Like unix/windows freeze it can produce a config.c allowing you |
| to build the application with a development environment (CodeWarrior, to be |
| precise), but unlike the standard freeze it is also possible to create frozen |
| applications without a development environment, by glueing all the |
| shared libraries and extension modules needed together in a single |
| executable, using some Code Fragment Manager tricks.""" |
| |
| import macfs |
| import sys |
| import EasyDialogs |
| import string |
| |
| import macfreezegui |
| import macmodulefinder |
| |
| # |
| # Here are the macfreeze directives, used when freezing macfreeze itself |
| # (see directives.py for an explanation) |
| # |
| # macfreeze: path ::::Tools:freeze |
| # macfreeze: exclude win32api |
| # |
| |
| def main(): |
| if len(sys.argv) < 2: |
| gentype, program, output, debug = macfreezegui.dialog() |
| elif len(sys.argv) == 2: |
| gentype, program, output, debug = macfreezegui.dialog(sys.argv[1]) |
| else: |
| EasyDialog.Message( |
| "Please pass a single script. Additional modules can be specified with directives") |
| sys.exit(0) |
| mustwait = process(gentype, program, output, debug=debug) |
| if mustwait: |
| sys.exit(1) |
| |
| def process(gentype, program, output, modules=None, module_files=None, debug=0, with_ifdef=0): |
| if modules is None: |
| modules = [] |
| if module_files is None: |
| module_files = [] |
| module_dict, missing = macmodulefinder.process(program, modules, module_files, debug) |
| if missing: |
| missing.sort() |
| print '** Missing modules:', string.join(missing, ' ') |
| sys.exit(1) |
| # |
| # And generate |
| # |
| if gentype == 'info': |
| import macgen_info |
| macgen_info.generate(output, module_dict) |
| return 1 # So the user can inspect it |
| elif gentype == 'source': |
| import macgen_src |
| warnings = macgen_src.generate(output, module_dict, debug, with_ifdef) |
| return warnings |
| elif gentype == 'resource': |
| import macgen_rsrc |
| macgen_rsrc.generate(output, module_dict, debug) |
| warnings = macgen_rsrc.warnings(module_dict) |
| return warnings |
| elif gentype == 'applet': |
| import macgen_bin |
| architecture = 'fat' # user should choose |
| macgen_bin.generate(program, output, module_dict, architecture, debug) |
| else: |
| raise 'unknown gentype', gentype |
| |
| if __name__ == '__main__': |
| main() |