kivy-ios/recipes/kivent_core/__init__.py
2019-02-07 10:00:22 +01:00

107 lines
3.6 KiB
Python

"""
Author: Lawrence Du
E-mail: larrydu88@gmail.com
"""
from toolchain import CythonRecipe, shprint
import sh
from os.path import join
from os import environ, chdir
import logging
logger = logging.getLogger(__name__)
class KiventCoreRecipe(CythonRecipe):
version = 'master'
url = 'https://github.com/kivy/kivent/archive/{version}.zip'
name = 'kivent_core'
depends = ['libffi','kivy'] #note: unsure if libffi is necessary here
pre_build_ext=False
subbuilddir = False
cythonize = True
pbx_frameworks = ["OpenGLES"] #note: This line may be unnecessary
def get_recipe_env(self, arch):
env = super(KiventCoreRecipe,self).get_recipe_env(arch)
env['CYTHONPATH'] = self.get_recipe(
'kivy', self.ctx).get_build_dir(arch.arch)
return env
def get_build_dir(self,arch, sub=False):
"""
Call this to get the correct build_dir, where setup.py is located which is
actually under modules/core/setup.py
"""
builddir = super(KiventCoreRecipe, self).get_build_dir(str(arch))
if sub or self.subbuilddir:
core_build_dir = join (builddir, 'modules', 'core')
logger.info("Core build directory is located at {}".format(core_build_dir))
return core_build_dir
else:
logger.info("Building in {}".format(builddir))
return builddir
def build_arch(self, arch):
"""
Override build.arch to avoid calling setup.py here (Call it in
install() instead).
"""
self.subbuildir = True
self.cythonize_build()
self.biglink()
self.subbuilddir=False
def install(self):
"""
This method simply builds the command line call for calling
kivent_core/modules/core/setup.py
This constructs the equivalent of the command
"$python2.7 setup.py build_ext install"
only with the environment variables altered for each different architecture
The appropriate version of kivy also needs to be added to the path, and this
differs for each architecture (i386, x86_64, armv7, etc)
Note: This method is called by build_all() in toolchain.py
"""
arch = list(self.filtered_archs)[0]
build_dir = self.get_build_dir(arch.arch,sub=True)
logger.info("Building kivent_core {} in {}".format(arch.arch,build_dir))
chdir(build_dir)
hostpython = sh.Command(self.ctx.hostpython)
#Get the appropriate environment for this recipe (including CYTHONPATH)
#build_env = arch.get_env()
build_env = self.get_recipe_env(arch)
dest_dir = join (self.ctx.dist_dir, "root", "python")
build_env['PYTHONPATH'] = join(dest_dir, 'lib', 'python2.7', 'site-packages')
#Add Architecture specific kivy path for 'import kivy' to PYTHONPATH
arch_kivy_path = self.get_recipe('kivy', self.ctx).get_build_dir(arch.arch)
build_env['PYTHONPATH'] = join( build_env['PYTHONPATH'],':',arch_kivy_path)
#Make sure you call kivent_core/modules/core/setup.py
subdir_path = self.get_build_dir(str(arch),sub=True)
setup_path = join(subdir_path,"setup.py")
#Print out directories for sanity check
logger.info("ENVS", build_env)
logger.info("ROOT",self.ctx.root_dir)
logger.info("BUILD",self.ctx.build_dir)
logger.info("INCLUDE", self.ctx.include_dir)
logger.info("DISTDIR", self.ctx.dist_dir)
logger.info("ARCH KIVY LOC",self.get_recipe('kivy', self.ctx).get_build_dir(arch.arch))
shprint(hostpython, setup_path, "build_ext", "install", _env=build_env)
recipe = KiventCoreRecipe()