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

Commit 2ced8c8a authored by Cole Faust's avatar Cole Faust
Browse files

Prevent duplicated license_kinds

Bazel fails when there are duplicate license_kinds.

Bug: 260148018
Test: go test
Change-Id: I47a27d37d66be947e4a744cd04a3cdcc0b000de4
parent ad8c092c
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -15,10 +15,12 @@
package android

import (
	"android/soong/bazel"
	"fmt"
	"github.com/google/blueprint"
	"os"

	"github.com/google/blueprint"

	"android/soong/bazel"
)

type licenseKindDependencyTag struct {
@@ -101,6 +103,14 @@ func (m *licenseModule) ConvertWithBp2build(ctx TopDownMutatorContext) {
}

func (m *licenseModule) DepsMutator(ctx BottomUpMutatorContext) {
	for i, license := range m.properties.License_kinds {
		for j := i + 1; j < len(m.properties.License_kinds); j++ {
			if license == m.properties.License_kinds[j] {
				ctx.ModuleErrorf("Duplicated license kind: %q", license)
				break
			}
		}
	}
	ctx.AddVariationDependencies(nil, licenseKindTag, m.properties.License_kinds...)
}

+30 −0
Original line number Diff line number Diff line
@@ -89,6 +89,36 @@ var licenseTests = []struct {
				`"top_by_exception_only" is not a license_kind module`,
		},
	},
	{
		name: "must not duplicate license_kind",
		fs: map[string][]byte{
			"top/Android.bp": []byte(`
				license_kind {
					name: "top_by_exception_only",
					conditions: ["by_exception_only"],
					visibility: ["//visibility:private"],
				}

				license_kind {
					name: "top_by_exception_only_2",
					conditions: ["by_exception_only"],
					visibility: ["//visibility:private"],
				}

				license {
					name: "top_proprietary",
					license_kinds: [
						"top_by_exception_only",
						"top_by_exception_only_2",
						"top_by_exception_only"
					],
					visibility: ["//visibility:public"],
				}`),
		},
		expectedErrors: []string{
			`top/Android.bp:14:5: module "top_proprietary": Duplicated license kind: "top_by_exception_only"`,
		},
	},
	{
		name: "license_kind module must exist",
		fs: map[string][]byte{