diff --git a/android/arch.go b/android/arch.go index 3a2256998..e696a0da0 100644 --- a/android/arch.go +++ b/android/arch.go @@ -119,12 +119,12 @@ func RegisterArchFeatures(arch ArchType, features ...string) { func RegisterArchVariantFeatures(arch ArchType, variant string, features ...string) { checkCalledFromInit() - if variant != "" && !inList(variant, archVariants[arch]) { + if variant != "" && !InList(variant, archVariants[arch]) { panic(fmt.Errorf("Invalid variant %q for arch %q", variant, arch)) } for _, feature := range features { - if !inList(feature, archFeatures[arch]) { + if !InList(feature, archFeatures[arch]) { panic(fmt.Errorf("Invalid feature %q for arch %q variant %q", feature, arch, variant)) } } @@ -481,13 +481,13 @@ func createArchType(props reflect.Type) reflect.Type { if os.Linux() { target := "Linux_" + archType.Name - if !inList(target, targets) { + if !InList(target, targets) { targets = append(targets, target) } } if os.Bionic() { target := "Bionic_" + archType.Name - if !inList(target, targets) { + if !InList(target, targets) { targets = append(targets, target) } } diff --git a/android/config.go b/android/config.go index 887291df5..07e25f34b 100644 --- a/android/config.go +++ b/android/config.go @@ -690,12 +690,12 @@ func (c *deviceConfig) NativeCoverageEnabled() bool { func (c *deviceConfig) CoverageEnabledForPath(path string) bool { coverage := false if c.config.ProductVariables.CoveragePaths != nil { - if prefixInList(path, *c.config.ProductVariables.CoveragePaths) { + if PrefixInList(path, *c.config.ProductVariables.CoveragePaths) { coverage = true } } if coverage && c.config.ProductVariables.CoverageExcludePaths != nil { - if prefixInList(path, *c.config.ProductVariables.CoverageExcludePaths) { + if PrefixInList(path, *c.config.ProductVariables.CoverageExcludePaths) { coverage = false } } @@ -706,21 +706,21 @@ func (c *config) IntegerOverflowDisabledForPath(path string) bool { if c.ProductVariables.IntegerOverflowExcludePaths == nil { return false } - return prefixInList(path, *c.ProductVariables.IntegerOverflowExcludePaths) + return PrefixInList(path, *c.ProductVariables.IntegerOverflowExcludePaths) } func (c *config) CFIDisabledForPath(path string) bool { if c.ProductVariables.CFIExcludePaths == nil { return false } - return prefixInList(path, *c.ProductVariables.CFIExcludePaths) + return PrefixInList(path, *c.ProductVariables.CFIExcludePaths) } func (c *config) CFIEnabledForPath(path string) bool { if c.ProductVariables.CFIIncludePaths == nil { return false } - return prefixInList(path, *c.ProductVariables.CFIIncludePaths) + return PrefixInList(path, *c.ProductVariables.CFIIncludePaths) } func stringSlice(s *[]string) []string { diff --git a/android/util.go b/android/util.go index 29bb9b106..854d78280 100644 --- a/android/util.go +++ b/android/util.go @@ -54,7 +54,7 @@ func sortedKeys(m map[string][]string) []string { return s } -func indexList(s string, list []string) int { +func IndexList(s string, list []string) int { for i, l := range list { if l == s { return i @@ -64,11 +64,11 @@ func indexList(s string, list []string) int { return -1 } -func inList(s string, list []string) bool { - return indexList(s, list) != -1 +func InList(s string, list []string) bool { + return IndexList(s, list) != -1 } -func prefixInList(s string, list []string) bool { +func PrefixInList(s string, list []string) bool { for _, prefix := range list { if strings.HasPrefix(s, prefix) { return true @@ -77,6 +77,37 @@ func prefixInList(s string, list []string) bool { return false } +func FilterList(list []string, filter []string) (remainder []string, filtered []string) { + for _, l := range list { + if InList(l, filter) { + filtered = append(filtered, l) + } else { + remainder = append(remainder, l) + } + } + + return +} + +func RemoveListFromList(list []string, filter_out []string) (result []string) { + result = make([]string, 0, len(list)) + for _, l := range list { + if !InList(l, filter_out) { + result = append(result, l) + } + } + return +} + +func RemoveFromList(s string, list []string) (bool, []string) { + i := IndexList(s, list) + if i != -1 { + return true, append(list[:i], list[i+1:]...) + } else { + return false, list + } +} + // FirstUniqueStrings returns all unique elements of a slice of strings, keeping the first copy of // each. It modifies the slice contents in place, and returns a subslice of the original slice. func FirstUniqueStrings(list []string) []string { diff --git a/cc/util.go b/cc/util.go index 7041029ea..5131b09a9 100644 --- a/cc/util.go +++ b/cc/util.go @@ -40,50 +40,11 @@ func libNamesToFlags(names []string) string { return android.JoinWithPrefix(names, "-l") } -func indexList(s string, list []string) int { - for i, l := range list { - if l == s { - return i - } - } - - return -1 -} - -func inList(s string, list []string) bool { - return indexList(s, list) != -1 -} - -func filterList(list []string, filter []string) (remainder []string, filtered []string) { - for _, l := range list { - if inList(l, filter) { - filtered = append(filtered, l) - } else { - remainder = append(remainder, l) - } - } - - return -} - -func removeListFromList(list []string, filter_out []string) (result []string) { - result = make([]string, 0, len(list)) - for _, l := range list { - if !inList(l, filter_out) { - result = append(result, l) - } - } - return -} - -func removeFromList(s string, list []string) (bool, []string) { - i := indexList(s, list) - if i != -1 { - return true, append(list[:i], list[i+1:]...) - } else { - return false, list - } -} +var indexList = android.IndexList +var inList = android.InList +var filterList = android.FilterList +var removeListFromList = android.RemoveListFromList +var removeFromList = android.RemoveFromList var libNameRegexp = regexp.MustCompile(`^lib(.*)$`)