Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ba48b682 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Support multiple library names per target." am: 5796849a

Original change: https://android-review.googlesource.com/c/platform/build/+/1978111

Change-Id: I7f93795f7723e3ede49b8d6281fc1476d6e0489a
parents 8829ee14 5796849a
Loading
Loading
Loading
Loading
+30 −10
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import (
	"fmt"
	"io"
	"io/fs"
	"net/url"
	"path/filepath"
	"regexp"
	"sort"
@@ -93,13 +94,14 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic
		}
		hashes := make(map[hash]struct{})
		for _, text := range tn.LicenseTexts() {
			if _, ok := ni.hash[text]; !ok {
				err := ni.addText(text)
			fname := strings.SplitN(text, ":", 2)[0]
			if _, ok := ni.hash[fname]; !ok {
				err := ni.addText(fname)
				if err != nil {
					return nil, err
				}
			}
			hash := ni.hash[text]
			hash := ni.hash[fname]
			if _, ok := hashes[hash]; !ok {
				hashes[hash] = struct{}{}
			}
@@ -108,11 +110,12 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic
		return hashes, nil
	}

	link := func(libName string, hashes map[hash]struct{}, installPaths []string) {
	link := func(tn *TargetNode, hashes map[hash]struct{}, installPaths []string) {
		for h := range hashes {
			libName := ni.getLibName(tn, h)
			if _, ok := ni.libHash[libName]; !ok {
				ni.libHash[libName] = make(map[hash]struct{})
			}
		for h := range hashes {
			if _, ok := ni.hashLibInstall[h]; !ok {
				ni.hashLibInstall[h] = make(map[string]map[string]struct{})
			}
@@ -160,7 +163,7 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic
		if err != nil {
			return false
		}
		link(ni.getLibName(tn), hashes, installPaths)
		link(tn, hashes, installPaths)
		if tn.IsContainer() {
			return true
		}
@@ -170,7 +173,7 @@ func IndexLicenseTexts(rootFS fs.FS, lg *LicenseGraph, rs ResolutionSet) (*Notic
			if err != nil {
				return false
			}
			link(ni.getLibName(r.actsOn), hashes, installPaths)
			link(r.actsOn, hashes, installPaths)
		}
		return false
	})
@@ -305,7 +308,24 @@ func (ni *NoticeIndex) HashText(h hash) []byte {
}

// getLibName returns the name of the library associated with `noticeFor`.
func (ni *NoticeIndex) getLibName(noticeFor *TargetNode) string {
func (ni *NoticeIndex) getLibName(noticeFor *TargetNode, h hash) string {
	for _, text := range noticeFor.LicenseTexts() {
		if !strings.Contains(text, ":") {
			continue
		}

		fields := strings.SplitN(text, ":", 2)
		fname, pname := fields[0], fields[1]
		if ni.hash[fname].key != h.key {
			continue
		}

		ln, err := url.QueryUnescape(pname)
		if err != nil {
			continue
		}
		return ln
	}
	// use name from METADATA if available
	ln := ni.checkMetadata(noticeFor)
	if len(ln) > 0 {