1# Copyright 2019 Google LLC 2# 3# Redistribution and use in source and binary forms, with or without 4# modification, are permitted provided that the following conditions are 5# met: 6# 7# * Redistributions of source code must retain the above copyright 8# notice, this list of conditions and the following disclaimer. 9# * Redistributions in binary form must reproduce the above 10# copyright notice, this list of conditions and the following disclaimer 11# in the documentation and/or other materials provided with the 12# distribution. 13# * Neither the name of Google LLC nor the names of its 14# contributors may be used to endorse or promote products derived from 15# this software without specific prior written permission. 16# 17# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 29def _com_google_api_gax_java_properties_impl(ctx): 30 props_path = ctx.path(ctx.attr.file) 31 result = ctx.execute(["cat", props_path]) 32 33 if result.return_code != 0: 34 fail("Could not load dependencies from properties file, error_code %s" + str(result.return_code)) 35 36 props = result.stdout.splitlines() 37 props_as_map = {} 38 39 for prop in props: 40 p = prop.strip() 41 if len(p) <= 0 or p.startswith("#"): 42 continue 43 key_value = p.split("=", 1) 44 props_as_map[key_value[0]] = key_value[1] 45 46 props_name = ctx.attr.file.name 47 dependencies_bzl = """ 48# DO NOT EDIT. This file was generated from {properties_file}. 49PROPERTIES = {props_as_map} 50 """.format( 51 properties_file = props_name, 52 props_as_map = str(props_as_map), 53 ) 54 ctx.file("BUILD.bazel", "") 55 ctx.file("%s.bzl" % props_name, dependencies_bzl) 56 57 58com_google_api_gax_java_properties = repository_rule( 59 implementation = _com_google_api_gax_java_properties_impl, 60 attrs = { 61 "file": attr.label(), 62 }, 63 local = True, 64) 65 66