From 921f6b209dba37ada26336fcca06ddcdbe1e69b4 Mon Sep 17 00:00:00 2001 From: Mirko Date: Sun, 24 Nov 2019 23:49:08 +0100 Subject: [PATCH] Fixes missing sqlite3 module in python3 (#398) Cleanup --- recipes/python3/ModulesSetup | 12 ++----- recipes/python3/__init__.py | 35 +++++++++++++++++++ .../python3/mock_modules/_sqlite3/__init__.py | 2 ++ .../_sqlite3/_sqlite3.cpython-37m-darwin.so | 1 + .../python3/mock_modules/_sqlite3/_sqlite3.py | 10 ++++++ toolchain.py | 4 +-- 6 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 recipes/python3/mock_modules/_sqlite3/__init__.py create mode 100644 recipes/python3/mock_modules/_sqlite3/_sqlite3.cpython-37m-darwin.so create mode 100644 recipes/python3/mock_modules/_sqlite3/_sqlite3.py diff --git a/recipes/python3/ModulesSetup b/recipes/python3/ModulesSetup index ef5923f..f35d5f6 100644 --- a/recipes/python3/ModulesSetup +++ b/recipes/python3/ModulesSetup @@ -2,9 +2,11 @@ # Static compilation instructions for all binary modules. ##################################################################### +*static* _asyncio _asynciomodule.c _bisect _bisectmodule.c _blake2 _blake2/blake2module.c _blake2/blake2b_impl.c _blake2/blake2s_impl.c +_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' _sqlite/cache.c _sqlite/connection.c _sqlite/cursor.c _sqlite/microprotocols.c _sqlite/module.c _sqlite/prepare_protocol.c _sqlite/row.c _sqlite/statement.c _sqlite/util.c # _bz2 _bz2module.c -I$(srcdir)/../bzip2/include -L$(srcdir)/../Support/BZip2 -lbz2 _codecs_cn cjkcodecs/_codecs_cn.c _codecs_hk cjkcodecs/_codecs_hk.c @@ -37,16 +39,6 @@ _sha3 _sha3/sha3module.c _sha256 sha256module.c _sha512 sha512module.c _socket socketmodule.c -_sqlite3 -I$(srcdir)/Modules/_sqlite -DMODULE_NAME='\"sqlite3\"' -DSQLITE_OMIT_LOAD_EXTENSION -lsqlite3 \ - _sqlite/cache.c \ - _sqlite/connection.c \ - _sqlite/cursor.c \ - _sqlite/microprotocols.c \ - _sqlite/module.c \ - _sqlite/prepare_protocol.c \ - _sqlite/row.c \ - _sqlite/statement.c \ - _sqlite/util.c _ssl _ssl.c -lssl -DUSE_SSL _struct _struct.c array arraymodule.c diff --git a/recipes/python3/__init__.py b/recipes/python3/__init__.py index 318c679..17afeaf 100644 --- a/recipes/python3/__init__.py +++ b/recipes/python3/__init__.py @@ -32,12 +32,39 @@ class Python3Recipe(Recipe): self.append_file("ModulesSetup.mobile", "Modules/Setup.local") self.apply_patch("xcompile.patch") self.set_marker("patched") + + def postbuild_arch(self, arch): + # include _sqlite module to .a + py_arch = arch.arch + if py_arch == "armv7": + py_arch = "arm" + elif py_arch == "arm64": + py_arch = "aarch64" + tmp_folder = "temp.ios-{}-3.7{}".format(py_arch, self.build_dir) + build_env = self.get_build_env(arch) + for o_file in [ + "cache.o", + "cursor.o", + "module.o", + "row.o", + "util.o", + "connection.o", + "microprotocols.o", + "prepare_protocol.o", + "statement.o", + ]: + shprint(sh.Command(build_env['AR']), + "-r", + "{}/{}".format(self.build_dir, self.library), + "{}/build/{}/Modules/_sqlite/{}".format(self.build_dir, tmp_folder, o_file)) + print("Added _sqlite to archive") def get_build_env(self, arch): build_env = arch.get_env() build_env["PATH"] = "{}:{}".format( join(self.ctx.dist_dir, "hostpython3", "bin"), os.environ["PATH"]) + build_env["CFLAGS"] += " --sysroot={}".format(arch.sysroot) return build_env def build_arch(self, arch): @@ -105,7 +132,15 @@ class Python3Recipe(Recipe): _env=build_env) # os.execve("/bin/bash", ["/bin/bash"], os.environ) self.reduce_python() + self.install_mock_modules() + def install_mock_modules(self): + logger.info("Install mock modules") + sqlite3_src = join(self.recipe_dir, 'mock_modules', '_sqlite3') + site_packages_folder = join( + self.ctx.dist_dir, "root", "python3", "lib", "python3.7", "site-packages", "_sqlite3") + shutil.copytree(sqlite3_src, site_packages_folder) + def reduce_python(self): logger.info("Reduce python") oldpwd = os.getcwd() diff --git a/recipes/python3/mock_modules/_sqlite3/__init__.py b/recipes/python3/mock_modules/_sqlite3/__init__.py new file mode 100644 index 0000000..897deeb --- /dev/null +++ b/recipes/python3/mock_modules/_sqlite3/__init__.py @@ -0,0 +1,2 @@ +__version__ = 'kivy-ios' +from ._sqlite3 import * diff --git a/recipes/python3/mock_modules/_sqlite3/_sqlite3.cpython-37m-darwin.so b/recipes/python3/mock_modules/_sqlite3/_sqlite3.cpython-37m-darwin.so new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/recipes/python3/mock_modules/_sqlite3/_sqlite3.cpython-37m-darwin.so @@ -0,0 +1 @@ + diff --git a/recipes/python3/mock_modules/_sqlite3/_sqlite3.py b/recipes/python3/mock_modules/_sqlite3/_sqlite3.py new file mode 100644 index 0000000..f6dc2f9 --- /dev/null +++ b/recipes/python3/mock_modules/_sqlite3/_sqlite3.py @@ -0,0 +1,10 @@ +""" +def __bootstrap__(): + global __bootstrap__, __loader__, __file__ + import sys, pkg_resources, imp + __file__ = pkg_resources.resource_filename(__name__, '_sqlite3.cpython-37m-darwin.so') + __loader__ = None; del __bootstrap__, __loader__ + print("demo") + imp.load_dynamic(__name__,__file__) +__bootstrap__() +""" diff --git a/toolchain.py b/toolchain.py index 65e95c2..62c8e29 100755 --- a/toolchain.py +++ b/toolchain.py @@ -236,9 +236,9 @@ class Arch(object): ] + include_dirs) env["LDFLAGS"] = " ".join([ "-arch", self.arch, - "--sysroot", self.sysroot, + # "--sysroot", self.sysroot, "-L{}/{}".format(self.ctx.dist_dir, "lib"), - "-lsqlite3", + "-L{}/usr/lib".format(self.sysroot), self.version_min ]) return env