blob: 7b373f4e345fb094221dc3f6efbf2db11ee332cf [file] [log] [blame]
#!/usr/bin/env python
# Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file
# for details. All rights reserved. Use of this source code is governed by a
# BSD-style license that can be found in the LICENSE file.
from distutils.version import LooseVersion
import os
import utils
def add_r8_dependency(checkout_dir, minified):
build_file = os.path.join(checkout_dir, 'build.gradle')
assert os.path.isfile(build_file), 'Expected a file to be present at {}'.format(build_file)
with open(build_file) as f:
lines = f.readlines()
added_r8_dependency = False
is_inside_dependencies = False
with open(build_file, 'w') as f:
gradle_version = None
for line in lines:
stripped = line.strip()
if stripped == 'dependencies {':
assert not is_inside_dependencies, 'Unexpected line with \'dependencies {\''
is_inside_dependencies = True
if is_inside_dependencies:
if utils.R8_JAR in stripped:
if minified:
# Skip line to avoid dependency on r8.jar
continue
added_r8_dependency = True
elif utils.R8LIB_JAR in stripped:
if not minified:
# Skip line to avoid dependency on r8lib.jar
continue
added_r8_dependency = True
elif 'com.android.tools.build:gradle:' in stripped:
gradle_version = stripped[stripped.rindex(':')+1:-1]
if not added_r8_dependency:
indent = ''.ljust(line.index('classpath'))
jar = utils.R8LIB_JAR if minified else utils.R8_JAR
f.write('{}classpath files(\'{}\')\n'.format(indent, jar))
added_r8_dependency = True
elif stripped == '}':
is_inside_dependencies = False
f.write(line)
assert added_r8_dependency, 'Unable to add R8 as a dependency'
assert gradle_version
assert LooseVersion(gradle_version) >= LooseVersion('3.2'), (
'Unsupported gradle version: {} (must use at least gradle '
+ 'version 3.2)').format(gradle_version)
def remove_r8_dependency(checkout_dir):
build_file = os.path.join(checkout_dir, 'build.gradle')
assert os.path.isfile(build_file), 'Expected a file to be present at {}'.format(build_file)
with open(build_file) as f:
lines = f.readlines()
with open(build_file, 'w') as f:
for line in lines:
if (utils.R8_JAR not in line) and (utils.R8LIB_JAR not in line):
f.write(line)