cpython/Mac/Tools/macfreeze/macfreeze.py

76 lines
2.3 KiB
Python
Raw Normal View History

"""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()