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