From 257d71239cb4d3531eaaa02db7a75f3df6385ac4 Mon Sep 17 00:00:00 2001 From: kollivier Date: Mon, 23 Jan 2017 12:00:24 -0800 Subject: [PATCH 1/2] Start on a common area for bootstraps, so that different bootstraps can share common code. This is a first step to fixing issue #988. --- pythonforandroid/bootstrap.py | 36 ++++++++++++++++--- .../build/src/org/kamranzafar/jtar/Octal.java | 0 .../org/kamranzafar/jtar/TarConstants.java | 0 .../src/org/kamranzafar/jtar/TarEntry.java | 0 .../src/org/kamranzafar/jtar/TarHeader.java | 0 .../org/kamranzafar/jtar/TarInputStream.java | 0 .../org/kamranzafar/jtar/TarOutputStream.java | 0 .../src/org/kamranzafar/jtar/TarUtils.java | 0 pythonforandroid/toolchain.py | 18 ++++++---- 9 files changed, 42 insertions(+), 12 deletions(-) rename pythonforandroid/bootstraps/{sdl2 => common}/build/src/org/kamranzafar/jtar/Octal.java (100%) rename pythonforandroid/bootstraps/{sdl2 => common}/build/src/org/kamranzafar/jtar/TarConstants.java (100%) rename pythonforandroid/bootstraps/{sdl2 => common}/build/src/org/kamranzafar/jtar/TarEntry.java (100%) rename pythonforandroid/bootstraps/{sdl2 => common}/build/src/org/kamranzafar/jtar/TarHeader.java (100%) rename pythonforandroid/bootstraps/{sdl2 => common}/build/src/org/kamranzafar/jtar/TarInputStream.java (100%) rename pythonforandroid/bootstraps/{sdl2 => common}/build/src/org/kamranzafar/jtar/TarOutputStream.java (100%) rename pythonforandroid/bootstraps/{sdl2 => common}/build/src/org/kamranzafar/jtar/TarUtils.java (100%) diff --git a/pythonforandroid/bootstrap.py b/pythonforandroid/bootstrap.py index d407de1b59..efd8f76ff5 100644 --- a/pythonforandroid/bootstrap.py +++ b/pythonforandroid/bootstrap.py @@ -1,9 +1,11 @@ -from os.path import (join, dirname, isdir, splitext, basename, realpath) -from os import listdir, mkdir +from os.path import (join, dirname, isdir, splitext, basename, realpath, abspath) +from os import listdir, mkdir, walk, sep import sh import glob import json import importlib +import os +import shutil from pythonforandroid.logger import (warning, shprint, info, logger, debug) @@ -12,6 +14,26 @@ from pythonforandroid.recipe import Recipe +def copy_files(src_root, dest_root): + for root, dirnames, filenames in walk(src_root): + for filename in filenames: + subdir = root.replace(src_root, "") + if subdir.startswith(sep): + subdir = subdir[1:] + dest_dir = join(dest_root, subdir) + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + + src_file = join(root, filename) + dest_file = join(dest_dir, filename) + if os.path.isfile(src_file): + if os.path.exists(dest_file): + os.unlink(dest_file) + shutil.copy(src_file, dest_file) + else: + os.makedirs(dest_file) + + class Bootstrap(object): '''An Android project template, containing recipe stuff for compilation and templated fields for APK info. @@ -78,6 +100,9 @@ def get_build_dir(self): def get_dist_dir(self, name): return join(self.ctx.dist_dir, name) + def get_common_dir(self): + return abspath(join(self.bootstrap_dir, "..", 'common')) + @property def name(self): modname = self.__class__.__module__ @@ -87,9 +112,10 @@ def prepare_build_dir(self): '''Ensure that a build dir exists for the recipe. This same single dir will be used for building all different archs.''' self.build_dir = self.get_build_dir() - shprint(sh.cp, '-r', - join(self.bootstrap_dir, 'build'), - self.build_dir) + self.common_dir = self.get_common_dir() + copy_files(join(self.bootstrap_dir, 'build'), self.build_dir) + copy_files(join(self.common_dir, 'build'), self.build_dir) + if self.ctx.symlink_java_src: info('Symlinking java src instead of copying') shprint(sh.rm, '-r', join(self.build_dir, 'src')) diff --git a/pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/Octal.java b/pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/Octal.java similarity index 100% rename from pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/Octal.java rename to pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/Octal.java diff --git a/pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarConstants.java b/pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarConstants.java similarity index 100% rename from pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarConstants.java rename to pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarConstants.java diff --git a/pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarEntry.java b/pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarEntry.java similarity index 100% rename from pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarEntry.java rename to pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarEntry.java diff --git a/pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarHeader.java b/pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarHeader.java similarity index 100% rename from pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarHeader.java rename to pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarHeader.java diff --git a/pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarInputStream.java b/pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarInputStream.java similarity index 100% rename from pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarInputStream.java rename to pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarInputStream.java diff --git a/pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarOutputStream.java b/pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarOutputStream.java similarity index 100% rename from pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarOutputStream.java rename to pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarOutputStream.java diff --git a/pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarUtils.java b/pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarUtils.java similarity index 100% rename from pythonforandroid/bootstraps/sdl2/build/src/org/kamranzafar/jtar/TarUtils.java rename to pythonforandroid/bootstraps/common/build/src/org/kamranzafar/jtar/TarUtils.java diff --git a/pythonforandroid/toolchain.py b/pythonforandroid/toolchain.py index df33b334d4..207197055b 100644 --- a/pythonforandroid/toolchain.py +++ b/pythonforandroid/toolchain.py @@ -141,10 +141,13 @@ def wrapper_func(self, args): user_android_api=self.android_api, user_ndk_ver=self.ndk_version) dist = self._dist + bs = Bootstrap.get_bootstrap(args.bootstrap, ctx) + # recipes rarely change, but during dev, bootstraps can change from + # build to build, so run prepare_bootstrap even if needs_build is false if dist.needs_build: info_notify('No dist exists that meets your requirements, ' 'so one will be built.') - build_dist_from_args(ctx, dist, args) + build_dist_from_args(ctx, dist, args) func(self, args) return wrapper_func @@ -185,15 +188,16 @@ def build_dist_from_args(ctx, dist, args): ctx.dist_name = bs.distribution.name ctx.prepare_bootstrap(bs) - ctx.prepare_dist(ctx.dist_name) + if dist.needs_build: + ctx.prepare_dist(ctx.dist_name) - build_recipes(build_order, python_modules, ctx) + build_recipes(build_order, python_modules, ctx) - ctx.bootstrap.run_distribute() + ctx.bootstrap.run_distribute() - info_main('# Your distribution was created successfully, exiting.') - info('Dist can be found at (for now) {}' - .format(join(ctx.dist_dir, ctx.dist_name))) + info_main('# Your distribution was created successfully, exiting.') + info('Dist can be found at (for now) {}' + .format(join(ctx.dist_dir, ctx.dist_name))) def split_argument_list(l): From 68a04cb1fa3cc9e3d70864413fe817d07e500707 Mon Sep 17 00:00:00 2001 From: kollivier Date: Mon, 23 Jan 2017 12:58:18 -0800 Subject: [PATCH 2/2] Add common to the list of directories to ignore when looking for bootstraps. --- pythonforandroid/bootstrap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pythonforandroid/bootstrap.py b/pythonforandroid/bootstrap.py index efd8f76ff5..1f799314d0 100644 --- a/pythonforandroid/bootstrap.py +++ b/pythonforandroid/bootstrap.py @@ -147,7 +147,7 @@ def run_distribute(self): @classmethod def list_bootstraps(cls): '''Find all the available bootstraps and return them.''' - forbidden_dirs = ('__pycache__', ) + forbidden_dirs = ('__pycache__', 'common') bootstraps_dir = join(dirname(__file__), 'bootstraps') for name in listdir(bootstraps_dir): if name in forbidden_dirs: