From cd098866ea701d24f941006768e2a81f51a7b003 Mon Sep 17 00:00:00 2001 From: Eric Date: Wed, 6 Sep 2023 11:44:12 -0700 Subject: [PATCH] fixed broken v1 networking --- .efrocachemap | 288 +++++++++++------------ CHANGELOG.md | 4 +- Makefile | 81 ++++--- config/projectconfig.json | 4 + src/assets/ba_data/python/babase/_app.py | 51 ++-- src/assets/ba_data/python/baenv.py | 2 +- src/ballistica/base/base.cc | 5 +- src/ballistica/shared/ballistica.cc | 2 +- tools/batools/appmodule.py | 22 +- tools/batools/spinoff/_main.py | 59 ++--- tools/efrotools/__init__.py | 4 +- tools/efrotools/pybuild.py | 240 ++++++++++++++----- 12 files changed, 447 insertions(+), 315 deletions(-) diff --git a/.efrocachemap b/.efrocachemap index 83e3f67b..cbc9a7de 100644 --- a/.efrocachemap +++ b/.efrocachemap @@ -2594,14 +2594,14 @@ "build/assets/pylib-android/_pyio.py": "a6e88d66fbca88b13213cdd2177390b8", "build/assets/pylib-android/_sitebuiltins.py": "8b5e3f6e73917962fa014ad2c4a55e61", "build/assets/pylib-android/_strptime.py": "ff699c3f7647db7621bb88c43cc282d3", - "build/assets/pylib-android/_sysconfigdata__linux_aarch64-linux-android.py": "3d0400e723f4dad156512d4229270993", - "build/assets/pylib-android/_sysconfigdata__linux_arm-linux-androideabi.py": "506b3106270f7f7ae33e195d1f5caa55", - "build/assets/pylib-android/_sysconfigdata__linux_i686-linux-android.py": "f38a2b60f9cbf0524885e5c1c99164c1", - "build/assets/pylib-android/_sysconfigdata__linux_x86_64-linux-android.py": "d67f056bcaf3d491d68254c206067d19", - "build/assets/pylib-android/_sysconfigdata_d_linux_aarch64-linux-android.py": "e4322948686ce1d4b37a1a3f8000e2dc", - "build/assets/pylib-android/_sysconfigdata_d_linux_arm-linux-androideabi.py": "a4d14baa8cfc0019363742349449942b", - "build/assets/pylib-android/_sysconfigdata_d_linux_i686-linux-android.py": "2ad6c96209fd69a4eef4a7d730cd16e8", - "build/assets/pylib-android/_sysconfigdata_d_linux_x86_64-linux-android.py": "bf6ce8f2788661352014e973351f35cf", + "build/assets/pylib-android/_sysconfigdata__linux_aarch64-linux-android.py": "cb9a77b04173c8776365999b57186e36", + "build/assets/pylib-android/_sysconfigdata__linux_arm-linux-androideabi.py": "6d50596ec7f4858a0c6a5edefde21f7a", + "build/assets/pylib-android/_sysconfigdata__linux_i686-linux-android.py": "bf9358a2243aa7884b8e80d85c969fa5", + "build/assets/pylib-android/_sysconfigdata__linux_x86_64-linux-android.py": "45eee0efbc2441535b94a8ad5acf4d2e", + "build/assets/pylib-android/_sysconfigdata_d_linux_aarch64-linux-android.py": "f8ff271cf6df0b5b4d46d9c548abb84e", + "build/assets/pylib-android/_sysconfigdata_d_linux_arm-linux-androideabi.py": "da171b290c06a34d6a5cfbb296c22c34", + "build/assets/pylib-android/_sysconfigdata_d_linux_i686-linux-android.py": "dde2516b5ac29412dfbebaa7b3de0d0d", + "build/assets/pylib-android/_sysconfigdata_d_linux_x86_64-linux-android.py": "7df452144c6630afb96951487c1257a0", "build/assets/pylib-android/_threading_local.py": "4a9688e3987d7d692db46feb9214945e", "build/assets/pylib-android/_weakrefset.py": "e4fa8532ace46dfbc35149c41ea497f7", "build/assets/pylib-android/abc.py": "a0daa1ed187eee8690c1e8438b97da90", @@ -2612,13 +2612,13 @@ "build/assets/pylib-android/asynchat.py": "2ef3a0ce322332fabbf8fad4e133c6a3", "build/assets/pylib-android/asyncio/__init__.py": "edf0e79e2b8b85c08f09fd14668e4822", "build/assets/pylib-android/asyncio/__main__.py": "8e391b47f448ad922dc2614dbd93011e", - "build/assets/pylib-android/asyncio/base_events.py": "9f7758e7f013043a50c693e5e8d068b5", + "build/assets/pylib-android/asyncio/base_events.py": "8494c7bc5f5fe98fd64d882ed4cc4722", "build/assets/pylib-android/asyncio/base_futures.py": "d2502e045d28ea562e1a82ddb162b4f0", "build/assets/pylib-android/asyncio/base_subprocess.py": "8a805e04a2911b2d8e297f0029def4b1", "build/assets/pylib-android/asyncio/base_tasks.py": "f4388c294f4cf805a6f1e4ed12a5a3aa", "build/assets/pylib-android/asyncio/constants.py": "13f733940667d1f81cf83adc6e5b2a5b", "build/assets/pylib-android/asyncio/coroutines.py": "fb3e431df7d09ed38d7fa76385e9bb52", - "build/assets/pylib-android/asyncio/events.py": "07c04d04b5e255fc5b79698715f4dc4e", + "build/assets/pylib-android/asyncio/events.py": "3063d6b0d1fcbb50f8142f8ce58531fb", "build/assets/pylib-android/asyncio/exceptions.py": "db8d3794a37d50a433d13c1eacf0d333", "build/assets/pylib-android/asyncio/format_helpers.py": "b0447581eff1bc759da16d512155c72a", "build/assets/pylib-android/asyncio/futures.py": "297232981f201edac774ec3a49a0845b", @@ -2632,7 +2632,7 @@ "build/assets/pylib-android/asyncio/selector_events.py": "a108fbd3a49f967da245f39cebf7694e", "build/assets/pylib-android/asyncio/sslproto.py": "2ec1b21e523055147d94c8c634154aab", "build/assets/pylib-android/asyncio/staggered.py": "f5056f0a56b73b477a9fa65e71145366", - "build/assets/pylib-android/asyncio/streams.py": "e9c609b92b4e9bd3383cf4004c6186c6", + "build/assets/pylib-android/asyncio/streams.py": "f00ddd2b2fd74554ae1d3088bd9d2bfd", "build/assets/pylib-android/asyncio/subprocess.py": "edb8d98278300b6c99f36cd08643c743", "build/assets/pylib-android/asyncio/taskgroups.py": "5162e5b1806d9b647383d34ba1b21b56", "build/assets/pylib-android/asyncio/tasks.py": "234550593cd4928e6ee2c9591b6928ca", @@ -2657,16 +2657,16 @@ "build/assets/pylib-android/code.py": "5d47099984013b933c96b02ef16981b8", "build/assets/pylib-android/codecs.py": "6fac5e2969e98ceaba92d3b8e42cb2ec", "build/assets/pylib-android/codeop.py": "d375467fb29fccd43ab94d15a2e63085", - "build/assets/pylib-android/collections/__init__.py": "44999193e5c3d379e3feaa50ddf5147d", + "build/assets/pylib-android/collections/__init__.py": "dcffbb6ee2cadd0c05ad22f2ef41f89b", "build/assets/pylib-android/collections/abc.py": "15f410d3821352033a90a04539c99060", - "build/assets/pylib-android/colorsys.py": "1452923f15188287bc677e7128cb6b31", + "build/assets/pylib-android/colorsys.py": "ca8f117785bf7606c3919ef0f4b828ae", "build/assets/pylib-android/compileall.py": "eb3f6d92f020ebec3f3f5bffc8a4dd4b", "build/assets/pylib-android/concurrent/__init__.py": "aa990702e8f3a7af205efb5ae23a7c85", "build/assets/pylib-android/concurrent/futures/__init__.py": "3e46fadb9de9c995c37dca4311641d6a", "build/assets/pylib-android/concurrent/futures/_base.py": "a1cd37aea6fe0efff1bc00a39543609e", - "build/assets/pylib-android/concurrent/futures/process.py": "4725abe3e780075ac264da12a1db5714", + "build/assets/pylib-android/concurrent/futures/process.py": "a44e8618e158f8f351dafcb566a02544", "build/assets/pylib-android/concurrent/futures/thread.py": "e63753b8201f1392dbebc84a15054a13", - "build/assets/pylib-android/configparser.py": "a6b19c20d70861eea310e5504621e562", + "build/assets/pylib-android/configparser.py": "914afd2b2cec90bbca0b94fd176b5176", "build/assets/pylib-android/contextlib.py": "6f52eac914e438ef54407760def8305f", "build/assets/pylib-android/contextvars.py": "ddf2ae9be02601bd8fc9c2cb8a51c04e", "build/assets/pylib-android/copy.py": "e7c43b1ec5f81ef36486ad8b49ed7f74", @@ -2692,33 +2692,33 @@ "build/assets/pylib-android/decimal.py": "f57d255d45b5d1d7d8e13c41a283c3e4", "build/assets/pylib-android/difflib.py": "6b3c8fd541b2b8d0320727025cd25275", "build/assets/pylib-android/dis.py": "cecdc0c02aa3d70a7f550e60ebc9b3ba", - "build/assets/pylib-android/doctest.py": "eb60b2b39e0deb976ecbc69a8c2392ee", - "build/assets/pylib-android/email/__init__.py": "7ebfab5c51b6bc698aca92ad4903346c", + "build/assets/pylib-android/doctest.py": "8a18c35f3aa66130955a6a3bf1bfead4", + "build/assets/pylib-android/email/__init__.py": "4ff603eeeb4ce0302c8bd1b220fc5e13", "build/assets/pylib-android/email/_encoded_words.py": "d7b77501689dd1ce32da789b46264a6a", "build/assets/pylib-android/email/_header_value_parser.py": "982718787815084548747d4b078902e6", "build/assets/pylib-android/email/_parseaddr.py": "a6d2999aeed17f060be8797e761a01aa", "build/assets/pylib-android/email/_policybase.py": "09b0c21693ac080c52c52f5daab616aa", - "build/assets/pylib-android/email/base64mime.py": "a1ac31203212f2963b4c07629a3b919c", - "build/assets/pylib-android/email/charset.py": "7bb5baa9bbd627097d1f32f1a3b503c8", + "build/assets/pylib-android/email/base64mime.py": "d3e4fc07d04833487677dd2a888c3826", + "build/assets/pylib-android/email/charset.py": "1d101758464f75bf2b93fb17fec9542f", "build/assets/pylib-android/email/contentmanager.py": "e88780ef1d37a11ff216060f740f2572", - "build/assets/pylib-android/email/encoders.py": "f1c581f5c146c31168f6ff4a2a6591f7", + "build/assets/pylib-android/email/encoders.py": "d401cf76e52f0205393dd8bb1ae28b46", "build/assets/pylib-android/email/errors.py": "afd6b5e8f8baa701baaae14e736ddca0", - "build/assets/pylib-android/email/feedparser.py": "88d35aee820e997f40f6c28cf930979b", - "build/assets/pylib-android/email/generator.py": "e0cc1d119427110da5de96a4e7b6bb5b", - "build/assets/pylib-android/email/header.py": "f72b2b6140c11b89c0ae3f7b24b0a861", + "build/assets/pylib-android/email/feedparser.py": "623788306ab3b5d75df1145484045edc", + "build/assets/pylib-android/email/generator.py": "073bac3c4874c3ab74d4e6a9e9317fb2", + "build/assets/pylib-android/email/header.py": "09923b7b77bf91bed41a71b6e3c6e4d9", "build/assets/pylib-android/email/headerregistry.py": "dfd48f9c41454d5bc2355cb1762fb869", - "build/assets/pylib-android/email/iterators.py": "9b67a6ab50d2bdbdbc4588e10ea1c64a", + "build/assets/pylib-android/email/iterators.py": "752ece28a18545e70fa67a7cf2fe3ef3", "build/assets/pylib-android/email/message.py": "5b198b0cf1095ba5a3faccdd28310f28", "build/assets/pylib-android/email/mime/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-android/email/mime/application.py": "4ce678512f30cac9fd95993186d2eef7", "build/assets/pylib-android/email/mime/audio.py": "4073e45bda9524e3cbe29374951fdc16", - "build/assets/pylib-android/email/mime/base.py": "e4ac5d17e69e73a2cb4cc873474991c2", + "build/assets/pylib-android/email/mime/base.py": "3b9c795fe3b6e9d3f7b6dda3e1c8e1ea", "build/assets/pylib-android/email/mime/image.py": "6322b8269e8efe61d3ead57f2aa6cdef", - "build/assets/pylib-android/email/mime/message.py": "72935a387c0c12840359c2b0b8f588ac", - "build/assets/pylib-android/email/mime/multipart.py": "8157be08dbd84825bf2abaefa39dc3a0", - "build/assets/pylib-android/email/mime/nonmultipart.py": "1187993d0366b808a3afea751cd37d81", - "build/assets/pylib-android/email/mime/text.py": "eb387b8f3a686bc7587b860782761a52", - "build/assets/pylib-android/email/parser.py": "19466563eaac6984c48f734a8f2cf3fc", + "build/assets/pylib-android/email/mime/message.py": "0bf18b4f07a68b646e45b10d7e31c6c7", + "build/assets/pylib-android/email/mime/multipart.py": "69577df977b7b36f5e175661dd7095bc", + "build/assets/pylib-android/email/mime/nonmultipart.py": "a96d8d31156781a7511cec04e46a95f6", + "build/assets/pylib-android/email/mime/text.py": "21928b3afec29cb55ae1ae7682b8fbe1", + "build/assets/pylib-android/email/parser.py": "f0cdd5c8491cbff0948672784fca1e8f", "build/assets/pylib-android/email/policy.py": "69a5f116b77b6a70e7761309c5592557", "build/assets/pylib-android/email/quoprimime.py": "c5e54c3f0e70d55145517382d4455765", "build/assets/pylib-android/email/utils.py": "145a606aaa3cbad40c68054ebbf4efa6", @@ -2844,7 +2844,7 @@ "build/assets/pylib-android/encodings/utf_8_sig.py": "8f3542863ef311d8b970a37c0d66b0de", "build/assets/pylib-android/encodings/uu_codec.py": "4ef8a65413574c017a96b97fc1638ba6", "build/assets/pylib-android/encodings/zlib_codec.py": "1388fb103fdf395451bfc8a2d60933a9", - "build/assets/pylib-android/enum.py": "62a341268ae3fef3c4affc625c2e68d2", + "build/assets/pylib-android/enum.py": "73b214a43ceef88aff7098b83623ed09", "build/assets/pylib-android/filecmp.py": "7648fdc6d0fc8bae7429d5e4081cf353", "build/assets/pylib-android/fileinput.py": "c3def1041e6b12dd5f1906c9dbbd1101", "build/assets/pylib-android/fnmatch.py": "a1bc67633695d4defd4c0886428c5363", @@ -2854,7 +2854,7 @@ "build/assets/pylib-android/genericpath.py": "5e991b8dd73dd4a05571b73ac532988a", "build/assets/pylib-android/getopt.py": "d630bf22334ba037143a3dca69088ee1", "build/assets/pylib-android/getpass.py": "c19e383e949c147a30ecc554b8598e91", - "build/assets/pylib-android/gettext.py": "6e24985f9e985660751c70436cfefa75", + "build/assets/pylib-android/gettext.py": "245a4d4c7ba79febb5423a49ebdc019a", "build/assets/pylib-android/glob.py": "0607521b67b32c59f30a9e1b238d5c1a", "build/assets/pylib-android/graphlib.py": "156d50d67d92c1917cf910dfce9cecc9", "build/assets/pylib-android/gzip.py": "296ba9c497e9c0cc4a97b82dcb02d780", @@ -2908,7 +2908,7 @@ "build/assets/pylib-android/locale.py": "42f3f48fed6a16da350de46aa85b446a", "build/assets/pylib-android/logging/__init__.py": "6e5d6f80af880857f5eb29b038512c6d", "build/assets/pylib-android/logging/config.py": "f811372496ec5ae34e8047f0280686be", - "build/assets/pylib-android/logging/handlers.py": "ab3881444783ab84f3859e022b356989", + "build/assets/pylib-android/logging/handlers.py": "55d604de088570f8bd5edb62f64682fb", "build/assets/pylib-android/lzma.py": "d7388640aa6af4c64fdc821471930f57", "build/assets/pylib-android/mailbox.py": "d9db3c7510e38484ade3d88446b8f231", "build/assets/pylib-android/mailcap.py": "c61462a36d20d79a0f4e37717f957bf6", @@ -2916,7 +2916,7 @@ "build/assets/pylib-android/modulefinder.py": "3fc074c018de1dd15ab2e309be199dea", "build/assets/pylib-android/netrc.py": "9a869ca83b316ab5a19a0a2cf22efaf3", "build/assets/pylib-android/nntplib.py": "4926aa991bd4b96b9318d6242135abf9", - "build/assets/pylib-android/ntpath.py": "57eacdf2824f306ae2b03d5818294c94", + "build/assets/pylib-android/ntpath.py": "d53ff21dc0ef0cd939cc865ae1fb011e", "build/assets/pylib-android/nturl2path.py": "937624c4b6f213b652addea66296ccc4", "build/assets/pylib-android/numbers.py": "0cdcb42317422500d514ec67d496a06e", "build/assets/pylib-android/opcode.py": "18cba8b1d09ec6fcccfe20e5b13db980", @@ -2939,7 +2939,7 @@ "build/assets/pylib-android/pty.py": "c97b51147360cf7fd92c364ab8068a2b", "build/assets/pylib-android/py_compile.py": "772b429c589d2e005e8bd79b12f55a92", "build/assets/pylib-android/pyclbr.py": "bf1989a2c73108005e874a640760476a", - "build/assets/pylib-android/pydoc.py": "0f8a4b2f4a9d23e429c01660a4290bd8", + "build/assets/pylib-android/pydoc.py": "b17a6d227db749f91434253248fa6384", "build/assets/pylib-android/queue.py": "1e90a0b87965a2642946621db162f441", "build/assets/pylib-android/quopri.py": "5d58010dd1f96b37a167c6d305372881", "build/assets/pylib-android/random.py": "9ec8461bc4d5b072e3fc1f65aafccf2f", @@ -2947,7 +2947,7 @@ "build/assets/pylib-android/re/_casefix.py": "106514c6c6bb479fa2691423a61c8938", "build/assets/pylib-android/re/_compiler.py": "d38bbefe652b6bfff2bb30459436f112", "build/assets/pylib-android/re/_constants.py": "99b8d7dba7fb50be8fb435dcefcd2989", - "build/assets/pylib-android/re/_parser.py": "df712815c6dba2e12c1875ca1bc02400", + "build/assets/pylib-android/re/_parser.py": "1afe14ae4219eadb32ba0fd3ac1b921a", "build/assets/pylib-android/reprlib.py": "a129eeeaf66fbd9591d2da242ce23a1a", "build/assets/pylib-android/rlcompleter.py": "9e57bb7030b57c4ec82eba9e09852414", "build/assets/pylib-android/runpy.py": "3a2dd98314791c7e36b6bd3585f6ad82", @@ -2956,7 +2956,7 @@ "build/assets/pylib-android/selectors.py": "98e0d83849452cbc2cc1381555bd5024", "build/assets/pylib-android/shelve.py": "3e569c07c863ecbd7f35a6c382d1785a", "build/assets/pylib-android/shlex.py": "0873fac90a491702950816ead0e59dd0", - "build/assets/pylib-android/shutil.py": "ed25b38eacc66c9059651e6666ec1869", + "build/assets/pylib-android/shutil.py": "a5d0ee9f28244b42a06e682312d0e3fa", "build/assets/pylib-android/signal.py": "114ef47b1798fca6f56ac8a250974b3e", "build/assets/pylib-android/site.py": "2a99f7de2702aa8411d35acbb91fe926", "build/assets/pylib-android/smtpd.py": "0602b6a39c4e37133303bee16c3e28a4", @@ -2970,18 +2970,18 @@ "build/assets/pylib-android/sre_compile.py": "a1784e9ccbea7d9963cab75b536b40c8", "build/assets/pylib-android/sre_constants.py": "5c5be32a5334d9b0a848dad520746a63", "build/assets/pylib-android/sre_parse.py": "cca15b9ab31509e6642f9d2fd4fb9d91", - "build/assets/pylib-android/ssl.py": "3c4c838c1c298d69871154e80f45cad1", + "build/assets/pylib-android/ssl.py": "ed512664b82e23aa157fc69f97df9d01", "build/assets/pylib-android/stat.py": "185f17736cdb40bd3e7400ad8cedef84", "build/assets/pylib-android/statistics.py": "9807c60eb942bf320ee85a2016ba4516", "build/assets/pylib-android/string.py": "c072d3a2d0337386d3235ba72f292752", "build/assets/pylib-android/stringprep.py": "6a5635711a838f76fee7b52537bf8b45", "build/assets/pylib-android/struct.py": "4fd288bd6537effd1d5edbba9d44dde2", - "build/assets/pylib-android/subprocess.py": "4d6522342cab21c558e60b2f50c5cedc", + "build/assets/pylib-android/subprocess.py": "4932fae7e87da40d7661100b6871a005", "build/assets/pylib-android/sunau.py": "a034779289fef0b2221345f40e042680", "build/assets/pylib-android/symtable.py": "0cd4a624b2e3304664f43189ed9e3bf7", "build/assets/pylib-android/sysconfig.py": "9ffad6cfff49bc09fe36a33a5446c59d", "build/assets/pylib-android/tabnanny.py": "84614c63ead0ab71527cecdf3de68f1a", - "build/assets/pylib-android/tarfile.py": "a6dfd478cf3917a29020944bff1a6f2d", + "build/assets/pylib-android/tarfile.py": "e2fc4eca5c2d39b6f44b9e622a32f602", "build/assets/pylib-android/telnetlib.py": "1a746e1fc988b9f5c12b9fd5a97c00ea", "build/assets/pylib-android/tempfile.py": "436007fbe6821c864a53861bd73b4d43", "build/assets/pylib-android/textwrap.py": "3eb16a40553205dc96be5cb9039f3c8c", @@ -2999,10 +2999,10 @@ "build/assets/pylib-android/tracemalloc.py": "e4d10d2bee7773566e46797a939e5cbf", "build/assets/pylib-android/tty.py": "271c7d61005a0a3c2c0952efc60dcb6d", "build/assets/pylib-android/types.py": "78f8942c08dbfc9c582f1bb8d5206639", - "build/assets/pylib-android/typing.py": "89e0654fda4fd2a09e93391179859cf0", + "build/assets/pylib-android/typing.py": "17aaeea16cbfdb93cb4c5b87f535e341", "build/assets/pylib-android/urllib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-android/urllib/error.py": "b7dde0483ff647eb87162d6e19c04fa0", - "build/assets/pylib-android/urllib/parse.py": "dc735bb3e0b069762ad988c1b55ce6e3", + "build/assets/pylib-android/urllib/parse.py": "28e09ecc3b696bae8ac5589b9cd64f63", "build/assets/pylib-android/urllib/request.py": "09b8666fe8319542f7247bb9f8573806", "build/assets/pylib-android/urllib/response.py": "c8537707a4b1e493c0ec4489ab523c93", "build/assets/pylib-android/urllib/robotparser.py": "5a7616bdf398c166f953ad48c25506eb", @@ -3039,7 +3039,7 @@ "build/assets/pylib-android/xmlrpc/client.py": "8f2cad71c1c87031be073184e71aa405", "build/assets/pylib-android/xmlrpc/server.py": "3147663bd28b952eef0e1316b94bacc6", "build/assets/pylib-android/zipapp.py": "d92ea793f092af6383a6383678cf7b73", - "build/assets/pylib-android/zipfile.py": "2cd1a57574daf0ec6456dc2d0858952d", + "build/assets/pylib-android/zipfile.py": "00671f5cdb9a5ad667efa1dccf0129d3", "build/assets/pylib-android/zipimport.py": "6d3b32a7258f670eb71daf3a8492a4f1", "build/assets/pylib-android/zoneinfo/__init__.py": "0df5e8a66015e2fe2d77f2e4a5dea1ff", "build/assets/pylib-android/zoneinfo/_common.py": "5b52bdac4156dcbac96743fa99468bf2", @@ -3060,45 +3060,45 @@ "build/assets/pylib-apple/_pyio.py": "a6e88d66fbca88b13213cdd2177390b8", "build/assets/pylib-apple/_sitebuiltins.py": "8b5e3f6e73917962fa014ad2c4a55e61", "build/assets/pylib-apple/_strptime.py": "ff699c3f7647db7621bb88c43cc282d3", - "build/assets/pylib-apple/_sysconfigdata__darwin_darwin.py": "1deb8b4ea385ac52e2fc30eb5b7486d9", + "build/assets/pylib-apple/_sysconfigdata__darwin_darwin.py": "851eda9bce1b25dcba0ed272da9a25c1", "build/assets/pylib-apple/_sysconfigdata__ios_iphoneos.py": "5bfced73a12261ecc310bffce6786cd2", - "build/assets/pylib-apple/_sysconfigdata__ios_iphoneos_arm64.py": "13cdaf0612cecdfdea79507be605b5fa", + "build/assets/pylib-apple/_sysconfigdata__ios_iphoneos_arm64.py": "b323d9e0ce8d23039fe55a55a85a7f03", "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator.py": "f9c955d9c5c9cf5a0a026d084a1f9519", - "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_arm64.py": "1fd694958588a382f0e872584c66123e", - "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_x86_64.py": "0be4ff9720b1366519a2acc44bde9564", + "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_arm64.py": "a546cdaf5cd7c96b7494ea604ba7ce43", + "build/assets/pylib-apple/_sysconfigdata__ios_iphonesimulator_x86_64.py": "56abcd261de3ab910cf340623328a7c0", "build/assets/pylib-apple/_sysconfigdata__tvos_appletvos.py": "6882eb86d192411b9e85c8b59252c719", - "build/assets/pylib-apple/_sysconfigdata__tvos_appletvos_arm64.py": "798569299d9edde6167a23741c9239fb", + "build/assets/pylib-apple/_sysconfigdata__tvos_appletvos_arm64.py": "aca63835009f6ddd207d25fac7af21f9", "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator.py": "a3c88367fb568e377ef2a72f0e9c2394", - "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_arm64.py": "bf5e3b80c0bd0f6e8d00372d4f6f1ae5", - "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_x86_64.py": "4828cee78f35df83a94a308919080918", - "build/assets/pylib-apple/_sysconfigdata_d_darwin_darwin.py": "9eb91d9cd5328d59ceb9047d210beaba", + "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_arm64.py": "f3fbbf1e8541363be49ddfe5b7f42a5c", + "build/assets/pylib-apple/_sysconfigdata__tvos_appletvsimulator_x86_64.py": "8af232f8b1f956a2ec0bad2dc44f1f59", + "build/assets/pylib-apple/_sysconfigdata_d_darwin_darwin.py": "7b82990a773d8bfdc56a4d0587e767dc", "build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos.py": "5bfced73a12261ecc310bffce6786cd2", - "build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos_arm64.py": "11622b9e1d51ef4a4225099acb1e8200", + "build/assets/pylib-apple/_sysconfigdata_d_ios_iphoneos_arm64.py": "8d5c7003e7ebc454dc0919524c643b81", "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator.py": "f9c955d9c5c9cf5a0a026d084a1f9519", - "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_arm64.py": "54a8feabddfe2d0cc7a28db1d4ebd881", - "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_x86_64.py": "f86a4410017799af3c0297cd8786058a", + "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_arm64.py": "4fcbe87958cfa21d5bba4fc96dd8514e", + "build/assets/pylib-apple/_sysconfigdata_d_ios_iphonesimulator_x86_64.py": "038f6c0ae9ebd4585ba3d71ac9a6f46b", "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos.py": "6882eb86d192411b9e85c8b59252c719", - "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos_arm64.py": "72e93b38c02e8d9cae4fbf5fb66ebf3d", + "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvos_arm64.py": "370c439fe07fbf0d11a00654eee2cab0", "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator.py": "a3c88367fb568e377ef2a72f0e9c2394", - "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_arm64.py": "a395bfca36c03e6e77af0c0ca58c148d", - "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_x86_64.py": "77074e38c080ebf0f969c62f5dab628e", + "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_arm64.py": "35c66716d8e2d2c93a4fffd7fd6143e2", + "build/assets/pylib-apple/_sysconfigdata_d_tvos_appletvsimulator_x86_64.py": "3b59c71925adf541ceaccb165cd57067", "build/assets/pylib-apple/_threading_local.py": "4a9688e3987d7d692db46feb9214945e", "build/assets/pylib-apple/_weakrefset.py": "e4fa8532ace46dfbc35149c41ea497f7", - "build/assets/pylib-apple/abc.py": "a9661fcfe6c12211ec1b16391247947c", + "build/assets/pylib-apple/abc.py": "a0daa1ed187eee8690c1e8438b97da90", "build/assets/pylib-apple/aifc.py": "1b9134c72b1e542417bee5bf345a1d0a", "build/assets/pylib-apple/antigravity.py": "6d56bedf73be574cb6d7117caf5d334c", - "build/assets/pylib-apple/argparse.py": "2dc7f53a0390532cfabb416e25e72035", + "build/assets/pylib-apple/argparse.py": "e22cac9b12c09592929d57eb982fc554", "build/assets/pylib-apple/ast.py": "3aaa1b0e56b21b28155707c54bc225a8", "build/assets/pylib-apple/asynchat.py": "2ef3a0ce322332fabbf8fad4e133c6a3", "build/assets/pylib-apple/asyncio/__init__.py": "edf0e79e2b8b85c08f09fd14668e4822", "build/assets/pylib-apple/asyncio/__main__.py": "8e391b47f448ad922dc2614dbd93011e", - "build/assets/pylib-apple/asyncio/base_events.py": "9f7758e7f013043a50c693e5e8d068b5", + "build/assets/pylib-apple/asyncio/base_events.py": "8494c7bc5f5fe98fd64d882ed4cc4722", "build/assets/pylib-apple/asyncio/base_futures.py": "d2502e045d28ea562e1a82ddb162b4f0", "build/assets/pylib-apple/asyncio/base_subprocess.py": "8a805e04a2911b2d8e297f0029def4b1", "build/assets/pylib-apple/asyncio/base_tasks.py": "f4388c294f4cf805a6f1e4ed12a5a3aa", "build/assets/pylib-apple/asyncio/constants.py": "13f733940667d1f81cf83adc6e5b2a5b", "build/assets/pylib-apple/asyncio/coroutines.py": "fb3e431df7d09ed38d7fa76385e9bb52", - "build/assets/pylib-apple/asyncio/events.py": "07c04d04b5e255fc5b79698715f4dc4e", + "build/assets/pylib-apple/asyncio/events.py": "3063d6b0d1fcbb50f8142f8ce58531fb", "build/assets/pylib-apple/asyncio/exceptions.py": "db8d3794a37d50a433d13c1eacf0d333", "build/assets/pylib-apple/asyncio/format_helpers.py": "b0447581eff1bc759da16d512155c72a", "build/assets/pylib-apple/asyncio/futures.py": "297232981f201edac774ec3a49a0845b", @@ -3109,26 +3109,26 @@ "build/assets/pylib-apple/asyncio/protocols.py": "b8aa105b79d24f88c7a2c2cdbc8e7814", "build/assets/pylib-apple/asyncio/queues.py": "f63be54780730992e2377c51ac373126", "build/assets/pylib-apple/asyncio/runners.py": "f184754fba961e4ea6e77a9aec633afc", - "build/assets/pylib-apple/asyncio/selector_events.py": "f7ee7809d8b807ccda22db7870f508ac", - "build/assets/pylib-apple/asyncio/sslproto.py": "3a639532c92e12c9bf06fd131a6fc419", + "build/assets/pylib-apple/asyncio/selector_events.py": "a108fbd3a49f967da245f39cebf7694e", + "build/assets/pylib-apple/asyncio/sslproto.py": "2ec1b21e523055147d94c8c634154aab", "build/assets/pylib-apple/asyncio/staggered.py": "f5056f0a56b73b477a9fa65e71145366", - "build/assets/pylib-apple/asyncio/streams.py": "e9c609b92b4e9bd3383cf4004c6186c6", - "build/assets/pylib-apple/asyncio/subprocess.py": "a5ff69004c02e2f47d0077a77803c06b", + "build/assets/pylib-apple/asyncio/streams.py": "f00ddd2b2fd74554ae1d3088bd9d2bfd", + "build/assets/pylib-apple/asyncio/subprocess.py": "edb8d98278300b6c99f36cd08643c743", "build/assets/pylib-apple/asyncio/taskgroups.py": "5162e5b1806d9b647383d34ba1b21b56", "build/assets/pylib-apple/asyncio/tasks.py": "234550593cd4928e6ee2c9591b6928ca", "build/assets/pylib-apple/asyncio/threads.py": "7bbf81d424901524510e07b5d20e4a50", "build/assets/pylib-apple/asyncio/timeouts.py": "c7cb81c7ee938bc47ff75342befc872a", "build/assets/pylib-apple/asyncio/transports.py": "04598090d813bb363cea9bf714b97c3f", "build/assets/pylib-apple/asyncio/trsock.py": "305d016a93b3e5224cb45af43fdc52b9", - "build/assets/pylib-apple/asyncio/unix_events.py": "9ce0da3a12b544df9c10fd3b3e0b2f37", + "build/assets/pylib-apple/asyncio/unix_events.py": "cbb968f7c1e4f87f23b187d7140839f1", "build/assets/pylib-apple/asyncio/windows_events.py": "954637d8416216d656011178dbcedbb4", "build/assets/pylib-apple/asyncio/windows_utils.py": "4efbef16e6692c9424804d9bdc496761", "build/assets/pylib-apple/asyncore.py": "af21d495fa6ccc47b51ca8a8a382ea1c", "build/assets/pylib-apple/base64.py": "5f8bbbfda4b9145b1968cb9badf8325b", - "build/assets/pylib-apple/bdb.py": "aecf5370ea25c5decdf8dfa07caf0bfc", + "build/assets/pylib-apple/bdb.py": "1e26c626405bfc06b1e7231183eb928a", "build/assets/pylib-apple/bisect.py": "9b70437e327d5176da41192567ad0064", "build/assets/pylib-apple/bz2.py": "cd6a5f2491bc52afd8fc180097371473", - "build/assets/pylib-apple/cProfile.py": "d5ef924a68c0f747ad727a6326ad8e5a", + "build/assets/pylib-apple/cProfile.py": "9e9c07ac3b9e4195a62b74e4f2b9489f", "build/assets/pylib-apple/calendar.py": "4ef3d6d85d44e36212e5d784051c80b6", "build/assets/pylib-apple/cgi.py": "090c5cfc8b4b92a730beec975159bd2a", "build/assets/pylib-apple/cgitb.py": "2bcff1cec7f3a3a9c96de7a55ebb4ea3", @@ -3137,16 +3137,16 @@ "build/assets/pylib-apple/code.py": "5d47099984013b933c96b02ef16981b8", "build/assets/pylib-apple/codecs.py": "6fac5e2969e98ceaba92d3b8e42cb2ec", "build/assets/pylib-apple/codeop.py": "d375467fb29fccd43ab94d15a2e63085", - "build/assets/pylib-apple/collections/__init__.py": "44999193e5c3d379e3feaa50ddf5147d", + "build/assets/pylib-apple/collections/__init__.py": "dcffbb6ee2cadd0c05ad22f2ef41f89b", "build/assets/pylib-apple/collections/abc.py": "15f410d3821352033a90a04539c99060", - "build/assets/pylib-apple/colorsys.py": "1452923f15188287bc677e7128cb6b31", + "build/assets/pylib-apple/colorsys.py": "ca8f117785bf7606c3919ef0f4b828ae", "build/assets/pylib-apple/compileall.py": "eb3f6d92f020ebec3f3f5bffc8a4dd4b", "build/assets/pylib-apple/concurrent/__init__.py": "aa990702e8f3a7af205efb5ae23a7c85", "build/assets/pylib-apple/concurrent/futures/__init__.py": "3e46fadb9de9c995c37dca4311641d6a", "build/assets/pylib-apple/concurrent/futures/_base.py": "a1cd37aea6fe0efff1bc00a39543609e", - "build/assets/pylib-apple/concurrent/futures/process.py": "4725abe3e780075ac264da12a1db5714", + "build/assets/pylib-apple/concurrent/futures/process.py": "a44e8618e158f8f351dafcb566a02544", "build/assets/pylib-apple/concurrent/futures/thread.py": "e63753b8201f1392dbebc84a15054a13", - "build/assets/pylib-apple/configparser.py": "a6b19c20d70861eea310e5504621e562", + "build/assets/pylib-apple/configparser.py": "914afd2b2cec90bbca0b94fd176b5176", "build/assets/pylib-apple/contextlib.py": "6f52eac914e438ef54407760def8305f", "build/assets/pylib-apple/contextvars.py": "ddf2ae9be02601bd8fc9c2cb8a51c04e", "build/assets/pylib-apple/copy.py": "e7c43b1ec5f81ef36486ad8b49ed7f74", @@ -3167,38 +3167,38 @@ "build/assets/pylib-apple/curses/has_key.py": "c74b8d6db329fbbd872b7b91bfa94624", "build/assets/pylib-apple/curses/panel.py": "8f36fdade9588f8a4362d2cc057a6eff", "build/assets/pylib-apple/curses/textpad.py": "94aa9ebc47a6068d4461652346646dbb", - "build/assets/pylib-apple/dataclasses.py": "1328e12f8255b856ced026e75a623671", + "build/assets/pylib-apple/dataclasses.py": "febeea138bff21dbed88762be772514e", "build/assets/pylib-apple/datetime.py": "5dcfd7f3b1a4db8214c1442164ac999c", "build/assets/pylib-apple/decimal.py": "f57d255d45b5d1d7d8e13c41a283c3e4", "build/assets/pylib-apple/difflib.py": "6b3c8fd541b2b8d0320727025cd25275", "build/assets/pylib-apple/dis.py": "cecdc0c02aa3d70a7f550e60ebc9b3ba", - "build/assets/pylib-apple/doctest.py": "eb60b2b39e0deb976ecbc69a8c2392ee", - "build/assets/pylib-apple/email/__init__.py": "7ebfab5c51b6bc698aca92ad4903346c", + "build/assets/pylib-apple/doctest.py": "8a18c35f3aa66130955a6a3bf1bfead4", + "build/assets/pylib-apple/email/__init__.py": "4ff603eeeb4ce0302c8bd1b220fc5e13", "build/assets/pylib-apple/email/_encoded_words.py": "d7b77501689dd1ce32da789b46264a6a", "build/assets/pylib-apple/email/_header_value_parser.py": "982718787815084548747d4b078902e6", "build/assets/pylib-apple/email/_parseaddr.py": "a6d2999aeed17f060be8797e761a01aa", "build/assets/pylib-apple/email/_policybase.py": "09b0c21693ac080c52c52f5daab616aa", - "build/assets/pylib-apple/email/base64mime.py": "a1ac31203212f2963b4c07629a3b919c", - "build/assets/pylib-apple/email/charset.py": "7bb5baa9bbd627097d1f32f1a3b503c8", + "build/assets/pylib-apple/email/base64mime.py": "d3e4fc07d04833487677dd2a888c3826", + "build/assets/pylib-apple/email/charset.py": "1d101758464f75bf2b93fb17fec9542f", "build/assets/pylib-apple/email/contentmanager.py": "e88780ef1d37a11ff216060f740f2572", - "build/assets/pylib-apple/email/encoders.py": "f1c581f5c146c31168f6ff4a2a6591f7", + "build/assets/pylib-apple/email/encoders.py": "d401cf76e52f0205393dd8bb1ae28b46", "build/assets/pylib-apple/email/errors.py": "afd6b5e8f8baa701baaae14e736ddca0", - "build/assets/pylib-apple/email/feedparser.py": "88d35aee820e997f40f6c28cf930979b", - "build/assets/pylib-apple/email/generator.py": "e0cc1d119427110da5de96a4e7b6bb5b", - "build/assets/pylib-apple/email/header.py": "f72b2b6140c11b89c0ae3f7b24b0a861", + "build/assets/pylib-apple/email/feedparser.py": "623788306ab3b5d75df1145484045edc", + "build/assets/pylib-apple/email/generator.py": "073bac3c4874c3ab74d4e6a9e9317fb2", + "build/assets/pylib-apple/email/header.py": "09923b7b77bf91bed41a71b6e3c6e4d9", "build/assets/pylib-apple/email/headerregistry.py": "dfd48f9c41454d5bc2355cb1762fb869", - "build/assets/pylib-apple/email/iterators.py": "9b67a6ab50d2bdbdbc4588e10ea1c64a", + "build/assets/pylib-apple/email/iterators.py": "752ece28a18545e70fa67a7cf2fe3ef3", "build/assets/pylib-apple/email/message.py": "5b198b0cf1095ba5a3faccdd28310f28", "build/assets/pylib-apple/email/mime/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-apple/email/mime/application.py": "4ce678512f30cac9fd95993186d2eef7", "build/assets/pylib-apple/email/mime/audio.py": "4073e45bda9524e3cbe29374951fdc16", - "build/assets/pylib-apple/email/mime/base.py": "e4ac5d17e69e73a2cb4cc873474991c2", + "build/assets/pylib-apple/email/mime/base.py": "3b9c795fe3b6e9d3f7b6dda3e1c8e1ea", "build/assets/pylib-apple/email/mime/image.py": "6322b8269e8efe61d3ead57f2aa6cdef", - "build/assets/pylib-apple/email/mime/message.py": "72935a387c0c12840359c2b0b8f588ac", - "build/assets/pylib-apple/email/mime/multipart.py": "8157be08dbd84825bf2abaefa39dc3a0", - "build/assets/pylib-apple/email/mime/nonmultipart.py": "1187993d0366b808a3afea751cd37d81", - "build/assets/pylib-apple/email/mime/text.py": "eb387b8f3a686bc7587b860782761a52", - "build/assets/pylib-apple/email/parser.py": "19466563eaac6984c48f734a8f2cf3fc", + "build/assets/pylib-apple/email/mime/message.py": "0bf18b4f07a68b646e45b10d7e31c6c7", + "build/assets/pylib-apple/email/mime/multipart.py": "69577df977b7b36f5e175661dd7095bc", + "build/assets/pylib-apple/email/mime/nonmultipart.py": "a96d8d31156781a7511cec04e46a95f6", + "build/assets/pylib-apple/email/mime/text.py": "21928b3afec29cb55ae1ae7682b8fbe1", + "build/assets/pylib-apple/email/parser.py": "f0cdd5c8491cbff0948672784fca1e8f", "build/assets/pylib-apple/email/policy.py": "69a5f116b77b6a70e7761309c5592557", "build/assets/pylib-apple/email/quoprimime.py": "c5e54c3f0e70d55145517382d4455765", "build/assets/pylib-apple/email/utils.py": "145a606aaa3cbad40c68054ebbf4efa6", @@ -3324,7 +3324,7 @@ "build/assets/pylib-apple/encodings/utf_8_sig.py": "8f3542863ef311d8b970a37c0d66b0de", "build/assets/pylib-apple/encodings/uu_codec.py": "4ef8a65413574c017a96b97fc1638ba6", "build/assets/pylib-apple/encodings/zlib_codec.py": "1388fb103fdf395451bfc8a2d60933a9", - "build/assets/pylib-apple/enum.py": "93e4c39acfbbebdc9c4f3d204f17e496", + "build/assets/pylib-apple/enum.py": "73b214a43ceef88aff7098b83623ed09", "build/assets/pylib-apple/filecmp.py": "7648fdc6d0fc8bae7429d5e4081cf353", "build/assets/pylib-apple/fileinput.py": "c3def1041e6b12dd5f1906c9dbbd1101", "build/assets/pylib-apple/fnmatch.py": "a1bc67633695d4defd4c0886428c5363", @@ -3334,7 +3334,7 @@ "build/assets/pylib-apple/genericpath.py": "5e991b8dd73dd4a05571b73ac532988a", "build/assets/pylib-apple/getopt.py": "d630bf22334ba037143a3dca69088ee1", "build/assets/pylib-apple/getpass.py": "c19e383e949c147a30ecc554b8598e91", - "build/assets/pylib-apple/gettext.py": "6e24985f9e985660751c70436cfefa75", + "build/assets/pylib-apple/gettext.py": "245a4d4c7ba79febb5423a49ebdc019a", "build/assets/pylib-apple/glob.py": "0607521b67b32c59f30a9e1b238d5c1a", "build/assets/pylib-apple/graphlib.py": "156d50d67d92c1917cf910dfce9cecc9", "build/assets/pylib-apple/gzip.py": "296ba9c497e9c0cc4a97b82dcb02d780", @@ -3345,15 +3345,15 @@ "build/assets/pylib-apple/html/entities.py": "8561b405414160a08f613bdfd89e161b", "build/assets/pylib-apple/html/parser.py": "c2ff6801a3ef6a2863d37b899615efb8", "build/assets/pylib-apple/http/__init__.py": "1dab578aab89ead7171ef10638e88a5d", - "build/assets/pylib-apple/http/client.py": "d0b37013d5f9794a8311c3545ee5416d", + "build/assets/pylib-apple/http/client.py": "a3f2cd21f8ce7a4ee1b47f0b19fb57f7", "build/assets/pylib-apple/http/cookiejar.py": "f324a21e7c17f40e4d5c78139875811c", "build/assets/pylib-apple/http/cookies.py": "9319b95b505a644b9a112b4c7a7678c3", - "build/assets/pylib-apple/http/server.py": "a06b26669fc0eb0ef81b819fe8a6602d", + "build/assets/pylib-apple/http/server.py": "4b286e2b5e6112af17e097539eadd9d7", "build/assets/pylib-apple/imghdr.py": "011d27a98acf3774279a584525614ba3", "build/assets/pylib-apple/imp.py": "34bd1d1620eb0d42f9ef9bbbb11cafae", "build/assets/pylib-apple/importlib/__init__.py": "2f6c1fb453d61417245cd196311a9b52", "build/assets/pylib-apple/importlib/_abc.py": "720f8056e5cd852156378b532ddbbb7c", - "build/assets/pylib-apple/importlib/_bootstrap.py": "da9de7a6d6839a7185147f35f2040de7", + "build/assets/pylib-apple/importlib/_bootstrap.py": "6f4819e9443e3fda3c28c62f15a8238c", "build/assets/pylib-apple/importlib/_bootstrap_external.py": "c22f4fa4086742713c2071db7de7726c", "build/assets/pylib-apple/importlib/abc.py": "c9697e928ff17089dc6aea96f5b33003", "build/assets/pylib-apple/importlib/machinery.py": "6a056c561b4ea8eb5457761c8a9fd704", @@ -3375,7 +3375,7 @@ "build/assets/pylib-apple/importlib/resources/simple.py": "ae95788edf31cbfffd53db748d76f0b9", "build/assets/pylib-apple/importlib/simple.py": "f34f28cd359ecaf9fd6cf18a4dca2c33", "build/assets/pylib-apple/importlib/util.py": "09c3a96d1265db211f32b73a5f76e1ac", - "build/assets/pylib-apple/inspect.py": "5a321fd388139d2beff15f4306b1fb95", + "build/assets/pylib-apple/inspect.py": "365d413e26b3a77118e51987cfd2eb1f", "build/assets/pylib-apple/io.py": "4a3ab68b3f38d3dcf9282f4839fe5d84", "build/assets/pylib-apple/ipaddress.py": "b9831cf9058885b35a2411b4cbada972", "build/assets/pylib-apple/json/__init__.py": "e8b000d2bf8c53b55a72bc3053800596", @@ -3387,8 +3387,8 @@ "build/assets/pylib-apple/linecache.py": "2712c31a3a6d7625d437029a6b7470c9", "build/assets/pylib-apple/locale.py": "42f3f48fed6a16da350de46aa85b446a", "build/assets/pylib-apple/logging/__init__.py": "6e5d6f80af880857f5eb29b038512c6d", - "build/assets/pylib-apple/logging/config.py": "ff0697c60f90420c32c697a30bfdfe90", - "build/assets/pylib-apple/logging/handlers.py": "ab3881444783ab84f3859e022b356989", + "build/assets/pylib-apple/logging/config.py": "f811372496ec5ae34e8047f0280686be", + "build/assets/pylib-apple/logging/handlers.py": "55d604de088570f8bd5edb62f64682fb", "build/assets/pylib-apple/lzma.py": "d7388640aa6af4c64fdc821471930f57", "build/assets/pylib-apple/mailbox.py": "d9db3c7510e38484ade3d88446b8f231", "build/assets/pylib-apple/mailcap.py": "c61462a36d20d79a0f4e37717f957bf6", @@ -3396,30 +3396,30 @@ "build/assets/pylib-apple/modulefinder.py": "3fc074c018de1dd15ab2e309be199dea", "build/assets/pylib-apple/netrc.py": "9a869ca83b316ab5a19a0a2cf22efaf3", "build/assets/pylib-apple/nntplib.py": "4926aa991bd4b96b9318d6242135abf9", - "build/assets/pylib-apple/ntpath.py": "36557dc9fdcd9eeeab4d46c1a364bd5a", + "build/assets/pylib-apple/ntpath.py": "d53ff21dc0ef0cd939cc865ae1fb011e", "build/assets/pylib-apple/nturl2path.py": "937624c4b6f213b652addea66296ccc4", "build/assets/pylib-apple/numbers.py": "0cdcb42317422500d514ec67d496a06e", "build/assets/pylib-apple/opcode.py": "18cba8b1d09ec6fcccfe20e5b13db980", "build/assets/pylib-apple/operator.py": "61e197bc43df97ec39ae3e5e59b11c19", "build/assets/pylib-apple/optparse.py": "5f65f891612b68c71a2846da86254285", "build/assets/pylib-apple/os.py": "36f9692131ffb9ba4db510de31afc651", - "build/assets/pylib-apple/pathlib.py": "3e8b893cbe95729cdb6d0cc796e89e19", - "build/assets/pylib-apple/pdb.py": "da4c484348d4b2009479dadd878f20b0", + "build/assets/pylib-apple/pathlib.py": "095ec821fec243124d0a286b4de3848a", + "build/assets/pylib-apple/pdb.py": "117b0d24ccb89edc5f183c94f6722f70", "build/assets/pylib-apple/pickle.py": "e6f9f53d29988454690ccde3279c7c38", "build/assets/pylib-apple/pickletools.py": "85b30fba86d32dfc4a588300dedf5f01", "build/assets/pylib-apple/pipes.py": "2dd796bdbb87982034234fec50d4526c", - "build/assets/pylib-apple/pkgutil.py": "372a540a2f2f3a324d5ff8e137579aad", + "build/assets/pylib-apple/pkgutil.py": "8e3fdfcb6c90dc50245aee89c49eb515", "build/assets/pylib-apple/platform.py": "ee86bbf8ce5fbe11cd285600ecf4aecd", "build/assets/pylib-apple/plistlib.py": "8aa9836b7a69628873b25811c4d5fffa", "build/assets/pylib-apple/poplib.py": "829dc4df5d8e082ad414d499ec4678bd", "build/assets/pylib-apple/posixpath.py": "2a6b3f940f89b0819ee002b6b82b0318", "build/assets/pylib-apple/pprint.py": "b4e9efe35d05b6126d41da36eda47754", - "build/assets/pylib-apple/profile.py": "4c0816d9278d2a33e28835fcd291fb62", + "build/assets/pylib-apple/profile.py": "a9f11f8aa6a2905706a5fc9273d6c981", "build/assets/pylib-apple/pstats.py": "c5884aaae199265ab0c3849d053bc996", - "build/assets/pylib-apple/pty.py": "1de2d1bfbdc54a770de7b3010d322620", + "build/assets/pylib-apple/pty.py": "c97b51147360cf7fd92c364ab8068a2b", "build/assets/pylib-apple/py_compile.py": "772b429c589d2e005e8bd79b12f55a92", "build/assets/pylib-apple/pyclbr.py": "bf1989a2c73108005e874a640760476a", - "build/assets/pylib-apple/pydoc.py": "0f8a4b2f4a9d23e429c01660a4290bd8", + "build/assets/pylib-apple/pydoc.py": "b17a6d227db749f91434253248fa6384", "build/assets/pylib-apple/queue.py": "1e90a0b87965a2642946621db162f441", "build/assets/pylib-apple/quopri.py": "5d58010dd1f96b37a167c6d305372881", "build/assets/pylib-apple/random.py": "9ec8461bc4d5b072e3fc1f65aafccf2f", @@ -3427,7 +3427,7 @@ "build/assets/pylib-apple/re/_casefix.py": "106514c6c6bb479fa2691423a61c8938", "build/assets/pylib-apple/re/_compiler.py": "d38bbefe652b6bfff2bb30459436f112", "build/assets/pylib-apple/re/_constants.py": "99b8d7dba7fb50be8fb435dcefcd2989", - "build/assets/pylib-apple/re/_parser.py": "df712815c6dba2e12c1875ca1bc02400", + "build/assets/pylib-apple/re/_parser.py": "1afe14ae4219eadb32ba0fd3ac1b921a", "build/assets/pylib-apple/reprlib.py": "a129eeeaf66fbd9591d2da242ce23a1a", "build/assets/pylib-apple/rlcompleter.py": "9e57bb7030b57c4ec82eba9e09852414", "build/assets/pylib-apple/runpy.py": "3a2dd98314791c7e36b6bd3585f6ad82", @@ -3436,7 +3436,7 @@ "build/assets/pylib-apple/selectors.py": "98e0d83849452cbc2cc1381555bd5024", "build/assets/pylib-apple/shelve.py": "3e569c07c863ecbd7f35a6c382d1785a", "build/assets/pylib-apple/shlex.py": "0873fac90a491702950816ead0e59dd0", - "build/assets/pylib-apple/shutil.py": "651be1edc2110d483c96fbe26f40665d", + "build/assets/pylib-apple/shutil.py": "a5d0ee9f28244b42a06e682312d0e3fa", "build/assets/pylib-apple/signal.py": "114ef47b1798fca6f56ac8a250974b3e", "build/assets/pylib-apple/site.py": "c2bb58a3e8fe69733a28b56d04b47e50", "build/assets/pylib-apple/smtpd.py": "0602b6a39c4e37133303bee16c3e28a4", @@ -3450,18 +3450,18 @@ "build/assets/pylib-apple/sre_compile.py": "a1784e9ccbea7d9963cab75b536b40c8", "build/assets/pylib-apple/sre_constants.py": "5c5be32a5334d9b0a848dad520746a63", "build/assets/pylib-apple/sre_parse.py": "cca15b9ab31509e6642f9d2fd4fb9d91", - "build/assets/pylib-apple/ssl.py": "3c4c838c1c298d69871154e80f45cad1", + "build/assets/pylib-apple/ssl.py": "ed512664b82e23aa157fc69f97df9d01", "build/assets/pylib-apple/stat.py": "185f17736cdb40bd3e7400ad8cedef84", "build/assets/pylib-apple/statistics.py": "9807c60eb942bf320ee85a2016ba4516", "build/assets/pylib-apple/string.py": "c072d3a2d0337386d3235ba72f292752", "build/assets/pylib-apple/stringprep.py": "6a5635711a838f76fee7b52537bf8b45", "build/assets/pylib-apple/struct.py": "4fd288bd6537effd1d5edbba9d44dde2", - "build/assets/pylib-apple/subprocess.py": "c696ea6bad77404821e3643a5a8f1189", + "build/assets/pylib-apple/subprocess.py": "71393ec8cfd7da74691d932dd1861992", "build/assets/pylib-apple/sunau.py": "a034779289fef0b2221345f40e042680", "build/assets/pylib-apple/symtable.py": "0cd4a624b2e3304664f43189ed9e3bf7", "build/assets/pylib-apple/sysconfig.py": "e14e3272debfcb60192898d131712bad", "build/assets/pylib-apple/tabnanny.py": "84614c63ead0ab71527cecdf3de68f1a", - "build/assets/pylib-apple/tarfile.py": "76bf209364cd327ee75e9dac3211c882", + "build/assets/pylib-apple/tarfile.py": "e2fc4eca5c2d39b6f44b9e622a32f602", "build/assets/pylib-apple/telnetlib.py": "1a746e1fc988b9f5c12b9fd5a97c00ea", "build/assets/pylib-apple/tempfile.py": "436007fbe6821c864a53861bd73b4d43", "build/assets/pylib-apple/textwrap.py": "3eb16a40553205dc96be5cb9039f3c8c", @@ -3474,22 +3474,22 @@ "build/assets/pylib-apple/tomllib/_parser.py": "f9a4dc92c44403f970e94c2e494a7358", "build/assets/pylib-apple/tomllib/_re.py": "0e509117e16c41c491615e06bb98861d", "build/assets/pylib-apple/tomllib/_types.py": "07be9616d6f5e401fd31fbeea619fc97", - "build/assets/pylib-apple/trace.py": "c860164b4f4317299db04e29070a163d", - "build/assets/pylib-apple/traceback.py": "bb2dc63a0bcd438697904573807bd392", + "build/assets/pylib-apple/trace.py": "3d8698a2c3ec03dc0f394a2f48c2ffbc", + "build/assets/pylib-apple/traceback.py": "91f67818e621e3b2f5bf583ed6863ef8", "build/assets/pylib-apple/tracemalloc.py": "e4d10d2bee7773566e46797a939e5cbf", "build/assets/pylib-apple/tty.py": "271c7d61005a0a3c2c0952efc60dcb6d", "build/assets/pylib-apple/types.py": "78f8942c08dbfc9c582f1bb8d5206639", - "build/assets/pylib-apple/typing.py": "c07fa037183494716cd57a7c9ac05d78", + "build/assets/pylib-apple/typing.py": "17aaeea16cbfdb93cb4c5b87f535e341", "build/assets/pylib-apple/urllib/__init__.py": "340c83beff7dcff8f5c7b87cd43cedaf", "build/assets/pylib-apple/urllib/error.py": "b7dde0483ff647eb87162d6e19c04fa0", - "build/assets/pylib-apple/urllib/parse.py": "d47283907682d432b511b85dd1e32572", - "build/assets/pylib-apple/urllib/request.py": "e89a853d76344f1ca197926d49b3b9e6", + "build/assets/pylib-apple/urllib/parse.py": "28e09ecc3b696bae8ac5589b9cd64f63", + "build/assets/pylib-apple/urllib/request.py": "09b8666fe8319542f7247bb9f8573806", "build/assets/pylib-apple/urllib/response.py": "c8537707a4b1e493c0ec4489ab523c93", "build/assets/pylib-apple/urllib/robotparser.py": "5a7616bdf398c166f953ad48c25506eb", - "build/assets/pylib-apple/uu.py": "93268d78026ebde74a1ccd14024ae59f", + "build/assets/pylib-apple/uu.py": "7cb795ca0c9e914550e6245dfe53c53e", "build/assets/pylib-apple/uuid.py": "755d75cad456d0c3ab0c67f0276cca32", "build/assets/pylib-apple/warnings.py": "e5f0b4cbc35aae8d4b89a856b189b626", - "build/assets/pylib-apple/wave.py": "cb125197ba1b7955bbee4ebde9f385ce", + "build/assets/pylib-apple/wave.py": "727a8dacad95625ea14554b7d655ce2e", "build/assets/pylib-apple/weakref.py": "dd14612f02ca8acd723f633b6fff0adf", "build/assets/pylib-apple/webbrowser.py": "7356fd255ec3bdfef98349a9c9d2b563", "build/assets/pylib-apple/xdrlib.py": "ee12e9067ab4904da935b8d2213426d8", @@ -3519,7 +3519,7 @@ "build/assets/pylib-apple/xmlrpc/client.py": "8f2cad71c1c87031be073184e71aa405", "build/assets/pylib-apple/xmlrpc/server.py": "3147663bd28b952eef0e1316b94bacc6", "build/assets/pylib-apple/zipapp.py": "d92ea793f092af6383a6383678cf7b73", - "build/assets/pylib-apple/zipfile.py": "21cdb798a8f660aa3ec322ce59bddac9", + "build/assets/pylib-apple/zipfile.py": "00671f5cdb9a5ad667efa1dccf0129d3", "build/assets/pylib-apple/zipimport.py": "6d3b32a7258f670eb71daf3a8492a4f1", "build/assets/pylib-apple/zoneinfo/__init__.py": "0df5e8a66015e2fe2d77f2e4a5dea1ff", "build/assets/pylib-apple/zoneinfo/_common.py": "5b52bdac4156dcbac96743fa99468bf2", @@ -4064,26 +4064,26 @@ "build/assets/windows/Win32/ucrtbased.dll": "2def5335207d41b21b9823f6805997f1", "build/assets/windows/Win32/vc_redist.x86.exe": "b08a55e2e77623fe657bea24f223a3ae", "build/assets/windows/Win32/vcruntime140d.dll": "865b2af4d1e26a1a8073c89acb06e599", - "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "ca001c9f2b4edf8d4918c1bcaf0cb561", - "build/prefab/full/linux_arm64_gui/release/ballisticakit": "fcb58aae4535a761be49420f4e4a7711", - "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "8f453b8193ba06a3cc59374cdd2a1c09", - "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "7c389cb83619516ce96118227668500e", - "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "2ffcc486e9ba8f0fd5279083a2e54aff", - "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "366bab5bff3ff9344e54bf7492f4d7c3", - "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "78277cc1bd40ba88fd1475f8755e0721", - "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "5f063e4d45e40ade22f1bad63658752e", - "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "f7114c78146f22e89143218c9930b43e", - "build/prefab/full/mac_arm64_gui/release/ballisticakit": "90c0ea0ce7a35d8f15b2a29bef704819", - "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "e1b4932fd7f359404c979604a1e33444", - "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "28ab454f71dfecd1986a245eb4a732e7", - "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "7b1a4db9c3f36fd428cdafbc1459bc1b", - "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "bc5a48ff49975901f212d18b1dbbb6f5", - "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "7742db7c9555907fc7b2d5c89d48dfd0", - "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "d81bc55d666f630a14de90f30be29fb4", - "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "5ab68bfee69a6fe07b5b8a68938220e6", - "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "59a2b3cb2c1dde98c6aedf72aa9fdbfb", - "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "2199e800eb102d56197e11782b7adf12", - "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "3193300cf9927276893960698d8246f6", + "build/prefab/full/linux_arm64_gui/debug/ballisticakit": "2ceb16e09034aa4e3213e8fb69dd209b", + "build/prefab/full/linux_arm64_gui/release/ballisticakit": "7ecdc512653325abef8e66e9c3e0e479", + "build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "70a1c3300cb0610a85449d08b3483a54", + "build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "000738cc726938ff5282d211629739e3", + "build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "e4d0b9fdcb16f2bef3891f28b950daac", + "build/prefab/full/linux_x86_64_gui/release/ballisticakit": "9cc960c0de9e10dd300561dc9ae045e2", + "build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "be453afedfb331abe39e4940755b34e7", + "build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "d478af40d922a68e4deab6dd452b0e51", + "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "5fdb7d8752f9a8315a5f94a32b5db368", + "build/prefab/full/mac_arm64_gui/release/ballisticakit": "433dae3372f05c7faf75658c6f962be1", + "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "d66d0201decc90f677520f41ac227a71", + "build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "37efebdbd1866b71ac324f5ca949151a", + "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "5ccfadd91168c07956328dd11b118b28", + "build/prefab/full/mac_x86_64_gui/release/ballisticakit": "404d9db4de7089346264f3f62dbb6d88", + "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "ef3dda575b711a0fa515f93ebd0a7379", + "build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "8ee2be9a35e12158c0ace56b04a3ea99", + "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "1c305bde639f5fc76e908a3a3fb9203f", + "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "e58ce9a499068e682295dd3d88a0801d", + "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "38a2c503c8d892d7e94cd53fb4da5b48", + "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "deea2cf3afb5598ed9eb6ce4798b1cef", "build/prefab/lib/linux_arm64_gui/debug/libballisticaplus.a": "a3607fd941915ab11503f82acfc392b5", "build/prefab/lib/linux_arm64_gui/release/libballisticaplus.a": "b5a129d83796c9e7015ab5e319d2c22f", "build/prefab/lib/linux_arm64_server/debug/libballisticaplus.a": "a3607fd941915ab11503f82acfc392b5", @@ -4100,14 +4100,14 @@ "build/prefab/lib/mac_x86_64_gui/release/libballisticaplus.a": "c5c40967e63471c9c4abd6dfbef892df", "build/prefab/lib/mac_x86_64_server/debug/libballisticaplus.a": "d34c0a142e7d391a109a33ea3cc77c08", "build/prefab/lib/mac_x86_64_server/release/libballisticaplus.a": "c5c40967e63471c9c4abd6dfbef892df", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "13a3bb41dda8cfdb3ffdbc57a0390275", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "042ff1129bab0def6bf90250b5c08a32", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "699ab8e6fd3e8517acac76cd5b40dfbc", - "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "5b53317f8900cab59288be44b353dffc", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "978ea0ba60c026efd45729cd48c0feba", - "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "1fb524f11277090440cda18bfc3ee3a0", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "91452d47e879acd0d7fdd06a44fbcfed", - "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "7e9469f3cac9ab85c5e9d1256679604c", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "9d23a52a0c270710332bf35297db9f36", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "61d84134e4088e5138ceb200ba20960b", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "a7a9854fb6f114ac3f3f35c451170328", + "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "f5a2d196943141917b1ee0f3beb1f5eb", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "ec0052c95df6ea5cb3bdcaabcb1ea55c", + "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "d21984e95164c4e7df91b35a60828fc7", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "b613c7699c66c9a2a17bf9360015ade0", + "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "6f907f7940d2f5e44874e24f9a1856a0", "src/assets/ba_data/python/babase/_mgen/__init__.py": "f885fed7f2ed98ff2ba271f9dbe3391c", "src/assets/ba_data/python/babase/_mgen/enums.py": "f8cd3af311ac63147882590123b78318", "src/ballistica/base/mgen/pyembed/binding_base.inc": "ad347097a38e0d7ede9eb6dec6a80ee9", diff --git a/CHANGELOG.md b/CHANGELOG.md index 470270e2..4ff47c8f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -### 1.7.28 (build 21303, api 8, 2023-09-01) +### 1.7.28 (build 21306, api 8, 2023-09-06) - Added some high level functionality for copying and deleting feature-sets to the `spinoff` tool. For example, to create your own `poo` feature-set based on @@ -14,6 +14,8 @@ prefab-server-release-build` you should see just a few file downloads happening instead of the hundreds that would happen before, which should be significantly faster & more efficient. +- Updated internal Python builds for Apple & iOS to 3.11.5, and updated a few + dependent libraries as well (OpenSSL bumped from 3.0.8 to 3.0.10, etc.). ### 1.7.27 (build 21282, api 8, 2023-08-30) diff --git a/Makefile b/Makefile index 1b737de0..8b42f212 100644 --- a/Makefile +++ b/Makefile @@ -186,10 +186,10 @@ pcommandbatch_speed_test: prereqs # Tell make which of these targets don't represent files. .PHONY: help prereqs prereqs-pre-update prereqs-clean assets assets-cmake \ - assets-cmake-scripts assets-windows assets-windows-Win32 assets-windows-x64 \ - assets-mac assets-ios assets-android assets-clean resources resources-clean \ - meta meta-clean clean clean-list dummymodules docs docs-pdoc \ - pcommandbatch_speed_test + assets-cmake-scripts assets-windows assets-windows-Win32 \ + assets-windows-x64 assets-mac assets-ios assets-android assets-clean \ + resources resources-clean meta meta-clean clean clean-list \ + dummymodules docs docs-pdoc pcommandbatch_speed_test ################################################################################ @@ -585,31 +585,35 @@ build/prefab/lib/windows/Release_%/BallisticaKitHeadlessPlus.pdb: .efrocachemap @$(PCOMMANDBATCH) efrocache_get $@ # Tell make which of these targets don't represent files. -.PHONY: prefab-gui-debug prefab-gui-release prefab-gui-debug-build \ - prefab-gui-release-build prefab-server-debug prefab-server-release \ - prefab-server-debug-build prefab-server-release-build prefab-clean \ - _cmake_prefab_gui_binary _cmake_prefab_server_binary \ - prefab-mac-x86-64-gui-debug prefab-mac-arm64-gui-debug \ - prefab-mac-x86-64-gui-debug-build prefab-mac-arm64-gui-debug-build \ - prefab-mac-x86-64-gui-release prefab-mac-arm64-gui-release \ - prefab-mac-x86-64-gui-release-build prefab-mac-arm64-gui-release-build \ - prefab-mac-x86-64-server-debug prefab-mac-arm64-server-debug \ - prefab-mac-x86-64-server-debug-build prefab-mac-arm64-server-debug-build \ - prefab-mac-x86-64-server-release prefab-mac-arm64-server-release \ - prefab-mac-x86-64-server-release-build prefab-mac-arm64-server-release-build \ - prefab-linux-x86-64-gui-debug prefab-linux-arm64-gui-debug \ - prefab-linux-x86-64-gui-debug-build prefab-linux-arm64-gui-debug-build \ - prefab-linux-x86-64-gui-release prefab-linux-arm64-gui-release \ - prefab-linux-x86-64-gui-release-build prefab-linux-arm64-gui-release-build \ - prefab-linux-x86-64-server-debug prefab-linux-arm64-server-debug \ - prefab-linux-x86-64-server-debug-build prefab-linux-arm64-server-debug-build \ - prefab-linux-x86-64-server-release prefab-linux-arm64-server-release \ - prefab-linux-x86-64-server-release-build \ - prefab-linux-arm64-server-release-build \ - prefab-windows-x86-gui-debug prefab-windows-x86-gui-debug-build \ - prefab-windows-x86-gui-release prefab-windows-x86-gui-release-build \ - prefab-windows-x86-server-debug prefab-windows-x86-server-debug-build \ - prefab-windows-x86-server-release prefab-windows-x86-server-release-build +.PHONY: prefab-gui-debug prefab-gui-release prefab-gui-debug-build \ + prefab-gui-release-build prefab-server-debug prefab-server-release \ + prefab-server-debug-build prefab-server-release-build prefab-clean \ + _cmake_prefab_gui_binary _cmake_prefab_server_binary \ + prefab-mac-x86-64-gui-debug prefab-mac-arm64-gui-debug \ + prefab-mac-x86-64-gui-debug-build prefab-mac-arm64-gui-debug-build \ + prefab-mac-x86-64-gui-release prefab-mac-arm64-gui-release \ + prefab-mac-x86-64-gui-release-build \ + prefab-mac-arm64-gui-release-build prefab-mac-x86-64-server-debug \ + prefab-mac-arm64-server-debug prefab-mac-x86-64-server-debug-build \ + prefab-mac-arm64-server-debug-build prefab-mac-x86-64-server-release \ + prefab-mac-arm64-server-release \ + prefab-mac-x86-64-server-release-build \ + prefab-mac-arm64-server-release-build prefab-linux-x86-64-gui-debug \ + prefab-linux-arm64-gui-debug prefab-linux-x86-64-gui-debug-build \ + prefab-linux-arm64-gui-debug-build prefab-linux-x86-64-gui-release \ + prefab-linux-arm64-gui-release prefab-linux-x86-64-gui-release-build \ + prefab-linux-arm64-gui-release-build prefab-linux-x86-64-server-debug \ + prefab-linux-arm64-server-debug \ + prefab-linux-x86-64-server-debug-build \ + prefab-linux-arm64-server-debug-build \ + prefab-linux-x86-64-server-release prefab-linux-arm64-server-release \ + prefab-linux-x86-64-server-release-build \ + prefab-linux-arm64-server-release-build prefab-windows-x86-gui-debug \ + prefab-windows-x86-gui-debug-build prefab-windows-x86-gui-release \ + prefab-windows-x86-gui-release-build prefab-windows-x86-server-debug \ + prefab-windows-x86-server-debug-build \ + prefab-windows-x86-server-release \ + prefab-windows-x86-server-release-build ################################################################################ @@ -751,8 +755,8 @@ format-scripts-full: prereqs format-makefile: prereqs @$(PCOMMAND) formatmakefile -.PHONY: format format-full format-code format-code-full format-scripts \ - format-scripts-full +.PHONY: format format-full format-code format-code-full format-scripts \ + format-scripts-full ################################################################################ @@ -841,9 +845,9 @@ pycharm-full: py_check_prereqs py_check_prereqs: dummymodules # Tell make which of these targets don't represent files. -.PHONY: check check-full check2 check2-full \ - cpplint cpplint-full pylint pylint-full mypy \ - mypy-full dmypy dmypy-stop pycharm pycharm-full py_check_prereqs +.PHONY: check check-full check2 check2-full cpplint cpplint-full pylint \ + pylint-full mypy mypy-full dmypy dmypy-stop pycharm pycharm-full \ + py_check_prereqs ################################################################################ @@ -1137,10 +1141,11 @@ clion-staging: assets-cmake resources meta $(STAGE_BUILD) -cmake -release build/clion_release # Tell make which of these targets don't represent files. -.PHONY: cmake cmake-build cmake-clean cmake-server cmake-server-build \ - cmake-server-clean cmake-modular-build cmake-modular cmake-modular-binary \ - cmake-modular-clean cmake-modular-server cmake-modular-server-build \ - cmake-modular-server-binary cmake-modular-server-clean clion-staging +.PHONY: cmake cmake-build cmake-clean cmake-server cmake-server-build \ + cmake-server-clean cmake-modular-build cmake-modular \ + cmake-modular-binary cmake-modular-clean cmake-modular-server \ + cmake-modular-server-build cmake-modular-server-binary \ + cmake-modular-server-clean clion-staging ################################################################################ diff --git a/config/projectconfig.json b/config/projectconfig.json index 3cd1482b..52789db5 100644 --- a/config/projectconfig.json +++ b/config/projectconfig.json @@ -18,6 +18,10 @@ "src/ballistica/base/platform/oculus/main_rift.cc", "src/ballistica/core/platform/android/android_gl3.c" ], + "default_app_modes": [ + "bascenev1.SceneV1AppMode", + "babase.EmptyAppMode" + ], "efrocache_repository_url": "https://files.ballistica.net/cache/ba1", "name": "BallisticaKit", "public": true, diff --git a/src/assets/ba_data/python/babase/_app.py b/src/assets/ba_data/python/babase/_app.py index 339759a0..bb2c2fd1 100644 --- a/src/assets/ba_data/python/babase/_app.py +++ b/src/assets/ba_data/python/babase/_app.py @@ -97,19 +97,16 @@ class App: SHUTTING_DOWN = 6 class DefaultAppModeSelector(AppModeSelector): - """Decides which app modes to use to handle intents. + """Decides which AppModes to use to handle AppIntents. - The behavior here is generated by the project updater based on - the feature-sets present in the project. Spinoff projects can - also inject their own behavior by replacing the text - '__GOOD_PLACE_FOR_CUSTOM_SPINOFF_LOGIC__' with their own code - through spinoff filtering. + This default version is generated by the project updater based + on the 'default_app_modes' value in the projectconfig. - It is also possible to modify mode selection behavior by writing - a custom AppModeSelector class and replacing app.mode_selector - with an instance of it. This is a good way to go if you are - modifying app behavior with a plugin instead of in a spinoff - project. + It is also possible to modify app mode selection behavior by + setting app.mode_selector to an instance of a custom + AppModeSelector subclass. This is a good way to go if you are + modifying app behavior dynamically via a plugin instead of + statically in a spinoff project. """ def app_mode_for_intent( @@ -117,16 +114,12 @@ class App: ) -> type[AppMode] | None: # pylint: disable=cyclic-import - # __GOOD_PLACE_FOR_CUSTOM_SPINOFF_LOGIC__ - # __DEFAULT_APP_MODE_SELECTION_BEGIN__ # This section generated by batools.appmodule; do not edit. - # Hmm; need to think about how we auto-construct this; how - # should we determine which app modes to check and in what - # order? + # Ask our default app modes to handle it. + # (based on 'default_app_modes' in projectconfig). import bascenev1 - import babase if bascenev1.SceneV1AppMode.can_handle_intent(intent): @@ -135,7 +128,7 @@ class App: if babase.EmptyAppMode.can_handle_intent(intent): return babase.EmptyAppMode - raise RuntimeError(f'No handler found for intent {type(intent)}.') + return None # __DEFAULT_APP_MODE_SELECTION_END__ @@ -246,12 +239,6 @@ class App: @mode_selector.setter def mode_selector(self, selector: babase.AppModeSelector) -> None: - # Don't allow overriding this until after we've initially set it. - if self._mode_selector is None: - raise RuntimeError( - 'mode_selector cannot be used until the app reaches' - ' the running state.' - ) self._mode_selector = selector # __FEATURESET_APP_SUBSYSTEM_PROPERTIES_BEGIN__ @@ -332,10 +319,13 @@ class App: _babase.run_app() def threadpool_submit_no_wait(self, call: Callable[[], Any]) -> None: - """Submit work to our threadpool and log any errors. + """Submit a call to the app threadpool where result is not needed. - Use this when you want to run something asynchronously but don't - intend to call result() on it to handle errors/etc. + Normally, doing work in a thread-pool involves creating a future + and waiting for its result, which is an important step because it + propagates any Exceptions raised by the submitted work. When the + result in not important, however, this call can be used. The app + will log any exceptions that occur. """ fut = self.threadpool.submit(call) fut.add_done_callback(self._threadpool_no_wait_done) @@ -635,9 +625,10 @@ class App: # Let our native layer know. _babase.on_app_running() - # Set a default app-mode-selector. Plugins can then override - # this if they want in the on_app_running callback below. - self._mode_selector = self.DefaultAppModeSelector() + # Set a default app-mode-selector if none has been set yet + # by a plugin or whatnot. + if self._mode_selector is None: + self._mode_selector = self.DefaultAppModeSelector() # Inform all app subsystems in the same order they were # registered. Operate on a copy here because subsystems can diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py index d5068fca..3413bd9b 100644 --- a/src/assets/ba_data/python/baenv.py +++ b/src/assets/ba_data/python/baenv.py @@ -52,7 +52,7 @@ if TYPE_CHECKING: # Build number and version of the ballistica binary we expect to be # using. -TARGET_BALLISTICA_BUILD = 21303 +TARGET_BALLISTICA_BUILD = 21306 TARGET_BALLISTICA_VERSION = '1.7.28' diff --git a/src/ballistica/base/base.cc b/src/ballistica/base/base.cc index 6a3b61e4..0d931da8 100644 --- a/src/ballistica/base/base.cc +++ b/src/ballistica/base/base.cc @@ -718,7 +718,10 @@ auto BaseFeatureSet::IsAppStarted() const -> bool { return app_started_; } auto BaseFeatureSet::ShutdownSuppressBegin() -> bool { std::scoped_lock lock(shutdown_suppress_lock_); - if (!shutdown_suppress_disallowed_) { + + // Once shutdown has begun, we no longer allow things that would + // suppress it. Tell the caller to abort what they're trying to do. + if (shutdown_suppress_disallowed_) { return false; } shutdown_suppress_count_++; diff --git a/src/ballistica/shared/ballistica.cc b/src/ballistica/shared/ballistica.cc index 6c7019e6..f2c2308c 100644 --- a/src/ballistica/shared/ballistica.cc +++ b/src/ballistica/shared/ballistica.cc @@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int { namespace ballistica { // These are set automatically via script; don't modify them here. -const int kEngineBuildNumber = 21303; +const int kEngineBuildNumber = 21306; const char* kEngineVersion = "1.7.28"; const int kEngineApiVersion = 8; diff --git a/tools/batools/appmodule.py b/tools/batools/appmodule.py index 2f86ce9d..c0cebc3f 100755 --- a/tools/batools/appmodule.py +++ b/tools/batools/appmodule.py @@ -21,6 +21,7 @@ def generate_app_module( # pylint: disable=too-many-locals # pylint: disable=too-many-branches + # pylint: disable=too-many-statements import textwrap from efrotools import replace_section @@ -154,15 +155,21 @@ def generate_app_module( ) # Generate default app-mode-selection logic. + # TODO - make this customizable via project settings or whatnot. contents = ( - '# Hmm; need to think about how we auto-construct this; how\n' - '# should we determine which app modes to check and in what\n' - '# order?\n' + '# Ask our default app modes to handle it.\n' + "# (based on 'default_app_modes' in projectconfig).\n" ) + imports: list[str] = [] if 'scene_v1' in fsets: - contents += 'import bascenev1\n\n' + imports.append('bascenev1') if 'base' in fsets: - contents += 'import babase\n\n' + imports.append('babase') + + for imp in imports: + contents += f'import {imp}\n' + + contents += '\n' if 'scene_v1' in fsets: contents += ( @@ -174,10 +181,7 @@ def generate_app_module( 'if babase.EmptyAppMode.can_handle_intent(intent):\n' ' return babase.EmptyAppMode\n\n' ) - contents += ( - "raise RuntimeError(f'No handler found for" - " intent {type(intent)}.')\n" - ) + contents += 'return None\n' indent = ' ' out = replace_section( diff --git a/tools/batools/spinoff/_main.py b/tools/batools/spinoff/_main.py index 8313701e..8c833cc6 100644 --- a/tools/batools/spinoff/_main.py +++ b/tools/batools/spinoff/_main.py @@ -563,58 +563,59 @@ def _print_available_commands() -> None: print( ( 'Available commands:\n' - f' {bgn}status{end} ' + f' {bgn}status{end} ' 'Print list of files update would affect.\n' - f' {bgn}diff{end} ' + f' {bgn}diff{end} ' 'Print diffs for what update would do.\n' - f' {bgn}update{end} ' + f' {bgn}update{end} ' 'Sync all spinoff files from src project.\n' - f' {bgn}check{end} ' + f' {bgn}check{end} ' 'Make sure everything is kosher.\n' - f' {bgn}clean{end} ' + f' {bgn}clean{end} ' 'Remove all spinoff files' ' (minus a few exceptions such\n' - ' as .gitignore).\n' - f' {bgn}cleanlist{end} ' + ' as .gitignore).\n' + f' {bgn}cleanlist{end} ' 'Shows what clean would do.\n' - f' {bgn}override [file...]{end} ' + f' {bgn}override [file...]{end} ' 'Remove files from spinoff, leaving local copies in place.\n' - f' {bgn}backport [file]{end} ' + f' {bgn}backport [file]{end} ' 'Help get changes to spinoff dst files back to src.\n' - f' {bgn}create [name, path]{end} ' + f' {bgn}create [name, path]{end} ' 'Create a new spinoff project based on this src one.\n' - ' Name should be passed in CamelCase form.\n' - ' By default, includes all feature-sets from' + ' Name should be passed in CamelCase form.\n' + ' By default, includes all feature-sets from' ' src.\n' - ' Pass --featuresets a,b to specify included' + ' Pass --featuresets a,b to specify included' ' feature-sets.\n' - " Use 'none' or an empty string for no" + " Use 'none' or an empty string for no" ' featuresets.\n' - ' Pass --noninteractive to suppress help' + ' Pass --noninteractive to suppress help' ' messages.\n' - ' By default, the spinoff project will' + ' By default, the spinoff project will' ' directly access this\n' - ' parent project via a local symlink. To' + ' parent project via a local symlink. To' ' instead set up a\n' - ' git submodule at \'submodules/ballistica\'' + ' git submodule at \'submodules/ballistica\'' ' in the spinoff\n' - ' project, pass --submodule-parent.\n' - f' {bgn}add-submodule-parent{end} Adds a git submodule parent' + ' project, pass --submodule-parent.\n' + f' {bgn}add-submodule-parent{end} Adds a git submodule parent' ' to an already existing dst\n' - ' project in the current directory.' + ' project in the current directory.' ' The same can be\n' - ' achieved by passing --submodule-parent to' + ' achieved by passing --submodule-parent to' ' the \'create\'\n' - ' command.\n' - f' {bgn}fset-list{end} ' + ' command.\n' + f' {bgn}fset-list{end} ' 'List featuresets present in the current project.\n' - f' {bgn}fset-copy [src, dst]{end} Copy feature-set src to dst' + f' {bgn}fset-copy [src, dst]{end} Copy feature-set src to dst' ' in the current project.\n' - ' Replaces variations of src feature-set' - ' name with equivalent from dst, though may need\n' - ' some manual correction afterwards to be' + ' Replaces variations of src feature-set' + ' name with\n' + ' equivalent from dst, though may need\n' + ' some manual correction afterwards to be' ' functional.\n' - f' {bgn}fset-delete [name]{end} Delete a feature-set from the' + f' {bgn}fset-delete [name]{end} Delete a feature-set from the' ' current project.' ), file=sys.stderr, diff --git a/tools/efrotools/__init__.py b/tools/efrotools/__init__.py index 501cd1a5..93ae8e54 100644 --- a/tools/efrotools/__init__.py +++ b/tools/efrotools/__init__.py @@ -183,13 +183,13 @@ def get_public_license(style: str) -> str: def readfile(path: str | Path) -> str: - """Read a text file and return a str.""" + """Read a utf-8 text file into a string.""" with open(path, encoding='utf-8') as infile: return infile.read() def writefile(path: str | Path, txt: str) -> None: - """Write a string to a file.""" + """Write a string to a utf-8 text file.""" with open(path, 'w', encoding='utf-8') as outfile: outfile.write(txt) diff --git a/tools/efrotools/pybuild.py b/tools/efrotools/pybuild.py index 4796d540..c01e4af5 100644 --- a/tools/efrotools/pybuild.py +++ b/tools/efrotools/pybuild.py @@ -9,35 +9,55 @@ import os import subprocess from enum import Enum from dataclasses import dataclass -from typing import TYPE_CHECKING from efrotools import readfile, writefile, replace_exact -if TYPE_CHECKING: - pass - # Python version we build here (not necessarily same as we use in repo). PY_VER_ANDROID = '3.11' -PY_VER_EXACT_ANDROID = '3.11.4' +PY_VER_EXACT_ANDROID = '3.11.5' PY_VER_APPLE = '3.11' -PY_VER_EXACT_APPLE = '3.11.3' +PY_VER_EXACT_APPLE = '3.11.5' + +# Can bump these up to whatever the min we need is. Though perhaps +# leaving them at what the repo uses would lead to fewer build issues. +VERSION_MIN_MACOS = '10.15' +VERSION_MIN_IOS = '12.0' +VERSION_MIN_TVOS = '9.0' # I occasionally run into openssl problems (particularly on arm systems) # so keeping exact control of the versions we're building here to try # and minimize it. +# # Earlier I ran into an issue with android builds testing while OpenSSL -# was probing for ARMV7_TICK instruction presence (see android_patch_ssl here), -# and more recently I'm seeing a similar thing in 3.1.0 with arm_v8_sve_probe -# on mac. Ugh. +# was probing for ARMV7_TICK instruction presence (see android_patch_ssl +# here), and more recently I'm seeing a similar thing in 3.1.0 with +# arm_v8_sve_probe on mac. Ugh. +# # See https://stackoverflow.com/questions/74059978/ # why-is-lldb-generating-exc-bad-instruction-with-user-compiled-library-on-macos -OPENSSL_VER_APPLE = '3.0.8' -OPENSSL_VER_ANDROID = '3.0.8' +# +# For now will try to ride out this LTS version as long as possible. +OPENSSL_VER_APPLE = '3.0.10' +OPENSSL_VER_ANDROID = '3.0.10' +LIBFFI_VER_APPLE = '3.4.4' +BZIP2_VER_APPLE = '1.0.8' +XZ_VER_APPLE = '5.4.4' + +# Android repo doesn't seem to be getting updated much so manually +# bumping various versions to keep things up to date. ZLIB_VER_ANDROID = '1.3' XZ_VER_ANDROID = '5.4.4' +BZIP2_VER_ANDROID = '1.0.8' +GDBM_VER_ANDROID = '1.23' +LIBFFI_VER_ANDROID = '3.4.4' +LIBUUID_VER_ANDROID = ('2.38', '2.38.1') +NCURSES_VER_ANDROID = '6.3' +READLINE_VER_ANDROID = '8.2' +SQLITE_VER_ANDROID = ('2023', '3430000') -# Filenames we prune from Python lib dirs in source repo to cut down on size. +# Filenames we prune from Python lib dirs in source repo to cut down on +# size. PRUNE_LIB_NAMES = [ 'msilib', '__phello__', @@ -75,12 +95,13 @@ def build_apple(arch: str, debug: bool = False) -> None: import platform from efro.error import CleanError - # IMPORTANT; seems we currently wind up building against /usr/local gettext - # stuff. Hopefully the maintainer fixes this, but for now I need to - # remind myself to blow it away while building. - # (via brew remove gettext --ignore-dependencies) - # NOTE: Should check to see if this is still necessary on Apple silicon - # since homebrew stuff is no longer in /usr/local there. + # IMPORTANT; seems we currently wind up building against /usr/local + # gettext stuff. Hopefully the maintainer fixes this, but for now I + # need to remind myself to blow it away while building. (via brew + # remove gettext --ignore-dependencies) + # + # NOTE: Should check to see if this is still necessary on Apple + # silicon since homebrew stuff is no longer in /usr/local there. if bool(False): if ( 'MacBook-Fro' in platform.node() @@ -96,7 +117,7 @@ def build_apple(arch: str, debug: bool = False) -> None: 'NEED TO TEMP-KILL GETTEXT (or set SKIP_GETTEXT_WARNING=1)' ) - builddir = 'build/python_apple_' + arch + ('_debug' if debug else '') + builddir = f'build/python_apple_{arch}' + ('_debug' if debug else '') subprocess.run(['rm', '-rf', builddir], check=True) subprocess.run(['mkdir', '-p', 'build'], check=True) subprocess.run( @@ -110,10 +131,11 @@ def build_apple(arch: str, debug: bool = False) -> None: ) os.chdir(builddir) - # TEMP: Check out a particular commit while the branch head is broken. - # We can actually fix this to use the current one, but something - # broke in the underlying build even on old commits so keeping it - # locked for now... + # TEMP: Check out a particular commit while the branch head is + # broken. We can actually fix this to use the current one, but + # something broke in the underlying build even on old commits so + # keeping it locked for now... + # # run('git checkout bf1ed73d0d5ff46862ba69dd5eb2ffaeff6f19b6') # Grab the branch corresponding to our target python version. @@ -121,30 +143,55 @@ def build_apple(arch: str, debug: bool = False) -> None: txt = readfile('Makefile') - # Turn doc strings on; looks like it only adds a few hundred k. - # txt = replace_exact( - # txt, '--without-doc-strings', '--with-doc-strings', count=2 - # ) + # Sanity check; we don't actually change Python version for these + # builds but we need to make sure exactly what version the repo is + # building (for path purposes and whatnot). + if f'\nPYTHON_VERSION={PY_VER_EXACT_APPLE}\n' not in txt: + raise RuntimeError( + 'Does not look like our PY_VER_EXACT_APPLE matches the repo;' + f' please update it in {__name__}.' + ) - # Customize our minimum version requirements + # Same for ffi version. + if f'\nLIBFFI_VERSION={LIBFFI_VER_APPLE}\n' not in txt: + raise RuntimeError( + 'Does not look like our LIBFFI_VER_APPLE matches the repo;' + f' please update it in {__name__}.' + ) + + # Same for bzip2 version. + if f'\nBZIP2_VERSION={BZIP2_VER_APPLE}\n' not in txt: + raise RuntimeError( + 'Does not look like our BZIP2_VERSION matches the repo;' + f' please update it in {__name__}.' + ) + + # Same for xz version. + if f'\nXZ_VERSION={XZ_VER_APPLE}\n' not in txt: + raise RuntimeError( + 'Does not look like our XZ_VER_APPLE matches the repo;' + f' please update it in {__name__}.' + ) + + # Customize our minimum OS version requirements. txt = replace_exact( txt, 'VERSION_MIN-macOS=10.15\n', - 'VERSION_MIN-macOS=10.15\n', + f'VERSION_MIN-macOS={VERSION_MIN_MACOS}\n', ) txt = replace_exact( txt, 'VERSION_MIN-iOS=12.0\n', - 'VERSION_MIN-iOS=12.0\n', + f'VERSION_MIN-iOS={VERSION_MIN_IOS}\n', ) txt = replace_exact( txt, 'VERSION_MIN-tvOS=9.0\n', - 'VERSION_MIN-tvOS=9.0\n', + f'VERSION_MIN-tvOS={VERSION_MIN_TVOS}\n', ) txt = replace_exact( txt, - 'OPENSSL_VERSION=3.1.0\n', + 'OPENSSL_VERSION=3.1.2\n', f'OPENSSL_VERSION={OPENSSL_VER_APPLE}\n', ) @@ -227,9 +274,10 @@ def build_apple(arch: str, debug: bool = False) -> None: writefile('Makefile', txt) # Ok; let 'er rip. - # (we run these in parallel so limit to 1 job a piece; - # otherwise they inherit the -j12 or whatever from the top level) - # (also this build seems to fail with multiple threads) + # + # (we run these in parallel so limit to 1 job a piece; otherwise + # they inherit the -j12 or whatever from the top level) (also this + # build seems to fail with multiple threads) subprocess.run( [ 'make', @@ -249,7 +297,7 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None: (can be arm, arm64, x86, or x86_64) """ - builddir = 'build/python_android_' + arch + ('_debug' if debug else '') + builddir = f'build/python_android_{arch}' + ('_debug' if debug else '') subprocess.run(['rm', '-rf', builddir], check=True) subprocess.run(['mkdir', '-p', 'build'], check=True) subprocess.run( @@ -310,6 +358,72 @@ def build_android(rootdir: str, arch: str, debug: bool = False) -> None: count=1, ) + # Set specific BZip2 version. + ftxt = replace_exact( + ftxt, + "source = 'https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz'", + f'source = ' + f"'https://sourceware.org/pub/bzip2/bzip2-{BZIP2_VER_ANDROID}.tar.gz'", + count=1, + ) + + # Set specific GDBM version. + ftxt = replace_exact( + ftxt, + "source = 'https://ftp.gnu.org/gnu/gdbm/gdbm-1.23.tar.gz'", + "source = 'https://ftp.gnu.org/" + f"gnu/gdbm/gdbm-{GDBM_VER_ANDROID}.tar.gz'", + count=1, + ) + + # Set specific libffi version. + ftxt = replace_exact( + ftxt, + "source = 'https://github.com/libffi/libffi/releases/" + "download/v3.4.4/libffi-3.4.4.tar.gz'", + "source = 'https://github.com/libffi/libffi/releases/" + f"download/v{LIBFFI_VER_ANDROID}/libffi-{LIBFFI_VER_ANDROID}.tar.gz'", + ) + + # Set specific LibUUID version. + ftxt = replace_exact( + ftxt, + "source = 'https://mirrors.edge.kernel.org/pub/linux/utils/" + "util-linux/v2.38/util-linux-2.38.1.tar.xz'", + "source = 'https://mirrors.edge.kernel.org/pub/linux/utils/" + f'util-linux/v{LIBUUID_VER_ANDROID[0]}/' + f"util-linux-{LIBUUID_VER_ANDROID[1]}.tar.xz'", + count=1, + ) + + # Set specific NCurses version. + ftxt = replace_exact( + ftxt, + "source = 'https://ftp.gnu.org/gnu/ncurses/ncurses-6.3.tar.gz'", + "source = 'https://ftp.gnu.org/gnu/ncurses/" + f"ncurses-{NCURSES_VER_ANDROID}.tar.gz'", + count=1, + ) + + # Set specific ReadLine version. + ftxt = replace_exact( + ftxt, + "source = 'https://ftp.gnu.org/gnu/readline/readline-8.2.tar.gz'", + "source = 'https://ftp.gnu.org/gnu/readline/" + f"readline-{READLINE_VER_ANDROID}.tar.gz'", + count=1, + ) + + # Set specific SQLite version. + ftxt = replace_exact( + ftxt, + "source = 'https://sqlite.org/2022/sqlite-autoconf-3390400.tar.gz'", + "source = 'https://sqlite.org/" + f'{SQLITE_VER_ANDROID[0]}/' + f"sqlite-autoconf-{SQLITE_VER_ANDROID[1]}.tar.gz'", + count=1, + ) + # Give ourselves a handle to patch the OpenSSL build. ftxt = replace_exact( ftxt, @@ -358,11 +472,11 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None: assert ' ' not in python_dir - # Use the shiny new Setup.stdlib setup (Sounds like this will be default - # in the future?). It looks like by mucking with Setup.stdlib.in we can - # make pretty minimal changes to get the results we want without having - # to inject platform-specific linker flags and whatnot like we had to - # previously. + # Use the shiny new Setup.stdlib setup (Sounds like this will be + # default in the future?). It looks like by mucking with + # Setup.stdlib.in we can make pretty minimal changes to get the + # results we want without having to inject platform-specific linker + # flags and whatnot like we had to previously. subprocess.run( f'cd {python_dir}/Modules && ln -sf ./Setup.stdlib ./Setup.local', shell=True, @@ -384,6 +498,7 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None: # This list should contain all possible compiled modules to start. # If any .so files are coming out of builds or anything unrecognized # is showing up in the final Setup.local or the build, add it here. + # # TODO(ericf): could automate a warning for at least the last part # of that. cmodules = { @@ -515,9 +630,9 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None: should_enable = cmodule in enables if not should_enable: - # If something is enabled but we don't want it, comment it out. - # Also stick all disabled stuff in a *disabled* section at the - # bottom so it won't get built even as shared. + # If something is enabled but we don't want it, comment it + # out. Also stick all disabled stuff in a *disabled* section + # at the bottom so it won't get built even as shared. if is_enabled: lines[indices[0]] = f'#{line}' disable_at_end.add(cmodule) @@ -525,8 +640,9 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None: # Ok; its enabled and shouldn't be. What to do... if bool(False): # Uncomment the line to enable it. - # UPDATE: Seems this doesn't work; will have to figure out - # the right way to get things like _ctypes compiling + # + # UPDATE: Seems this doesn't work; will have to figure + # out the right way to get things like _ctypes compiling # statically. lines[indices[0]] = replace_exact( line, f'#{linebegin}', linebegin, count=1 @@ -548,20 +664,23 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None: # '#*static*\n', # ) - # Now for the one remaining ULTRA-HACKY bit: getting _ctypes building - # statically. + # Now for the one remaining ULTRA-HACKY bit: getting _ctypes + # building statically. + # # It seems that as of 3.11 it is not possible to do this through # Setup.stdlib.in like we do with our other stuff, as the line is - # commented out and we get errors if we change that. Looks like - # its not commented out anymore in 3.12 so we'll have to revisit - # this next year, but for now... hacks! + # commented out and we get errors if we change that. Looks like its + # not commented out anymore in 3.12 so we'll have to revisit this + # next year, but for now... hacks! - # To get this working for now we can dump an exact set of build flags - # for _ctypes into the Setup.stdlib.in. We just need to provide those - # per-platform. So, to get those: + # To get this working for now we can dump an exact set of build + # flags for _ctypes into the Setup.stdlib.in. We just need to + # provide those per-platform. So, to get those: + # # - Run 'vanilla' ios/android/etc Python builds which generate .so versions # - Look for the flags in the compiler command lines for those .c files # - Stuff those flags in here for the associated platform. + # if baseplatform == 'android': ftxt = replace_exact( ftxt, @@ -620,9 +739,9 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None: ' _ctypes/malloc_closure.c' ' -I_ctypes/darwin' f' -I$(srcdir)/../../../../merge/{archos}' - f'/{archbase}/libffi-3.4.2/include' + f'/{archbase}/libffi-{LIBFFI_VER_APPLE}/include' f' -L$(srcdir)/../../../../merge/{archos}' - f'/{archbase}/libffi-3.4.2/lib' + f'/{archbase}/libffi-{LIBFFI_VER_APPLE}/lib' ' -DUSING_MALLOC_CLOSURE_DOT_C' ' -DHAVE_FFI_PREP_CIF_VAR=1' ' -DHAVE_FFI_PREP_CLOSURE_LOC=1 -DHAVE_FFI_CLOSURE_ALLOC=1' @@ -636,6 +755,7 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None: # Seems makesetup still has a bug where *any* line containing an equals # gets interpreted as a global DEF instead of a target, which means our # custom _ctypes lines above get ignored. Ugh. + # # To fix it we need to revert the *=* case to what it apparently used to # be: [A-Z]*=*. I wonder why this got changed and how has it not broken # tons of stuff? Maybe I'm missing something. @@ -1093,11 +1213,13 @@ def gather(do_android: bool, do_apple: bool) -> None: ), f'{bases2[base]}/openssl-{OPENSSL_VER_APPLE}/lib/libssl.a', f'{bases2[base]}/openssl-{OPENSSL_VER_APPLE}/lib/libcrypto.a', - f'{bases2[base]}/xz-5.4.2/lib/liblzma.a', - f'{bases2[base]}/bzip2-1.0.8/lib/libbz2.a', + f'{bases2[base]}/xz-{XZ_VER_APPLE}/lib/liblzma.a', + f'{bases2[base]}/bzip2-{BZIP2_VER_APPLE}/lib/libbz2.a', ] if base != 'mac': - out.append(f'{bases2[base]}/libffi-3.4.2/lib/libffi.a') + out.append( + f'{bases2[base]}/libffi-{LIBFFI_VER_APPLE}/lib/libffi.a' + ) return out def _android_libs(base: str) -> list[str]: