Update icon and Add info
This commit is contained in:
parent
65f275850d
commit
014ffce8ed
6
.eggs/README.txt
Normal file
6
.eggs/README.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
This directory contains eggs that were downloaded by setuptools to build, test, and run plug-ins.
|
||||||
|
|
||||||
|
This directory caches those eggs to prevent repeated downloads.
|
||||||
|
|
||||||
|
However, it is safe to delete this directory.
|
||||||
|
|
BIN
.eggs/altgraph-0.13-py3.6.egg
Normal file
BIN
.eggs/altgraph-0.13-py3.6.egg
Normal file
Binary file not shown.
BIN
.eggs/macholib-1.8-py3.6.egg
Normal file
BIN
.eggs/macholib-1.8-py3.6.egg
Normal file
Binary file not shown.
BIN
.eggs/modulegraph-0.14-py3.6.egg
Normal file
BIN
.eggs/modulegraph-0.14-py3.6.egg
Normal file
Binary file not shown.
1533
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/PKG-INFO
Normal file
1533
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/PKG-INFO
Normal file
File diff suppressed because it is too large
Load Diff
313
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/SOURCES.txt
Normal file
313
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/SOURCES.txt
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
LICENSE.txt
|
||||||
|
MANIFEST.in
|
||||||
|
README.txt
|
||||||
|
setup.cfg
|
||||||
|
setup.py
|
||||||
|
tox.ini
|
||||||
|
doc/Makefile
|
||||||
|
doc/changelog.rst
|
||||||
|
doc/conf.py
|
||||||
|
doc/dependencies.rst
|
||||||
|
doc/examples.rst
|
||||||
|
doc/faq.rst
|
||||||
|
doc/implementation.rst
|
||||||
|
doc/index.rst
|
||||||
|
doc/install.rst
|
||||||
|
doc/options.rst
|
||||||
|
doc/py2applet.rst
|
||||||
|
doc/recipes.rst
|
||||||
|
doc/tutorial.rst
|
||||||
|
doc/tweaking.rst
|
||||||
|
examples/EggInstaller/Egg.icns
|
||||||
|
examples/EggInstaller/EggInstaller.py
|
||||||
|
examples/EggInstaller/setup.py
|
||||||
|
examples/PIL/hello.py
|
||||||
|
examples/PIL/setup.py
|
||||||
|
examples/PyObjC/ICSharingWatcher/ICSharingWatcher.py
|
||||||
|
examples/PyObjC/ICSharingWatcher/TableModelAppDelegate.py
|
||||||
|
examples/PyObjC/ICSharingWatcher/leases.py
|
||||||
|
examples/PyObjC/ICSharingWatcher/setup.py
|
||||||
|
examples/PyObjC/ICSharingWatcher/MainMenu.nib/classes.nib
|
||||||
|
examples/PyObjC/ICSharingWatcher/MainMenu.nib/info.nib
|
||||||
|
examples/PyObjC/ICSharingWatcher/MainMenu.nib/keyedobjects.nib
|
||||||
|
examples/PyObjC/TinyTinyEdit/TinyTinyEdit.py
|
||||||
|
examples/PyObjC/TinyTinyEdit/setup.py
|
||||||
|
examples/PyObjC/TinyTinyEdit/MainMenu.nib/classes.nib
|
||||||
|
examples/PyObjC/TinyTinyEdit/MainMenu.nib/info.nib
|
||||||
|
examples/PyObjC/TinyTinyEdit/MainMenu.nib/objects.nib
|
||||||
|
examples/PyObjC/TinyTinyEdit/TinyTinyDocument.nib/classes.nib
|
||||||
|
examples/PyObjC/TinyTinyEdit/TinyTinyDocument.nib/info.nib
|
||||||
|
examples/PyObjC/TinyTinyEdit/TinyTinyDocument.nib/objects.nib
|
||||||
|
examples/PyObjC/pbplugin/PyTestPlugin.py
|
||||||
|
examples/PyObjC/pbplugin/setup.py
|
||||||
|
examples/PyObjC/pbplugin/test.py
|
||||||
|
examples/PyOpenGL/lesson5.py
|
||||||
|
examples/PyOpenGL/setup.py
|
||||||
|
examples/PyQt/hello_app/hello.py
|
||||||
|
examples/PyQt/hello_app/setup.py
|
||||||
|
examples/PyQt/view_app/main.py
|
||||||
|
examples/PyQt/view_app/setup.py
|
||||||
|
examples/PyQt/view_app/view.qml
|
||||||
|
examples/PySide/hello.py
|
||||||
|
examples/PySide/setup.py
|
||||||
|
examples/Tkinter/hello_tk/hello.py
|
||||||
|
examples/Tkinter/hello_tk/setup.py
|
||||||
|
examples/embedded_interpreter/simple/hello.py
|
||||||
|
examples/embedded_interpreter/simple/setup.py
|
||||||
|
examples/pkg_data/setup.py
|
||||||
|
examples/pkg_data/use_testpkg.py
|
||||||
|
examples/pkg_data/testpkg/__init__.py
|
||||||
|
examples/pkg_data/testpkg/data.txt
|
||||||
|
examples/pygame/aliens.py
|
||||||
|
examples/pygame/aliens_bootstrap.py
|
||||||
|
examples/pygame/setup.py
|
||||||
|
examples/pygame/English.lproj/aliens.icns
|
||||||
|
examples/pygame/English.lproj/MainMenu.nib/JavaCompiling.plist
|
||||||
|
examples/pygame/English.lproj/MainMenu.nib/_MainMenu_EOArchive_English.java
|
||||||
|
examples/pygame/English.lproj/MainMenu.nib/classes.nib
|
||||||
|
examples/pygame/English.lproj/MainMenu.nib/info.nib
|
||||||
|
examples/pygame/English.lproj/MainMenu.nib/keyedobjects.nib
|
||||||
|
examples/pygame/data/alien1.gif
|
||||||
|
examples/pygame/data/alien2.gif
|
||||||
|
examples/pygame/data/alien3.gif
|
||||||
|
examples/pygame/data/background.gif
|
||||||
|
examples/pygame/data/bomb.gif
|
||||||
|
examples/pygame/data/boom.wav
|
||||||
|
examples/pygame/data/car_door.wav
|
||||||
|
examples/pygame/data/explosion1.gif
|
||||||
|
examples/pygame/data/house_lo.wav
|
||||||
|
examples/pygame/data/player1.gif
|
||||||
|
examples/pygame/data/shot.gif
|
||||||
|
examples/simple/hello.py
|
||||||
|
examples/simple/setup.py
|
||||||
|
examples/structured/data/datafile.txt
|
||||||
|
examples/structured/python/myapp.py
|
||||||
|
examples/structured/python/needsthis.py
|
||||||
|
examples/structured/setup/setup.py
|
||||||
|
examples/wxPython/2.4/doodle/doodle.py
|
||||||
|
examples/wxPython/2.4/doodle/setup.py
|
||||||
|
examples/wxPython/2.4/doodle/superdoodle.py
|
||||||
|
examples/wxPython/2.5/doodle/doodle.py
|
||||||
|
examples/wxPython/2.5/doodle/setup.py
|
||||||
|
examples/wxPython/2.5/doodle/superdoodle.py
|
||||||
|
examples/wxPython/2.5/drpython/setup.py
|
||||||
|
examples/wxPython/2.5/wxGlade/README.txt
|
||||||
|
examples/wxPython/2.5/wxGlade/setup.py
|
||||||
|
examples/wxPython/2.5/wxGlade/wxGlade.py
|
||||||
|
py2app/__init__.py
|
||||||
|
py2app/build_app.py
|
||||||
|
py2app/create_appbundle.py
|
||||||
|
py2app/create_pluginbundle.py
|
||||||
|
py2app/decorators.py
|
||||||
|
py2app/filters.py
|
||||||
|
py2app/script_py2applet.py
|
||||||
|
py2app/util.py
|
||||||
|
py2app.egg-info/PKG-INFO
|
||||||
|
py2app.egg-info/SOURCES.txt
|
||||||
|
py2app.egg-info/dependency_links.txt
|
||||||
|
py2app.egg-info/entry_points.txt
|
||||||
|
py2app.egg-info/not-zip-safe
|
||||||
|
py2app.egg-info/requires.txt
|
||||||
|
py2app.egg-info/top_level.txt
|
||||||
|
py2app/apptemplate/__init__.py
|
||||||
|
py2app/apptemplate/plist_template.py
|
||||||
|
py2app/apptemplate/setup.py
|
||||||
|
py2app/apptemplate/lib/__error__.sh
|
||||||
|
py2app/apptemplate/lib/site.py
|
||||||
|
py2app/apptemplate/prebuilt/main-fat
|
||||||
|
py2app/apptemplate/prebuilt/main-fat3
|
||||||
|
py2app/apptemplate/prebuilt/main-i386
|
||||||
|
py2app/apptemplate/prebuilt/main-intel
|
||||||
|
py2app/apptemplate/prebuilt/main-ppc
|
||||||
|
py2app/apptemplate/prebuilt/main-ppc64
|
||||||
|
py2app/apptemplate/prebuilt/main-universal
|
||||||
|
py2app/apptemplate/prebuilt/main-x86_64
|
||||||
|
py2app/apptemplate/prebuilt/secondary-fat
|
||||||
|
py2app/apptemplate/prebuilt/secondary-fat3
|
||||||
|
py2app/apptemplate/prebuilt/secondary-i386
|
||||||
|
py2app/apptemplate/prebuilt/secondary-intel
|
||||||
|
py2app/apptemplate/prebuilt/secondary-ppc
|
||||||
|
py2app/apptemplate/prebuilt/secondary-ppc64
|
||||||
|
py2app/apptemplate/prebuilt/secondary-universal
|
||||||
|
py2app/apptemplate/prebuilt/secondary-x86_64
|
||||||
|
py2app/apptemplate/src/main.c
|
||||||
|
py2app/bootstrap/__init__.py
|
||||||
|
py2app/bootstrap/argv_emulation.py
|
||||||
|
py2app/bootstrap/argv_inject.py
|
||||||
|
py2app/bootstrap/boot_aliasapp.py
|
||||||
|
py2app/bootstrap/boot_aliasplugin.py
|
||||||
|
py2app/bootstrap/boot_app.py
|
||||||
|
py2app/bootstrap/boot_plugin.py
|
||||||
|
py2app/bootstrap/chdir_resource.py
|
||||||
|
py2app/bootstrap/ctypes_setup.py
|
||||||
|
py2app/bootstrap/disable_linecache.py
|
||||||
|
py2app/bootstrap/emulate_shell_environment.py
|
||||||
|
py2app/bootstrap/import_encodings.py
|
||||||
|
py2app/bootstrap/path_inject.py
|
||||||
|
py2app/bootstrap/reset_sys_path.py
|
||||||
|
py2app/bootstrap/semi_standalone_path.py
|
||||||
|
py2app/bootstrap/setup_included_subpackages.py
|
||||||
|
py2app/bootstrap/setup_pkgresource.py
|
||||||
|
py2app/bootstrap/site_packages.py
|
||||||
|
py2app/bootstrap/system_path_extras.py
|
||||||
|
py2app/bootstrap/virtualenv.py
|
||||||
|
py2app/bootstrap/virtualenv_site_packages.py
|
||||||
|
py2app/bundletemplate/__init__.py
|
||||||
|
py2app/bundletemplate/plist_template.py
|
||||||
|
py2app/bundletemplate/setup.py
|
||||||
|
py2app/bundletemplate/lib/__error__.sh
|
||||||
|
py2app/bundletemplate/lib/site.py
|
||||||
|
py2app/bundletemplate/prebuilt/main-fat
|
||||||
|
py2app/bundletemplate/prebuilt/main-fat3
|
||||||
|
py2app/bundletemplate/prebuilt/main-i386
|
||||||
|
py2app/bundletemplate/prebuilt/main-intel
|
||||||
|
py2app/bundletemplate/prebuilt/main-ppc
|
||||||
|
py2app/bundletemplate/prebuilt/main-ppc64
|
||||||
|
py2app/bundletemplate/prebuilt/main-universal
|
||||||
|
py2app/bundletemplate/prebuilt/main-x86_64
|
||||||
|
py2app/bundletemplate/src/main.m
|
||||||
|
py2app/converters/__init__.py
|
||||||
|
py2app/converters/coredata.py
|
||||||
|
py2app/converters/nibfile.py
|
||||||
|
py2app/recipes/__init__.py
|
||||||
|
py2app/recipes/cjkcodecs.py
|
||||||
|
py2app/recipes/ctypes.py
|
||||||
|
py2app/recipes/docutils.py
|
||||||
|
py2app/recipes/ftplib.py
|
||||||
|
py2app/recipes/importlib.py
|
||||||
|
py2app/recipes/lxml.py
|
||||||
|
py2app/recipes/matplotlib.py
|
||||||
|
py2app/recipes/matplotlib_prescript.py
|
||||||
|
py2app/recipes/mimetypes.py
|
||||||
|
py2app/recipes/numpy.py
|
||||||
|
py2app/recipes/os_module.py
|
||||||
|
py2app/recipes/pydoc.py
|
||||||
|
py2app/recipes/pyenchant.py
|
||||||
|
py2app/recipes/pygame.py
|
||||||
|
py2app/recipes/pyopengl.py
|
||||||
|
py2app/recipes/pyside.py
|
||||||
|
py2app/recipes/pyzmq.py
|
||||||
|
py2app/recipes/qt.conf
|
||||||
|
py2app/recipes/qt5.py
|
||||||
|
py2app/recipes/re.py
|
||||||
|
py2app/recipes/scipy.py
|
||||||
|
py2app/recipes/setuptools.py
|
||||||
|
py2app/recipes/sip.py
|
||||||
|
py2app/recipes/subprocess.py
|
||||||
|
py2app/recipes/uuid.py
|
||||||
|
py2app/recipes/virtualenv.py
|
||||||
|
py2app/recipes/wx.py
|
||||||
|
py2app/recipes/xml.py
|
||||||
|
py2app/recipes/PIL/__init__.py
|
||||||
|
py2app/recipes/PIL/prescript.py
|
||||||
|
py2app_tests/__init__.py
|
||||||
|
py2app_tests/bundle_loader.m
|
||||||
|
py2app_tests/test_app_resources.py
|
||||||
|
py2app_tests/test_app_with_ctypes.py
|
||||||
|
py2app_tests/test_app_with_scripts.py
|
||||||
|
py2app_tests/test_app_with_sharedlib.py
|
||||||
|
py2app_tests/test_argv_emulation.py
|
||||||
|
py2app_tests/test_basic_app.py
|
||||||
|
py2app_tests/test_basic_app_with_encoding.py
|
||||||
|
py2app_tests/test_basic_app_with_plugin.py
|
||||||
|
py2app_tests/test_basic_plugin.py
|
||||||
|
py2app_tests/test_compile_resources.py
|
||||||
|
py2app_tests/test_email_pkg.py
|
||||||
|
py2app_tests/test_explicit_includes.py
|
||||||
|
py2app_tests/test_filters.py
|
||||||
|
py2app_tests/test_lsenvironment.py
|
||||||
|
py2app_tests/test_package_data.py
|
||||||
|
py2app_tests/test_pkg_script.py
|
||||||
|
py2app_tests/test_plugin_with_scripts.py
|
||||||
|
py2app_tests/test_py2applet.py
|
||||||
|
py2app_tests/test_recipe_imports.py
|
||||||
|
py2app_tests/test_setup.py
|
||||||
|
py2app_tests/test_shell_environment.py
|
||||||
|
py2app_tests/tools.py
|
||||||
|
py2app_tests/app_with_data/main.icns
|
||||||
|
py2app_tests/app_with_data/main.py
|
||||||
|
py2app_tests/app_with_data/setup.py
|
||||||
|
py2app_tests/app_with_data/data1/file1.txt
|
||||||
|
py2app_tests/app_with_data/data1/file2.txt
|
||||||
|
py2app_tests/app_with_data/data1/file3.sh
|
||||||
|
py2app_tests/app_with_data/data2/source.c
|
||||||
|
py2app_tests/app_with_data/data3/source.c
|
||||||
|
py2app_tests/app_with_email/main-all.py
|
||||||
|
py2app_tests/app_with_email/main-compat.py
|
||||||
|
py2app_tests/app_with_email/main-plain.py
|
||||||
|
py2app_tests/app_with_email/setup-all.py
|
||||||
|
py2app_tests/app_with_email/setup-compat.py
|
||||||
|
py2app_tests/app_with_email/setup-plain.py
|
||||||
|
py2app_tests/app_with_environment/main.py
|
||||||
|
py2app_tests/app_with_environment/setup.py
|
||||||
|
py2app_tests/app_with_scripts/helper1.py
|
||||||
|
py2app_tests/app_with_scripts/main.py
|
||||||
|
py2app_tests/app_with_scripts/presetup.py
|
||||||
|
py2app_tests/app_with_scripts/setup.py
|
||||||
|
py2app_tests/app_with_scripts/build/libdir/libfoo.dylib.libtool.i386
|
||||||
|
py2app_tests/app_with_scripts/build/libdir/libfoo.o
|
||||||
|
py2app_tests/app_with_scripts/src/libfoo.c
|
||||||
|
py2app_tests/app_with_scripts/src/libfoo.h
|
||||||
|
py2app_tests/app_with_scripts/src/modfoo.c
|
||||||
|
py2app_tests/app_with_scripts/subdir/helper2.py
|
||||||
|
py2app_tests/app_with_shared_ctypes/main.py
|
||||||
|
py2app_tests/app_with_shared_ctypes/setup.py
|
||||||
|
py2app_tests/app_with_shared_ctypes/src/sharedlib.c
|
||||||
|
py2app_tests/app_with_shared_ctypes/src/sharedlib.h
|
||||||
|
py2app_tests/app_with_sharedlib/main.py
|
||||||
|
py2app_tests/app_with_sharedlib/mod.c
|
||||||
|
py2app_tests/app_with_sharedlib/setup.py
|
||||||
|
py2app_tests/app_with_sharedlib/src/sharedlib.c
|
||||||
|
py2app_tests/app_with_sharedlib/src/sharedlib.h
|
||||||
|
py2app_tests/argv_app/main.py
|
||||||
|
py2app_tests/argv_app/setup-with-urlscheme.py
|
||||||
|
py2app_tests/argv_app/setup.py
|
||||||
|
py2app_tests/basic_app/main.py
|
||||||
|
py2app_tests/basic_app/setup.py
|
||||||
|
py2app_tests/basic_app/package1/__init__.py
|
||||||
|
py2app_tests/basic_app/package1/subpackage/__init__.py
|
||||||
|
py2app_tests/basic_app/package1/subpackage/module.py
|
||||||
|
py2app_tests/basic_app/package2/__init__.py
|
||||||
|
py2app_tests/basic_app/package2/sub/__init__.py
|
||||||
|
py2app_tests/basic_app/package2/sub/data.dat
|
||||||
|
py2app_tests/basic_app/package3/mod.py
|
||||||
|
py2app_tests/basic_app2/main-script
|
||||||
|
py2app_tests/basic_app2/setup.py
|
||||||
|
py2app_tests/basic_app2/package1/__init__.py
|
||||||
|
py2app_tests/basic_app2/package1/subpackage/__init__.py
|
||||||
|
py2app_tests/basic_app2/package1/subpackage/module.py
|
||||||
|
py2app_tests/basic_app2/package2/__init__.py
|
||||||
|
py2app_tests/basic_app2/package2/sub/__init__.py
|
||||||
|
py2app_tests/basic_app2/package2/sub/data.dat
|
||||||
|
py2app_tests/basic_app_with_encoding/main.py
|
||||||
|
py2app_tests/basic_app_with_encoding/setup.py
|
||||||
|
py2app_tests/basic_app_with_encoding/package1/__init__.py
|
||||||
|
py2app_tests/basic_app_with_encoding/package1/subpackage/__init__.py
|
||||||
|
py2app_tests/basic_app_with_encoding/package1/subpackage/module.py
|
||||||
|
py2app_tests/basic_app_with_encoding/package2/__init__.py
|
||||||
|
py2app_tests/basic_app_with_encoding/package2/sub/__init__.py
|
||||||
|
py2app_tests/basic_app_with_encoding/package2/sub/data.dat
|
||||||
|
py2app_tests/basic_app_with_encoding/package3/mod.py
|
||||||
|
py2app_tests/basic_app_with_plugin/dummy1.qlgenerator
|
||||||
|
py2app_tests/basic_app_with_plugin/dummy2.mdimporter
|
||||||
|
py2app_tests/basic_app_with_plugin/main.py
|
||||||
|
py2app_tests/basic_app_with_plugin/setup.py
|
||||||
|
py2app_tests/basic_plugin/main.py
|
||||||
|
py2app_tests/basic_plugin/setup.py
|
||||||
|
py2app_tests/bundle_loader.dSYM/Contents/Info.plist
|
||||||
|
py2app_tests/bundle_loader.dSYM/Contents/Resources/DWARF/bundle_loader
|
||||||
|
py2app_tests/pkg_script_app/quot.py
|
||||||
|
py2app_tests/pkg_script_app/setup.py
|
||||||
|
py2app_tests/pkg_script_app/quot/__init__.py
|
||||||
|
py2app_tests/pkg_script_app/quot/queue.py
|
||||||
|
py2app_tests/plugin_with_scripts/helper1.py
|
||||||
|
py2app_tests/plugin_with_scripts/helper2.py
|
||||||
|
py2app_tests/plugin_with_scripts/main.py
|
||||||
|
py2app_tests/plugin_with_scripts/setup.py
|
||||||
|
py2app_tests/resource_compile_app/MainMenu.xib
|
||||||
|
py2app_tests/resource_compile_app/main.py
|
||||||
|
py2app_tests/resource_compile_app/setup.py
|
||||||
|
py2app_tests/shell_app/main.py
|
||||||
|
py2app_tests/shell_app/setup.py
|
||||||
|
tools/py2applet/py2applet.py
|
||||||
|
tools/py2applet/setup.py
|
@ -0,0 +1 @@
|
|||||||
|
|
18
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/entry_points.txt
Normal file
18
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/entry_points.txt
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
[console_scripts]
|
||||||
|
py2applet = py2app.script_py2applet:main
|
||||||
|
|
||||||
|
[distutils.commands]
|
||||||
|
py2app = py2app.build_app:py2app
|
||||||
|
|
||||||
|
[distutils.setup_keywords]
|
||||||
|
app = py2app.build_app:validate_target
|
||||||
|
plugin = py2app.build_app:validate_target
|
||||||
|
|
||||||
|
[py2app.converter]
|
||||||
|
datamodel = py2app.converters.coredata:convert_datamodel
|
||||||
|
mappingmodel = py2app.converters.coredata:convert_mappingmodel
|
||||||
|
xib = py2app.converters.nibfile:convert_xib
|
||||||
|
|
||||||
|
[py2app.recipe]
|
||||||
|
|
||||||
|
|
1
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/not-zip-safe
Normal file
1
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/not-zip-safe
Normal file
@ -0,0 +1 @@
|
|||||||
|
|
3
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/requires.txt
Normal file
3
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/requires.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
altgraph>=0.13
|
||||||
|
modulegraph>=0.14
|
||||||
|
macholib>=1.8
|
1
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/top_level.txt
Normal file
1
.eggs/py2app-0.12-py3.6.egg/EGG-INFO/top_level.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
py2app
|
34
.eggs/py2app-0.12-py3.6.egg/py2app/__init__.py
Normal file
34
.eggs/py2app-0.12-py3.6.egg/py2app/__init__.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
"""
|
||||||
|
builds Mac OS X application bundles from Python scripts
|
||||||
|
|
||||||
|
New keywords for distutils' setup function specify what to build:
|
||||||
|
|
||||||
|
app
|
||||||
|
list of scripts to convert into gui app bundles
|
||||||
|
|
||||||
|
py2app options, to be specified in the options keyword to the setup function:
|
||||||
|
|
||||||
|
optimize - string or int (0, 1, or 2)
|
||||||
|
|
||||||
|
includes - list of module names to include
|
||||||
|
packages - list of packages to include with subpackages
|
||||||
|
ignores - list of modules to ignore if they are not found
|
||||||
|
excludes - list of module names to exclude
|
||||||
|
dylib_excludes - list of dylibs and/or frameworks to exclude
|
||||||
|
resources - list of additional files and folders to include
|
||||||
|
plist - Info.plist template file, dict, or plistlib.Plist
|
||||||
|
dist_dir - directory where to build the final files
|
||||||
|
|
||||||
|
Items in the macosx list can also be
|
||||||
|
dictionaries to further customize the build process. The following
|
||||||
|
keys in the dictionary are recognized, most are optional:
|
||||||
|
|
||||||
|
script (MACOSX) - list of python scripts (required)
|
||||||
|
dest_base - directory and basename for the executable
|
||||||
|
if a directory is contained, must be the same for all targets
|
||||||
|
"""
|
||||||
|
import pkg_resources
|
||||||
|
__version__ = pkg_resources.require('py2app')[0].version
|
||||||
|
|
||||||
|
# This makes the py2app command work in the distutils.core.setup() case
|
||||||
|
import setuptools
|
@ -0,0 +1,2 @@
|
|||||||
|
from . import setup
|
||||||
|
from . import plist_template
|
132
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/lib/site.py
Normal file
132
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/lib/site.py
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
"""
|
||||||
|
Append module search paths for third-party packages to sys.path.
|
||||||
|
|
||||||
|
This is stripped down and customized for use in py2app applications
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
# os is actually in the zip, so we need to do this here.
|
||||||
|
# we can't call it python24.zip because zlib is not a built-in module (!)
|
||||||
|
_libdir = '/lib/python' + sys.version[:3]
|
||||||
|
_parent = '/'.join(__file__.split('/')[:-1])
|
||||||
|
if not _parent.endswith(_libdir):
|
||||||
|
_parent += _libdir
|
||||||
|
sys.path.append(_parent + '/site-packages.zip')
|
||||||
|
|
||||||
|
# Stuffit decompresses recursively by default, that can mess up py2app bundles,
|
||||||
|
# add the uncompressed site-packages to the path to compensate for that.
|
||||||
|
sys.path.append(_parent + '/site-packages')
|
||||||
|
|
||||||
|
USER_SITE=None
|
||||||
|
|
||||||
|
import os
|
||||||
|
try:
|
||||||
|
basestring
|
||||||
|
except NameError:
|
||||||
|
basestring = str
|
||||||
|
|
||||||
|
def makepath(*paths):
|
||||||
|
dir = os.path.abspath(os.path.join(*paths))
|
||||||
|
return dir, os.path.normcase(dir)
|
||||||
|
|
||||||
|
for m in sys.modules.values():
|
||||||
|
f = getattr(m, '__file__', None)
|
||||||
|
if isinstance(f, basestring) and os.path.exists(f):
|
||||||
|
m.__file__ = os.path.abspath(m.__file__)
|
||||||
|
del m
|
||||||
|
|
||||||
|
# This ensures that the initial path provided by the interpreter contains
|
||||||
|
# only absolute pathnames, even if we're running from the build directory.
|
||||||
|
L = []
|
||||||
|
_dirs_in_sys_path = {}
|
||||||
|
dir = dircase = None # sys.path may be empty at this point
|
||||||
|
for dir in sys.path:
|
||||||
|
# Filter out duplicate paths (on case-insensitive file systems also
|
||||||
|
# if they only differ in case); turn relative paths into absolute
|
||||||
|
# paths.
|
||||||
|
dir, dircase = makepath(dir)
|
||||||
|
if not dircase in _dirs_in_sys_path:
|
||||||
|
L.append(dir)
|
||||||
|
_dirs_in_sys_path[dircase] = 1
|
||||||
|
sys.path[:] = L
|
||||||
|
del dir, dircase, L
|
||||||
|
_dirs_in_sys_path = None
|
||||||
|
|
||||||
|
def _init_pathinfo():
|
||||||
|
global _dirs_in_sys_path
|
||||||
|
_dirs_in_sys_path = d = {}
|
||||||
|
for dir in sys.path:
|
||||||
|
if dir and not os.path.isdir(dir):
|
||||||
|
continue
|
||||||
|
dir, dircase = makepath(dir)
|
||||||
|
d[dircase] = 1
|
||||||
|
|
||||||
|
def addsitedir(sitedir):
|
||||||
|
global _dirs_in_sys_path
|
||||||
|
if _dirs_in_sys_path is None:
|
||||||
|
_init_pathinfo()
|
||||||
|
reset = 1
|
||||||
|
else:
|
||||||
|
reset = 0
|
||||||
|
sitedir, sitedircase = makepath(sitedir)
|
||||||
|
if not sitedircase in _dirs_in_sys_path:
|
||||||
|
sys.path.append(sitedir) # Add path component
|
||||||
|
try:
|
||||||
|
names = os.listdir(sitedir)
|
||||||
|
except os.error:
|
||||||
|
return
|
||||||
|
names.sort()
|
||||||
|
for name in names:
|
||||||
|
if name[-4:] == os.extsep + "pth":
|
||||||
|
addpackage(sitedir, name)
|
||||||
|
if reset:
|
||||||
|
_dirs_in_sys_path = None
|
||||||
|
|
||||||
|
def addpackage(sitedir, name):
|
||||||
|
global _dirs_in_sys_path
|
||||||
|
if _dirs_in_sys_path is None:
|
||||||
|
_init_pathinfo()
|
||||||
|
reset = 1
|
||||||
|
else:
|
||||||
|
reset = 0
|
||||||
|
fullname = os.path.join(sitedir, name)
|
||||||
|
try:
|
||||||
|
with open(fullname) as f:
|
||||||
|
while 1:
|
||||||
|
dir = f.readline()
|
||||||
|
if not dir:
|
||||||
|
break
|
||||||
|
if dir[0] == '#':
|
||||||
|
continue
|
||||||
|
if dir.startswith("import"):
|
||||||
|
exec(dir)
|
||||||
|
continue
|
||||||
|
if dir[-1] == '\n':
|
||||||
|
dir = dir[:-1]
|
||||||
|
dir, dircase = makepath(sitedir, dir)
|
||||||
|
if not dircase in _dirs_in_sys_path and os.path.exists(dir):
|
||||||
|
sys.path.append(dir)
|
||||||
|
_dirs_in_sys_path[dircase] = 1
|
||||||
|
except IOError:
|
||||||
|
return
|
||||||
|
if reset:
|
||||||
|
_dirs_in_sys_path = None
|
||||||
|
|
||||||
|
|
||||||
|
#sys.setdefaultencoding('utf-8')
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run custom site specific code, if available.
|
||||||
|
#
|
||||||
|
try:
|
||||||
|
import sitecustomize
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
#
|
||||||
|
# Remove sys.setdefaultencoding() so that users cannot change the
|
||||||
|
# encoding after initialization. The test for presence is needed when
|
||||||
|
# this module is run as a script, because this code is executed twice.
|
||||||
|
#
|
||||||
|
if hasattr(sys, "setdefaultencoding"):
|
||||||
|
del sys.setdefaultencoding
|
@ -0,0 +1,46 @@
|
|||||||
|
import sys
|
||||||
|
import py2app
|
||||||
|
__all__ = ['infoPlistDict']
|
||||||
|
|
||||||
|
def infoPlistDict(CFBundleExecutable, plist={}):
|
||||||
|
CFBundleExecutable = CFBundleExecutable
|
||||||
|
version = sys.version[:3]
|
||||||
|
pdict = dict(
|
||||||
|
CFBundleDevelopmentRegion='English',
|
||||||
|
CFBundleDisplayName=plist.get('CFBundleName', CFBundleExecutable),
|
||||||
|
CFBundleExecutable=CFBundleExecutable,
|
||||||
|
CFBundleIconFile=CFBundleExecutable,
|
||||||
|
CFBundleIdentifier='org.pythonmac.unspecified.%s' % (''.join(CFBundleExecutable.split()),),
|
||||||
|
CFBundleInfoDictionaryVersion='6.0',
|
||||||
|
CFBundleName=CFBundleExecutable,
|
||||||
|
CFBundlePackageType='APPL',
|
||||||
|
CFBundleShortVersionString=plist.get('CFBundleVersion', '0.0'),
|
||||||
|
CFBundleSignature='????',
|
||||||
|
CFBundleVersion='0.0',
|
||||||
|
LSHasLocalizedDisplayName=False,
|
||||||
|
NSAppleScriptEnabled=False,
|
||||||
|
NSHumanReadableCopyright='Copyright not specified',
|
||||||
|
NSMainNibFile='MainMenu',
|
||||||
|
NSPrincipalClass='NSApplication',
|
||||||
|
PyMainFileNames=['__boot__'],
|
||||||
|
PyResourcePackages=[],
|
||||||
|
PyRuntimeLocations=[(s % version) for s in [
|
||||||
|
'@executable_path/../Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'~/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'/Network/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'/System/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
]],
|
||||||
|
)
|
||||||
|
pdict.update(plist)
|
||||||
|
pythonInfo = pdict.setdefault('PythonInfoDict', {})
|
||||||
|
pythonInfo.update(dict(
|
||||||
|
PythonLongVersion=sys.version,
|
||||||
|
PythonShortVersion=sys.version[:3],
|
||||||
|
PythonExecutable=sys.executable,
|
||||||
|
))
|
||||||
|
py2appInfo = pythonInfo.setdefault('py2app', {}).update(dict(
|
||||||
|
version=py2app.__version__,
|
||||||
|
template='app',
|
||||||
|
))
|
||||||
|
return pdict
|
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-fat
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-fat
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-fat3
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-fat3
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-i386
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-i386
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-intel
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-intel
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-ppc
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-ppc
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-ppc64
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-ppc64
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-universal
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-universal
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-x86_64
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/main-x86_64
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-fat
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-fat
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-fat3
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-fat3
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-i386
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-i386
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-intel
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-intel
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-ppc
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-ppc
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-ppc64
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-ppc64
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-universal
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-universal
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-x86_64
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/prebuilt/secondary-x86_64
Executable file
Binary file not shown.
129
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/setup.py
Normal file
129
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/setup.py
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import distutils.sysconfig
|
||||||
|
import distutils.util
|
||||||
|
|
||||||
|
gPreBuildVariants = [
|
||||||
|
{
|
||||||
|
'name': 'main-universal',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.5.sdk -arch i386 -arch ppc -arch ppc64 -arch x86_64',
|
||||||
|
'cc': 'gcc-4.2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-ppc64',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.5.sdk -arch ppc64',
|
||||||
|
'cc': 'gcc-4.2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-x86_64',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-g -arch x86_64',
|
||||||
|
'cc': '/usr/bin/clang',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-fat3',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-g -isysroot / -arch i386 -arch ppc -arch x86_64',
|
||||||
|
'cc': 'gcc-4.2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-intel',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-g -arch i386 -arch x86_64 -fexceptions',
|
||||||
|
'cc': '/usr/bin/clang',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-i386',
|
||||||
|
'target': '10.4',
|
||||||
|
'cflags': '-g -arch i386',
|
||||||
|
'cc': '/usr/bin/clang',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-ppc',
|
||||||
|
'target': '10.3',
|
||||||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch ppc',
|
||||||
|
'cc': 'gcc-4.0',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-fat',
|
||||||
|
'target': '10.3',
|
||||||
|
'cflags': '-g -isysroot /Developer/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc',
|
||||||
|
'cc': 'gcc-4.0',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def main(all=False, arch=None, secondary=False):
|
||||||
|
basepath = os.path.dirname(__file__)
|
||||||
|
builddir = os.path.join(basepath, 'prebuilt')
|
||||||
|
if not os.path.exists(builddir):
|
||||||
|
os.makedirs(builddir)
|
||||||
|
src = os.path.join(basepath, 'src', 'main.c')
|
||||||
|
|
||||||
|
cfg = distutils.sysconfig.get_config_vars()
|
||||||
|
|
||||||
|
BASE_CFLAGS = cfg['CFLAGS']
|
||||||
|
BASE_CFLAGS = BASE_CFLAGS.replace('-dynamic', '')
|
||||||
|
while True:
|
||||||
|
x = re.sub('-arch\s+\S+', '', BASE_CFLAGS)
|
||||||
|
if x == BASE_CFLAGS:
|
||||||
|
break
|
||||||
|
BASE_CFLAGS=x
|
||||||
|
|
||||||
|
while True:
|
||||||
|
x = re.sub('-isysroot\s+\S+', '', BASE_CFLAGS)
|
||||||
|
if x == BASE_CFLAGS:
|
||||||
|
break
|
||||||
|
BASE_CFLAGS=x
|
||||||
|
|
||||||
|
if arch is None:
|
||||||
|
arch = distutils.util.get_platform().split('-')[-1]
|
||||||
|
if sys.prefix.startswith('/System') and \
|
||||||
|
sys.version_info[:2] == (2,5):
|
||||||
|
arch = "fat"
|
||||||
|
|
||||||
|
name = 'main-' + arch
|
||||||
|
root = None
|
||||||
|
|
||||||
|
if all:
|
||||||
|
for entry in gPreBuildVariants:
|
||||||
|
dest = os.path.join(builddir, entry['name'])
|
||||||
|
|
||||||
|
for replace in (0, 1):
|
||||||
|
if replace:
|
||||||
|
dest = os.path.join(builddir, entry['name'].replace('main', 'secondary'))
|
||||||
|
|
||||||
|
if not os.path.exists(dest) or (
|
||||||
|
os.stat(dest).st_mtime < os.stat(src).st_mtime):
|
||||||
|
if root is None:
|
||||||
|
fp = os.popen('xcode-select -print-path', 'r')
|
||||||
|
root = fp.read().strip()
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
print ("rebuilding %s"%(os.path.basename(dest),))
|
||||||
|
|
||||||
|
CC=os.path.join(root, 'usr', 'bin', entry['cc'])
|
||||||
|
CFLAGS = BASE_CFLAGS + ' ' + entry['cflags'].replace('@@XCODE_ROOT@@', root)
|
||||||
|
if replace:
|
||||||
|
CFLAGS += " -DPY2APP_SECONDARY"
|
||||||
|
os.environ['MACOSX_DEPLOYMENT_TARGET'] = entry['target']
|
||||||
|
os.system('"%(CC)s" -o "%(dest)s" "%(src)s" %(CFLAGS)s -framework Cocoa' % locals())
|
||||||
|
|
||||||
|
if secondary:
|
||||||
|
name = 'secondary-'
|
||||||
|
else:
|
||||||
|
name = 'main-'
|
||||||
|
|
||||||
|
dest = os.path.join(
|
||||||
|
builddir,
|
||||||
|
name + arch
|
||||||
|
)
|
||||||
|
|
||||||
|
return dest
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(all=True)
|
1240
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/src/main.c
Normal file
1240
.eggs/py2app-0.12-py3.6.egg/py2app/apptemplate/src/main.c
Normal file
File diff suppressed because it is too large
Load Diff
1
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/__init__.py
Normal file
1
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/__init__.py
Normal file
@ -0,0 +1 @@
|
|||||||
|
""" py2app bootstrap files """
|
272
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/argv_emulation.py
Normal file
272
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/argv_emulation.py
Normal file
@ -0,0 +1,272 @@
|
|||||||
|
"""
|
||||||
|
sys.argv emulation
|
||||||
|
|
||||||
|
This module starts a basic event loop to collect file- and url-open AppleEvents. Those get
|
||||||
|
converted to strings and stuffed into sys.argv. When that is done we continue starting
|
||||||
|
the application.
|
||||||
|
|
||||||
|
This is a workaround to convert scripts that expect filenames on the command-line to work
|
||||||
|
in a GUI environment. GUI applications should not use this feature.
|
||||||
|
|
||||||
|
NOTE: This module uses ctypes and not the Carbon modules in the stdlib because the latter
|
||||||
|
don't work in 64-bit mode and are also not available with python 3.x.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
|
import ctypes
|
||||||
|
import struct
|
||||||
|
|
||||||
|
class AEDesc (ctypes.Structure):
|
||||||
|
_fields_ = [
|
||||||
|
('descKey', ctypes.c_int),
|
||||||
|
('descContent', ctypes.c_void_p),
|
||||||
|
]
|
||||||
|
|
||||||
|
class EventTypeSpec (ctypes.Structure):
|
||||||
|
_fields_ = [
|
||||||
|
('eventClass', ctypes.c_int),
|
||||||
|
('eventKind', ctypes.c_uint),
|
||||||
|
]
|
||||||
|
|
||||||
|
def _ctypes_setup():
|
||||||
|
carbon = ctypes.CDLL('/System/Library/Carbon.framework/Carbon')
|
||||||
|
|
||||||
|
timer_func = ctypes.CFUNCTYPE(
|
||||||
|
None, ctypes.c_void_p, ctypes.c_long)
|
||||||
|
|
||||||
|
ae_callback = ctypes.CFUNCTYPE(ctypes.c_int, ctypes.c_void_p,
|
||||||
|
ctypes.c_void_p, ctypes.c_void_p)
|
||||||
|
carbon.AEInstallEventHandler.argtypes = [
|
||||||
|
ctypes.c_int, ctypes.c_int, ae_callback,
|
||||||
|
ctypes.c_void_p, ctypes.c_char ]
|
||||||
|
carbon.AERemoveEventHandler.argtypes = [
|
||||||
|
ctypes.c_int, ctypes.c_int, ae_callback,
|
||||||
|
ctypes.c_char ]
|
||||||
|
|
||||||
|
carbon.AEProcessEvent.restype = ctypes.c_int
|
||||||
|
carbon.AEProcessEvent.argtypes = [ctypes.c_void_p]
|
||||||
|
|
||||||
|
|
||||||
|
carbon.ReceiveNextEvent.restype = ctypes.c_int
|
||||||
|
carbon.ReceiveNextEvent.argtypes = [
|
||||||
|
ctypes.c_long, ctypes.POINTER(EventTypeSpec),
|
||||||
|
ctypes.c_double, ctypes.c_char,
|
||||||
|
ctypes.POINTER(ctypes.c_void_p)
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
carbon.AEGetParamDesc.restype = ctypes.c_int
|
||||||
|
carbon.AEGetParamDesc.argtypes = [
|
||||||
|
ctypes.c_void_p, ctypes.c_int, ctypes.c_int,
|
||||||
|
ctypes.POINTER(AEDesc)]
|
||||||
|
|
||||||
|
carbon.AECountItems.restype = ctypes.c_int
|
||||||
|
carbon.AECountItems.argtypes = [ ctypes.POINTER(AEDesc),
|
||||||
|
ctypes.POINTER(ctypes.c_long) ]
|
||||||
|
|
||||||
|
carbon.AEGetNthDesc.restype = ctypes.c_int
|
||||||
|
carbon.AEGetNthDesc.argtypes = [
|
||||||
|
ctypes.c_void_p, ctypes.c_long, ctypes.c_int,
|
||||||
|
ctypes.c_void_p, ctypes.c_void_p ]
|
||||||
|
|
||||||
|
carbon.AEGetDescDataSize.restype = ctypes.c_int
|
||||||
|
carbon.AEGetDescDataSize.argtypes = [ ctypes.POINTER(AEDesc) ]
|
||||||
|
|
||||||
|
carbon.AEGetDescData.restype = ctypes.c_int
|
||||||
|
carbon.AEGetDescData.argtypes = [
|
||||||
|
ctypes.POINTER(AEDesc),
|
||||||
|
ctypes.c_void_p,
|
||||||
|
ctypes.c_int,
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
carbon.FSRefMakePath.restype = ctypes.c_int
|
||||||
|
carbon.FSRefMakePath.argtypes = [ctypes.c_void_p, ctypes.c_void_p, ctypes.c_uint]
|
||||||
|
|
||||||
|
return carbon
|
||||||
|
|
||||||
|
def _run_argvemulator(timeout = 60):
|
||||||
|
|
||||||
|
# Configure ctypes
|
||||||
|
carbon = _ctypes_setup()
|
||||||
|
|
||||||
|
# Is the emulator running?
|
||||||
|
running = [True]
|
||||||
|
|
||||||
|
timeout = [timeout]
|
||||||
|
|
||||||
|
# Configure AppleEvent handlers
|
||||||
|
ae_callback = carbon.AEInstallEventHandler.argtypes[2]
|
||||||
|
|
||||||
|
kAEInternetSuite, = struct.unpack('>i', b'GURL')
|
||||||
|
kAEISGetURL, = struct.unpack('>i', b'GURL')
|
||||||
|
kCoreEventClass, = struct.unpack('>i', b'aevt')
|
||||||
|
kAEOpenApplication, = struct.unpack('>i', b'oapp')
|
||||||
|
kAEOpenDocuments, = struct.unpack('>i', b'odoc')
|
||||||
|
keyDirectObject, = struct.unpack('>i', b'----')
|
||||||
|
typeAEList, = struct.unpack('>i', b'list')
|
||||||
|
typeChar, = struct.unpack('>i', b'TEXT')
|
||||||
|
typeFSRef, = struct.unpack('>i', b'fsrf')
|
||||||
|
FALSE = b'\0'
|
||||||
|
TRUE = b'\1'
|
||||||
|
eventLoopTimedOutErr = -9875
|
||||||
|
|
||||||
|
kEventClassAppleEvent, = struct.unpack('>i', b'eppc')
|
||||||
|
kEventAppleEvent = 1
|
||||||
|
|
||||||
|
|
||||||
|
@ae_callback
|
||||||
|
def open_app_handler(message, reply, refcon):
|
||||||
|
# Got a kAEOpenApplication event, which means we can
|
||||||
|
# start up. On some OSX versions this event is even
|
||||||
|
# sent when an kAEOpenDocuments or kAEOpenURLs event
|
||||||
|
# is sent later on.
|
||||||
|
#
|
||||||
|
# Therefore don't set running to false, but reduce the
|
||||||
|
# timeout to at most two seconds beyond the current time.
|
||||||
|
timeout[0] = min(timeout[0], time.time() - start + 2)
|
||||||
|
#running[0] = False
|
||||||
|
return 0
|
||||||
|
|
||||||
|
carbon.AEInstallEventHandler(kCoreEventClass, kAEOpenApplication,
|
||||||
|
open_app_handler, 0, FALSE)
|
||||||
|
|
||||||
|
@ae_callback
|
||||||
|
def open_file_handler(message, reply, refcon):
|
||||||
|
listdesc = AEDesc()
|
||||||
|
sts = carbon.AEGetParamDesc(message, keyDirectObject, typeAEList,
|
||||||
|
ctypes.byref(listdesc))
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot unpack open document event")
|
||||||
|
running[0] = False
|
||||||
|
return
|
||||||
|
|
||||||
|
item_count = ctypes.c_long()
|
||||||
|
sts = carbon.AECountItems(ctypes.byref(listdesc), ctypes.byref(item_count))
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot unpack open document event")
|
||||||
|
running[0] = False
|
||||||
|
return
|
||||||
|
|
||||||
|
desc = AEDesc()
|
||||||
|
for i in range(item_count.value):
|
||||||
|
sts = carbon.AEGetNthDesc(ctypes.byref(listdesc), i+1, typeFSRef, 0, ctypes.byref(desc))
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot unpack open document event")
|
||||||
|
running[0] = False
|
||||||
|
return
|
||||||
|
|
||||||
|
sz = carbon.AEGetDescDataSize(ctypes.byref(desc))
|
||||||
|
buf = ctypes.create_string_buffer(sz)
|
||||||
|
sts = carbon.AEGetDescData(ctypes.byref(desc), buf, sz)
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot extract open document event")
|
||||||
|
continue
|
||||||
|
|
||||||
|
fsref = buf
|
||||||
|
|
||||||
|
buf = ctypes.create_string_buffer(1024)
|
||||||
|
sts = carbon.FSRefMakePath(ctypes.byref(fsref), buf, 1023)
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot extract open document event")
|
||||||
|
continue
|
||||||
|
|
||||||
|
if sys.version_info[0] > 2:
|
||||||
|
sys.argv.append(buf.value.decode('utf-8'))
|
||||||
|
else:
|
||||||
|
sys.argv.append(buf.value)
|
||||||
|
|
||||||
|
running[0] = False
|
||||||
|
return 0
|
||||||
|
|
||||||
|
carbon.AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
|
||||||
|
open_file_handler, 0, FALSE)
|
||||||
|
|
||||||
|
@ae_callback
|
||||||
|
def open_url_handler(message, reply, refcon):
|
||||||
|
listdesc = AEDesc()
|
||||||
|
ok = carbon.AEGetParamDesc(message, keyDirectObject, typeAEList,
|
||||||
|
ctypes.byref(listdesc))
|
||||||
|
if ok != 0:
|
||||||
|
print("argvemulator warning: cannot unpack open document event")
|
||||||
|
running[0] = False
|
||||||
|
return
|
||||||
|
|
||||||
|
item_count = ctypes.c_long()
|
||||||
|
sts = carbon.AECountItems(ctypes.byref(listdesc), ctypes.byref(item_count))
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot unpack open url event")
|
||||||
|
running[0] = False
|
||||||
|
return
|
||||||
|
|
||||||
|
desc = AEDesc()
|
||||||
|
for i in range(item_count.value):
|
||||||
|
sts = carbon.AEGetNthDesc(ctypes.byref(listdesc), i+1, typeChar, 0, ctypes.byref(desc))
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot unpack open URL event")
|
||||||
|
running[0] = False
|
||||||
|
return
|
||||||
|
|
||||||
|
sz = carbon.AEGetDescDataSize(ctypes.byref(desc))
|
||||||
|
buf = ctypes.create_string_buffer(sz)
|
||||||
|
sts = carbon.AEGetDescData(ctypes.byref(desc), buf, sz)
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: cannot extract open URL event")
|
||||||
|
|
||||||
|
else:
|
||||||
|
if sys.version_info[0] > 2:
|
||||||
|
sys.argv.append(buf.value.decode('utf-8'))
|
||||||
|
else:
|
||||||
|
sys.argv.append(buf.value)
|
||||||
|
|
||||||
|
running[0] = False
|
||||||
|
return 0
|
||||||
|
|
||||||
|
carbon.AEInstallEventHandler(kAEInternetSuite, kAEISGetURL,
|
||||||
|
open_url_handler, 0, FALSE)
|
||||||
|
|
||||||
|
# Remove the funny -psn_xxx_xxx argument
|
||||||
|
if len(sys.argv) > 1 and sys.argv[1].startswith('-psn_'):
|
||||||
|
del sys.argv[1]
|
||||||
|
|
||||||
|
start = time.time()
|
||||||
|
now = time.time()
|
||||||
|
eventType = EventTypeSpec()
|
||||||
|
eventType.eventClass = kEventClassAppleEvent
|
||||||
|
eventType.eventKind = kEventAppleEvent
|
||||||
|
|
||||||
|
while running[0] and now - start < timeout[0]:
|
||||||
|
event = ctypes.c_void_p()
|
||||||
|
|
||||||
|
sts = carbon.ReceiveNextEvent(1, ctypes.byref(eventType),
|
||||||
|
start + timeout[0] - now, TRUE, ctypes.byref(event))
|
||||||
|
|
||||||
|
if sts == eventLoopTimedOutErr:
|
||||||
|
break
|
||||||
|
|
||||||
|
elif sts != 0:
|
||||||
|
print("argvemulator warning: fetching events failed")
|
||||||
|
break
|
||||||
|
|
||||||
|
sts = carbon.AEProcessEvent(event)
|
||||||
|
if sts != 0:
|
||||||
|
print("argvemulator warning: processing events failed")
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
|
carbon.AERemoveEventHandler(kCoreEventClass, kAEOpenApplication,
|
||||||
|
open_app_handler, FALSE)
|
||||||
|
carbon.AERemoveEventHandler(kCoreEventClass, kAEOpenDocuments,
|
||||||
|
open_file_handler, FALSE)
|
||||||
|
carbon.AERemoveEventHandler(kAEInternetSuite, kAEISGetURL,
|
||||||
|
open_url_handler, FALSE)
|
||||||
|
|
||||||
|
def _argv_emulation():
|
||||||
|
import sys, os
|
||||||
|
# only use if started by LaunchServices
|
||||||
|
if os.environ.get('_PY2APP_LAUNCHED_'):
|
||||||
|
_run_argvemulator()
|
||||||
|
_argv_emulation()
|
@ -0,0 +1,7 @@
|
|||||||
|
def _argv_inject(argv):
|
||||||
|
import sys
|
||||||
|
# only use if started by LaunchServices
|
||||||
|
if len(sys.argv) > 1 and sys.argv[1].startswith('-psn'):
|
||||||
|
sys.argv[1:2] = argv
|
||||||
|
else:
|
||||||
|
sys.argv[1:1] = argv
|
@ -0,0 +1,42 @@
|
|||||||
|
import re, sys
|
||||||
|
cookie_re = re.compile(b"coding[:=]\s*([-\w.]+)")
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
default_encoding = 'ascii'
|
||||||
|
else:
|
||||||
|
default_encoding = 'utf-8'
|
||||||
|
|
||||||
|
def guess_encoding(fp):
|
||||||
|
for i in range(2):
|
||||||
|
ln = fp.readline()
|
||||||
|
|
||||||
|
m = cookie_re.search(ln)
|
||||||
|
if m is not None:
|
||||||
|
return m.group(1).decode('ascii')
|
||||||
|
|
||||||
|
return default_encoding
|
||||||
|
|
||||||
|
def _run():
|
||||||
|
global __file__
|
||||||
|
import os, site
|
||||||
|
sys.frozen = 'macosx_app'
|
||||||
|
|
||||||
|
argv0 = os.path.basename(os.environ['ARGVZERO'])
|
||||||
|
script = SCRIPT_MAP.get(argv0, DEFAULT_SCRIPT)
|
||||||
|
|
||||||
|
sys.argv[0] = __file__ = script
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
with open(script, 'rU') as fp:
|
||||||
|
source = fp.read() + "\n"
|
||||||
|
else:
|
||||||
|
with open(script, 'rb') as fp:
|
||||||
|
encoding = guess_encoding(fp)
|
||||||
|
|
||||||
|
with open(script, 'r', encoding=encoding) as fp:
|
||||||
|
source = fp.read() + '\n'
|
||||||
|
|
||||||
|
BOM=b'\xef\xbb\xbf'.decode('utf-8')
|
||||||
|
if source.startswith(BOM):
|
||||||
|
source = source[1:]
|
||||||
|
|
||||||
|
|
||||||
|
exec(compile(source, script, 'exec'), globals(), globals())
|
@ -0,0 +1,45 @@
|
|||||||
|
import re, sys
|
||||||
|
cookie_re = re.compile(b"coding[:=]\s*([-\w.]+)")
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
default_encoding = 'ascii'
|
||||||
|
else:
|
||||||
|
default_encoding = 'utf-8'
|
||||||
|
|
||||||
|
def guess_encoding(fp):
|
||||||
|
for i in range(2):
|
||||||
|
ln = fp.readline()
|
||||||
|
|
||||||
|
m = cookie_re.search(ln)
|
||||||
|
if m is not None:
|
||||||
|
return m.group(1).decode('ascii')
|
||||||
|
|
||||||
|
return default_encoding
|
||||||
|
|
||||||
|
def _run():
|
||||||
|
global __file__
|
||||||
|
import os, site
|
||||||
|
sys.frozen = 'macosx_plugin'
|
||||||
|
base = os.environ['RESOURCEPATH']
|
||||||
|
|
||||||
|
if 'ARGVZERO' in os.environ:
|
||||||
|
argv0 = os.path.basename(os.environ['ARGVZERO'])
|
||||||
|
else:
|
||||||
|
argv0 = None
|
||||||
|
script = SCRIPT_MAP.get(argv0, DEFAULT_SCRIPT)
|
||||||
|
|
||||||
|
sys.argv[0] = __file__ = path = os.path.join(base, script)
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
with open(path, 'rU') as fp:
|
||||||
|
source = fp.read() + "\n"
|
||||||
|
else:
|
||||||
|
with open(path, 'rb') as fp:
|
||||||
|
encoding = guess_encoding(fp)
|
||||||
|
|
||||||
|
with open(path, 'r', encoding=encoding) as fp:
|
||||||
|
source = fp.read() + '\n'
|
||||||
|
|
||||||
|
BOM=b'\xef\xbb\xbf'.decode('utf-8')
|
||||||
|
if source.startswith(BOM):
|
||||||
|
source = source[1:]
|
||||||
|
|
||||||
|
exec(compile(source, script, 'exec'), globals(), globals())
|
42
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/boot_app.py
Normal file
42
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/boot_app.py
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import re, sys
|
||||||
|
cookie_re = re.compile(b"coding[:=]\s*([-\w.]+)")
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
default_encoding = 'ascii'
|
||||||
|
else:
|
||||||
|
default_encoding = 'utf-8'
|
||||||
|
|
||||||
|
def guess_encoding(fp):
|
||||||
|
for i in range(2):
|
||||||
|
ln = fp.readline()
|
||||||
|
|
||||||
|
m = cookie_re.search(ln)
|
||||||
|
if m is not None:
|
||||||
|
return m.group(1).decode('ascii')
|
||||||
|
|
||||||
|
return default_encoding
|
||||||
|
|
||||||
|
def _run():
|
||||||
|
global __file__
|
||||||
|
import os, site
|
||||||
|
sys.frozen = 'macosx_app'
|
||||||
|
base = os.environ['RESOURCEPATH']
|
||||||
|
|
||||||
|
argv0 = os.path.basename(os.environ['ARGVZERO'])
|
||||||
|
script = SCRIPT_MAP.get(argv0, DEFAULT_SCRIPT)
|
||||||
|
|
||||||
|
path = os.path.join(base, script)
|
||||||
|
sys.argv[0] = __file__ = path
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
with open(path, 'rU') as fp:
|
||||||
|
source = fp.read() + "\n"
|
||||||
|
else:
|
||||||
|
with open(path, 'rb') as fp:
|
||||||
|
encoding = guess_encoding(fp)
|
||||||
|
|
||||||
|
with open(path, 'r', encoding=encoding) as fp:
|
||||||
|
source = fp.read() + '\n'
|
||||||
|
|
||||||
|
BOM=b'\xef\xbb\xbf'.decode('utf-8')
|
||||||
|
if source.startswith(BOM):
|
||||||
|
source = source[1:]
|
||||||
|
exec(compile(source, path, 'exec'), globals(), globals())
|
45
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/boot_plugin.py
Normal file
45
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/boot_plugin.py
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
import re, sys
|
||||||
|
cookie_re = re.compile(b"coding[:=]\s*([-\w.]+)")
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
default_encoding = 'ascii'
|
||||||
|
else:
|
||||||
|
default_encoding = 'utf-8'
|
||||||
|
|
||||||
|
def guess_encoding(fp):
|
||||||
|
for i in range(2):
|
||||||
|
ln = fp.readline()
|
||||||
|
|
||||||
|
m = cookie_re.search(ln)
|
||||||
|
if m is not None:
|
||||||
|
return m.group(1).decode('ascii')
|
||||||
|
|
||||||
|
return default_encoding
|
||||||
|
|
||||||
|
def _run():
|
||||||
|
global __file__
|
||||||
|
import os, site
|
||||||
|
sys.frozen = 'macosx_plugin'
|
||||||
|
base = os.environ['RESOURCEPATH']
|
||||||
|
|
||||||
|
if 'ARGVZERO' in os.environ:
|
||||||
|
argv0 = os.path.basename(os.environ['ARGVZERO'])
|
||||||
|
else:
|
||||||
|
argv0 = None
|
||||||
|
script = SCRIPT_MAP.get(argv0, DEFAULT_SCRIPT)
|
||||||
|
|
||||||
|
__file__ = path = os.path.join(base, script)
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
with open(path, 'rU') as fp:
|
||||||
|
source = fp.read() + "\n"
|
||||||
|
else:
|
||||||
|
with open(path, 'rb') as fp:
|
||||||
|
encoding = guess_encoding(fp)
|
||||||
|
|
||||||
|
with open(path, 'r', encoding=encoding) as fp:
|
||||||
|
source = fp.read() + '\n'
|
||||||
|
|
||||||
|
BOM=b'\xef\xbb\xbf'.decode('utf-8')
|
||||||
|
if source.startswith(BOM):
|
||||||
|
source = source[1:]
|
||||||
|
|
||||||
|
exec(compile(source, path, 'exec'), globals(), globals())
|
@ -0,0 +1,4 @@
|
|||||||
|
def _chdir_resource():
|
||||||
|
import os
|
||||||
|
os.chdir(os.environ['RESOURCEPATH'])
|
||||||
|
_chdir_resource()
|
@ -0,0 +1,8 @@
|
|||||||
|
def _setup_ctypes():
|
||||||
|
from ctypes.macholib import dyld
|
||||||
|
import os
|
||||||
|
frameworks = os.path.join(os.environ['RESOURCEPATH'], '..', 'Frameworks')
|
||||||
|
dyld.DEFAULT_FRAMEWORK_FALLBACK.insert(0, frameworks)
|
||||||
|
dyld.DEFAULT_LIBRARY_FALLBACK.insert(0, frameworks)
|
||||||
|
|
||||||
|
_setup_ctypes()
|
@ -0,0 +1,7 @@
|
|||||||
|
def _disable_linecache():
|
||||||
|
import linecache
|
||||||
|
def fake_getline(*args, **kwargs):
|
||||||
|
return ''
|
||||||
|
linecache.orig_getline = linecache.getline
|
||||||
|
linecache.getline = fake_getline
|
||||||
|
_disable_linecache()
|
@ -0,0 +1,79 @@
|
|||||||
|
def _emulate_shell_environ():
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
import time
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
if sys.version_info[0] > 2:
|
||||||
|
env = os.environb
|
||||||
|
else:
|
||||||
|
env = os.environ
|
||||||
|
|
||||||
|
split_char = b'='
|
||||||
|
|
||||||
|
# Start 'login -qf $LOGIN' in a pseudo-tty. The pseudo-tty
|
||||||
|
# is required to get the right behavior from the shell, without
|
||||||
|
# a tty the shell won't properly initialize the environment.
|
||||||
|
#
|
||||||
|
# NOTE: The code is very carefull w.r.t. getting the login
|
||||||
|
# name, the application shouldn't crash when the shell information
|
||||||
|
# cannot be retrieved
|
||||||
|
master, slave = os.openpty()
|
||||||
|
pid = os.fork()
|
||||||
|
try:
|
||||||
|
login = os.getlogin()
|
||||||
|
except AttributeError:
|
||||||
|
try:
|
||||||
|
login = os.environ['LOGNAME']
|
||||||
|
except KeyError:
|
||||||
|
login = None
|
||||||
|
|
||||||
|
if login is not None:
|
||||||
|
if pid == 0:
|
||||||
|
# Child
|
||||||
|
os.close(master)
|
||||||
|
os.setsid()
|
||||||
|
os.dup2(slave, 0)
|
||||||
|
os.dup2(slave, 1)
|
||||||
|
os.dup2(slave, 2)
|
||||||
|
os.execv('/usr/bin/login', ['login', '-qf', login])
|
||||||
|
os._exit(42)
|
||||||
|
|
||||||
|
else:
|
||||||
|
# Parent
|
||||||
|
os.close(slave)
|
||||||
|
# Echo markers around the actual output of env, that makes it
|
||||||
|
# easier to find the real data between other data printed
|
||||||
|
# by the shell.
|
||||||
|
os.write(master, b'echo "---------";env;echo "-----------"\r\n')
|
||||||
|
os.write(master, b'exit\r\n')
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
data = []
|
||||||
|
b = os.read(master, 2048)
|
||||||
|
while b:
|
||||||
|
data.append(b)
|
||||||
|
b = os.read(master, 2048)
|
||||||
|
data = b''.join(data)
|
||||||
|
os.waitpid(pid, 0)
|
||||||
|
|
||||||
|
in_data = False
|
||||||
|
for ln in data.splitlines():
|
||||||
|
if not in_data:
|
||||||
|
if ln.strip().startswith(b'--------'):
|
||||||
|
in_data = True
|
||||||
|
continue
|
||||||
|
|
||||||
|
if ln.startswith(b'--------'):
|
||||||
|
break
|
||||||
|
|
||||||
|
try:
|
||||||
|
key, value = ln.rstrip().split(split_char, 1)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
else:
|
||||||
|
env[key] = value
|
||||||
|
|
||||||
|
|
||||||
|
_emulate_shell_environ()
|
@ -0,0 +1,23 @@
|
|||||||
|
def _import_encodings():
|
||||||
|
import os
|
||||||
|
import imp
|
||||||
|
import encodings
|
||||||
|
import pkgutil
|
||||||
|
import sys
|
||||||
|
del sys.path[:2]
|
||||||
|
import encodings.aliases
|
||||||
|
|
||||||
|
encodings.__path__ = pkgutil.extend_path(
|
||||||
|
encodings.__path__,
|
||||||
|
encodings.__name__)
|
||||||
|
#imp.reload(encodings)
|
||||||
|
|
||||||
|
import encodings.mac_roman
|
||||||
|
encodings.aliases.__file__ = os.path.join(
|
||||||
|
os.path.dirname(encodings.mac_roman.__file__),
|
||||||
|
'aliases.py' + encodings.mac_roman.__file__[:-1])
|
||||||
|
|
||||||
|
imp.reload(encodings.aliases)
|
||||||
|
imp.reload(encodings)
|
||||||
|
|
||||||
|
_import_encodings()
|
@ -0,0 +1,3 @@
|
|||||||
|
def _path_inject(paths):
|
||||||
|
import sys
|
||||||
|
sys.path[:0] = paths
|
@ -0,0 +1,7 @@
|
|||||||
|
def _reset_sys_path():
|
||||||
|
# Clear generic sys.path[0]
|
||||||
|
import sys, os
|
||||||
|
resources = os.environ['RESOURCEPATH']
|
||||||
|
while sys.path[0] == resources:
|
||||||
|
del sys.path[0]
|
||||||
|
_reset_sys_path()
|
@ -0,0 +1,11 @@
|
|||||||
|
def _update_path():
|
||||||
|
import os, sys
|
||||||
|
resources = os.environ['RESOURCEPATH']
|
||||||
|
sys.path.append(os.path.join(
|
||||||
|
resources, 'lib', 'python%d.%d'%(sys.version_info[:2]), 'lib-dynload'))
|
||||||
|
sys.path.append(os.path.join(
|
||||||
|
resources, 'lib', 'python%d.%d'%(sys.version_info[:2])))
|
||||||
|
sys.path.append(os.path.join(
|
||||||
|
resources, 'lib', 'python%d.%d'%(sys.version_info[:2]), 'site-packages.zip'))
|
||||||
|
|
||||||
|
_update_path()
|
@ -0,0 +1,20 @@
|
|||||||
|
def _included_subpackages(packages):
|
||||||
|
for pkg in packages:
|
||||||
|
pass
|
||||||
|
|
||||||
|
class Finder (object):
|
||||||
|
def find_module(self, fullname, path=None):
|
||||||
|
if fullname in _path_hooks:
|
||||||
|
return Loader()
|
||||||
|
|
||||||
|
class Loader (object):
|
||||||
|
def load_module(self, fullname):
|
||||||
|
import imp, os
|
||||||
|
pkg_dir = os.path.join(os.environ['RESOURCEPATH'],
|
||||||
|
'lib', 'python%d.%d'%(sys.version_info[:2]))
|
||||||
|
return imp.load_module(
|
||||||
|
fullname, None,
|
||||||
|
os.path.join(pkg_dir, fullname), ('', '', imp.PKG_DIRECTORY))
|
||||||
|
|
||||||
|
import sys
|
||||||
|
sys.meta_path.insert(0, Finder())
|
@ -0,0 +1,13 @@
|
|||||||
|
def _setup_pkgresources():
|
||||||
|
import pkg_resources
|
||||||
|
import os, plistlib
|
||||||
|
|
||||||
|
pl = plistlib.readPlist(os.path.join(
|
||||||
|
os.path.dirname(os.getenv('RESOURCEPATH')), "Info.plist"))
|
||||||
|
appname = pl.get('CFBundleIdentifier')
|
||||||
|
if appname is None:
|
||||||
|
appname = pl['CFBundleDisplayName']
|
||||||
|
path = os.path.expanduser('~/Library/Caches/%s/python-eggs'%(appname,))
|
||||||
|
pkg_resources.set_extraction_path(path)
|
||||||
|
|
||||||
|
_setup_pkgresources()
|
@ -0,0 +1,24 @@
|
|||||||
|
def _site_packages():
|
||||||
|
import site, sys, os
|
||||||
|
paths = []
|
||||||
|
prefixes = [sys.prefix]
|
||||||
|
if sys.exec_prefix != sys.prefix:
|
||||||
|
prefixes.append(sys.exec_prefix)
|
||||||
|
for prefix in prefixes:
|
||||||
|
paths.append(os.path.join(prefix, 'lib', 'python' + sys.version[:3],
|
||||||
|
'site-packages'))
|
||||||
|
if os.path.join('.framework', '') in os.path.join(sys.prefix, ''):
|
||||||
|
home = os.environ.get('HOME')
|
||||||
|
if home:
|
||||||
|
paths.append(os.path.join(home, 'Library', 'Python',
|
||||||
|
sys.version[:3], 'site-packages'))
|
||||||
|
|
||||||
|
# Work around for a misfeature in setuptools: easy_install.pth places
|
||||||
|
# site-packages way to early on sys.path and that breaks py2app bundles.
|
||||||
|
# NOTE: this is hacks into an undocumented feature of setuptools and
|
||||||
|
# might stop to work without warning.
|
||||||
|
sys.__egginsert = len(sys.path)
|
||||||
|
|
||||||
|
for path in paths:
|
||||||
|
site.addsitedir(path)
|
||||||
|
_site_packages()
|
@ -0,0 +1,9 @@
|
|||||||
|
""" Add Apple's additional packages to sys.path """
|
||||||
|
def add_system_python_extras():
|
||||||
|
import site, sys
|
||||||
|
|
||||||
|
ver = '%s.%s'%(sys.version_info[:2])
|
||||||
|
|
||||||
|
site.addsitedir('/System/Library/Frameworks/Python.framework/Versions/%s/Extras/lib/python'%(ver,))
|
||||||
|
|
||||||
|
add_system_python_extras()
|
33
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/virtualenv.py
Normal file
33
.eggs/py2app-0.12-py3.6.egg/py2app/bootstrap/virtualenv.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
def _fixup_virtualenv(real_prefix):
|
||||||
|
import sys, os
|
||||||
|
sys.real_prefix = real_prefix
|
||||||
|
|
||||||
|
# NOTE: The adjustment code is based from logic in the site.py
|
||||||
|
# installed by virtualenv 1.8.2 (but simplified by removing support
|
||||||
|
# for platforms that aren't supported by py2app)
|
||||||
|
|
||||||
|
paths = [os.path.join(sys.real_prefix, 'lib', 'python'+sys.version[:3])]
|
||||||
|
hardcoded_relative_dirs = paths[:]
|
||||||
|
plat_path = os.path.join(sys.real_prefix, 'lib', 'python'+sys.version[:3],
|
||||||
|
'plat-%s' % sys.platform)
|
||||||
|
if os.path.exists(plat_path):
|
||||||
|
paths.append(plat_path)
|
||||||
|
|
||||||
|
# This is hardcoded in the Python executable, but
|
||||||
|
# relative to sys.prefix, so we have to fix up:
|
||||||
|
for path in list(paths):
|
||||||
|
tk_dir = os.path.join(path, 'lib-tk')
|
||||||
|
if os.path.exists(tk_dir):
|
||||||
|
paths.append(tk_dir)
|
||||||
|
|
||||||
|
# These are hardcoded in the Apple's Python executable,
|
||||||
|
# but relative to sys.prefix, so we have to fix them up:
|
||||||
|
hardcoded_paths = [os.path.join(relative_dir, module)
|
||||||
|
for relative_dir in hardcoded_relative_dirs
|
||||||
|
for module in ('plat-darwin', 'plat-mac', 'plat-mac/lib-scriptpackages')]
|
||||||
|
|
||||||
|
for path in hardcoded_paths:
|
||||||
|
if os.path.exists(path):
|
||||||
|
paths.append(path)
|
||||||
|
|
||||||
|
sys.path.extend(paths)
|
@ -0,0 +1,32 @@
|
|||||||
|
def _site_packages(prefix, real_prefix, global_site_packages):
|
||||||
|
import site, sys, os
|
||||||
|
paths = []
|
||||||
|
prefixes = [sys.prefix]
|
||||||
|
|
||||||
|
paths.append(os.path.join(prefix, 'lib', 'python' + sys.version[:3],
|
||||||
|
'site-packages'))
|
||||||
|
if os.path.join('.framework', '') in os.path.join(prefix, ''):
|
||||||
|
home = os.environ.get('HOME')
|
||||||
|
if home:
|
||||||
|
paths.append(os.path.join(home, 'Library', 'Python',
|
||||||
|
sys.version[:3], 'site-packages'))
|
||||||
|
|
||||||
|
|
||||||
|
# Work around for a misfeature in setuptools: easy_install.pth places
|
||||||
|
# site-packages way to early on sys.path and that breaks py2app bundles.
|
||||||
|
# NOTE: this is hacks into an undocumented feature of setuptools and
|
||||||
|
# might stop to work without warning.
|
||||||
|
sys.__egginsert = len(sys.path)
|
||||||
|
|
||||||
|
for path in paths:
|
||||||
|
site.addsitedir(path)
|
||||||
|
|
||||||
|
|
||||||
|
# Ensure that the global site packages get placed on sys.path after
|
||||||
|
# the site packages from the virtual environment (this functionality
|
||||||
|
# is also in virtualenv)
|
||||||
|
sys.__egginsert = len(sys.path)
|
||||||
|
|
||||||
|
if global_site_packages:
|
||||||
|
site.addsitedir(os.path.join(real_prefix, 'lib', 'python' + sys.version[:3],
|
||||||
|
'site-packages'))
|
2185
.eggs/py2app-0.12-py3.6.egg/py2app/build_app.py
Normal file
2185
.eggs/py2app-0.12-py3.6.egg/py2app/build_app.py
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,2 @@
|
|||||||
|
from . import setup
|
||||||
|
from . import plist_template
|
12
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/lib/__error__.sh
Executable file
12
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/lib/__error__.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# This is the default bundletemplate error script
|
||||||
|
# Note that this DOES NOT present a GUI dialog, because
|
||||||
|
# it has no output on stdout, and has a return value of 0.
|
||||||
|
#
|
||||||
|
if ( test -n "$2" ) ; then
|
||||||
|
echo "[$1] Unexpected Exception:" 1>&2
|
||||||
|
echo "$2: $3" 1>&2
|
||||||
|
else
|
||||||
|
echo "[$1] Could not find a suitable Python runtime" 1>&2
|
||||||
|
fi
|
132
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/lib/site.py
Normal file
132
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/lib/site.py
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
"""
|
||||||
|
Append module search paths for third-party packages to sys.path.
|
||||||
|
|
||||||
|
This is stripped down and customized for use in py2app applications
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
# os is actually in the zip, so we need to do this here.
|
||||||
|
# we can't call it python24.zip because zlib is not a built-in module (!)
|
||||||
|
_libdir = '/lib/python' + sys.version[:3]
|
||||||
|
_parent = '/'.join(__file__.split('/')[:-1])
|
||||||
|
if not _parent.endswith(_libdir):
|
||||||
|
_parent += _libdir
|
||||||
|
sys.path.append(_parent + '/site-packages.zip')
|
||||||
|
|
||||||
|
# Stuffit decompresses recursively by default, that can mess up py2app bundles,
|
||||||
|
# add the uncompressed site-packages to the path to compensate for that.
|
||||||
|
sys.path.append(_parent + '/site-packages')
|
||||||
|
|
||||||
|
USER_SITE=None
|
||||||
|
|
||||||
|
import os
|
||||||
|
try:
|
||||||
|
basestring
|
||||||
|
except NameError:
|
||||||
|
basestring = str
|
||||||
|
|
||||||
|
def makepath(*paths):
|
||||||
|
dir = os.path.abspath(os.path.join(*paths))
|
||||||
|
return dir, os.path.normcase(dir)
|
||||||
|
|
||||||
|
for m in sys.modules.values():
|
||||||
|
f = getattr(m, '__file__', None)
|
||||||
|
if isinstance(f, basestring) and os.path.exists(f):
|
||||||
|
m.__file__ = os.path.abspath(m.__file__)
|
||||||
|
del m
|
||||||
|
|
||||||
|
# This ensures that the initial path provided by the interpreter contains
|
||||||
|
# only absolute pathnames, even if we're running from the build directory.
|
||||||
|
L = []
|
||||||
|
_dirs_in_sys_path = {}
|
||||||
|
dir = dircase = None # sys.path may be empty at this point
|
||||||
|
for dir in sys.path:
|
||||||
|
# Filter out duplicate paths (on case-insensitive file systems also
|
||||||
|
# if they only differ in case); turn relative paths into absolute
|
||||||
|
# paths.
|
||||||
|
dir, dircase = makepath(dir)
|
||||||
|
if not dircase in _dirs_in_sys_path:
|
||||||
|
L.append(dir)
|
||||||
|
_dirs_in_sys_path[dircase] = 1
|
||||||
|
sys.path[:] = L
|
||||||
|
del dir, dircase, L
|
||||||
|
_dirs_in_sys_path = None
|
||||||
|
|
||||||
|
def _init_pathinfo():
|
||||||
|
global _dirs_in_sys_path
|
||||||
|
_dirs_in_sys_path = d = {}
|
||||||
|
for dir in sys.path:
|
||||||
|
if dir and not os.path.isdir(dir):
|
||||||
|
continue
|
||||||
|
dir, dircase = makepath(dir)
|
||||||
|
d[dircase] = 1
|
||||||
|
|
||||||
|
def addsitedir(sitedir):
|
||||||
|
global _dirs_in_sys_path
|
||||||
|
if _dirs_in_sys_path is None:
|
||||||
|
_init_pathinfo()
|
||||||
|
reset = 1
|
||||||
|
else:
|
||||||
|
reset = 0
|
||||||
|
sitedir, sitedircase = makepath(sitedir)
|
||||||
|
if not sitedircase in _dirs_in_sys_path:
|
||||||
|
sys.path.append(sitedir) # Add path component
|
||||||
|
try:
|
||||||
|
names = os.listdir(sitedir)
|
||||||
|
except os.error:
|
||||||
|
return
|
||||||
|
names.sort()
|
||||||
|
for name in names:
|
||||||
|
if name[-4:] == os.extsep + "pth":
|
||||||
|
addpackage(sitedir, name)
|
||||||
|
if reset:
|
||||||
|
_dirs_in_sys_path = None
|
||||||
|
|
||||||
|
def addpackage(sitedir, name):
|
||||||
|
global _dirs_in_sys_path
|
||||||
|
if _dirs_in_sys_path is None:
|
||||||
|
_init_pathinfo()
|
||||||
|
reset = 1
|
||||||
|
else:
|
||||||
|
reset = 0
|
||||||
|
fullname = os.path.join(sitedir, name)
|
||||||
|
try:
|
||||||
|
with open(fullname) as f:
|
||||||
|
while 1:
|
||||||
|
dir = f.readline()
|
||||||
|
if not dir:
|
||||||
|
break
|
||||||
|
if dir[0] == '#':
|
||||||
|
continue
|
||||||
|
if dir.startswith("import"):
|
||||||
|
exec(dir)
|
||||||
|
continue
|
||||||
|
if dir[-1] == '\n':
|
||||||
|
dir = dir[:-1]
|
||||||
|
dir, dircase = makepath(sitedir, dir)
|
||||||
|
if not dircase in _dirs_in_sys_path and os.path.exists(dir):
|
||||||
|
sys.path.append(dir)
|
||||||
|
_dirs_in_sys_path[dircase] = 1
|
||||||
|
except IOError:
|
||||||
|
return
|
||||||
|
if reset:
|
||||||
|
_dirs_in_sys_path = None
|
||||||
|
|
||||||
|
|
||||||
|
#sys.setdefaultencoding('utf-8')
|
||||||
|
|
||||||
|
#
|
||||||
|
# Run custom site specific code, if available.
|
||||||
|
#
|
||||||
|
try:
|
||||||
|
import sitecustomize
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
#
|
||||||
|
# Remove sys.setdefaultencoding() so that users cannot change the
|
||||||
|
# encoding after initialization. The test for presence is needed when
|
||||||
|
# this module is run as a script, because this code is executed twice.
|
||||||
|
#
|
||||||
|
if hasattr(sys, "setdefaultencoding"):
|
||||||
|
del sys.setdefaultencoding
|
@ -0,0 +1,51 @@
|
|||||||
|
import sys
|
||||||
|
import py2app
|
||||||
|
__all__ = ['infoPlistDict']
|
||||||
|
|
||||||
|
def infoPlistDict(CFBundleExecutable, plist={}):
|
||||||
|
CFBundleExecutable = CFBundleExecutable
|
||||||
|
NSPrincipalClass = ''.join(CFBundleExecutable.split())
|
||||||
|
version = sys.version[:3]
|
||||||
|
pdict = dict(
|
||||||
|
CFBundleDevelopmentRegion='English',
|
||||||
|
CFBundleDisplayName=plist.get('CFBundleName', CFBundleExecutable),
|
||||||
|
CFBundleExecutable=CFBundleExecutable,
|
||||||
|
CFBundleIconFile=CFBundleExecutable,
|
||||||
|
CFBundleIdentifier='org.pythonmac.unspecified.%s' % (NSPrincipalClass,),
|
||||||
|
CFBundleInfoDictionaryVersion='6.0',
|
||||||
|
CFBundleName=CFBundleExecutable,
|
||||||
|
CFBundlePackageType='BNDL',
|
||||||
|
CFBundleShortVersionString=plist.get('CFBundleVersion', '0.0'),
|
||||||
|
CFBundleSignature='????',
|
||||||
|
CFBundleVersion='0.0',
|
||||||
|
LSHasLocalizedDisplayName=False,
|
||||||
|
NSAppleScriptEnabled=False,
|
||||||
|
NSHumanReadableCopyright='Copyright not specified',
|
||||||
|
NSMainNibFile='MainMen',
|
||||||
|
NSPrincipalClass=NSPrincipalClass,
|
||||||
|
PyMainFileNames=['__boot__'],
|
||||||
|
PyResourcePackages=[ (s % version) for s in [
|
||||||
|
'lib/python%s',
|
||||||
|
'lib/python%s/lib-dynload',
|
||||||
|
'lib/python%s/site-packages.zip',
|
||||||
|
]] + [ 'lib/python%s.zip' % version.replace('.', '') ],
|
||||||
|
PyRuntimeLocations=[(s % version) for s in [
|
||||||
|
'@executable_path/../Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'~/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'/Network/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
'/System/Library/Frameworks/Python.framework/Versions/%s/Python',
|
||||||
|
]],
|
||||||
|
)
|
||||||
|
pdict.update(plist)
|
||||||
|
pythonInfo = pdict.setdefault('PythonInfoDict', {})
|
||||||
|
pythonInfo.update(dict(
|
||||||
|
PythonLongVersion=sys.version,
|
||||||
|
PythonShortVersion=sys.version[:3],
|
||||||
|
PythonExecutable=sys.executable,
|
||||||
|
))
|
||||||
|
py2appInfo = pythonInfo.setdefault('py2app', {}).update(dict(
|
||||||
|
version=py2app.__version__,
|
||||||
|
template='bundle',
|
||||||
|
))
|
||||||
|
return pdict
|
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-fat
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-fat
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-fat3
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-fat3
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-i386
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-i386
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-intel
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-intel
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-ppc
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-ppc
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-ppc64
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-ppc64
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-universal
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-universal
Executable file
Binary file not shown.
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-x86_64
Executable file
BIN
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/prebuilt/main-x86_64
Executable file
Binary file not shown.
122
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/setup.py
Normal file
122
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/setup.py
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import distutils.sysconfig
|
||||||
|
import distutils.util
|
||||||
|
|
||||||
|
gPreBuildVariants = [
|
||||||
|
{
|
||||||
|
'name': 'main-universal',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-isysroot @@XCODE_ROOT@@/SDKs/MacOSX10.5.sdk -arch i386 -arch ppc -arch ppc64 -arch x86_64',
|
||||||
|
'cc': 'gcc-4.2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-ppc64',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-isysroot @@XCODE_ROOT@@/SDKs/MacOSX10.5.sdk -arch ppc64',
|
||||||
|
'cc': 'gcc-4.2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-x86_64',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-isysroot / -arch x86_64',
|
||||||
|
'cc': 'clang',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-fat3',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-isysroot / -arch i386 -arch ppc -arch x86_64',
|
||||||
|
'cc': 'gcc-4.2',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-intel',
|
||||||
|
'target': '10.5',
|
||||||
|
'cflags': '-isysroot / -arch i386 -arch x86_64',
|
||||||
|
'cc': 'clang',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-i386',
|
||||||
|
'target': '10.3',
|
||||||
|
#'cflags': '-isysroot @@XCODE_ROOT@@/SDKs/MacOSX10.4u.sdk -arch i386',
|
||||||
|
'cflags': '-arch i386 -isysroot /',
|
||||||
|
'cc': 'clang',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-ppc',
|
||||||
|
'target': '10.3',
|
||||||
|
'cflags': '-isysroot @@XCODE_ROOT@@/SDKs/MacOSX10.4u.sdk -arch ppc',
|
||||||
|
'cc': 'gcc-4.0',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'name': 'main-fat',
|
||||||
|
'target': '10.3',
|
||||||
|
'cflags': '-isysroot @@XCODE_ROOT@@/SDKs/MacOSX10.4u.sdk -arch i386 -arch ppc',
|
||||||
|
'cc': 'gcc-4.0',
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def main(all=False, arch=None):
|
||||||
|
basepath = os.path.dirname(__file__)
|
||||||
|
builddir = os.path.join(basepath, 'prebuilt')
|
||||||
|
if not os.path.exists(builddir):
|
||||||
|
os.makedirs(builddir)
|
||||||
|
src = os.path.join(basepath, 'src', 'main.m')
|
||||||
|
|
||||||
|
cfg = distutils.sysconfig.get_config_vars()
|
||||||
|
|
||||||
|
BASE_CFLAGS = cfg['CFLAGS']
|
||||||
|
BASE_CFLAGS = BASE_CFLAGS.replace('-dynamic', '')
|
||||||
|
BASE_CFLAGS += ' -bundle -framework Foundation -framework AppKit'
|
||||||
|
while True:
|
||||||
|
x = re.sub('-arch\s+\S+', '', BASE_CFLAGS)
|
||||||
|
if x == BASE_CFLAGS:
|
||||||
|
break
|
||||||
|
BASE_CFLAGS=x
|
||||||
|
|
||||||
|
while True:
|
||||||
|
x = re.sub('-isysroot\s+\S+', '', BASE_CFLAGS)
|
||||||
|
if x == BASE_CFLAGS:
|
||||||
|
break
|
||||||
|
BASE_CFLAGS=x
|
||||||
|
|
||||||
|
if arch is None:
|
||||||
|
arch = distutils.util.get_platform().split('-')[-1]
|
||||||
|
if sys.prefix.startswith('/System') and \
|
||||||
|
sys.version_info[:2] == (2,5):
|
||||||
|
arch = "fat"
|
||||||
|
|
||||||
|
name = 'main-' + arch
|
||||||
|
root = None
|
||||||
|
|
||||||
|
if all:
|
||||||
|
for entry in gPreBuildVariants:
|
||||||
|
if (not all) and entry['name'] != name: continue
|
||||||
|
|
||||||
|
dest = os.path.join(builddir, entry['name'])
|
||||||
|
if not os.path.exists(dest) or (
|
||||||
|
os.stat(dest).st_mtime < os.stat(src).st_mtime):
|
||||||
|
if root is None:
|
||||||
|
fp = os.popen('xcode-select -print-path', 'r')
|
||||||
|
root = fp.read().strip()
|
||||||
|
fp.close()
|
||||||
|
|
||||||
|
print ("rebuilding %s"%(entry['name']))
|
||||||
|
|
||||||
|
#CC=os.path.join(root, 'usr', 'bin', entry['cc'])
|
||||||
|
CC=entry['cc']
|
||||||
|
CFLAGS = BASE_CFLAGS + ' ' + entry['cflags'].replace('@@XCODE_ROOT@@', root)
|
||||||
|
os.environ['MACOSX_DEPLOYMENT_TARGET'] = entry['target']
|
||||||
|
os.system('"%(CC)s" -o "%(dest)s" "%(src)s" %(CFLAGS)s' % locals())
|
||||||
|
|
||||||
|
dest = os.path.join(
|
||||||
|
builddir,
|
||||||
|
'main-' + arch
|
||||||
|
)
|
||||||
|
|
||||||
|
return dest
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
main(all=True)
|
692
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/src/main.m
Normal file
692
.eggs/py2app-0.12-py3.6.egg/py2app/bundletemplate/src/main.m
Normal file
@ -0,0 +1,692 @@
|
|||||||
|
//
|
||||||
|
// main.m
|
||||||
|
// apptemplate
|
||||||
|
//
|
||||||
|
// Created by Bob Ippolito on Mon September 20 2004.
|
||||||
|
// Copyright (c) 2004 Bob Ippolito. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
#include <mach-o/dyld.h>
|
||||||
|
#include <mach-o/loader.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/syslimits.h>
|
||||||
|
#include <crt_externs.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <locale.h>
|
||||||
|
#include <langinfo.h>
|
||||||
|
|
||||||
|
#include <objc/objc-class.h>
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constants
|
||||||
|
//
|
||||||
|
NSString *ERR_CANNOT_SAVE_LOCALE = @"Cannot save locale information";
|
||||||
|
NSString *ERR_REALLYBADTITLE = @"The bundle could not be launched.";
|
||||||
|
NSString *ERR_TITLEFORMAT = @"%@ has encountered a fatal error, and will now terminate.";
|
||||||
|
NSString *ERR_PYRUNTIMELOCATIONS = @"The Info.plist file must have a PyRuntimeLocations array containing string values for preferred Python runtime locations. These strings should be \"otool -L\" style mach ids; \"@executable_stub\" and \"~\" prefixes will be translated accordingly.";
|
||||||
|
NSString *ERR_NOPYTHONRUNTIME = @"A Python runtime could be located. You may need to install a framework build of Python, or edit the PyRuntimeLocations array in this bundle's Info.plist file.\rThese runtime locations were attempted:\r\r";
|
||||||
|
NSString *ERR_NOPYTHONSCRIPT = @"A main script could not be located in the Resources folder.\rThese files were tried:\r\r";
|
||||||
|
NSString *ERR_LINKERRFMT = @"An internal error occurred while attempting to link with:\r\r%s\r\rSee the Console for a detailed dyld error message";
|
||||||
|
NSString *ERR_PYTHONEXCEPTION = @"An uncaught exception was raised during execution of the main script:\r\r%@: %@\r\rThis may mean that an unexpected error has occurred, or that you do not have all of the dependencies for this bundle.";
|
||||||
|
NSString *ERR_COLONPATH = @"Python bundles can not currently run from paths containing a '/' (or ':' from the Terminal).";
|
||||||
|
|
||||||
|
#define PYMACAPP_NSIMAGEFLAGS (NSADDIMAGE_OPTION_RETURN_ON_ERROR | NSADDIMAGE_OPTION_WITH_SEARCHING)
|
||||||
|
#define PYMACAPP_NSLOOKUPSYMBOLINIMAGEFLAGS (NSLOOKUPSYMBOLINIMAGE_OPTION_BIND | NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR)
|
||||||
|
|
||||||
|
//
|
||||||
|
// Typedefs
|
||||||
|
//
|
||||||
|
|
||||||
|
#define Py_file_input 257
|
||||||
|
typedef int PyObject;
|
||||||
|
typedef int PyThreadState;
|
||||||
|
typedef enum {PyGILState_LOCKED, PyGILState_UNLOCKED} PyGILState_STATE;
|
||||||
|
typedef PyGILState_STATE (*PyGILState_EnsurePtr)(void);
|
||||||
|
typedef void (*PyGILState_ReleasePtr)(PyGILState_STATE);
|
||||||
|
typedef PyThreadState *(*PyThreadState_SwapPtr)(PyThreadState *);
|
||||||
|
typedef void (*PyEval_ReleaseLockPtr)(void);
|
||||||
|
typedef void (*PyErr_ClearPtr)(void);
|
||||||
|
typedef void (*PyErr_PrintPtr)(void);
|
||||||
|
typedef int (*PyErr_OccurredPtr)(void);
|
||||||
|
typedef PyObject *(*PyBytes_FromStringPtr)(const char *);
|
||||||
|
typedef int (*PyList_InsertPtr)(PyObject *, int, PyObject *);
|
||||||
|
typedef void (*Py_DecRefPtr)(PyObject *);
|
||||||
|
typedef void (*Py_SetProgramNamePtr)(const wchar_t *);
|
||||||
|
typedef int (*Py_IsInitializedPtr)(void);
|
||||||
|
typedef void (*Py_InitializePtr)(void);
|
||||||
|
typedef void (*PyEval_InitThreadsPtr)(void);
|
||||||
|
typedef PyObject *(*PyRun_FilePtr)(FILE *, const char *, int, PyObject *, PyObject *);
|
||||||
|
typedef PyObject *(*PySys_GetObjectPtr)(const char *);
|
||||||
|
typedef int *(*PySys_SetArgvPtr)(int argc, char **argv);
|
||||||
|
typedef PyObject *(*PyObject_StrPtr)(PyObject *);
|
||||||
|
typedef const char *(*PyBytes_AsStringPtr)(PyObject *);
|
||||||
|
typedef PyObject *(*PyObject_GetAttrStringPtr)(PyObject *, const char *);
|
||||||
|
typedef PyObject *(*PyObject_CallMethodPtr)(PyObject *, const char *, const char *, ...);
|
||||||
|
typedef PyObject *(*PyImport_ImportModulePtr)(char *);
|
||||||
|
typedef PyObject *(*PyImport_AddModulePtr)(char *);
|
||||||
|
typedef PyObject *(*PyModule_AddStringConstantPtr)(PyObject *, char *, char *);
|
||||||
|
typedef PyObject *(*PyModule_AddObjectPtr)(PyObject *, char *, PyObject *);
|
||||||
|
typedef PyObject *(*PyModule_GetDictPtr)(PyObject *);
|
||||||
|
typedef void (*PyObject_SetItemPtr)(PyObject *, PyObject *, PyObject *);
|
||||||
|
typedef wchar_t* (*_Py_DecodeUTF8_surrogateescapePtr)(const char *s, ssize_t size);
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
// Signatures
|
||||||
|
//
|
||||||
|
|
||||||
|
static void DefaultDecRef(PyObject *op);
|
||||||
|
static int report_error(NSString *err);
|
||||||
|
static int report_linkEdit_error(const char* name);
|
||||||
|
static int report_script_error(NSString *err, NSString *errClassName, NSString *errName);
|
||||||
|
static NSString *pyStandardizePath(NSString *pyLocation);
|
||||||
|
static BOOL doesPathExist(NSString *path);
|
||||||
|
static NSString *getBundleName(void);
|
||||||
|
static NSString *getErrorTitle(NSString *bundleName);
|
||||||
|
static const char *bundlePath(void);
|
||||||
|
static NSBundle *bundleBundle(void);
|
||||||
|
static int pyobjc_main(int argc, char * const *argv, char * const *envp);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Mach-O Constructor
|
||||||
|
//
|
||||||
|
|
||||||
|
static void __attribute__ ((constructor)) _py2app_bundle_load(void);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Implementation
|
||||||
|
//
|
||||||
|
|
||||||
|
static
|
||||||
|
const char *bundlePath(void) {
|
||||||
|
int i;
|
||||||
|
const struct mach_header *myHeader = _dyld_get_image_header_containing_address(&bundlePath);
|
||||||
|
int count = _dyld_image_count();
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
if (_dyld_get_image_header(i) == myHeader) {
|
||||||
|
return _dyld_get_image_name(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
abort();
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NSBundle *bundleBundle(void) {
|
||||||
|
static NSBundle *myBundle = NULL;
|
||||||
|
if (!myBundle) {
|
||||||
|
int i;
|
||||||
|
NSString *path = [NSString stringWithUTF8String:bundlePath()];
|
||||||
|
// strip Contents/MacOS/App
|
||||||
|
for (i = 0; i < 3; i++) {
|
||||||
|
path = [path stringByDeletingLastPathComponent];
|
||||||
|
}
|
||||||
|
myBundle = [[NSBundle alloc] initWithPath:path];
|
||||||
|
}
|
||||||
|
return myBundle;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// THIS WILL NOT WORK WITH Py_TRACE_REFS / Py_DEBUG ON UNLESS USING 2.4 OR LATER!
|
||||||
|
//
|
||||||
|
static
|
||||||
|
void DefaultDecRef(PyObject *op) {
|
||||||
|
if (op != NULL) {
|
||||||
|
--(*op);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int report_script_error(NSString *err, NSString *errClassName, NSString *errName) {
|
||||||
|
return report_error(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int report_error(NSString *err) {
|
||||||
|
NSLog(@"%@", getErrorTitle(getBundleName()));
|
||||||
|
NSLog(@"%@", err);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
int report_linkEdit_error(const char* name) {
|
||||||
|
NSLinkEditErrors errorClass;
|
||||||
|
int errorNumber;
|
||||||
|
const char *fileName;
|
||||||
|
const char *errorString;
|
||||||
|
NSLinkEditError(&errorClass, &errorNumber, &fileName, &errorString);
|
||||||
|
NSLog(@"%s: %s", name, errorString);
|
||||||
|
printf("<<<py2app>>>> %s: %s\n", name, errorString);
|
||||||
|
return report_error([NSString stringWithFormat:ERR_LINKERRFMT, fileName]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NSString *pyStandardizePath(NSString *pyLocation) {
|
||||||
|
if ([pyLocation hasPrefix:@"@executable_path/"]) {
|
||||||
|
NSMutableArray *newComponents = [[pyLocation pathComponents] mutableCopy];
|
||||||
|
[newComponents replaceObjectAtIndex:0 withObject:[bundleBundle() privateFrameworksPath]];
|
||||||
|
pyLocation = [NSString pathWithComponents: newComponents];
|
||||||
|
}
|
||||||
|
return [pyLocation stringByStandardizingPath];
|
||||||
|
};
|
||||||
|
|
||||||
|
static
|
||||||
|
BOOL doesPathExist(NSString *path) {
|
||||||
|
struct stat sb;
|
||||||
|
return (stat([path fileSystemRepresentation], &sb) == -1) ? NO : YES;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NSString *getBundleName(void) {
|
||||||
|
NSDictionary *infoDictionary = [bundleBundle() infoDictionary];
|
||||||
|
NSString *bundleName = [infoDictionary objectForKey:@"CFBundleName"];
|
||||||
|
if (!bundleName) {
|
||||||
|
bundleName = [infoDictionary objectForKey:@"CFBundleExecutable"];
|
||||||
|
}
|
||||||
|
return bundleName;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NSString *getErrorTitle(NSString *bundleName) {
|
||||||
|
if (!bundleName) {
|
||||||
|
return ERR_REALLYBADTITLE;
|
||||||
|
}
|
||||||
|
return [NSString stringWithFormat:ERR_TITLEFORMAT,bundleName];
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NSString *getPythonLocation(NSArray *pyLocations) {
|
||||||
|
// get the runtime locations from the Info.plist
|
||||||
|
|
||||||
|
// *does not* inspect DYLD environment variables for overrides, fallbacks, suffixes, etc.
|
||||||
|
// I don't really consider that a very bad thing, as it makes this search extremely deterministic.
|
||||||
|
// Note that I use the env variables when the image is actually linked, so what you find here
|
||||||
|
// may not be what gets linked. If this is the case, you deserve it :)
|
||||||
|
|
||||||
|
// find a Python runtime
|
||||||
|
NSString *pyLocation;
|
||||||
|
NSEnumerator *pyLocationsEnumerator = [pyLocations objectEnumerator];
|
||||||
|
while ((pyLocation = [pyLocationsEnumerator nextObject])) {
|
||||||
|
pyLocation = pyStandardizePath(pyLocation);
|
||||||
|
if (doesPathExist(pyLocation)) {
|
||||||
|
return pyLocation;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
|
||||||
|
static NSString* getPythonInterpreter(NSString* pyLocation) {
|
||||||
|
NSBundle* bndl;
|
||||||
|
NSString* auxName;
|
||||||
|
|
||||||
|
bndl = bundleBundle();
|
||||||
|
|
||||||
|
auxName = [[bndl infoDictionary] objectForKey:@"PyExecutableName"];
|
||||||
|
if (!auxName) {
|
||||||
|
auxName = @"python";
|
||||||
|
}
|
||||||
|
return [bndl pathForAuxiliaryExecutable:auxName];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
NSArray *getPythonPathArray(NSDictionary *infoDictionary, NSString *resourcePath) {
|
||||||
|
NSMutableArray *pythonPathArray = [NSMutableArray arrayWithObject: resourcePath];
|
||||||
|
NSArray *pyResourcePackages = [infoDictionary objectForKey:@"PyResourcePackages"];
|
||||||
|
if (pyResourcePackages != nil) {
|
||||||
|
NSString *pkg;
|
||||||
|
NSEnumerator *pyResourcePackageEnumerator = [pyResourcePackages objectEnumerator];
|
||||||
|
while ((pkg = [pyResourcePackageEnumerator nextObject])) {
|
||||||
|
pkg = [pkg stringByExpandingTildeInPath];
|
||||||
|
if (![@"/" isEqualToString: [pkg substringToIndex:1]]) {
|
||||||
|
pkg = [resourcePath stringByAppendingPathComponent:pkg];
|
||||||
|
}
|
||||||
|
[pythonPathArray addObject:pkg];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pythonPathArray;
|
||||||
|
}
|
||||||
|
|
||||||
|
static
|
||||||
|
NSString *getMainPyPath(NSDictionary *infoDictionary) {
|
||||||
|
NSArray *possibleMains = [infoDictionary objectForKey:@"PyMainFileNames"];
|
||||||
|
if ( !possibleMains )
|
||||||
|
possibleMains = [NSArray array];
|
||||||
|
// find main python file. __main__.py seems to be a standard, so we'll go ahead and add defaults.
|
||||||
|
possibleMains = [possibleMains arrayByAddingObjectsFromArray:[NSArray arrayWithObjects:
|
||||||
|
@"__main__",
|
||||||
|
@"__realmain__",
|
||||||
|
@"Main",
|
||||||
|
nil]];
|
||||||
|
NSEnumerator *possibleMainsEnumerator = [possibleMains objectEnumerator];
|
||||||
|
NSString *mainPyPath = nil;
|
||||||
|
NSString *nextFileName = nil;
|
||||||
|
NSString *nextExtension = nil;
|
||||||
|
NSArray *extensions = [NSArray arrayWithObjects:@".py", @".pyc", @".pyo", @"", nil];
|
||||||
|
|
||||||
|
NSMutableArray *runtimeAttempts = [NSMutableArray array];
|
||||||
|
while ((nextFileName = [possibleMainsEnumerator nextObject])) {
|
||||||
|
NSEnumerator *nextExtensionEnumerator = [extensions objectEnumerator];
|
||||||
|
while ((nextExtension = [nextExtensionEnumerator nextObject])) {
|
||||||
|
[runtimeAttempts addObject:[nextFileName stringByAppendingString:nextExtension]];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
possibleMainsEnumerator = [runtimeAttempts objectEnumerator];
|
||||||
|
while ((nextFileName = [possibleMainsEnumerator nextObject]) && !mainPyPath) {
|
||||||
|
mainPyPath = [bundleBundle() pathForResource:nextFileName ofType:nil];
|
||||||
|
}
|
||||||
|
if (!mainPyPath) {
|
||||||
|
NSString *components = [runtimeAttempts componentsJoinedByString:@"\r"];
|
||||||
|
report_error([ERR_NOPYTHONSCRIPT stringByAppendingString:components]);
|
||||||
|
}
|
||||||
|
return mainPyPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int pyobjc_main(int argc, char * const *argv, char * const *envp) {
|
||||||
|
char* curenv;
|
||||||
|
char* curlocale;
|
||||||
|
NSDictionary *infoDictionary = [bundleBundle() infoDictionary];
|
||||||
|
|
||||||
|
if (getenv("PYTHONOPTIMIZE") != NULL) {
|
||||||
|
unsetenv("PYTHONOPTIMIZE");
|
||||||
|
}
|
||||||
|
if (getenv("PYTHONDEBUG") != NULL) {
|
||||||
|
unsetenv("PYTHONDEBUG");
|
||||||
|
}
|
||||||
|
if (getenv("PYTHONDONTWRITEBYTECODE") != NULL) {
|
||||||
|
unsetenv("PYTHONDONTWRITEBYTECODE");
|
||||||
|
}
|
||||||
|
if (getenv("PYTHONIOENCODING") != NULL) {
|
||||||
|
unsetenv("PYTHONIOENCODING");
|
||||||
|
}
|
||||||
|
if (getenv("PYTHONDUMPREFS") != NULL) {
|
||||||
|
unsetenv("PYTHONDUMPREFS");
|
||||||
|
}
|
||||||
|
if (getenv("PYTHONMALLOCSTATS") != NULL) {
|
||||||
|
unsetenv("PYTHONMALLOCSTATS");
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable writing of bytecode files */
|
||||||
|
setenv("PYTHONDONTWRITEBYTECODE", "1", 1);
|
||||||
|
|
||||||
|
NSString *pyLocation = nil;
|
||||||
|
while (NSIsSymbolNameDefined("_Py_Initialize")) {
|
||||||
|
// Python is already in-process
|
||||||
|
NSSymbol sym = NSLookupAndBindSymbol("_Py_Initialize");
|
||||||
|
if (!sym) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
NSModule mod = NSModuleForSymbol(sym);
|
||||||
|
if (!mod) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const char *python_dylib_path = NSLibraryNameForModule(mod);
|
||||||
|
if (python_dylib_path) {
|
||||||
|
pyLocation = [NSString stringWithUTF8String:python_dylib_path];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
NSArray *pyLocations = [infoDictionary objectForKey:@"PyRuntimeLocations"];
|
||||||
|
if (!pyLocation) {
|
||||||
|
// Python is not in-process
|
||||||
|
if (!pyLocations) {
|
||||||
|
return report_error(ERR_PYRUNTIMELOCATIONS);
|
||||||
|
}
|
||||||
|
pyLocation = getPythonLocation(pyLocations);
|
||||||
|
}
|
||||||
|
if (!pyLocation) {
|
||||||
|
NSString *components = [pyLocations componentsJoinedByString:@"\r\r"];
|
||||||
|
return report_script_error([ERR_NOPYTHONRUNTIME stringByAppendingString:components], nil, nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find our resource path and possible PYTHONPATH
|
||||||
|
NSString *resourcePath = [bundleBundle() resourcePath];
|
||||||
|
NSArray *pythonPathArray = getPythonPathArray(infoDictionary, resourcePath);
|
||||||
|
|
||||||
|
// find the main script
|
||||||
|
NSString *mainPyPath = getMainPyPath(infoDictionary);
|
||||||
|
if (!mainPyPath) {
|
||||||
|
// error already reported
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the Python dylib (may have already been loaded, that is OK)
|
||||||
|
const struct mach_header *py_dylib = NSAddImage([pyLocation fileSystemRepresentation], PYMACAPP_NSIMAGEFLAGS);
|
||||||
|
if (!py_dylib) {
|
||||||
|
return report_linkEdit_error([pyLocation fileSystemRepresentation]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the symbols we need from Python. We avoid lookups of unicode methods because their
|
||||||
|
// names are mangled by Python (because of UCS2/UCS4 stuff) and looking them up reliably is
|
||||||
|
// problematic.
|
||||||
|
NSSymbol tmpSymbol;
|
||||||
|
#define LOOKUP_SYMBOL(NAME) \
|
||||||
|
tmpSymbol = NSLookupSymbolInImage(py_dylib, "_" #NAME, PYMACAPP_NSLOOKUPSYMBOLINIMAGEFLAGS)
|
||||||
|
#define LOOKUP_DEFINEADDRESS(NAME, ADDRESS) \
|
||||||
|
NAME ## Ptr NAME = (NAME ## Ptr)ADDRESS
|
||||||
|
#define LOOKUP_DEFINE(NAME) \
|
||||||
|
LOOKUP_DEFINEADDRESS(NAME, NSAddressOfSymbol(tmpSymbol))
|
||||||
|
#define LOOKUP(NAME) \
|
||||||
|
LOOKUP_SYMBOL(NAME); \
|
||||||
|
if ( !tmpSymbol ) \
|
||||||
|
return report_linkEdit_error(#NAME); \
|
||||||
|
LOOKUP_DEFINE(NAME)
|
||||||
|
|
||||||
|
#define OPT_LOOKUP(NAME) \
|
||||||
|
LOOKUP_SYMBOL(NAME); \
|
||||||
|
NAME ## Ptr NAME = NULL; \
|
||||||
|
if (tmpSymbol) { \
|
||||||
|
NAME = (NAME ## Ptr)NSAddressOfSymbol(tmpSymbol); \
|
||||||
|
}
|
||||||
|
|
||||||
|
LOOKUP_SYMBOL(Py_DecRef);
|
||||||
|
LOOKUP_DEFINEADDRESS(Py_DecRef, (tmpSymbol ? NSAddressOfSymbol(tmpSymbol) : &DefaultDecRef));
|
||||||
|
LOOKUP(Py_SetProgramName);
|
||||||
|
LOOKUP(Py_IsInitialized);
|
||||||
|
LOOKUP(Py_Initialize);
|
||||||
|
LOOKUP(PyErr_Clear);
|
||||||
|
LOOKUP(PyErr_Print);
|
||||||
|
LOOKUP(PyErr_Occurred);
|
||||||
|
LOOKUP(PyEval_ReleaseLock);
|
||||||
|
LOOKUP(PyGILState_Ensure);
|
||||||
|
LOOKUP(PyGILState_Release);
|
||||||
|
LOOKUP(PyEval_InitThreads);
|
||||||
|
LOOKUP(PyRun_File);
|
||||||
|
LOOKUP(PySys_GetObject);
|
||||||
|
LOOKUP(PySys_SetArgv);
|
||||||
|
LOOKUP(PyObject_Str);
|
||||||
|
LOOKUP(PyList_Insert);
|
||||||
|
LOOKUP(PyObject_GetAttrString);
|
||||||
|
LOOKUP(PyObject_CallMethod);
|
||||||
|
LOOKUP(PyImport_ImportModule);
|
||||||
|
LOOKUP(PyImport_AddModule);
|
||||||
|
LOOKUP(PyObject_SetItem);
|
||||||
|
LOOKUP(PyModule_AddStringConstant);
|
||||||
|
LOOKUP(PyModule_AddObject);
|
||||||
|
LOOKUP(PyModule_GetDict);
|
||||||
|
LOOKUP(PyThreadState_Swap);
|
||||||
|
OPT_LOOKUP(_Py_DecodeUTF8_surrogateescape);
|
||||||
|
|
||||||
|
|
||||||
|
/* PyBytes / PyString lookups depend of if we're on py3k or not */
|
||||||
|
PyBytes_AsStringPtr PyBytes_AsString = NULL;
|
||||||
|
PyBytes_FromStringPtr PyBytes_FromString = NULL;
|
||||||
|
LOOKUP_SYMBOL(PyBytes_AsString);
|
||||||
|
int isPy3k = tmpSymbol != NULL;
|
||||||
|
if (isPy3k) {
|
||||||
|
PyBytes_AsString = (PyBytes_AsStringPtr)NSAddressOfSymbol(tmpSymbol);
|
||||||
|
LOOKUP_SYMBOL(PyBytes_FromString);
|
||||||
|
PyBytes_FromString = (PyBytes_FromStringPtr)NSAddressOfSymbol(tmpSymbol);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
LOOKUP_SYMBOL(PyString_AsString);
|
||||||
|
PyBytes_AsString = (PyBytes_AsStringPtr)NSAddressOfSymbol(tmpSymbol);
|
||||||
|
LOOKUP_SYMBOL(PyString_FromString);
|
||||||
|
PyBytes_FromString = (PyBytes_FromStringPtr)NSAddressOfSymbol(tmpSymbol);
|
||||||
|
}
|
||||||
|
|
||||||
|
#undef LOOKUP
|
||||||
|
#undef LOOKUP_DEFINE
|
||||||
|
#undef LOOKUP_DEFINEADDRESS
|
||||||
|
#undef LOOKUP_SYMBOL
|
||||||
|
|
||||||
|
int was_initialized = Py_IsInitialized();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When apps are started from the Finder (or anywhere
|
||||||
|
* except from the terminal), the LANG and LC_* variables
|
||||||
|
* aren't set in the environment. This confuses Py_Initialize
|
||||||
|
* when it tries to import the codec for UTF-8,
|
||||||
|
* therefore explicitly set the locale.
|
||||||
|
*
|
||||||
|
* Also set the LC_CTYPE environment variable because Py_Initialize
|
||||||
|
* reset the locale information using the environment :-(
|
||||||
|
*/
|
||||||
|
if (isPy3k) {
|
||||||
|
curlocale = setlocale(LC_ALL, NULL);
|
||||||
|
if (curlocale != NULL) {
|
||||||
|
curlocale = strdup(curlocale);
|
||||||
|
if (curlocale == NULL) {
|
||||||
|
(void)report_error(ERR_CANNOT_SAVE_LOCALE);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
setlocale(LC_ALL, "en_US.UTF-8");
|
||||||
|
|
||||||
|
curenv = getenv("LC_CTYPE");
|
||||||
|
if (!curenv) {
|
||||||
|
setenv("LC_CTYPE", "en_US.UTF-8", 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Set up the environment variables to be transferred
|
||||||
|
NSMutableDictionary *newEnviron = [NSMutableDictionary dictionary];
|
||||||
|
[newEnviron setObject:[NSString stringWithFormat:@"%p", bundleBundle()] forKey:@"PYOBJC_BUNDLE_ADDRESS"];
|
||||||
|
[newEnviron setObject:[NSString stringWithFormat:@"%p", bundleBundle()] forKey:[NSString
|
||||||
|
stringWithFormat:@"PYOBJC_BUNDLE_ADDRESS%ld", (long)getpid()]];
|
||||||
|
[newEnviron setObject:resourcePath forKey:@"RESOURCEPATH"];
|
||||||
|
NSMutableDictionary *oldEnviron = [NSMutableDictionary dictionary];
|
||||||
|
|
||||||
|
// bootstrap Python with information about how to find what it needs
|
||||||
|
// if it is not already initialized
|
||||||
|
if (!was_initialized) {
|
||||||
|
// $PREFIX/Python -> $PREFIX
|
||||||
|
NSString *pythonProgramName = [pyLocation stringByDeletingLastPathComponent];
|
||||||
|
NSString* interpreter = getPythonInterpreter(pyLocation);
|
||||||
|
struct stat sb;
|
||||||
|
|
||||||
|
if (lstat([interpreter fileSystemRepresentation], &sb) == 0) {
|
||||||
|
if(!((sb.st_mode & S_IFLNK) == S_IFLNK)) {
|
||||||
|
setenv("PYTHONHOME", [resourcePath fileSystemRepresentation], 1);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
setenv("PYTHONHOME", [resourcePath fileSystemRepresentation], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *pyExecutableName = [infoDictionary objectForKey:@"PyExecutableName"];
|
||||||
|
if ( !pyExecutableName ) {
|
||||||
|
pyExecutableName = @"python";
|
||||||
|
}
|
||||||
|
|
||||||
|
pythonProgramName = [[pythonProgramName stringByAppendingPathComponent:@"bin"] stringByAppendingPathComponent:pyExecutableName];
|
||||||
|
|
||||||
|
wchar_t wPythonName[PATH_MAX+1];
|
||||||
|
if (isPy3k) {
|
||||||
|
mbstowcs(wPythonName, [pythonProgramName fileSystemRepresentation], PATH_MAX+1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
const char *cPythonName = [pythonProgramName fileSystemRepresentation];
|
||||||
|
memcpy(wPythonName, cPythonName, strlen(cPythonName));
|
||||||
|
}
|
||||||
|
Py_SetProgramName(wPythonName);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set new environment variables and save older ones (for nested plugin loading)
|
||||||
|
NSEnumerator *envEnumerator = [newEnviron keyEnumerator];
|
||||||
|
NSString *envKey;
|
||||||
|
while ((envKey = [envEnumerator nextObject])) {
|
||||||
|
char *keyString = (char *)[envKey UTF8String];
|
||||||
|
char *oldValue = getenv(keyString);
|
||||||
|
if (oldValue) {
|
||||||
|
[oldEnviron setObject:[NSString stringWithUTF8String:oldValue] forKey:envKey];
|
||||||
|
}
|
||||||
|
setenv(keyString, (char *)[[newEnviron objectForKey:envKey] UTF8String], 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int rval = 0;
|
||||||
|
FILE *mainPyFile = NULL;
|
||||||
|
Py_Initialize();
|
||||||
|
PyEval_InitThreads();
|
||||||
|
|
||||||
|
if (isPy3k) {
|
||||||
|
/*
|
||||||
|
* Reset the environment and locale information
|
||||||
|
*/
|
||||||
|
setlocale(LC_CTYPE, curlocale);
|
||||||
|
free(curlocale);
|
||||||
|
|
||||||
|
if (!curenv) {
|
||||||
|
unsetenv("LC_CTYPE");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
PyGILState_STATE gilState = PyGILState_Ensure();
|
||||||
|
|
||||||
|
if (was_initialized) {
|
||||||
|
// transfer path into existing Python process
|
||||||
|
PyObject *path = PySys_GetObject("path");
|
||||||
|
NSEnumerator *pathEnumerator = [pythonPathArray reverseObjectEnumerator];
|
||||||
|
NSString *curPath;
|
||||||
|
while ((curPath = [pathEnumerator nextObject])) {
|
||||||
|
PyObject *b = PyBytes_FromString([curPath UTF8String]);
|
||||||
|
PyObject *s = PyObject_CallMethod(b, "decode", "s", "utf-8");
|
||||||
|
PyList_Insert(path, 0, s);
|
||||||
|
Py_DecRef(b);Py_DecRef(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
// transfer environment variables into existing Python process
|
||||||
|
PyObject *osModule = PyImport_ImportModule("os");
|
||||||
|
PyObject *pyenv = PyObject_GetAttrString(osModule, "environ");
|
||||||
|
Py_DecRef(osModule);
|
||||||
|
envEnumerator = [newEnviron keyEnumerator];
|
||||||
|
while ((envKey = [envEnumerator nextObject])) {
|
||||||
|
char *keyString = (char *)[envKey UTF8String];
|
||||||
|
PyObject *b_key = PyBytes_FromString(keyString);
|
||||||
|
PyObject *b_value = PyBytes_FromString(getenv(keyString));
|
||||||
|
PyObject *key = PyObject_CallMethod(b_key, "decode", "s", "utf-8");
|
||||||
|
PyObject *value = PyObject_CallMethod(b_value, "decode", "s", "utf-8");
|
||||||
|
PyObject_SetItem(pyenv, key, value);
|
||||||
|
Py_DecRef(b_key);Py_DecRef(key);
|
||||||
|
Py_DecRef(b_value);Py_DecRef(value);
|
||||||
|
}
|
||||||
|
Py_DecRef(pyenv);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *c_mainPyPath = (char *)[mainPyPath fileSystemRepresentation];
|
||||||
|
mainPyFile = fopen(c_mainPyPath, "r");
|
||||||
|
if (!mainPyFile) {
|
||||||
|
rval = report_error([NSString stringWithFormat:@"Could not open main script %@",mainPyPath]);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
if (!was_initialized) {
|
||||||
|
int i;
|
||||||
|
NSMutableData *data_argv = [NSMutableData dataWithCapacity:(sizeof(char *) * argc)];
|
||||||
|
char **argv_new = [data_argv mutableBytes];
|
||||||
|
if (isPy3k) {
|
||||||
|
argv_new[0] = (char*)_Py_DecodeUTF8_surrogateescape(c_mainPyPath, strlen(c_mainPyPath));
|
||||||
|
} else {
|
||||||
|
argv_new[0] = c_mainPyPath;
|
||||||
|
}
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
if (isPy3k) {
|
||||||
|
argv_new[i] = (char*)_Py_DecodeUTF8_surrogateescape(argv[i], strlen(argv[i]));
|
||||||
|
} else {
|
||||||
|
argv_new[i] = argv[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
argv_new[argc] = NULL;
|
||||||
|
PySys_SetArgv(argc, argv_new);
|
||||||
|
}
|
||||||
|
|
||||||
|
// create a unique moduleName by CFBundleIdentifier replacing . with _ and prepending __main__
|
||||||
|
NSString *moduleName = [NSString stringWithFormat:@"__main__%@", [[[infoDictionary objectForKey:@"CFBundleIdentifier"] componentsSeparatedByString:@"."] componentsJoinedByString:@"_"]];
|
||||||
|
PyObject *module = PyImport_AddModule((char *)[moduleName UTF8String]);
|
||||||
|
if (!module) {
|
||||||
|
rval = report_error([NSString stringWithFormat:@"Could not create module '%@'",moduleName]);
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
PyModule_AddStringConstant(module, "__file__", c_mainPyPath);
|
||||||
|
char * builtinsName = isPy3k ? "builtins" : "__builtin__";
|
||||||
|
PyObject *builtins = PyImport_ImportModule(builtinsName);
|
||||||
|
PyModule_AddObject(module, "__builtins__", builtins);
|
||||||
|
PyObject *module_dict = PyModule_GetDict(module);
|
||||||
|
if (PyErr_Occurred()) {
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject *res = PyRun_File(mainPyFile, c_mainPyPath, Py_file_input, module_dict, module_dict);
|
||||||
|
if (res) {
|
||||||
|
Py_DecRef(res);
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
// un-transfer the environment variables
|
||||||
|
envEnumerator = [newEnviron keyEnumerator];
|
||||||
|
while ((envKey = [envEnumerator nextObject])) {
|
||||||
|
char *keyString = (char *)[envKey UTF8String];
|
||||||
|
NSString *newValue = [oldEnviron objectForKey:envKey];
|
||||||
|
if (newValue) {
|
||||||
|
setenv(keyString, [newValue UTF8String], 1);
|
||||||
|
} else {
|
||||||
|
unsetenv(keyString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mainPyFile) {
|
||||||
|
fclose(mainPyFile);
|
||||||
|
}
|
||||||
|
if (PyErr_Occurred()) {
|
||||||
|
rval = -1;
|
||||||
|
PyErr_Print();
|
||||||
|
}
|
||||||
|
while ( rval ) {
|
||||||
|
PyObject *exc = PySys_GetObject("last_type");
|
||||||
|
if ( !exc ) {
|
||||||
|
rval = report_error([NSString stringWithFormat:ERR_PYTHONEXCEPTION,"<<PyMacAppException>>","The exception went away?"]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject *exceptionClassName = PyObject_GetAttrString(exc, "__name__");
|
||||||
|
if ( !exceptionClassName ) {
|
||||||
|
rval = report_error([NSString stringWithFormat:ERR_PYTHONEXCEPTION,"<<PyMacAppException>>","Could not get exception class name?"]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
PyObject *v = PySys_GetObject("last_value");
|
||||||
|
PyObject *exceptionName = NULL;
|
||||||
|
if ( v )
|
||||||
|
exceptionName = PyObject_Str(v);
|
||||||
|
|
||||||
|
PyObject *b = PyObject_CallMethod(exceptionClassName, "encode", "s", "utf-8");
|
||||||
|
NSString *nsExceptionClassName = [NSString stringWithCString:PyBytes_AsString(b) encoding:NSUTF8StringEncoding];
|
||||||
|
Py_DecRef(exceptionClassName);Py_DecRef(b);
|
||||||
|
NSString *nsExceptionName;
|
||||||
|
if ( exceptionName ) {
|
||||||
|
PyObject *b = PyObject_CallMethod(exceptionName, "encode", "s", "utf-8");
|
||||||
|
nsExceptionName = [NSString stringWithCString:PyBytes_AsString(b) encoding:NSUTF8StringEncoding];
|
||||||
|
Py_DecRef(exceptionName);Py_DecRef(b);
|
||||||
|
} else {
|
||||||
|
nsExceptionName = @"";
|
||||||
|
}
|
||||||
|
rval = report_script_error([NSString stringWithFormat:ERR_PYTHONEXCEPTION, nsExceptionClassName, nsExceptionName], nsExceptionClassName, nsExceptionName);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
PyErr_Clear();
|
||||||
|
PyGILState_Release(gilState);
|
||||||
|
if (gilState == PyGILState_LOCKED) {
|
||||||
|
PyThreadState_Swap(NULL);
|
||||||
|
PyEval_ReleaseLock();
|
||||||
|
}
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static
|
||||||
|
void _py2app_bundle_load(void)
|
||||||
|
{
|
||||||
|
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
|
||||||
|
int argc = 1;
|
||||||
|
char * const argv[] = { (char *)bundlePath(), NULL };
|
||||||
|
char * const *envp = *_NSGetEnviron();
|
||||||
|
(void)pyobjc_main(argc, argv, envp);
|
||||||
|
[pool release];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
|||||||
|
"""
|
||||||
|
Resource data converters
|
||||||
|
"""
|
24
.eggs/py2app-0.12-py3.6.egg/py2app/converters/coredata.py
Normal file
24
.eggs/py2app-0.12-py3.6.egg/py2app/converters/coredata.py
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
"""
|
||||||
|
Automatic compilation of CoreData model files
|
||||||
|
"""
|
||||||
|
import subprocess, os
|
||||||
|
from py2app.decorators import converts
|
||||||
|
from py2app.util import momc, mapc
|
||||||
|
|
||||||
|
@converts(suffix=".xcdatamodel")
|
||||||
|
def convert_datamodel(source, destination, dry_run=0):
|
||||||
|
destination = os.path.splitext(destination)[0] + ".mom"
|
||||||
|
|
||||||
|
if dry_run:
|
||||||
|
return
|
||||||
|
|
||||||
|
momc(source, destination)
|
||||||
|
|
||||||
|
@converts(suffix=".xcmappingmodel")
|
||||||
|
def convert_mappingmodel(source, destination, dry_run=0):
|
||||||
|
destination = destination[:-4] + ".cdm"
|
||||||
|
|
||||||
|
if dry_run:
|
||||||
|
return
|
||||||
|
|
||||||
|
mapc(source, destination)
|
72
.eggs/py2app-0.12-py3.6.egg/py2app/converters/nibfile.py
Normal file
72
.eggs/py2app-0.12-py3.6.egg/py2app/converters/nibfile.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
"""
|
||||||
|
Automatic compilation of XIB files
|
||||||
|
"""
|
||||||
|
from __future__ import print_function
|
||||||
|
import subprocess, os
|
||||||
|
from py2app.decorators import converts
|
||||||
|
from py2app.util import check_output
|
||||||
|
import time
|
||||||
|
|
||||||
|
# XXX: _run_nibtool is an experiment while researching an odd
|
||||||
|
# failure of py2app: when _run_nibtool is None py2app will often
|
||||||
|
# (but for from everytime) fail when there are NIB files in the
|
||||||
|
# project. The failure is very odd: writing to sys.stderr fails
|
||||||
|
# with EGAIN as the errno, and subsequently the interpreter basicly
|
||||||
|
# crashes.
|
||||||
|
#
|
||||||
|
# This workaround seems to fix that issue for now.
|
||||||
|
#
|
||||||
|
def _run_nibtool(source, destination):
|
||||||
|
pid = os.fork()
|
||||||
|
if pid == 0:
|
||||||
|
os.setsid()
|
||||||
|
xit = subprocess.call([_get_ibtool(), '--compile', destination, source])
|
||||||
|
os._exit(xit)
|
||||||
|
else:
|
||||||
|
pid, status = os.waitpid(pid, 0)
|
||||||
|
if os.WEXITSTATUS(status) != 0:
|
||||||
|
raise RuntimeError("ibtool failed (%r -> %r)"%(source, destination))
|
||||||
|
|
||||||
|
#_run_nibtool = None
|
||||||
|
|
||||||
|
gTool = None
|
||||||
|
def _get_ibtool():
|
||||||
|
global gTool
|
||||||
|
if gTool is None:
|
||||||
|
if os.path.exists('/usr/bin/xcrun'):
|
||||||
|
try:
|
||||||
|
gTool = check_output(['/usr/bin/xcrun', '-find', 'ibtool'])[:-1]
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
raise IOError("Tool 'ibtool' not found")
|
||||||
|
else:
|
||||||
|
gTool = 'ibtool'
|
||||||
|
|
||||||
|
return gTool
|
||||||
|
|
||||||
|
@converts(suffix=".xib")
|
||||||
|
def convert_xib(source, destination, dry_run=0):
|
||||||
|
destination = destination[:-4] + ".nib"
|
||||||
|
|
||||||
|
print("compile %s -> %s"%(source, destination))
|
||||||
|
if dry_run:
|
||||||
|
return
|
||||||
|
|
||||||
|
if _run_nibtool is None:
|
||||||
|
subprocess.check_call([_get_ibtool(), '--compile', destination, source])
|
||||||
|
else:
|
||||||
|
_run_nibtool(source, destination)
|
||||||
|
#time.sleep(1)
|
||||||
|
|
||||||
|
@converts(suffix=".nib")
|
||||||
|
def convert_nib(source, destination, dry_run=0):
|
||||||
|
destination = destination[:-4] + ".nib"
|
||||||
|
print("compile %s -> %s"%(source, destination))
|
||||||
|
|
||||||
|
if dry_run:
|
||||||
|
return
|
||||||
|
|
||||||
|
if _run_nibtool is None:
|
||||||
|
subprocess.check_call([_get_ibtool, '--compile', destination, source])
|
||||||
|
else:
|
||||||
|
_run_nibtool(source, destination)
|
||||||
|
#time.sleep(1)
|
55
.eggs/py2app-0.12-py3.6.egg/py2app/create_appbundle.py
Normal file
55
.eggs/py2app-0.12-py3.6.egg/py2app/create_appbundle.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import os
|
||||||
|
import plistlib
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
from pkg_resources import resource_filename
|
||||||
|
import py2app.apptemplate
|
||||||
|
from py2app.util import makedirs, mergecopy, mergetree, skipscm, make_exec
|
||||||
|
|
||||||
|
def create_appbundle(destdir, name, extension='.app', module=py2app.apptemplate,
|
||||||
|
platform='MacOS', copy=mergecopy, mergetree=mergetree,
|
||||||
|
condition=skipscm, plist={}, arch=None, redirect_stdout=False):
|
||||||
|
kw = module.plist_template.infoPlistDict(
|
||||||
|
plist.get('CFBundleExecutable', name), plist)
|
||||||
|
app = os.path.join(destdir, kw['CFBundleName'] + extension)
|
||||||
|
if os.path.exists(app):
|
||||||
|
# Remove any existing build artifacts to ensure that
|
||||||
|
# we're getting a clean build
|
||||||
|
shutil.rmtree(app)
|
||||||
|
contents = os.path.join(app, 'Contents')
|
||||||
|
resources = os.path.join(contents, 'Resources')
|
||||||
|
platdir = os.path.join(contents, platform)
|
||||||
|
dirs = [contents, resources, platdir]
|
||||||
|
plist = plistlib.Plist()
|
||||||
|
plist.update(kw)
|
||||||
|
plistPath = os.path.join(contents, 'Info.plist')
|
||||||
|
if os.path.exists(plistPath):
|
||||||
|
if plist != plistlib.Plist.fromFile(plistPath):
|
||||||
|
for d in dirs:
|
||||||
|
shutil.rmtree(d, ignore_errors=True)
|
||||||
|
for d in dirs:
|
||||||
|
makedirs(d)
|
||||||
|
plist.write(plistPath)
|
||||||
|
srcmain = module.setup.main(arch=arch, secondary=not redirect_stdout)
|
||||||
|
if sys.version_info[0] == 2 and isinstance(kw['CFBundleExecutable'], unicode):
|
||||||
|
destmain = os.path.join(platdir, kw['CFBundleExecutable'].encode('utf-8'))
|
||||||
|
else:
|
||||||
|
destmain = os.path.join(platdir, kw['CFBundleExecutable'])
|
||||||
|
|
||||||
|
with open(os.path.join(contents, 'PkgInfo'), 'w') as fp:
|
||||||
|
fp.write(
|
||||||
|
kw['CFBundlePackageType'] + kw['CFBundleSignature']
|
||||||
|
)
|
||||||
|
copy(srcmain, destmain)
|
||||||
|
make_exec(destmain)
|
||||||
|
mergetree(
|
||||||
|
resource_filename(module.__name__, 'lib'),
|
||||||
|
resources,
|
||||||
|
condition=condition,
|
||||||
|
copyfn=copy,
|
||||||
|
)
|
||||||
|
return app, plist
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import sys
|
||||||
|
create_appbundle('build', sys.argv[1])
|
55
.eggs/py2app-0.12-py3.6.egg/py2app/create_pluginbundle.py
Normal file
55
.eggs/py2app-0.12-py3.6.egg/py2app/create_pluginbundle.py
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import os
|
||||||
|
import plistlib
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
from pkg_resources import resource_filename
|
||||||
|
|
||||||
|
import py2app.bundletemplate
|
||||||
|
from py2app.util import makedirs, mergecopy, mergetree, skipscm, make_exec
|
||||||
|
|
||||||
|
def create_pluginbundle(destdir, name, extension='.plugin', module=py2app.bundletemplate,
|
||||||
|
platform='MacOS', copy=mergecopy, mergetree=mergetree,
|
||||||
|
condition=skipscm, plist={}, arch=None):
|
||||||
|
kw = module.plist_template.infoPlistDict(
|
||||||
|
plist.get('CFBundleExecutable', name), plist)
|
||||||
|
plugin = os.path.join(destdir, kw['CFBundleName'] + extension)
|
||||||
|
if os.path.exists(plugin):
|
||||||
|
# Remove any existing build artifacts to ensure
|
||||||
|
# we're getting a clean build
|
||||||
|
shutil.rmtree(plugin)
|
||||||
|
contents = os.path.join(plugin, 'Contents')
|
||||||
|
resources = os.path.join(contents, 'Resources')
|
||||||
|
platdir = os.path.join(contents, platform)
|
||||||
|
dirs = [contents, resources, platdir]
|
||||||
|
plist = plistlib.Plist()
|
||||||
|
plist.update(kw)
|
||||||
|
plistPath = os.path.join(contents, 'Info.plist')
|
||||||
|
if os.path.exists(plistPath):
|
||||||
|
if plist != plistlib.Plist.fromFile(plistPath):
|
||||||
|
for d in dirs:
|
||||||
|
shutil.rmtree(d, ignore_errors=True)
|
||||||
|
for d in dirs:
|
||||||
|
makedirs(d)
|
||||||
|
plist.write(plistPath)
|
||||||
|
srcmain = module.setup.main(arch=arch)
|
||||||
|
if sys.version_info[0] == 2 and isinstance(kw['CFBundleExecutable'], unicode):
|
||||||
|
destmain = os.path.join(platdir, kw['CFBundleExecutable'].encode('utf-8'))
|
||||||
|
else:
|
||||||
|
destmain = os.path.join(platdir, kw['CFBundleExecutable'])
|
||||||
|
with open(os.path.join(contents, 'PkgInfo'), 'w') as fp:
|
||||||
|
fp.write(
|
||||||
|
kw['CFBundlePackageType'] + kw['CFBundleSignature']
|
||||||
|
)
|
||||||
|
copy(srcmain, destmain)
|
||||||
|
make_exec(destmain)
|
||||||
|
mergetree(
|
||||||
|
resource_filename(module.__name__, 'lib'),
|
||||||
|
resources,
|
||||||
|
condition=condition,
|
||||||
|
copyfn=copy,
|
||||||
|
)
|
||||||
|
return plugin, plist
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import sys
|
||||||
|
create_pluginbundle('build', sys.argv[1])
|
14
.eggs/py2app-0.12-py3.6.egg/py2app/decorators.py
Normal file
14
.eggs/py2app-0.12-py3.6.egg/py2app/decorators.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
def converts(suffix):
|
||||||
|
"""
|
||||||
|
Use the following convention when writing a file converter::
|
||||||
|
|
||||||
|
from py2app.decorators import converts
|
||||||
|
|
||||||
|
@converts(suffix=".png")
|
||||||
|
def convert_png(source_file, destination_file):
|
||||||
|
pass
|
||||||
|
"""
|
||||||
|
def wrapper(func):
|
||||||
|
func.py2app_suffix=suffix
|
||||||
|
return func
|
||||||
|
return wrapper
|
61
.eggs/py2app-0.12-py3.6.egg/py2app/filters.py
Normal file
61
.eggs/py2app-0.12-py3.6.egg/py2app/filters.py
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
import os
|
||||||
|
import sys
|
||||||
|
from modulegraph import modulegraph
|
||||||
|
from macholib.util import in_system_path
|
||||||
|
|
||||||
|
def has_filename_filter(module):
|
||||||
|
if isinstance(module, modulegraph.MissingModule):
|
||||||
|
return True
|
||||||
|
return getattr(module, 'filename', None) is not None
|
||||||
|
|
||||||
|
def not_stdlib_filter(module, prefix=None):
|
||||||
|
"""
|
||||||
|
Return False if the module is located in the standard library
|
||||||
|
"""
|
||||||
|
if prefix is None:
|
||||||
|
prefix = sys.prefix
|
||||||
|
if module.filename is None:
|
||||||
|
return True
|
||||||
|
|
||||||
|
prefix = os.path.join(os.path.realpath(prefix), '')
|
||||||
|
|
||||||
|
rp = os.path.realpath(module.filename)
|
||||||
|
if rp.startswith(prefix):
|
||||||
|
rest = rp[len(prefix):]
|
||||||
|
if '/site-python/' in rest:
|
||||||
|
return True
|
||||||
|
elif '/site-packages/' in rest:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
if os.path.exists(os.path.join(prefix, ".Python")):
|
||||||
|
# Virtualenv
|
||||||
|
fn = os.path.join(prefix, "lib", "python%d.%d"%(sys.version_info[:2]), "orig-prefix.txt")
|
||||||
|
if os.path.exists(fn):
|
||||||
|
with open(fn, 'rU') as fp:
|
||||||
|
prefix = fp.read().strip()
|
||||||
|
|
||||||
|
if rp.startswith(prefix):
|
||||||
|
rest = rp[len(prefix):]
|
||||||
|
if '/site-python/' in rest:
|
||||||
|
return True
|
||||||
|
elif '/site-packages/' in rest:
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
def not_system_filter(module):
|
||||||
|
"""
|
||||||
|
Return False if the module is located in a system directory
|
||||||
|
"""
|
||||||
|
return not in_system_path(module.filename)
|
||||||
|
|
||||||
|
def bundle_or_dylib_filter(module):
|
||||||
|
"""
|
||||||
|
Return False if the module does not have a filetype attribute
|
||||||
|
corresponding to a Mach-O bundle or dylib
|
||||||
|
"""
|
||||||
|
return getattr(module, 'filetype', None) in ('bundle', 'dylib')
|
87
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/PIL/__init__.py
Normal file
87
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/PIL/__init__.py
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
from py2app.util import imp_find_module
|
||||||
|
import os, sys, glob
|
||||||
|
|
||||||
|
try:
|
||||||
|
from cStringIO import StringIO
|
||||||
|
except ImportError:
|
||||||
|
from io import StringIO
|
||||||
|
|
||||||
|
try:
|
||||||
|
set
|
||||||
|
except NameError:
|
||||||
|
from sets import Set as set
|
||||||
|
|
||||||
|
try:
|
||||||
|
basestring
|
||||||
|
except NameError:
|
||||||
|
basestring = str
|
||||||
|
|
||||||
|
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('Image') or mf.findNode('PIL.Image')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if mf.findNode('PIL.Image'):
|
||||||
|
have_PIL = True
|
||||||
|
else:
|
||||||
|
have_PIL = False
|
||||||
|
|
||||||
|
plugins = set()
|
||||||
|
visited = set()
|
||||||
|
for folder in sys.path:
|
||||||
|
if not isinstance(folder, basestring):
|
||||||
|
continue
|
||||||
|
|
||||||
|
for extra in ('', 'PIL'):
|
||||||
|
folder = os.path.realpath(os.path.join(folder, extra))
|
||||||
|
if (not os.path.isdir(folder)) or (folder in visited):
|
||||||
|
continue
|
||||||
|
for fn in os.listdir(folder):
|
||||||
|
if not fn.endswith('ImagePlugin.py'):
|
||||||
|
continue
|
||||||
|
|
||||||
|
mod, ext = os.path.splitext(fn)
|
||||||
|
try:
|
||||||
|
sys.path.insert(0, folder)
|
||||||
|
imp_find_module(mod)
|
||||||
|
del sys.path[0]
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
plugins.add(mod)
|
||||||
|
visited.add(folder)
|
||||||
|
s = StringIO('_recipes_pil_prescript(%r)\n' % list(plugins))
|
||||||
|
for plugin in plugins:
|
||||||
|
if have_PIL:
|
||||||
|
mf.implyNodeReference(m, 'PIL.' + plugin)
|
||||||
|
else:
|
||||||
|
mf.implyNodeReference(m, plugin)
|
||||||
|
|
||||||
|
mf.removeReference(m, 'FixTk')
|
||||||
|
# Since Imaging-1.1.5, SpiderImagePlugin imports ImageTk conditionally.
|
||||||
|
# This is not ever used unless the user is explicitly using Tk elsewhere.
|
||||||
|
sip = mf.findNode('SpiderImagePlugin')
|
||||||
|
if sip is not None:
|
||||||
|
mf.removeReference(sip, 'ImageTk')
|
||||||
|
|
||||||
|
# The ImageQt plugin should only be usefull when using PyQt, which
|
||||||
|
# would then be explicitly imported.
|
||||||
|
# Note: this code doesn't have the right side-effect at the moment
|
||||||
|
# due to the way the PyQt5 recipe is structured.
|
||||||
|
sip = mf.findNode('PIL.ImageQt')
|
||||||
|
if sip is not None:
|
||||||
|
mf.removeReference(sip, 'PyQt5')
|
||||||
|
mf.removeReference(sip, 'PyQt5.QtGui')
|
||||||
|
mf.removeReference(sip, 'PyQt5.QtCore')
|
||||||
|
|
||||||
|
mf.removeReference(sip, 'PyQt4')
|
||||||
|
mf.removeReference(sip, 'PyQt4.QtGui')
|
||||||
|
mf.removeReference(sip, 'PyQt4.QtCore')
|
||||||
|
pass
|
||||||
|
|
||||||
|
return dict(
|
||||||
|
prescripts = ['py2app.recipes.PIL.prescript', s],
|
||||||
|
include = "PIL.JpegPresets", # Dodgy import from PIL.JpegPlugin in Pillow 2.0
|
||||||
|
flatpackages = [os.path.dirname(m.filename)],
|
||||||
|
)
|
43
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/PIL/prescript.py
Normal file
43
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/PIL/prescript.py
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
def _recipes_pil_prescript(plugins):
|
||||||
|
try:
|
||||||
|
import Image
|
||||||
|
have_PIL = False
|
||||||
|
except ImportError:
|
||||||
|
from PIL import Image
|
||||||
|
have_PIL = True
|
||||||
|
|
||||||
|
import sys
|
||||||
|
def init():
|
||||||
|
if Image._initialized >= 2:
|
||||||
|
return
|
||||||
|
|
||||||
|
if have_PIL:
|
||||||
|
try:
|
||||||
|
import PIL.JpegPresets
|
||||||
|
sys.modules['JpegPresets'] = PIL.JpegPresets
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
for plugin in plugins:
|
||||||
|
try:
|
||||||
|
if have_PIL:
|
||||||
|
try:
|
||||||
|
# First try absolute import through PIL (for Pillow support)
|
||||||
|
# only then try relative imports
|
||||||
|
m = __import__('PIL.' + plugin, globals(), locals(), [])
|
||||||
|
m = getattr(m, plugin)
|
||||||
|
sys.modules[plugin] = m
|
||||||
|
continue
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
__import__(plugin, globals(), locals(), [])
|
||||||
|
except ImportError:
|
||||||
|
if Image.DEBUG:
|
||||||
|
print('Image: failed to import')
|
||||||
|
|
||||||
|
if Image.OPEN or Image.SAVE:
|
||||||
|
Image._initialized = 2
|
||||||
|
return 1
|
||||||
|
|
||||||
|
Image.init = init
|
26
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/__init__.py
Normal file
26
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/__init__.py
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
from . import PIL
|
||||||
|
from . import ctypes
|
||||||
|
from . import docutils
|
||||||
|
from . import ftplib
|
||||||
|
from . import importlib
|
||||||
|
from . import lxml
|
||||||
|
from . import matplotlib
|
||||||
|
from . import mimetypes
|
||||||
|
from . import numpy
|
||||||
|
from . import os_module
|
||||||
|
from . import pydoc
|
||||||
|
from . import pyenchant
|
||||||
|
from . import pygame
|
||||||
|
from . import pyopengl
|
||||||
|
from . import pyside
|
||||||
|
from . import pyzmq
|
||||||
|
from . import qt5
|
||||||
|
from . import re
|
||||||
|
from . import scipy
|
||||||
|
from . import sip
|
||||||
|
from . import subprocess
|
||||||
|
from . import virtualenv
|
||||||
|
from . import wx
|
||||||
|
from . import xml
|
||||||
|
from . import setuptools
|
||||||
|
from . import uuid
|
7
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/cjkcodecs.py
Normal file
7
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/cjkcodecs.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
name = 'cjkcodecs'
|
||||||
|
m = mf.findNode(name)
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
mf.import_hook(name, m, ['*'])
|
||||||
|
return dict()
|
9
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/ctypes.py
Normal file
9
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/ctypes.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
import os
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('ctypes')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return dict(
|
||||||
|
prescripts=['py2app.bootstrap.ctypes_setup'],
|
||||||
|
)
|
9
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/docutils.py
Normal file
9
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/docutils.py
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('docutils')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
for pkg in [
|
||||||
|
'languages', 'parsers', 'readers', 'writers',
|
||||||
|
'parsers.rst.directives', 'parsers.rst.languages']:
|
||||||
|
mf.import_hook('docutils.' + pkg, m, ['*'])
|
||||||
|
return dict()
|
14
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/ftplib.py
Normal file
14
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/ftplib.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import sys
|
||||||
|
from modulegraph.modulegraph import MissingModule
|
||||||
|
|
||||||
|
def check(cmd, mf):
|
||||||
|
if sys.version_info[0] != 2: return {}
|
||||||
|
|
||||||
|
# ftplib has an optional dependency on an external (and likely
|
||||||
|
# non-existing) SOCKS module.
|
||||||
|
f = mf.findNode('ftplib')
|
||||||
|
m = mf.findNode('SOCKS')
|
||||||
|
if m is not None and f is not None and isinstance(m, MissingModule):
|
||||||
|
mf.removeReference(f, m)
|
||||||
|
|
||||||
|
return {}
|
7
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/importlib.py
Normal file
7
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/importlib.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('importlib')
|
||||||
|
if m:
|
||||||
|
return dict(expected_missing_imports=set(
|
||||||
|
['_frozen_importlib_external']))
|
||||||
|
|
||||||
|
return None
|
38
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/lxml.py
Normal file
38
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/lxml.py
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#
|
||||||
|
# LXML uses imports from C code (or actually Cython code)
|
||||||
|
# and those cannot be detected by modulegraph.
|
||||||
|
# The check function adds the hidden imports to the graph
|
||||||
|
#
|
||||||
|
# The dependency list was extracted from lxml 3.0.2
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('lxml.etree')
|
||||||
|
if m is not None and m.filename is not None:
|
||||||
|
mf.import_hook('lxml._elementpath', m)
|
||||||
|
mf.import_hook('os.path', m)
|
||||||
|
mf.import_hook('re', m)
|
||||||
|
mf.import_hook('gzip', m)
|
||||||
|
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
mf.import_hook('StringIO', m)
|
||||||
|
else:
|
||||||
|
mf.import_hook('io', m)
|
||||||
|
|
||||||
|
m = mf.findNode('lxml.objectify')
|
||||||
|
if m is not None and m.filename is not None:
|
||||||
|
if sys.version_info[0] == 2:
|
||||||
|
mf.import_hook('copy_reg', m)
|
||||||
|
else:
|
||||||
|
mf.import_hook('copyreg', m)
|
||||||
|
|
||||||
|
m = mf.findNode('lxml.isoschematron')
|
||||||
|
if m is not None and m.filename is not None:
|
||||||
|
# Not zip-safe (see issue 118)
|
||||||
|
return dict(packages=['lxml'])
|
||||||
|
|
||||||
|
if mf.findNode('lxml') is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
return {}
|
||||||
|
|
27
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/matplotlib.py
Normal file
27
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/matplotlib.py
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import os
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('matplotlib')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if cmd.matplotlib_backends:
|
||||||
|
backends = {}
|
||||||
|
for backend in cmd.matplotlib_backends:
|
||||||
|
if backend == '-':
|
||||||
|
pass
|
||||||
|
|
||||||
|
elif backend == '*':
|
||||||
|
mf.import_hook('matplotlib.backends', m, ['*'])
|
||||||
|
|
||||||
|
else:
|
||||||
|
mf.import_hook('matplotlib.backends.backend_%s'%(backend,), m)
|
||||||
|
|
||||||
|
else:
|
||||||
|
backends = {'packages': ['matplotlib']}
|
||||||
|
|
||||||
|
|
||||||
|
return dict(
|
||||||
|
prescripts=['py2app.recipes.matplotlib_prescript'],
|
||||||
|
resources=[os.path.join(os.path.dirname(m.filename), 'mpl-data')],
|
||||||
|
**backends
|
||||||
|
)
|
@ -0,0 +1,2 @@
|
|||||||
|
import os
|
||||||
|
os.environ['MATPLOTLIBDATA'] = os.path.join(os.environ['RESOURCEPATH'], 'mpl-data')
|
4
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/mimetypes.py
Normal file
4
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/mimetypes.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('mimetypes')
|
||||||
|
if m:
|
||||||
|
return dict(expected_missing_imports=set(['winreg']))
|
7
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/numpy.py
Normal file
7
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/numpy.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('numpy')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
return dict(
|
||||||
|
packages = ['numpy']
|
||||||
|
)
|
4
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/os_module.py
Normal file
4
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/os_module.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('os')
|
||||||
|
if m:
|
||||||
|
return dict(expected_missing_imports=set(['nt']))
|
12
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pydoc.py
Normal file
12
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pydoc.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import sys
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('pydoc')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
refs = [
|
||||||
|
'Tkinter', 'tty', 'BaseHTTPServer', 'mimetools', 'select',
|
||||||
|
'threading', 'ic', 'getopt', 'tkinter', 'win32',
|
||||||
|
]
|
||||||
|
for ref in refs:
|
||||||
|
mf.removeReference(m, ref)
|
||||||
|
return dict()
|
28
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyenchant.py
Normal file
28
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyenchant.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
"""
|
||||||
|
Recipe for pyEnchant <http://pypi.python.org/pypi/pyenchant>
|
||||||
|
|
||||||
|
PyEnchant is a python library that wraps a C library
|
||||||
|
using ctypes, hence the usual way to find the library
|
||||||
|
won't work.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('enchant')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
if 'PYENCHANT_LIBRARY_PATH' in os.environ:
|
||||||
|
libpath = os.environ['PYENCHANT_LIBRARY_PATH']
|
||||||
|
print("WARNING: using pyEnchant without embedding")
|
||||||
|
print("WARNING: this is not supported at the moment")
|
||||||
|
|
||||||
|
else:
|
||||||
|
path = os.path.dirname(m.filename)
|
||||||
|
if not os.path.exists(os.path.join(path, "lib", "libenchant.1.dylib")):
|
||||||
|
print("WARNING: using pyEnchant without embedding")
|
||||||
|
print("WARNING: this is not supported at the moment")
|
||||||
|
|
||||||
|
# Include the entire package outside of site-packages.zip,
|
||||||
|
# mostly to avoid trying to extract the C code from the package
|
||||||
|
return dict(packages=['enchant'])
|
14
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pygame.py
Normal file
14
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pygame.py
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
import os
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('pygame')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
def addpath(f):
|
||||||
|
return os.path.join(os.path.dirname(m.filename), f)
|
||||||
|
RESOURCES = ['freesansbold.ttf', 'pygame_icon.tiff', 'pygame_icon.icns']
|
||||||
|
result = dict(
|
||||||
|
loader_files = [
|
||||||
|
('pygame', map(addpath, RESOURCES)),
|
||||||
|
],
|
||||||
|
)
|
||||||
|
return result
|
16
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyopengl.py
Normal file
16
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyopengl.py
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
from __future__ import absolute_import
|
||||||
|
import os
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('OpenGL')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
p = os.path.splitext(m.filename)[0] + '.py'
|
||||||
|
# check to see if it's a patched version that doesn't suck
|
||||||
|
if os.path.exists(p):
|
||||||
|
for line in open(p, 'rU'):
|
||||||
|
if line.startswith('__version__ = '):
|
||||||
|
return dict()
|
||||||
|
# otherwise include the whole damned thing
|
||||||
|
return dict(
|
||||||
|
packages = ['OpenGL'],
|
||||||
|
)
|
48
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyside.py
Normal file
48
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyside.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# since pkg_resources.py lives next to this file, we need to disambiguate the import
|
||||||
|
from __future__ import absolute_import
|
||||||
|
import glob
|
||||||
|
import os
|
||||||
|
import pkg_resources
|
||||||
|
|
||||||
|
def check(cmd, mf):
|
||||||
|
name = 'PySide'
|
||||||
|
m = mf.findNode(name)
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
from PySide import QtCore
|
||||||
|
except ImportError:
|
||||||
|
print("WARNING: macholib found PySide, but cannot import")
|
||||||
|
return {}
|
||||||
|
|
||||||
|
plugin_dir = QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.PluginsPath)
|
||||||
|
|
||||||
|
resources = [pkg_resources.resource_filename('py2app', 'recipes/qt.conf')]
|
||||||
|
for item in cmd.qt_plugins:
|
||||||
|
if '/' not in item:
|
||||||
|
item = item + '/*'
|
||||||
|
|
||||||
|
if '*' in item:
|
||||||
|
for path in glob.glob(os.path.join(plugin_dir, item)):
|
||||||
|
resources.append((os.path.dirname('qt_plugins' + path[len(plugin_dir):]), [path]))
|
||||||
|
else:
|
||||||
|
resources.append((os.path.dirname(os.path.join('qt_plugins', item)), [os.path.join(plugin_dir, item)]))
|
||||||
|
|
||||||
|
# PySide dumps some of its shared files
|
||||||
|
# into /usr/lib, which is a system location
|
||||||
|
# and those files are therefore not included
|
||||||
|
# into the app bundle by default.
|
||||||
|
from macholib.util import NOT_SYSTEM_FILES
|
||||||
|
|
||||||
|
import sys
|
||||||
|
for fn in os.listdir('/usr/lib'):
|
||||||
|
add=False
|
||||||
|
if fn.startswith('libpyside-python'):
|
||||||
|
add=True
|
||||||
|
elif fn.startswith('libshiboken-python'):
|
||||||
|
add=True
|
||||||
|
if add:
|
||||||
|
NOT_SYSTEM_FILES.append(os.path.join('/usr/lib', fn))
|
||||||
|
|
||||||
|
return dict(resources=resources)
|
15
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyzmq.py
Normal file
15
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/pyzmq.py
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('zmq')
|
||||||
|
if m is None or m.filename is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# PyZMQ is a package that contains
|
||||||
|
# a shared library. This recipe
|
||||||
|
# is mostly a workaround for a bug
|
||||||
|
# in py2app: it copies the dylib into
|
||||||
|
# the site-packages zipfile and builds
|
||||||
|
# a non-functionaly application.
|
||||||
|
return dict(
|
||||||
|
packages=['zmq']
|
||||||
|
)
|
3
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/qt.conf
Normal file
3
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/qt.conf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
; Qt Configuration file
|
||||||
|
[Paths]
|
||||||
|
Plugins = Resources/qt_plugins
|
28
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/qt5.py
Normal file
28
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/qt5.py
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import sys
|
||||||
|
from modulegraph.modulegraph import MissingModule
|
||||||
|
|
||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('PyQt5')
|
||||||
|
if m and not isinstance(m, MissingModule):
|
||||||
|
try:
|
||||||
|
# PyQt5 with sipconfig module, handled
|
||||||
|
# by sip recipe
|
||||||
|
import sipconfig
|
||||||
|
return None
|
||||||
|
|
||||||
|
except ImportError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
# All imports are done from C code, hence not visible
|
||||||
|
# for modulegraph
|
||||||
|
# 1. Use of 'sip'
|
||||||
|
# 2. Use of other modules, datafiles and C libraries
|
||||||
|
# in the PyQt5 package.
|
||||||
|
mf.import_hook('sip', m)
|
||||||
|
if sys.version[0] != 2:
|
||||||
|
return dict(packages=['PyQt5'],
|
||||||
|
expected_missing_imports=set(['copy_reg', 'cStringIO', 'StringIO']))
|
||||||
|
else:
|
||||||
|
return dict(packages=['PyQt5'])
|
||||||
|
|
||||||
|
return None
|
4
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/re.py
Normal file
4
.eggs/py2app-0.12-py3.6.egg/py2app/recipes/re.py
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
def check(cmd, mf):
|
||||||
|
m = mf.findNode('re')
|
||||||
|
if m:
|
||||||
|
return dict(expected_missing_imports=set(['sys.getwindowsversion']))
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user