1*333d2b36SAndroid Build Coastguard Worker// Copyright 2020 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage soongconfig 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "fmt" 19*333d2b36SAndroid Build Coastguard Worker "strings" 20*333d2b36SAndroid Build Coastguard Worker) 21*333d2b36SAndroid Build Coastguard Worker 22*333d2b36SAndroid Build Coastguard Workertype SoongConfig interface { 23*333d2b36SAndroid Build Coastguard Worker // Bool interprets the variable named `name` as a boolean, returning true if, after 24*333d2b36SAndroid Build Coastguard Worker // lowercasing, it matches one of "1", "y", "yes", "on", or "true". Unset, or any other 25*333d2b36SAndroid Build Coastguard Worker // value will return false. 26*333d2b36SAndroid Build Coastguard Worker Bool(name string) bool 27*333d2b36SAndroid Build Coastguard Worker 28*333d2b36SAndroid Build Coastguard Worker // String returns the string value of `name`. If the variable was not set, it will 29*333d2b36SAndroid Build Coastguard Worker // return the empty string. 30*333d2b36SAndroid Build Coastguard Worker String(name string) string 31*333d2b36SAndroid Build Coastguard Worker 32*333d2b36SAndroid Build Coastguard Worker // IsSet returns whether the variable `name` was set by Make. 33*333d2b36SAndroid Build Coastguard Worker IsSet(name string) bool 34*333d2b36SAndroid Build Coastguard Worker} 35*333d2b36SAndroid Build Coastguard Worker 36*333d2b36SAndroid Build Coastguard Workerfunc Config(vars map[string]string) SoongConfig { 37*333d2b36SAndroid Build Coastguard Worker configVars := make(map[string]string) 38*333d2b36SAndroid Build Coastguard Worker if len(vars) > 0 { 39*333d2b36SAndroid Build Coastguard Worker for k, v := range vars { 40*333d2b36SAndroid Build Coastguard Worker configVars[k] = v 41*333d2b36SAndroid Build Coastguard Worker } 42*333d2b36SAndroid Build Coastguard Worker if _, exists := configVars[conditionsDefault]; exists { 43*333d2b36SAndroid Build Coastguard Worker panic(fmt.Sprintf("%q is a reserved soong config variable name", conditionsDefault)) 44*333d2b36SAndroid Build Coastguard Worker } 45*333d2b36SAndroid Build Coastguard Worker } 46*333d2b36SAndroid Build Coastguard Worker return soongConfig(configVars) 47*333d2b36SAndroid Build Coastguard Worker} 48*333d2b36SAndroid Build Coastguard Worker 49*333d2b36SAndroid Build Coastguard Workertype soongConfig map[string]string 50*333d2b36SAndroid Build Coastguard Worker 51*333d2b36SAndroid Build Coastguard Workerfunc (c soongConfig) Bool(name string) bool { 52*333d2b36SAndroid Build Coastguard Worker v := strings.ToLower(c[name]) 53*333d2b36SAndroid Build Coastguard Worker return v == "1" || v == "y" || v == "yes" || v == "on" || v == "true" 54*333d2b36SAndroid Build Coastguard Worker} 55*333d2b36SAndroid Build Coastguard Worker 56*333d2b36SAndroid Build Coastguard Workerfunc (c soongConfig) String(name string) string { 57*333d2b36SAndroid Build Coastguard Worker return c[name] 58*333d2b36SAndroid Build Coastguard Worker} 59*333d2b36SAndroid Build Coastguard Worker 60*333d2b36SAndroid Build Coastguard Workerfunc (c soongConfig) IsSet(name string) bool { 61*333d2b36SAndroid Build Coastguard Worker _, ok := c[name] 62*333d2b36SAndroid Build Coastguard Worker return ok 63*333d2b36SAndroid Build Coastguard Worker} 64