| #!/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()) |