Make the options global.
This commit is contained in:
parent
041826d0e8
commit
daad1c98c6
|
@ -6,7 +6,6 @@ import argparse
|
||||||
from .dependencies import Dependency
|
from .dependencies import Dependency
|
||||||
from .platforms import PlatformInfo
|
from .platforms import PlatformInfo
|
||||||
from .builder import Builder
|
from .builder import Builder
|
||||||
from .utils import setup_print_progress
|
|
||||||
from . import _global
|
from . import _global
|
||||||
|
|
||||||
def parse_args():
|
def parse_args():
|
||||||
|
@ -65,9 +64,9 @@ def parse_args():
|
||||||
def main():
|
def main():
|
||||||
options = parse_args()
|
options = parse_args()
|
||||||
options.working_dir = os.path.abspath(options.working_dir)
|
options.working_dir = os.path.abspath(options.working_dir)
|
||||||
setup_print_progress(options.show_progress)
|
_global.set_options(options)
|
||||||
neutralEnv = buildenv.PlatformNeutralEnv(options)
|
neutralEnv = buildenv.PlatformNeutralEnv()
|
||||||
_global.set_neutralEnv(neutralEnv)
|
_global.set_neutralEnv(neutralEnv)
|
||||||
builder = Builder(options)
|
builder = Builder()
|
||||||
builder.run()
|
builder.run()
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
from collections import OrderedDict as _OrderedDict
|
from collections import OrderedDict as _OrderedDict
|
||||||
|
|
||||||
_neutralEnv = None
|
_neutralEnv = None
|
||||||
|
_options = None
|
||||||
_target_steps = _OrderedDict()
|
_target_steps = _OrderedDict()
|
||||||
_plt_steps = _OrderedDict()
|
_plt_steps = _OrderedDict()
|
||||||
|
|
||||||
|
@ -11,6 +12,13 @@ def set_neutralEnv(env):
|
||||||
def neutralEnv(what):
|
def neutralEnv(what):
|
||||||
return getattr(_neutralEnv, what)
|
return getattr(_neutralEnv, what)
|
||||||
|
|
||||||
|
def set_options(options):
|
||||||
|
global _options
|
||||||
|
_options = options
|
||||||
|
|
||||||
|
def option(what):
|
||||||
|
return getattr(_options, what)
|
||||||
|
|
||||||
def add_target_step(key, what):
|
def add_target_step(key, what):
|
||||||
_target_steps[key] = what
|
_target_steps[key] = what
|
||||||
|
|
||||||
|
|
|
@ -5,15 +5,15 @@ import platform
|
||||||
|
|
||||||
from .toolchains import Toolchain
|
from .toolchains import Toolchain
|
||||||
from .utils import pj, download_remote, Defaultdict
|
from .utils import pj, download_remote, Defaultdict
|
||||||
from ._global import neutralEnv
|
from ._global import neutralEnv, option
|
||||||
|
|
||||||
|
|
||||||
class PlatformNeutralEnv:
|
class PlatformNeutralEnv:
|
||||||
def __init__(self, options):
|
def __init__(self):
|
||||||
self.options = options
|
self.working_dir = option('working_dir')
|
||||||
self.source_dir = pj(options.working_dir, "SOURCE")
|
self.source_dir = pj(self.working_dir, "SOURCE")
|
||||||
self.archive_dir = pj(options.working_dir, "ARCHIVE")
|
self.archive_dir = pj(self.working_dir, "ARCHIVE")
|
||||||
self.toolchain_dir = pj(options.working_dir, "TOOLCHAINS")
|
self.toolchain_dir = pj(self.working_dir, "TOOLCHAINS")
|
||||||
self.log_dir = pj(self.working_dir, 'LOGS')
|
self.log_dir = pj(self.working_dir, 'LOGS')
|
||||||
for d in (self.source_dir,
|
for d in (self.source_dir,
|
||||||
self.archive_dir,
|
self.archive_dir,
|
||||||
|
@ -47,7 +47,7 @@ class PlatformNeutralEnv:
|
||||||
|
|
||||||
def download(self, what, where=None):
|
def download(self, what, where=None):
|
||||||
where = where or self.archive_dir
|
where = where or self.archive_dir
|
||||||
download_remote(what, where, not self.options.no_cert_check)
|
download_remote(what, where)
|
||||||
|
|
||||||
def _detect_ninja(self):
|
def _detect_ninja(self):
|
||||||
for n in ['ninja', 'ninja-build']:
|
for n in ['ninja', 'ninja-build']:
|
||||||
|
@ -71,15 +71,12 @@ class PlatformNeutralEnv:
|
||||||
if retcode == 0:
|
if retcode == 0:
|
||||||
return n
|
return n
|
||||||
|
|
||||||
def __getattr__(self, name):
|
|
||||||
return getattr(self.options, name)
|
|
||||||
|
|
||||||
|
|
||||||
class BuildEnv:
|
class BuildEnv:
|
||||||
def __init__(self, platformInfo):
|
def __init__(self, platformInfo):
|
||||||
build_dir = "BUILD_{}".format(platformInfo.name)
|
build_dir = "BUILD_{}".format(platformInfo.name)
|
||||||
self.platformInfo = platformInfo
|
self.platformInfo = platformInfo
|
||||||
self.build_dir = pj(neutralEnv('working_dir'), build_dir)
|
self.build_dir = pj(option('working_dir'), build_dir)
|
||||||
self.install_dir = pj(self.build_dir, "INSTALL")
|
self.install_dir = pj(self.build_dir, "INSTALL")
|
||||||
self.log_dir = pj(self.build_dir, 'LOGS')
|
self.log_dir = pj(self.build_dir, 'LOGS')
|
||||||
for d in (self.build_dir,
|
for d in (self.build_dir,
|
||||||
|
@ -87,7 +84,7 @@ class BuildEnv:
|
||||||
self.log_dir):
|
self.log_dir):
|
||||||
os.makedirs(d, exist_ok=True)
|
os.makedirs(d, exist_ok=True)
|
||||||
|
|
||||||
self.libprefix = neutralEnv('libprefix') or self._detect_libdir()
|
self.libprefix = option('libprefix') or self._detect_libdir()
|
||||||
|
|
||||||
def clean_intermediate_directories(self):
|
def clean_intermediate_directories(self):
|
||||||
for subdir in os.listdir(self.build_dir):
|
for subdir in os.listdir(self.build_dir):
|
||||||
|
@ -99,9 +96,6 @@ class BuildEnv:
|
||||||
else:
|
else:
|
||||||
os.remove(subpath)
|
os.remove(subpath)
|
||||||
|
|
||||||
def __getattr__(self, name):
|
|
||||||
return _global.neutralEnv(name)
|
|
||||||
|
|
||||||
def _is_debianlike(self):
|
def _is_debianlike(self):
|
||||||
return os.path.isfile('/etc/debian_version')
|
return os.path.isfile('/etc/debian_version')
|
||||||
|
|
||||||
|
|
|
@ -7,33 +7,32 @@ from .platforms import PlatformInfo
|
||||||
from .utils import remove_duplicates, StopBuild
|
from .utils import remove_duplicates, StopBuild
|
||||||
from .dependencies import Dependency
|
from .dependencies import Dependency
|
||||||
from ._global import (
|
from ._global import (
|
||||||
neutralEnv,
|
neutralEnv, option,
|
||||||
add_target_step, get_target_step, target_steps,
|
add_target_step, get_target_step, target_steps,
|
||||||
add_plt_step, get_plt_step, plt_steps)
|
add_plt_step, get_plt_step, plt_steps)
|
||||||
from . import _global
|
from . import _global
|
||||||
|
|
||||||
class Builder:
|
class Builder:
|
||||||
def __init__(self, options):
|
def __init__(self):
|
||||||
self.options = options
|
platformClass = PlatformInfo.all_platforms[option('target_platform')]
|
||||||
platformClass = PlatformInfo.all_platforms[options.target_platform]
|
|
||||||
if neutralEnv('distname') not in platformClass.compatible_hosts:
|
if neutralEnv('distname') not in platformClass.compatible_hosts:
|
||||||
print(('ERROR: The target platform {} cannot be build on host {}.\n'
|
print(('ERROR: The target platform {} cannot be build on host {}.\n'
|
||||||
'Select another target platform, or change your host system.'
|
'Select another target platform, or change your host system.'
|
||||||
).format(options.target_platform, self.distname))
|
).format(option('target_platform'), self.distname))
|
||||||
sys.exit(-1)
|
sys.exit(-1)
|
||||||
self.platform = platform = platformClass()
|
self.platform = platform = platformClass()
|
||||||
|
|
||||||
_targets = {}
|
_targets = {}
|
||||||
targetDef = (options.target_platform, options.targets)
|
targetDef = (option('target_platform'), option('targets'))
|
||||||
self.add_targets(targetDef, _targets)
|
self.add_targets(targetDef, _targets)
|
||||||
dependencies = self.order_dependencies(_targets, targetDef)
|
dependencies = self.order_dependencies(_targets, targetDef)
|
||||||
dependencies = list(remove_duplicates(dependencies))
|
dependencies = list(remove_duplicates(dependencies))
|
||||||
|
|
||||||
if options.build_nodeps:
|
if option('build_nodeps'):
|
||||||
add_target_step(targetDef, _targets[targetDef])
|
add_target_step(targetDef, _targets[targetDef])
|
||||||
else:
|
else:
|
||||||
for dep in dependencies:
|
for dep in dependencies:
|
||||||
if self.options.build_deps_only and dep == targetDef:
|
if option('build_deps_only') and dep == targetDef:
|
||||||
continue
|
continue
|
||||||
add_target_step(dep, _targets[dep])
|
add_target_step(dep, _targets[dep])
|
||||||
|
|
||||||
|
@ -79,7 +78,7 @@ class Builder:
|
||||||
source.prepare()
|
source.prepare()
|
||||||
|
|
||||||
def prepare_sources(self):
|
def prepare_sources(self):
|
||||||
if self.options.skip_source_prepare:
|
if option('skip_source_prepare'):
|
||||||
print("SKIP")
|
print("SKIP")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -113,7 +112,7 @@ class Builder:
|
||||||
source = get_target_step(builderDef[1], 'source')
|
source = get_target_step(builderDef[1], 'source')
|
||||||
env = PlatformInfo.all_running_platforms[builderDef[0]].buildEnv
|
env = PlatformInfo.all_running_platforms[builderDef[0]].buildEnv
|
||||||
builder = get_target_step(builderDef)(depClass, source, env)
|
builder = get_target_step(builderDef)(depClass, source, env)
|
||||||
if self.options.make_dist and builderDef[1] == self.options.targets:
|
if option('make_dist') and builderDef[1] == option('targets'):
|
||||||
print("make dist {}:".format(builder.name))
|
print("make dist {}:".format(builder.name))
|
||||||
builder.make_dist()
|
builder.make_dist()
|
||||||
continue
|
continue
|
||||||
|
@ -136,7 +135,7 @@ class Builder:
|
||||||
self.build()
|
self.build()
|
||||||
# No error, clean intermediate file at end of build if needed.
|
# No error, clean intermediate file at end of build if needed.
|
||||||
print("[CLEAN]")
|
print("[CLEAN]")
|
||||||
if self.options.clean_at_end:
|
if option('clean_at_end'):
|
||||||
self.platform.clean_intermediate_directories()
|
self.platform.clean_intermediate_directories()
|
||||||
else:
|
else:
|
||||||
print("SKIP")
|
print("SKIP")
|
||||||
|
|
|
@ -4,7 +4,7 @@ import shutil
|
||||||
|
|
||||||
from kiwixbuild.utils import pj, Context, SkipCommand, extract_archive, Defaultdict, StopBuild, run_command
|
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.versions import main_project_versions, base_deps_versions
|
||||||
from kiwixbuild._global import neutralEnv
|
from kiwixbuild._global import neutralEnv, option
|
||||||
|
|
||||||
SCRIPT_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
SCRIPT_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__)))
|
||||||
|
|
||||||
|
@ -130,7 +130,7 @@ class GitClone(Source):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def source_dir(self):
|
def source_dir(self):
|
||||||
if neutralEnv('make_release'):
|
if option('make_release'):
|
||||||
return "{}_release".format(self.git_dir)
|
return "{}_release".format(self.git_dir)
|
||||||
else:
|
else:
|
||||||
return self.git_dir
|
return self.git_dir
|
||||||
|
@ -141,7 +141,7 @@ class GitClone(Source):
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def git_ref(self):
|
def git_ref(self):
|
||||||
if neutralEnv('make_release'):
|
if option('make_release'):
|
||||||
return self.release_git_ref
|
return self.release_git_ref
|
||||||
else:
|
else:
|
||||||
return self.base_git_ref
|
return self.base_git_ref
|
||||||
|
|
|
@ -6,6 +6,7 @@ from .base import (
|
||||||
GradleBuilder)
|
GradleBuilder)
|
||||||
|
|
||||||
from kiwixbuild.utils import pj
|
from kiwixbuild.utils import pj
|
||||||
|
from kiwixbuild._global import option
|
||||||
|
|
||||||
class KiwixAndroid(Dependency):
|
class KiwixAndroid(Dependency):
|
||||||
name = "kiwix-android"
|
name = "kiwix-android"
|
||||||
|
@ -18,7 +19,7 @@ class KiwixAndroid(Dependency):
|
||||||
dependencies = ["Gradle", "kiwix-lib"]
|
dependencies = ["Gradle", "kiwix-lib"]
|
||||||
|
|
||||||
def build(self):
|
def build(self):
|
||||||
if self.buildEnv.options.targets == 'kiwix-android-custom':
|
if option('targets') == 'kiwix-android-custom':
|
||||||
print("SKIP")
|
print("SKIP")
|
||||||
else:
|
else:
|
||||||
super().build()
|
super().build()
|
||||||
|
|
|
@ -7,14 +7,14 @@ from .base import (
|
||||||
GradleBuilder)
|
GradleBuilder)
|
||||||
|
|
||||||
from kiwixbuild.utils import Remotefile, pj, SkipCommand
|
from kiwixbuild.utils import Remotefile, pj, SkipCommand
|
||||||
from kiwixbuild._global import get_target_step
|
from kiwixbuild._global import option, get_target_step
|
||||||
|
|
||||||
class KiwixCustomApp(Dependency):
|
class KiwixCustomApp(Dependency):
|
||||||
name = "kiwix-android-custom"
|
name = "kiwix-android-custom"
|
||||||
|
|
||||||
def __init__(self, buildEnv):
|
def __init__(self, buildEnv):
|
||||||
super().__init__(buildEnv)
|
super().__init__(buildEnv)
|
||||||
self.custom_name = buildEnv.options.android_custom_app
|
self.custom_name = option('android_custom_app')
|
||||||
|
|
||||||
class Source(GitClone):
|
class Source(GitClone):
|
||||||
git_remote = "https://github.com/kiwix/kiwix-android-custom"
|
git_remote = "https://github.com/kiwix/kiwix-android-custom"
|
||||||
|
@ -51,7 +51,7 @@ class KiwixCustomApp(Dependency):
|
||||||
|
|
||||||
def _get_zim_size(self):
|
def _get_zim_size(self):
|
||||||
try:
|
try:
|
||||||
zim_size = self.buildEnv.options.zim_file_size
|
zim_size = option('zim_file_size')
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
with open(pj(self.source_path, self.target.custom_name, 'info.json')) as f:
|
with open(pj(self.source_path, self.target.custom_name, 'info.json')) as f:
|
||||||
app_info = json.load(f)
|
app_info = json.load(f)
|
||||||
|
@ -64,7 +64,7 @@ class KiwixCustomApp(Dependency):
|
||||||
self.command('compile', self._compile)
|
self.command('compile', self._compile)
|
||||||
|
|
||||||
def _download_zim(self, context):
|
def _download_zim(self, context):
|
||||||
zim_url = self.buildEnv.options.zim_file_url
|
zim_url = option('zim_file_url')
|
||||||
if zim_url is None:
|
if zim_url is None:
|
||||||
raise SkipCommand()
|
raise SkipCommand()
|
||||||
with open(pj(self.source_path, self.target.custom_name, 'info.json')) as f:
|
with open(pj(self.source_path, self.target.custom_name, 'info.json')) as f:
|
||||||
|
|
|
@ -2,11 +2,12 @@
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
from kiwixbuild.dependencies import Dependency
|
||||||
from kiwixbuild.toolchains import Toolchain
|
from kiwixbuild.toolchains import Toolchain
|
||||||
from kiwixbuild.packages import PACKAGE_NAME_MAPPERS
|
from kiwixbuild.packages import PACKAGE_NAME_MAPPERS
|
||||||
from kiwixbuild.utils import pj, remove_duplicates
|
from kiwixbuild.utils import pj, remove_duplicates
|
||||||
from kiwixbuild.buildenv import BuildEnv
|
from kiwixbuild.buildenv import BuildEnv
|
||||||
from kiwixbuild._global import neutralEnv, add_plt_step, target_steps
|
from kiwixbuild._global import neutralEnv, option, add_plt_step, target_steps
|
||||||
|
|
||||||
_SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
|
_SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
|
||||||
TEMPLATES_DIR = pj(os.path.dirname(_SCRIPT_DIR), 'templates')
|
TEMPLATES_DIR = pj(os.path.dirname(_SCRIPT_DIR), 'templates')
|
||||||
|
@ -117,7 +118,7 @@ class PlatformInfo(metaclass=_MetaPlatform):
|
||||||
packages_to_have = self.get_packages()
|
packages_to_have = self.get_packages()
|
||||||
packages_to_have = remove_duplicates(packages_to_have)
|
packages_to_have = remove_duplicates(packages_to_have)
|
||||||
|
|
||||||
if not neutralEnv('force_install_packages') and os.path.exists(autoskip_file):
|
if not option('force_install_packages') and os.path.exists(autoskip_file):
|
||||||
print("SKIP")
|
print("SKIP")
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
@ -10,11 +10,10 @@ import ssl
|
||||||
import subprocess
|
import subprocess
|
||||||
from collections import namedtuple, defaultdict
|
from collections import namedtuple, defaultdict
|
||||||
|
|
||||||
from kiwixbuild._global import neutralEnv
|
from kiwixbuild._global import neutralEnv, option
|
||||||
|
|
||||||
pj = os.path.join
|
pj = os.path.join
|
||||||
|
|
||||||
g_print_progress = True
|
|
||||||
|
|
||||||
REMOTE_PREFIX = 'http://download.kiwix.org/dev/'
|
REMOTE_PREFIX = 'http://download.kiwix.org/dev/'
|
||||||
|
|
||||||
|
@ -30,11 +29,6 @@ def xrun_find(name):
|
||||||
return output[:-1].decode()
|
return output[:-1].decode()
|
||||||
|
|
||||||
|
|
||||||
def setup_print_progress(print_progress):
|
|
||||||
global g_print_progress
|
|
||||||
g_print_progress = print_progress
|
|
||||||
|
|
||||||
|
|
||||||
class Defaultdict(defaultdict):
|
class Defaultdict(defaultdict):
|
||||||
def __getattr__(self, name):
|
def __getattr__(self, name):
|
||||||
return self[name]
|
return self[name]
|
||||||
|
@ -69,7 +63,7 @@ def get_sha256(path):
|
||||||
|
|
||||||
|
|
||||||
def print_progress(progress):
|
def print_progress(progress):
|
||||||
if g_print_progress:
|
if option('show_progress'):
|
||||||
text = "{}\033[{}D".format(progress, len(progress))
|
text = "{}\033[{}D".format(progress, len(progress))
|
||||||
print(text, end="")
|
print(text, end="")
|
||||||
|
|
||||||
|
@ -92,7 +86,7 @@ def copy_tree(src, dst, post_copy_function=None):
|
||||||
post_copy_function(dstfile)
|
post_copy_function(dstfile)
|
||||||
|
|
||||||
|
|
||||||
def download_remote(what, where, check_certificate=True):
|
def download_remote(what, where):
|
||||||
file_path = pj(where, what.name)
|
file_path = pj(where, what.name)
|
||||||
file_url = what.url or (REMOTE_PREFIX + what.name)
|
file_url = what.url or (REMOTE_PREFIX + what.name)
|
||||||
if os.path.exists(file_path):
|
if os.path.exists(file_path):
|
||||||
|
@ -100,7 +94,7 @@ def download_remote(what, where, check_certificate=True):
|
||||||
raise SkipCommand()
|
raise SkipCommand()
|
||||||
os.remove(file_path)
|
os.remove(file_path)
|
||||||
|
|
||||||
if not check_certificate:
|
if option('no_cert_check'):
|
||||||
context = ssl.create_default_context()
|
context = ssl.create_default_context()
|
||||||
context.check_hostname = False
|
context.check_hostname = False
|
||||||
context.verify_mode = ssl.CERT_NONE
|
context.verify_mode = ssl.CERT_NONE
|
||||||
|
@ -241,7 +235,7 @@ def run_command(command, cwd, context, buildEnv=None, env=None, input=None, cros
|
||||||
env = buildEnv._set_env(env, cross_compile_env, cross_compile_compiler, cross_compile_path)
|
env = buildEnv._set_env(env, cross_compile_env, cross_compile_compiler, cross_compile_path)
|
||||||
log = None
|
log = None
|
||||||
try:
|
try:
|
||||||
if not neutralEnv('verbose'):
|
if not option('verbose'):
|
||||||
log = open(context.log_file, 'w')
|
log = open(context.log_file, 'w')
|
||||||
print("run command '{}'".format(command), file=log)
|
print("run command '{}'".format(command), file=log)
|
||||||
print("current directory is '{}'".format(cwd), file=log)
|
print("current directory is '{}'".format(cwd), file=log)
|
||||||
|
|
Loading…
Reference in New Issue