The embedded 40250 script layer needs its own interpreter on five platforms. 2.7 is end-of-life, so nothing can be fetched from the target SDKs and the source is vendored (official 2.7.18 tarball, trimmed to 25MB; Lib/ stays for step 3's python27.zip). cpython-2.7.18/CMakeLists.txt builds one `mtpython` static library from exactly the 133 objects the reference libpython2.7.a contains, off by default behind -DMTGODOT_EMBED_PYTHON=ON. The source list and the built-in module table (config/config.c, 39 entries) are shared; pyconfig.h is a probe result and is not, so each platform keeps its own under config/<platform>/, regenerated by tools/py_embed/gen_pyconfig.sh and checked against the shared table. Three vendor patches, documented in docs/THIRD-PARTY.md: configure/configure.ac learn arm64 on macOS, and posixmodule.c undefines the process-control calls it hard-defines past pyconfig.h when building for iOS. macOS (ctest python.embed: every builtin imports, codecs and pickle work off the vendored Lib/), Android arm64 and iOS arm64 build. Linux needs a Linux host and Windows needs a MinGW-vs-MSVC decision; both are noted for step 4. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
65 lines
1.9 KiB
Plaintext
65 lines
1.9 KiB
Plaintext
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
<plist version="1.0">
|
|
<dict>
|
|
<key>beforeRunningCommand</key>
|
|
<string>nop</string>
|
|
<key>command</key>
|
|
<string>#!/usr/bin/python
|
|
"""Generate code to warn about a module's removal in Python 3.0.
|
|
|
|
XXX Not supported:
|
|
- Module's in a package do not have their full name generated.
|
|
- Package's __init__ module; should detect and use the package's name instead.
|
|
|
|
"""
|
|
py_template = """from warnings import warnpy3k
|
|
warnpy3k("the ${1:%s} module has been removed in Python 3.0", stacklevel=2)
|
|
del warnpy3k$0"""
|
|
|
|
c_template = """
|
|
if (PyErr_WarnPy3k("the ${1:%s} module has been removed in "
|
|
"Python 3.0", 2) < 0)
|
|
return;$0"""
|
|
|
|
|
|
import imp
|
|
import os
|
|
|
|
file_name = os.path.split(os.environ['TM_FILEPATH'])[1]
|
|
|
|
py_suffixes = reversed(sorted((suffix[0] for suffix in imp.get_suffixes() if suffix[2] == imp.PY_SOURCE), key=len))
|
|
c_suffixes = reversed(sorted((os.path.splitext(suffix[0])[0] + '.c'
|
|
for suffix in imp.get_suffixes() if suffix[2] == imp.C_EXTENSION), key=len))
|
|
|
|
pairings = ((py_suffixes, py_template), (c_suffixes, c_template))
|
|
|
|
def create_template(suffixes, template):
|
|
for suffix in suffixes:
|
|
if not file_name.endswith(suffix):
|
|
continue
|
|
module_name = file_name[:-len(suffix)]
|
|
return template % module_name
|
|
else:
|
|
return None
|
|
|
|
for template in (create_template(*pair) for pair in pairings):
|
|
if not template:
|
|
continue
|
|
print template,
|
|
break
|
|
else:
|
|
print 'XXX Could not generate code.'</string>
|
|
<key>input</key>
|
|
<string>none</string>
|
|
<key>name</key>
|
|
<string>2 to 3 - Module Deletion</string>
|
|
<key>output</key>
|
|
<string>insertAsSnippet</string>
|
|
<key>tabTrigger</key>
|
|
<string>2to3moddel</string>
|
|
<key>uuid</key>
|
|
<string>9519C22B-6AB8-41A1-94F6-079E0B45C147</string>
|
|
</dict>
|
|
</plist>
|