Files
mtgodot-poc/extension/third_party/cpython-2.7.18/Modules/ar_beos
T
shenleiandClaude Opus 5 5fad769ee8 port 2P step 1: vendor CPython 2.7.18 as the mtpython static library
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>
2026-09-23 08:27:35 +09:00

74 lines
1.8 KiB
Bash
Executable File

#!/bin/sh
#
# Truly fake ar, using a directory to store object files.
#
# Donn Cave, donn@oz.net
usage='Usage: ar-fake cr libpython.dir obj.o ...
ar-fake d libpython.dir obj.o ...
ar-fake so libpython.dir libpython.so'
case $# in
0|1|2)
echo "$usage" >&2
exit 1
;;
esac
command=$1
library=$2
shift 2
case $command in
cr)
if test -d $library
then :
else
mkdir $library
fi
if cp -p $* $library
then
# To force directory modify date, create or delete a file.
if test -e $library/.tch
then rm $library/.tch
else echo tch > $library/.tch
fi
exit 0
fi
;;
d)
if test -d $library
then
cd $library
rm -f $*
fi
;;
so)
case $BE_HOST_CPU in
ppc)
# In case your libpython.a refers to any exotic libraries,
# mwld needs to know that here. The following hack makes
# a couple of assumptions about Modules/Makefile. If it
# doesn't work, you may as well add the necessary libraries
# here explicitly instead.
extralibs=$(
(cd Modules; make -f Makefile -n link) |
sed -n 's/.*\.so \(.*\) -o python.*/\1/p'
)
mwld -xms -export pragma -nodup -o $1 $library/* $extralibs
;;
x86)
ld -shared -soname $(basename $1) -o $1 $library/*
;;
esac
status=$?
cd $(dirname $1)
ln -sf $PWD lib
exit $status
;;
*)
echo "$usage" >&2
exit 1
;;
esac