2014-11-21 23:40:00 +03:00
|
|
|
# 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 print_function, unicode_literals
|
|
|
|
|
|
|
|
import argparse
|
|
|
|
import logging
|
2014-12-23 06:49:04 +03:00
|
|
|
import os
|
|
|
|
|
2014-11-21 23:40:00 +03:00
|
|
|
import mozpack.path as mozpath
|
|
|
|
|
|
|
|
from mozbuild.base import (
|
|
|
|
MachCommandBase,
|
|
|
|
MachCommandConditions as conditions,
|
|
|
|
)
|
|
|
|
|
2014-12-23 06:49:04 +03:00
|
|
|
from mozbuild.util import (
|
|
|
|
FileAvoidWrite,
|
|
|
|
)
|
|
|
|
|
2014-11-21 23:40:00 +03:00
|
|
|
from mach.decorators import (
|
|
|
|
CommandArgument,
|
|
|
|
CommandProvider,
|
|
|
|
Command,
|
|
|
|
)
|
|
|
|
|
2014-12-23 06:49:04 +03:00
|
|
|
SUCCESS = '''
|
|
|
|
You should be ready to build with Gradle and import into IntelliJ! Test with
|
|
|
|
|
|
|
|
./mach gradle build
|
|
|
|
|
|
|
|
and in IntelliJ select File > Import project... and choose
|
|
|
|
|
|
|
|
{topobjdir}/mobile/android/gradle
|
|
|
|
'''
|
2014-11-21 23:40:00 +03:00
|
|
|
|
|
|
|
@CommandProvider
|
|
|
|
class MachCommands(MachCommandBase):
|
|
|
|
@Command('gradle', category='devenv',
|
|
|
|
description='Run gradle.',
|
|
|
|
conditions=[conditions.is_android])
|
|
|
|
@CommandArgument('args', nargs=argparse.REMAINDER)
|
|
|
|
def gradle(self, args):
|
|
|
|
# Avoid logging the command
|
|
|
|
self.log_manager.terminal_handler.setLevel(logging.CRITICAL)
|
|
|
|
|
2014-12-23 06:49:04 +03:00
|
|
|
code = self.gradle_install(quiet=True)
|
|
|
|
if code:
|
|
|
|
return code
|
|
|
|
|
2014-11-21 23:40:00 +03:00
|
|
|
return self.run_process(['./gradlew'] + args,
|
|
|
|
pass_thru=True, # Allow user to run gradle interactively.
|
|
|
|
ensure_exit_code=False, # Don't throw on non-zero exit code.
|
|
|
|
cwd=mozpath.join(self.topobjdir, 'mobile', 'android', 'gradle'))
|
2014-12-23 06:49:04 +03:00
|
|
|
|
|
|
|
@Command('gradle-install', category='devenv',
|
|
|
|
description='Install gradle environment.',
|
|
|
|
conditions=[conditions.is_android])
|
|
|
|
def gradle_install(self, quiet=False):
|
|
|
|
import mozpack.manifests
|
|
|
|
m = mozpack.manifests.InstallManifest()
|
|
|
|
|
|
|
|
def srcdir(dst, src):
|
|
|
|
m.add_symlink(os.path.join(self.topsrcdir, src), dst)
|
|
|
|
|
|
|
|
def objdir(dst, src):
|
|
|
|
m.add_symlink(os.path.join(self.topobjdir, src), dst)
|
|
|
|
|
|
|
|
srcdir('build.gradle', 'mobile/android/gradle/build.gradle')
|
|
|
|
srcdir('settings.gradle', 'mobile/android/gradle/settings.gradle')
|
|
|
|
|
|
|
|
m.add_pattern_copy(os.path.join(self.topsrcdir, 'mobile/android/gradle/gradle/wrapper'), '**', 'gradle/wrapper')
|
|
|
|
m.add_copy(os.path.join(self.topsrcdir, 'mobile/android/gradle/gradlew'), 'gradlew')
|
|
|
|
|
|
|
|
defines = {
|
|
|
|
'topsrcdir': self.topsrcdir,
|
|
|
|
'topobjdir': self.topobjdir,
|
|
|
|
'ANDROID_SDK_ROOT': self.substs['ANDROID_SDK_ROOT'],
|
|
|
|
}
|
|
|
|
m.add_preprocess(os.path.join(self.topsrcdir, 'mobile/android/gradle/gradle.properties.in'),
|
|
|
|
'gradle.properties',
|
|
|
|
defines=defines,
|
|
|
|
deps=os.path.join(self.topobjdir, 'mobile/android/gradle/.deps/gradle.properties.pp'))
|
|
|
|
m.add_preprocess(os.path.join(self.topsrcdir, 'mobile/android/gradle/local.properties.in'),
|
|
|
|
'local.properties',
|
|
|
|
defines=defines,
|
|
|
|
deps=os.path.join(self.topobjdir, 'mobile/android/gradle/.deps/local.properties.pp'))
|
|
|
|
|
|
|
|
srcdir('branding/build.gradle', 'mobile/android/gradle/branding/build.gradle')
|
|
|
|
srcdir('branding/src/main/AndroidManifest.xml', 'mobile/android/gradle/branding/AndroidManifest.xml')
|
|
|
|
srcdir('branding/src/main/res', os.path.join(self.substs['MOZ_BRANDING_DIRECTORY'], 'res'))
|
|
|
|
|
|
|
|
srcdir('preprocessed_code/build.gradle', 'mobile/android/gradle/preprocessed_code/build.gradle')
|
|
|
|
srcdir('preprocessed_code/src/main/AndroidManifest.xml', 'mobile/android/gradle/preprocessed_code/AndroidManifest.xml')
|
|
|
|
objdir('preprocessed_code/src/main/java', 'mobile/android/base/generated/preprocessed')
|
|
|
|
|
|
|
|
srcdir('preprocessed_resources/build.gradle', 'mobile/android/gradle/preprocessed_resources/build.gradle')
|
|
|
|
srcdir('preprocessed_resources/src/main/AndroidManifest.xml', 'mobile/android/gradle/preprocessed_resources/AndroidManifest.xml')
|
|
|
|
objdir('preprocessed_resources/src/main/res', 'mobile/android/base/res')
|
|
|
|
|
|
|
|
srcdir('thirdparty/build.gradle', 'mobile/android/gradle/thirdparty/build.gradle')
|
|
|
|
srcdir('thirdparty/src/main/AndroidManifest.xml', 'mobile/android/gradle/thirdparty/AndroidManifest.xml')
|
|
|
|
srcdir('thirdparty/src/main/java', 'mobile/android/thirdparty')
|
|
|
|
|
|
|
|
srcdir('omnijar/build.gradle', 'mobile/android/gradle/omnijar/build.gradle')
|
|
|
|
srcdir('omnijar/src/main/java/locales', 'mobile/android/locales')
|
|
|
|
srcdir('omnijar/src/main/java/chrome', 'mobile/android/chrome')
|
|
|
|
srcdir('omnijar/src/main/java/components', 'mobile/android/components')
|
|
|
|
srcdir('omnijar/src/main/java/modules', 'mobile/android/modules')
|
|
|
|
srcdir('omnijar/src/main/java/themes', 'mobile/android/themes')
|
|
|
|
|
|
|
|
srcdir('app/build.gradle', 'mobile/android/gradle/app/build.gradle')
|
|
|
|
objdir('app/src/main/AndroidManifest.xml', 'mobile/android/base/AndroidManifest.xml')
|
2015-01-14 22:07:06 +03:00
|
|
|
objdir('app/src/debug/assets', 'dist/fennec/assets')
|
|
|
|
objdir('app/src/debug/jniLibs', 'dist/fennec/lib')
|
2014-12-23 06:49:04 +03:00
|
|
|
# Test code.
|
|
|
|
srcdir('app/src/robocop_harness/org/mozilla/gecko', 'build/mobile/robocop')
|
|
|
|
srcdir('app/src/robocop/org/mozilla/gecko/tests', 'mobile/android/base/tests')
|
|
|
|
srcdir('app/src/background/org/mozilla/gecko', 'mobile/android/tests/background/junit3/src')
|
|
|
|
srcdir('app/src/browser/org/mozilla/gecko', 'mobile/android/tests/browser/junit3/src')
|
|
|
|
# Test libraries.
|
|
|
|
srcdir('app/libs', 'build/mobile/robocop')
|
|
|
|
|
|
|
|
srcdir('base/build.gradle', 'mobile/android/gradle/base/build.gradle')
|
|
|
|
srcdir('base/src/main/AndroidManifest.xml', 'mobile/android/gradle/base/AndroidManifest.xml')
|
|
|
|
srcdir('base/src/main/java/org/mozilla/gecko', 'mobile/android/base')
|
|
|
|
srcdir('base/src/main/java/org/mozilla/mozstumbler', 'mobile/android/stumbler/java/org/mozilla/mozstumbler')
|
|
|
|
srcdir('base/src/main/java/org/mozilla/search', 'mobile/android/search/java/org/mozilla/search')
|
|
|
|
srcdir('base/src/main/res', 'mobile/android/base/resources')
|
|
|
|
srcdir('base/src/crashreporter/res', 'mobile/android/base/crashreporter/res')
|
|
|
|
|
|
|
|
manifest_path = os.path.join(self.topobjdir, 'mobile', 'android', 'gradle.manifest')
|
|
|
|
with FileAvoidWrite(manifest_path) as f:
|
|
|
|
m.write(fileobj=f)
|
|
|
|
|
|
|
|
self.virtualenv_manager.ensure()
|
|
|
|
code = self.run_process([
|
|
|
|
self.virtualenv_manager.python_path,
|
|
|
|
os.path.join(self.topsrcdir, 'python/mozbuild/mozbuild/action/process_install_manifest.py'),
|
|
|
|
'--no-remove',
|
|
|
|
'--no-remove-all-directory-symlinks',
|
|
|
|
'--no-remove-empty-directories',
|
|
|
|
os.path.join(self.topobjdir, 'mobile', 'android', 'gradle'),
|
|
|
|
manifest_path],
|
|
|
|
pass_thru=True, # Allow user to run gradle interactively.
|
|
|
|
ensure_exit_code=False, # Don't throw on non-zero exit code.
|
|
|
|
cwd=mozpath.join(self.topsrcdir, 'mobile', 'android'))
|
|
|
|
|
|
|
|
if not quiet:
|
|
|
|
if not code:
|
|
|
|
print(SUCCESS.format(topobjdir=self.topobjdir))
|
|
|
|
|
|
|
|
return code
|