def prebuild_arch(self, arch): super(AndroidRecipe, self).prebuild_arch(arch) ctx_bootstrap = self.ctx.bootstrap.name # define macros for Cython, C, Python tpxi = 'DEF {} = {}\n' th = '#define {} {}\n' tpy = '{} = {}\n' # make sure bootstrap name is in unicode if isinstance(ctx_bootstrap, bytes): ctx_bootstrap = ctx_bootstrap.decode('utf-8') bootstrap = bootstrap_name = ctx_bootstrap is_sdl2 = bootstrap_name in ('sdl2', 'sdl2python3', 'sdl2_gradle') is_webview = bootstrap_name in ('webview',) if is_sdl2 or is_webview: if is_sdl2: bootstrap = 'sdl2' java_ns = u'org.kivy.android' jni_ns = u'org/kivy/android' else: logger.error(( 'unsupported bootstrap for android recipe: {}' ''.format(bootstrap_name) )) exit(1) config = { 'BOOTSTRAP': bootstrap, 'IS_SDL2': int(is_sdl2), 'PY2': int(will_build('python2')(self)), 'JAVA_NAMESPACE': java_ns, 'JNI_NAMESPACE': jni_ns, } # create config files for Cython, C and Python with ( current_directory(self.get_build_dir(arch.arch))), ( open(join('android', 'config.pxi'), 'w')) as fpxi, ( open(join('android', 'config.h'), 'w')) as fh, ( open(join('android', 'config.py'), 'w')) as fpy: for key, value in config.items(): fpxi.write(tpxi.format(key, repr(value))) fpy.write(tpy.format(key, repr(value))) fh.write(th.format( key, value if isinstance(value, int) else '"{}"'.format(value) )) self.config_env[key] = str(value) if is_sdl2: fh.write('JNIEnv *SDL_AndroidGetJNIEnv(void);\n') fh.write( '#define SDL_ANDROID_GetJNIEnv SDL_AndroidGetJNIEnv\n' )
def prebuild_arch(self, arch): super(AndroidRecipe, self).prebuild_arch(arch) tpxi = 'DEF {} = {}\n' th = '#define {} {}\n' tpy = '{} = {}\n' bootstrap = bootstrap_name = self.ctx.bootstrap.name.decode('utf-8') is_sdl2 = bootstrap_name in ('sdl2', 'sdl2python3', 'sdl2_gradle') is_pygame = bootstrap_name in ('pygame', ) is_webview = bootstrap_name in ('webview', ) if is_sdl2 or is_webview: if is_sdl2: bootstrap = 'sdl2' java_ns = u'org.kivy.android' jni_ns = u'org/kivy/android' elif is_pygame: java_ns = 'org.renpy.android' jni_ns = 'org/renpy/android' else: logger.error('unsupported bootstrap for android recipe: {}'.format( bootstrap_name)) exit(1) config = { 'BOOTSTRAP': bootstrap, 'IS_SDL2': int(is_sdl2), 'IS_PYGAME': int(is_pygame), 'PY2': int(will_build('python2')(self)), 'JAVA_NAMESPACE': java_ns, 'JNI_NAMESPACE': jni_ns, } with (current_directory(self.get_build_dir(arch.arch))), (open( join('android', 'config.pxi'), 'w')) as fpxi, (open( join('android', 'config.h'), 'w')) as fh, (open(join('android', 'config.py'), 'w')) as fpy: for key, value in config.items(): fpxi.write(tpxi.format(key, repr(value))) fpy.write(tpy.format(key, repr(value))) fh.write( th.format( key, value if isinstance(value, int) else '"{}"'.format(value))) self.config_env[key] = str(value) if is_sdl2: fh.write('JNIEnv *SDL_AndroidGetJNIEnv(void);\n') fh.write( '#define SDL_ANDROID_GetJNIEnv SDL_AndroidGetJNIEnv\n') elif is_pygame: fh.write('JNIEnv *SDL_ANDROID_GetJNIEnv(void);\n')
class PyjniusRecipe(CythonRecipe): version = 'master' url = 'https://github.com/kivy/pyjnius/archive/{version}.zip' name = 'pyjnius' depends = [('python2', 'python3crystax'), ('sdl2', 'sdl'), 'six'] site_packages_name = 'jnius' patches = [('sdl2_jnienv_getter.patch', will_build('sdl2'))] def postbuild_arch(self, arch): super(PyjniusRecipe, self).postbuild_arch(arch) info('Copying pyjnius java class to classes build dir') with current_directory(self.get_build_dir(arch.arch)): shprint(sh.cp, '-a', join('jnius', 'src', 'org'), self.ctx.javaclass_dir)
def prebuild_arch(self, arch): super(AndroidRecipe, self).prebuild_arch(arch) tpxi = 'DEF {} = {}\n' th = '#define {} {}\n' tpy = '{} = {}\n' bootstrap = bootstrap_name = self.ctx.bootstrap.name is_sdl2 = bootstrap_name in ('sdl2', 'sdl2python3') is_pygame = bootstrap_name in ('pygame',) is_webview = bootstrap_name in ('webview',) if is_sdl2 or is_webview: if is_sdl2: bootstrap = 'sdl2' java_ns = 'org.kivy.android' jni_ns = 'org/kivy/android' elif is_pygame: java_ns = 'org.renpy.android' jni_ns = 'org/renpy/android' else: logger.error('unsupported bootstrap for android recipe: {}'.format(bootstrap_name)) exit(1) config = { 'BOOTSTRAP': bootstrap, 'IS_SDL2': int(is_sdl2), 'IS_PYGAME': int(is_pygame), 'PY2': int(will_build('python2')(self)), 'JAVA_NAMESPACE': java_ns, 'JNI_NAMESPACE': jni_ns, } with current_directory(self.get_build_dir(arch.arch)): with open(join('android', 'config.pxi'), 'w') as fpxi: with open(join('android', 'config.h'), 'w') as fh: with open(join('android', 'config.py'), 'w') as fpy: for key, value in config.items(): fpxi.write(tpxi.format(key, repr(value))) fpy.write(tpy.format(key, repr(value))) fh.write(th.format(key, value if isinstance(value, int) else '"{}"'.format(value))) self.config_env[key] = str(value) if is_sdl2: fh.write('JNIEnv *SDL_AndroidGetJNIEnv(void);\n') fh.write('#define SDL_ANDROID_GetJNIEnv SDL_AndroidGetJNIEnv\n') elif is_pygame: fh.write('JNIEnv *SDL_ANDROID_GetJNIEnv(void);\n')
class PyjniusRecipe(CythonRecipe): # "6553ad4" is one commit after last release (1.2.0) # it fixes method resolution, required for resolving requestPermissions() version = '6553ad4' url = 'https://github.com/kivy/pyjnius/archive/{version}.zip' name = 'pyjnius' depends = [('genericndkbuild', 'sdl2', 'sdl'), 'six'] site_packages_name = 'jnius' patches = [('sdl2_jnienv_getter.patch', will_build('sdl2')), ('genericndkbuild_jnienv_getter.patch', will_build('genericndkbuild'))] def get_recipe_env(self, arch): env = super(PyjniusRecipe, self).get_recipe_env(arch) return env def postbuild_arch(self, arch): super(PyjniusRecipe, self).postbuild_arch(arch) info('Copying pyjnius java class to classes build dir') with current_directory(self.get_build_dir(arch.arch)): shprint(sh.cp, '-a', join('jnius', 'src', 'org'), self.ctx.javaclass_dir)