mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-22 01:35:35 +00:00
524e59dc74
It's not worth accommodating all the ways to invoke commands from Python, so expose the lock itself so that consumers can use subprocess, Popen, etc as they choose. Differential Revision: https://phabricator.services.mozilla.com/D35273 --HG-- extra : moz-landing-system : lando
73 lines
1.9 KiB
Python
73 lines
1.9 KiB
Python
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
from __future__ import absolute_import, print_function
|
|
|
|
from contextlib import contextmanager
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
|
|
from mozbuild.util import (
|
|
ensureParentDir,
|
|
lock_file,
|
|
)
|
|
import mozpack.path as mozpath
|
|
|
|
|
|
@contextmanager
|
|
def gradle_lock(topobjdir, max_wait_seconds=600):
|
|
# Building the same Gradle root project with multiple concurrent processes
|
|
# is not well supported, so we use a simple lock file to serialize build
|
|
# steps.
|
|
lock_path = '{}/gradle/mach_android.lockfile'.format(topobjdir)
|
|
ensureParentDir(lock_path)
|
|
lock_instance = lock_file(lock_path, max_wait=max_wait_seconds)
|
|
|
|
try:
|
|
yield
|
|
finally:
|
|
del lock_instance
|
|
|
|
|
|
def android(verb, *args):
|
|
import buildconfig
|
|
|
|
with gradle_lock(buildconfig.topobjdir):
|
|
cmd = [
|
|
sys.executable,
|
|
mozpath.join(buildconfig.topsrcdir, 'mach'),
|
|
'android',
|
|
verb,
|
|
]
|
|
cmd.extend(args)
|
|
env = dict(os.environ)
|
|
# Confusingly, `MACH` is set only within `mach build`.
|
|
if env.get('MACH'):
|
|
env['GRADLE_INVOKED_WITHIN_MACH_BUILD'] = '1'
|
|
subprocess.check_call(cmd, env=env)
|
|
|
|
return 0
|
|
|
|
|
|
def assemble_app(dummy_output_file, *inputs):
|
|
return android('assemble-app')
|
|
|
|
|
|
def generate_sdk_bindings(dummy_output_file, *args):
|
|
return android('generate-sdk-bindings', *args)
|
|
|
|
|
|
def generate_generated_jni_wrappers(dummy_output_file, *args):
|
|
return android('generate-generated-jni-wrappers', *args)
|
|
|
|
|
|
def generate_fennec_jni_wrappers(dummy_output_file, *args):
|
|
return android('generate-fennec-jni-wrappers', *args)
|
|
|
|
|
|
def generate_android_code_and_resources(*args):
|
|
"""No-op used to ensure inputs are fresh."""
|
|
return 0
|