def build_cython_components(self, arch): info('Cythonizing anything necessary in {}'.format(self.name)) env = self.get_recipe_env(arch) with current_directory(self.get_build_dir(arch.arch)): hostpython = sh.Command(self.ctx.hostpython) shprint(hostpython, '-c', 'import sys; print(sys.path)', _env=env) debug('cwd is {}'.format(realpath(curdir))) info('Trying first build of {} to get cython files: this is ' 'expected to fail'.format(self.name)) manually_cythonise = False try: shprint(hostpython, 'setup.py', 'build_ext', '-v', _env=env, *self.setup_extra_args) except sh.ErrorReturnCode_1: print() info('{} first build failed (as expected)'.format(self.name)) manually_cythonise = True if manually_cythonise: self.cythonize_build(env=env) shprint(hostpython, 'setup.py', 'build_ext', '-v', _env=env, _tail=20, _critical=True, *self.setup_extra_args) else: info('First build appeared to complete correctly, skipping manual' 'cythonising.') self.strip_object_files(arch, env)
def build_arch(self, arch): super(VlcRecipe, self).build_arch(arch) build_dir = self.get_build_dir(arch.arch) port_dir = join(build_dir, 'vlc-port-android') aar = self.aars[arch] if not exists(aar): with current_directory(port_dir): env = dict(environ) env.update({ 'ANDROID_ABI': arch.arch, 'ANDROID_NDK': self.ctx.ndk_dir, 'ANDROID_SDK': self.ctx.sdk_dir, }) info("compiling vlc from sources") debug("environment: {}".format(env)) if not exists(join('bin', 'VLC-debug.apk')): shprint(sh.Command('./compile.sh'), _env=env, _tail=50, _critical=True) shprint(sh.Command('./compile-libvlc.sh'), _env=env, _tail=50, _critical=True) shprint(sh.cp, '-a', aar, self.ctx.aars_dir)
def build_arch(self, arch): env = self.get_recipe_env(arch) env['CFLAGS'] = env['CFLAGS'] + ' -I{jni_path}/png -I{jni_path}/jpeg'.format( jni_path=join(self.ctx.bootstrap.build_dir, 'jni')) env['CFLAGS'] = env['CFLAGS'] + ' -I{jni_path}/sdl/include -I{jni_path}/sdl_mixer'.format( jni_path=join(self.ctx.bootstrap.build_dir, 'jni')) env['CFLAGS'] = env['CFLAGS'] + ' -I{jni_path}/sdl_ttf -I{jni_path}/sdl_image'.format( jni_path=join(self.ctx.bootstrap.build_dir, 'jni')) debug('pygame cflags', env['CFLAGS']) env['LDFLAGS'] = env['LDFLAGS'] + ' -L{libs_path} -L{src_path}/obj/local/{arch} -lm -lz'.format( libs_path=self.ctx.libs_dir, src_path=self.ctx.bootstrap.build_dir, arch=env['ARCH']) env['LDSHARED'] = join(self.ctx.root_dir, 'tools', 'liblink') with current_directory(self.get_build_dir(arch.arch)): info('hostpython is ' + self.ctx.hostpython) hostpython = sh.Command(self.ctx.hostpython) shprint(hostpython, 'setup.py', 'install', '-O2', _env=env, _tail=10, _critical=True) info('strip is ' + env['STRIP']) build_lib = glob.glob('./build/lib*') assert len(build_lib) == 1 print('stripping pygame') shprint(sh.find, build_lib[0], '-name', '*.o', '-exec', env['STRIP'], '{}', ';') python_install_path = join(self.ctx.build_dir, 'python-install') warning('Should remove pygame tests etc. here, but skipping for now')
def download(self): if self.url is None: info('Skipping {} download as no URL is set'.format(self.name)) return url = self.versioned_url ma = match(u'^(.+)#md5=([0-9a-f]{32})$', url) if ma: # fragmented URL? if self.md5sum: raise ValueError( ('Received md5sum from both the {} recipe ' 'and its url').format(self.name)) url = ma.group(1) expected_md5 = ma.group(2) else: expected_md5 = self.md5sum shprint(sh.mkdir, '-p', join(self.ctx.packages_path, self.name)) with current_directory(join(self.ctx.packages_path, self.name)): filename = shprint(sh.basename, url).stdout[:-1].decode('utf-8') do_download = True marker_filename = '.mark-{}'.format(filename) if exists(filename) and isfile(filename): if not exists(marker_filename): shprint(sh.rm, filename) elif expected_md5: current_md5 = md5sum(filename) if current_md5 != expected_md5: debug('* Generated md5sum: {}'.format(current_md5)) debug('* Expected md5sum: {}'.format(expected_md5)) raise ValueError( ('Generated md5sum does not match expected md5sum ' 'for {} recipe').format(self.name)) do_download = False else: do_download = False # If we got this far, we will download if do_download: debug('Downloading {} from {}'.format(self.name, url)) shprint(sh.rm, '-f', marker_filename) self.download_file(self.versioned_url, filename) shprint(sh.touch, marker_filename) if exists(filename) and isfile(filename) and expected_md5: current_md5 = md5sum(filename) if expected_md5 is not None: if current_md5 != expected_md5: debug('* Generated md5sum: {}'.format(current_md5)) debug('* Expected md5sum: {}'.format(expected_md5)) raise ValueError( ('Generated md5sum does not match expected md5sum ' 'for {} recipe').format(self.name)) else: info('{} download already cached, skipping'.format(self.name))
def build_arch(self, arch=None): junk = ['sqlite', 'ssl', 'ffi', 'crypto' ] libs_dir = self.ctx.get_libs_dir(arch.arch) print (sh.ls('-l','{}'.format(libs_dir))) extra_libs = [sh.glob(join('{}', '*' + j + '*').format(libs_dir)) for j in junk] if not extra_libs: info('No junk found.') else: for libs in extra_libs: for lso in libs: warning (lso) python_install_dirs = glob.glob(join(self.ctx.python_installs_dir, '*')) for python_install in python_install_dirs: debug (sh.ls('-l','{}'.format(python_install))) exe_files = sh.glob(join('{}', 'setuptools', '*.exe').format(python_install)) for f in exe_files: print (sh.rm(f))
def build_arch(self, arch): super(VlcRecipe, self).build_arch(arch) build_dir = self.get_build_dir(arch.arch) port_dir = join(build_dir, 'vlc-port-android') aar = self.aars[arch] if not isfile(aar): with current_directory(port_dir): env = dict(environ) env.update({ 'ANDROID_ABI': arch.arch, 'ANDROID_NDK': self.ctx.ndk_dir, 'ANDROID_SDK': self.ctx.sdk_dir, }) info("compiling vlc from sources") debug("environment: {}".format(env)) if not isfile(join('bin', 'VLC-debug.apk')): shprint(sh.Command('./compile.sh'), _env=env, _tail=50, _critical=True) shprint(sh.Command('./compile-libvlc.sh'), _env=env, _tail=50, _critical=True) shprint(sh.cp, '-a', aar, self.ctx.aars_dir)
def download(self): if self.url is None: info('Skipping {} download as no URL is set'.format(self.name)) return url = self.versioned_url shprint(sh.mkdir, '-p', join(self.ctx.packages_path, self.name)) with current_directory(join(self.ctx.packages_path, self.name)): filename = shprint(sh.basename, url).stdout[:-1].decode('utf-8') do_download = True marker_filename = '.mark-{}'.format(filename) if exists(filename) and isfile(filename): if not exists(marker_filename): shprint(sh.rm, filename) elif self.md5sum: current_md5 = md5sum(filename) if current_md5 == self.md5sum: debug('Checked md5sum: downloaded expected content!') do_download = False else: info('Downloaded unexpected content...') debug('* Generated md5sum: {}'.format(current_md5)) debug('* Expected md5sum: {}'.format(self.md5sum)) else: do_download = False info('{} download already cached, skipping' .format(self.name)) # If we got this far, we will download if do_download: debug('Downloading {} from {}'.format(self.name, url)) shprint(sh.rm, '-f', marker_filename) self.download_file(url, filename) shprint(sh.touch, marker_filename) if exists(filename) and isfile(filename) and self.md5sum: current_md5 = md5sum(filename) if self.md5sum is not None: if current_md5 == self.md5sum: debug('Checked md5sum: downloaded expected content!') else: info('Downloaded unexpected content...') debug('* Generated md5sum: {}'.format(current_md5)) debug('* Expected md5sum: {}'.format(self.md5sum)) exit(1)
def _unpack_aar(self, aar, arch): '''Unpack content of .aar bundle and copy to current dist dir.''' with temp_directory() as temp_dir: name = splitext(basename(aar))[0] jar_name = name + '.jar' info("unpack {} aar".format(name)) debug(" from {}".format(aar)) debug(" to {}".format(temp_dir)) shprint(sh.unzip, '-o', aar, '-d', temp_dir) jar_src = join(temp_dir, 'classes.jar') jar_tgt = join('libs', jar_name) debug("copy {} jar".format(name)) debug(" from {}".format(jar_src)) debug(" to {}".format(jar_tgt)) ensure_dir('libs') shprint(sh.cp, '-a', jar_src, jar_tgt) so_src_dir = join(temp_dir, 'jni', arch.arch) so_tgt_dir = join('libs', arch.arch) debug("copy {} .so".format(name)) debug(" from {}".format(so_src_dir)) debug(" to {}".format(so_tgt_dir)) ensure_dir(so_tgt_dir) so_files = glob.glob(join(so_src_dir, '*.so')) for f in so_files: shprint(sh.cp, '-a', f, so_tgt_dir)
def download(self): if self.url is None: info('Skipping {} download as no URL is set'.format(self.name)) return url = self.versioned_url expected_digests = {} for alg in set(hashlib.algorithms_guaranteed) | set( ('md5', 'sha512', 'blake2b')): expected_digest = getattr(self, alg + 'sum') if hasattr(self, alg + 'sum') else None ma = match(u'^(.+)#' + alg + u'=([0-9a-f]{32,})$', url) if ma: # fragmented URL? if expected_digest: raise ValueError(('Received {}sum from both the {} recipe ' 'and its url').format(alg, self.name)) url = ma.group(1) expected_digest = ma.group(2) if expected_digest: expected_digests[alg] = expected_digest shprint(sh.mkdir, '-p', join(self.ctx.packages_path, self.name)) with current_directory(join(self.ctx.packages_path, self.name)): filename = shprint(sh.basename, url).stdout[:-1].decode('utf-8') do_download = True marker_filename = '.mark-{}'.format(filename) if exists(filename) and isfile(filename): if not exists(marker_filename): shprint(sh.rm, filename) else: for alg, expected_digest in expected_digests.items(): current_digest = algsum(alg, filename) if current_digest != expected_digest: debug('* Generated {}sum: {}'.format( alg, current_digest)) debug('* Expected {}sum: {}'.format( alg, expected_digest)) raise ValueError(( 'Generated {0}sum does not match expected {0}sum ' 'for {1} recipe').format(alg, self.name)) do_download = False # If we got this far, we will download if do_download: debug('Downloading {} from {}'.format(self.name, url)) shprint(sh.rm, '-f', marker_filename) self.download_file(self.versioned_url, filename) shprint(sh.touch, marker_filename) if exists(filename) and isfile(filename): for alg, expected_digest in expected_digests.items(): current_digest = algsum(alg, filename) if current_digest != expected_digest: debug('* Generated {}sum: {}'.format( alg, current_digest)) debug('* Expected {}sum: {}'.format( alg, expected_digest)) raise ValueError(( 'Generated {0}sum does not match expected {0}sum ' 'for {1} recipe').format(alg, self.name)) else: info('{} download already cached, skipping'.format(self.name))
def download(self): if self.url is None: info('Skipping {} download as no URL is set'.format(self.name)) return url = self.versioned_url shprint(sh.mkdir, '-p', join(self.ctx.packages_path, self.name)) with current_directory(join(self.ctx.packages_path, self.name)): filename = shprint(sh.basename, url).stdout[:-1].decode('utf-8') do_download = True marker_filename = '.mark-{}'.format(filename) if exists(filename) and isfile(filename): if not exists(marker_filename): shprint(sh.rm, filename) elif self.md5sum: current_md5 = md5sum(filename) if current_md5 == self.md5sum: debug('Checked md5sum: downloaded expected content!') do_download = False else: info('Downloaded unexpected content...') debug('* Generated md5sum: {}'.format(current_md5)) debug('* Expected md5sum: {}'.format(self.md5sum)) else: do_download = False info('{} download already cached, skipping'.format( self.name)) # If we got this far, we will download if do_download: debug('Downloading {} from {}'.format(self.name, url)) shprint(sh.rm, '-f', marker_filename) self.download_file(url, filename) shprint(sh.touch, marker_filename) if exists(filename) and isfile(filename) and self.md5sum: current_md5 = md5sum(filename) if self.md5sum is not None: if current_md5 == self.md5sum: debug( 'Checked md5sum: downloaded expected content!') else: info('Downloaded unexpected content...') debug('* Generated md5sum: {}'.format(current_md5)) debug('* Expected md5sum: {}'.format(self.md5sum)) exit(1)