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