import sys def build(bld): bdist_base = bld.path.get_bld().make_node('build') dist_dir = bld.path.get_bld().make_node('dist') pdc_gen = bld.path.find_node('../generate_pdcs/pdc_gen.py') image_routines = bld.path.find_node('../pebble_image_routines.py') pbi2png_script = bld.path.find_node('../pbi2png.py') setup = bld.path.find_node('setup.py') pdc2png = bld.path.get_bld().parent.parent.make_node('pdc2png') def py2app(task): template = "python {} py2app --bdist-base={} --dist-dir={} --extra-scripts={},{},{} --packages=PIL,ctypes" ctx = task.generator.bld try: ctx.cmd_and_log(template.format(task.inputs[0].abspath(), task.outputs[0].abspath(), task.outputs[1].abspath(), task.inputs[1].abspath(), task.inputs[2].abspath(), task.inputs[3].abspath())) except Exception as e: # catch macholib bug and give user the diff to fix it if e.stderr.find("dyld_find() got an unexpected keyword argument 'loader'") > 0: raise Exception("You have a bugged version of macholib. Until it's updated, apply the following patch:\n" "--- a/usr/local/lib/python2.7/site-packages/macholib/MachOGraph.py\n" "+++ a/usr/local/lib/python2.7/site-packages/macholib/MachOGraph.py\n" "@@ -46,7 +46,7 @@ class MachOGraph(ObjectGraph):\n" " try:\n" " fn = dyld_find(filename, env=self.env,\n" " executable_path=self.executable_path,\n" "- loader=loader.filename)\n" "+ loader_path=loader.filename)\n" " self.trans_table[(loader.filename, filename)] = fn\n" " except ValueError:\n" " return None\n\n" ) else: raise Exception(e) bld(name='py2app', rule=py2app, source=[setup, pdc_gen, image_routines, pbi2png_script], target=[bdist_base, dist_dir]) app = dist_dir.make_node('/svg2png.app') pdc2png_copy = dist_dir.make_node('/svg2png.app/Contents/Resources').make_node('pdc2png') bld(rule="cp ${SRC} ${TGT}", source=pdc2png, target=pdc2png_copy, after='py2app') # vim:filetype=python