from pythonforandroid.toolchain import CythonRecipe, Recipe, shprint, current_directory, ArchARM from os.path import exists, join import sh import glob class KivyRecipe(CythonRecipe): version = '1.10.0' url = 'https://github.com/kivy/kivy/archive/{version}.zip' name = 'kivy' depends = [('sdl2', 'pygame'), 'pyjnius'] call_hostpython_via_targetpython = False # patches = ['setargv.patch'] def cythonize_build(self, env, build_dir='.'): super(KivyRecipe, self).cythonize_build(env, build_dir=build_dir) if not exists(join(build_dir, 'kivy', 'include')): return # If kivy is new enough to use the include dir, copy it # manually to the right location as we bypass this stage of # the build with current_directory(build_dir): build_libs_dirs = glob.glob(join('build', 'lib.*')) for dirn in build_libs_dirs: shprint(sh.cp, '-r', join('kivy', 'include'), join(dirn, 'kivy')) def get_recipe_env(self, arch): env = super(KivyRecipe, self).get_recipe_env(arch) target_python = Recipe.get_recipe('python2', self.ctx).get_build_dir(arch.arch) env['PYTHON_ROOT'] = join(target_python, 'python-install') env['CFLAGS'] += ' -I' + env['PYTHON_ROOT'] + '/include/python2.7' env['LDFLAGS'] += ' -L' + env['PYTHON_ROOT'] + '/lib' + ' -lpython2.7' if 'sdl2' in self.ctx.recipe_build_order: env['USE_SDL2'] = '1' env['KIVY_SDL2_PATH'] = ':'.join([ join(self.ctx.bootstrap.build_dir, 'jni', 'SDL', 'include'), join(self.ctx.bootstrap.build_dir, 'jni', 'SDL2_image'), join(self.ctx.bootstrap.build_dir, 'jni', 'SDL2_mixer'), join(self.ctx.bootstrap.build_dir, 'jni', 'SDL2_ttf'), ]) return env recipe = KivyRecipe()