From 7e0b403cccd8dd0f2d23e966946fdcfda8db27f9 Mon Sep 17 00:00:00 2001 From: Matthieu Gautier Date: Mon, 28 May 2018 11:18:13 +0200 Subject: [PATCH] Move `run_command` method out of buildEnv class. --- kiwixbuild/buildenv.py | 62 ---------------------------- kiwixbuild/dependencies/base.py | 34 +++++++-------- kiwixbuild/dependencies/ctpp2.py | 4 +- kiwixbuild/dependencies/gumbo.py | 4 +- kiwixbuild/dependencies/libaria2.py | 5 +-- kiwixbuild/toolchains/android_ndk.py | 4 +- kiwixbuild/toolchains/android_sdk.py | 4 +- kiwixbuild/utils.py | 40 ++++++++++++++++++ 8 files changed, 67 insertions(+), 90 deletions(-) diff --git a/kiwixbuild/buildenv.py b/kiwixbuild/buildenv.py index c103a69..edae697 100644 --- a/kiwixbuild/buildenv.py +++ b/kiwixbuild/buildenv.py @@ -34,33 +34,6 @@ class PlatformNeutralEnv: sys.exit("ERROR: meson command not fount") self.mesontest_command = "{} test".format(self.meson_command) - def run_command(self, command, cwd, context, env=None, input=None): - os.makedirs(cwd, exist_ok=True) - if env is None: - env = Defaultdict(str, os.environ) - log = None - try: - if not self.options.verbose: - log = open(context.log_file, 'w') - print("run command '{}'".format(command), file=log) - print("current directory is '{}'".format(cwd), file=log) - print("env is :", file=log) - for k, v in env.items(): - print(" {} : {!r}".format(k, v), file=log) - - kwargs = dict() - if input: - kwargs['stdin'] = subprocess.PIPE - process = subprocess.Popen(command, shell=True, cwd=cwd, env=env, stdout=log or sys.stdout, stderr=subprocess.STDOUT, **kwargs) - if input: - process.communicate(input.encode()) - retcode = process.wait() - if retcode: - raise subprocess.CalledProcessError(retcode, command) - finally: - if log: - log.close() - def detect_platform(self): _platform = platform.system() self.distname = _platform @@ -278,41 +251,6 @@ class BuildEnv: env['PATH'] = ':'.join(bin_dirs + [env['PATH']]) return env - def run_command(self, command, cwd, context, env=None, input=None, cross_env_only=False): - os.makedirs(cwd, exist_ok=True) - cross_compile_env = True - cross_compile_compiler = True - cross_compile_path = True - if context.force_native_build: - cross_compile_env = False - cross_compile_compiler = False - cross_compile_path = False - if cross_env_only: - cross_compile_compiler = False - env = self._set_env(env, cross_compile_env, cross_compile_compiler, cross_compile_path) - log = None - try: - if not self.options.verbose: - log = open(context.log_file, 'w') - print("run command '{}'".format(command), file=log) - print("current directory is '{}'".format(cwd), file=log) - print("env is :", file=log) - for k, v in env.items(): - print(" {} : {!r}".format(k, v), file=log) - - kwargs = dict() - if input: - kwargs['stdin'] = subprocess.PIPE - process = subprocess.Popen(command, shell=True, cwd=cwd, env=env, stdout=log or sys.stdout, stderr=subprocess.STDOUT, **kwargs) - if input: - process.communicate(input.encode()) - retcode = process.wait() - if retcode: - raise subprocess.CalledProcessError(retcode, command) - finally: - if log: - log.close() - def install_packages(self): autoskip_file = pj(self.build_dir, ".install_packages_ok") if self.distname in ('fedora', 'redhat', 'centos'): diff --git a/kiwixbuild/dependencies/base.py b/kiwixbuild/dependencies/base.py index ee9e66d..b7ee722 100644 --- a/kiwixbuild/dependencies/base.py +++ b/kiwixbuild/dependencies/base.py @@ -2,7 +2,7 @@ import subprocess import os import shutil -from kiwixbuild.utils import pj, Context, SkipCommand, extract_archive, Defaultdict, StopBuild +from kiwixbuild.utils import pj, Context, SkipCommand, extract_archive, Defaultdict, StopBuild, run_command from kiwixbuild.versions import main_project_versions, base_deps_versions from kiwixbuild._global import neutralEnv @@ -162,13 +162,13 @@ class GitClone(Source): raise SkipCommand() command = "git clone --depth=1 --branch {} {} {}".format( self.git_ref, self.git_remote, self.source_dir) - neutralEnv('run_command')(command, neutralEnv('source_dir'), context) + run_command(command, neutralEnv('source_dir'), context) def _git_update(self, context): command = "git fetch origin {}".format( self.git_ref) - neutralEnv('run_command')(command, self.git_path, context) - neutralEnv('run_command')("git checkout "+self.git_ref, self.git_path, context) + run_command(command, self.git_path, context) + run_command("git checkout "+self.git_ref, self.git_path, context) def prepare(self): self.command('gitclone', self._git_clone) @@ -190,11 +190,11 @@ class SvnClone(Source): if os.path.exists(self.svn_path): raise SkipCommand() command = "svn checkout {} {}".format(self.svn_remote, self.svn_dir) - neutralEnv('run_command')(command, neutralEnv('source_dir'), context) + run_command(command, neutralEnv('source_dir'), context) def _svn_update(self, context): context.try_skip(self.svn_path) - neutralEnv('run_command')("svn update", self.svn_path, context) + run_command("svn update", self.svn_path, context) def prepare(self): self.command('svncheckout', self._svn_checkout) @@ -294,7 +294,7 @@ class MakeBuilder(Builder): v = v.format(buildEnv=self.buildEnv, env=env) self.configure_env[k[8:]] = v env.update(self.configure_env) - self.buildEnv.run_command(command, self.build_path, context, env=env) + run_command(command, self.build_path, context, buildEnv=self.buildEnv, env=env) def _compile(self, context): context.try_skip(self.build_path) @@ -302,7 +302,7 @@ class MakeBuilder(Builder): make_target=self.make_target, make_option=self.make_option ) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) def _install(self, context): context.try_skip(self.build_path) @@ -310,12 +310,12 @@ class MakeBuilder(Builder): make_install_target=self.make_install_target, make_option=self.make_option ) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) def _make_dist(self, context): context.try_skip(self.build_path) command = "make dist" - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) class CMakeBuilder(MakeBuilder): @@ -347,7 +347,7 @@ class CMakeBuilder(MakeBuilder): v = v.format(buildEnv=self.buildEnv, env=env) self.configure_env[k[8:]] = v env.update(self.configure_env) - self.buildEnv.run_command(command, self.build_path, context, env=env, cross_env_only=True) + run_command(command, self.build_path, context, env=env, buildEnv=self.buildEnv, cross_env_only=True) class MesonBuilder(Builder): @@ -382,11 +382,11 @@ class MesonBuilder(Builder): buildEnv=self.buildEnv, cross_option=cross_option ) - self.buildEnv.run_command(command, self.source_path, context, cross_env_only=True) + run_command(command, self.source_path, context, buildEnv=self.buildEnv, cross_env_only=True) def _compile(self, context): command = "{} -v".format(neutralEnv('ninja_command')) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) def _test(self, context): if ( self.buildEnv.platform_info.build == 'android' @@ -395,15 +395,15 @@ class MesonBuilder(Builder): ): raise SkipCommand() command = "{} --verbose {}".format(neutralEnv('mesontest_command'), self.test_option) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) def _install(self, context): command = "{} -v install".format(neutralEnv('ninja_command')) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) def _make_dist(self, context): command = "{} -v dist".format(neutralEnv('ninja_command')) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) class GradleBuilder(Builder): @@ -428,4 +428,4 @@ class GradleBuilder(Builder): command = command.format( gradle_target=self.gradle_target, gradle_option=self.gradle_option) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) diff --git a/kiwixbuild/dependencies/ctpp2.py b/kiwixbuild/dependencies/ctpp2.py index 4e1410f..4b05b03 100644 --- a/kiwixbuild/dependencies/ctpp2.py +++ b/kiwixbuild/dependencies/ctpp2.py @@ -3,7 +3,7 @@ from .base import ( ReleaseDownload, CMakeBuilder) -from kiwixbuild.utils import Remotefile, pj +from kiwixbuild.utils import Remotefile, pj, run_command class CTPP2(Dependency): name = "ctpp2" @@ -51,4 +51,4 @@ class CTPP2C(CTPP2): ctpp2c=pj(self.build_path, 'ctpp2c'), install_dir=pj(self.buildEnv.install_dir, 'bin') ) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) diff --git a/kiwixbuild/dependencies/gumbo.py b/kiwixbuild/dependencies/gumbo.py index 3d9cbe1..078f0fd 100644 --- a/kiwixbuild/dependencies/gumbo.py +++ b/kiwixbuild/dependencies/gumbo.py @@ -4,7 +4,7 @@ from .base import ( MakeBuilder ) -from kiwixbuild.utils import Remotefile +from kiwixbuild.utils import Remotefile, run_command class Gumbo(Dependency): @@ -18,6 +18,6 @@ class Gumbo(Dependency): def _post_prepare_script(self, context): context.try_skip(self.extract_path) command = "./autogen.sh" - self.buildEnv.run_command(command, self.extract_path, context) + run_command(command, self.extract_path, context) Builder = MakeBuilder diff --git a/kiwixbuild/dependencies/libaria2.py b/kiwixbuild/dependencies/libaria2.py index c64686d..d59e443 100644 --- a/kiwixbuild/dependencies/libaria2.py +++ b/kiwixbuild/dependencies/libaria2.py @@ -4,8 +4,7 @@ from .base import ( MakeBuilder ) -from kiwixbuild.utils import Remotefile -from kiwixbuild._global import neutralEnv +from kiwixbuild.utils import Remotefile, run_command class Aria2(Dependency): name = "libaria2" @@ -21,7 +20,7 @@ class Aria2(Dependency): def _post_prepare_script(self, context): context.try_skip(self.extract_path) command = "autoreconf -i" - neutralEnv('run_command')(command, self.extract_path, context) + run_command(command, self.extract_path, context) class Builder(MakeBuilder): configure_option = "--enable-libaria2 --disable-ssl --disable-bittorent --disable-metalink --without-sqlite3 --without-libxml2 --without-libexpat" diff --git a/kiwixbuild/toolchains/android_ndk.py b/kiwixbuild/toolchains/android_ndk.py index 8a3f3d9..3487f6b 100644 --- a/kiwixbuild/toolchains/android_ndk.py +++ b/kiwixbuild/toolchains/android_ndk.py @@ -2,7 +2,7 @@ import os from .base_toolchain import Toolchain from kiwixbuild.dependencies import ReleaseDownload, Builder -from kiwixbuild.utils import Remotefile, add_execution_right +from kiwixbuild.utils import Remotefile, add_execution_right, run_command pj = os.path.join @@ -91,7 +91,7 @@ class android_ndk(Toolchain): api=self.target.api, install_dir=self.install_path ) - self.buildEnv.run_command(command, self.build_path, context) + run_command(command, self.build_path, context, buildEnv=self.buildEnv) def _fix_permission_right(self, context): context.try_skip(self.build_path) diff --git a/kiwixbuild/toolchains/android_sdk.py b/kiwixbuild/toolchains/android_sdk.py index 7eb8934..753dfb4 100644 --- a/kiwixbuild/toolchains/android_sdk.py +++ b/kiwixbuild/toolchains/android_sdk.py @@ -3,7 +3,7 @@ import shutil from .base_toolchain import Toolchain from kiwixbuild.dependencies import ReleaseDownload, Builder -from kiwixbuild.utils import Remotefile +from kiwixbuild.utils import Remotefile, run_command pj = os.path.join @@ -38,7 +38,7 @@ class android_sdk(Toolchain): # - 8 : Android SDK Build-tools, revision 24.0.1 # - 34 : SDK Platform Android 7.0, API 24, revision 2 # - 162 : Android Support Repository, revision 44 - self.buildEnv.run_command(command, self.install_path, context, input="y\n") + run_command(command, self.install_path, context, input="y\n") def _fix_licenses(self, context): context.try_skip(self.install_path) diff --git a/kiwixbuild/utils.py b/kiwixbuild/utils.py index 34d6ae4..7eb0d29 100644 --- a/kiwixbuild/utils.py +++ b/kiwixbuild/utils.py @@ -10,6 +10,8 @@ import ssl import subprocess from collections import namedtuple, defaultdict +from kiwixbuild._global import neutralEnv + pj = os.path.join g_print_progress = True @@ -221,3 +223,41 @@ def extract_archive(archive_path, dest_dir, topdir=None, name=None): if archive is not None: archive.close() + +def run_command(command, cwd, context, buildEnv=None, env=None, input=None, cross_env_only=False): + os.makedirs(cwd, exist_ok=True) + if env is None: + env = Defaultdict(str, os.environ) + if buildEnv is not None: + cross_compile_env = True + cross_compile_compiler = True + cross_compile_path = True + if context.force_native_build: + cross_compile_env = False + cross_compile_compiler = False + cross_compile_path = False + if cross_env_only: + cross_compile_compiler = False + env = buildEnv._set_env(env, cross_compile_env, cross_compile_compiler, cross_compile_path) + log = None + try: + if not neutralEnv('verbose'): + log = open(context.log_file, 'w') + print("run command '{}'".format(command), file=log) + print("current directory is '{}'".format(cwd), file=log) + print("env is :", file=log) + for k, v in env.items(): + print(" {} : {!r}".format(k, v), file=log) + + kwargs = dict() + if input: + kwargs['stdin'] = subprocess.PIPE + process = subprocess.Popen(command, shell=True, cwd=cwd, env=env, stdout=log or sys.stdout, stderr=subprocess.STDOUT, **kwargs) + if input: + process.communicate(input.encode()) + retcode = process.wait() + if retcode: + raise subprocess.CalledProcessError(retcode, command) + finally: + if log: + log.close()