blob: 3514cf8c1cda7df0e4619e3a87bad927fdbc4479 [file] [log] [blame]
#!/usr/bin/env python3
# Copyright (c) 2022, 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 datetime import datetime
import argparse
import os
from os.path import join
import re
import shutil
import subprocess
import sys
import utils
def sed(pattern, replace, path):
with open(path, "r") as sources:
lines = sources.readlines()
with open(path, "w") as sources:
for line in lines:
sources.write(re.sub(pattern, replace, line))
def GetGitHash(checkout_dir):
return subprocess.check_output(
['git', '-C', checkout_dir, 'rev-parse',
'HEAD']).decode('utf-8').strip()
def run(args):
with utils.TempDir() as tmp_dir:
use_existing_checkout = args.desugar_jdk_libs_checkout != None
checkout_dir = (args.desugar_jdk_libs_checkout if use_existing_checkout
else join(tmp_dir, 'desugar_jdk_libs'))
if (not use_existing_checkout):
subprocess.check_call([
'git', 'clone',
'https://github.com/google/desugar_jdk_libs.git', checkout_dir
])
if (args.desugar_jdk_libs_revision):
subprocess.check_call([
'git', '-C', checkout_dir, 'checkout',
args.desugar_jdk_libs_revision
])
print("Hack to workaround b/256723819")
os.remove(
join(checkout_dir, "jdk11", "src", "java.base", "share", "classes",
"java", "time", "format",
"DesugarDateTimeFormatterBuilder.java"))
print("Building desugared library")
bazel = os.path.join(utils.BAZEL_TOOL, 'lib', 'bazel', 'bin', 'bazel')
with utils.ChangedWorkingDirectory(checkout_dir):
for target in [
':desugar_jdk_libs_jdk11', '//jdk11/src:java_base_chm_only'
]:
subprocess.check_call([
bazel, '--bazelrc=/dev/null', 'build',
'--spawn_strategy=local', '--verbose_failures', target
])
openjdk_dir = join('third_party', 'openjdk')
openjdk_subdir = 'desugar_jdk_libs_11'
dest_dir = join(openjdk_dir, openjdk_subdir)
src_dir = join(checkout_dir, 'bazel-bin', 'jdk11', 'src')
metadata_files = ('LICENSE', 'README.google')
for f in metadata_files:
shutil.copyfile(join(dest_dir, f), join(tmp_dir, f))
shutil.rmtree(dest_dir)
os.remove(join(openjdk_dir, openjdk_subdir + '.tar.gz'))
os.remove(join(openjdk_dir, openjdk_subdir + '.tar.gz.sha1'))
os.mkdir(dest_dir)
for s in [(join(src_dir, 'd8_java_base_selected_with_addon.jar'),
join(dest_dir, 'desugar_jdk_libs.jar')),
(join(src_dir, 'java_base_chm_only.jar'),
join(dest_dir, 'desugar_jdk_libs_chm_only.jar'))]:
shutil.copyfile(s[0], s[1])
for f in metadata_files:
shutil.copyfile(join(tmp_dir, f), join(dest_dir, f))
desugar_jdk_libs_hash = os.path.join(dest_dir, 'desugar_jdk_libs_hash')
with open(desugar_jdk_libs_hash, 'w') as desugar_jdk_libs_hash_writer:
desugar_jdk_libs_hash_writer.write(GetGitHash(checkout_dir))
sed('^Version: [0-9a-f]{40}$', 'Version: %s' % GetGitHash(checkout_dir),
join(dest_dir, 'README.google'))
sed('^Date: .*$', 'Date: %s' % datetime.today().strftime('%Y-%m-%d'),
join(dest_dir, 'README.google'))
print('Now run')
print(' (cd %s; upload_to_google_storage.py -a --bucket r8-deps %s)' %
(openjdk_dir, openjdk_subdir))
def main():
args = parse_options()
run(args)
def parse_options():
parser = argparse.ArgumentParser(
description='Script for updating third_party/openjdk/desugar_jdk_libs*')
parser.add_argument(
'--desugar-jdk-libs-checkout',
'--desugar_jdk_libs_checkout',
default=None,
metavar=('<path>'),
help='Use existing checkout of github.com/google/desugar_jdk_libs.')
parser.add_argument(
'--desugar-jdk-libs-revision',
'--desugar_jdk_libs_revision',
default=None,
metavar=('<revision>'),
help='Revision of github.com/google/desugar_jdk_libs to use.')
args = parser.parse_args()
return args
if __name__ == '__main__':
sys.exit(main())