# Copyright 2022 Google LLC # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. r"""Creates the "BUILD.bazel" file on Kororo. Usage: python3 create_main_build_file.py \ java_dependencies_file.txt \ android_dependencies_file.txt \ aws_kms_dependencies_file.txt \ gcp_kms_dependencies_file.txt where the files contain a list of dependencies to be used in the created file. """ import string import sys TEMPLATE = string.Template("""\ ## This file is created using "create_main_build_file.py". load("//tools:gen_maven_jar_rules.bzl", "gen_maven_jar_rules") package(default_visibility = ["//visibility:public"]) licenses(["notice"]) exports_files(["BUILD"]) # Maven jars. # DO NOT USE FOR ANY OTHER PURPOSES. gen_maven_jar_rules( name = "tink", doctitle = "Tink Cryptography API", manifest_lines = [ "Automatic-Module-Name: com.google.crypto.tink", ], root_packages = [ "com.google.crypto.tink", ], deps = [ $java_deps_formatted ], ) gen_maven_jar_rules( name = "tink-android", doctitle = "Tink Cryptography API for Android", resources = glob([ "src/main/resources/**", ]), root_packages = [ "com.google.crypto.tink", ], shaded_packages = [ # The following package(s) will be shaded, according to the rules # specified in shading_rules. "com.google.protobuf", ], shading_rules = "jar_jar_rules.txt", deps = [ $andr_deps_formatted ], ) gen_maven_jar_rules( name = "tink-awskms", doctitle = "Tink Cryptography API with AWS KMS", manifest_lines = [ "Automatic-Module-Name: com.google.crypto.tink.integration.awskms", ], root_packages = [ "com.google.crypto.tink.integration.awskms", ], deps = [ $awsk_deps_formatted ], ) gen_maven_jar_rules( name = "tink-gcpkms", doctitle = "Tink Cryptography API with Google Cloud KMS", manifest_lines = [ "Automatic-Module-Name: com.google.crypto.tink.integration.gcpkms", ], root_packages = [ "com.google.crypto.tink.integration.gcpkms", ], deps = [ $gcpk_deps_formatted ], )""") def _format_deps(deps_list): """Maps a list of dependencies into a single string.""" stripped_quoted_deps = ['"' + l.strip() + '",' for l in deps_list] return '\n'.join(stripped_quoted_deps) def main(): if len(sys.argv) != 5: sys.exit('4 Arguments Required') with open(sys.argv[1], 'r') as f: java_deps_file_content = f.readlines() with open(sys.argv[2], 'r') as f: android_deps_file_content = f.readlines() with open(sys.argv[3], 'r') as f: aws_kms_deps_file_content = f.readlines() with open(sys.argv[4], 'r') as f: gcp_kms_deps_file_content = f.readlines() print( TEMPLATE.substitute( java_deps_formatted=_format_deps(java_deps_file_content), andr_deps_formatted=_format_deps(android_deps_file_content), awsk_deps_formatted=_format_deps(aws_kms_deps_file_content), gcpk_deps_formatted=_format_deps(gcp_kms_deps_file_content))) if __name__ == '__main__': main()