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

Commit f1c9bbee authored by Paul Duffin's avatar Paul Duffin
Browse files

Support restrictions based on a module's OsClass

Bug: 137543088
Test: m nothing
Change-Id: Ibb05f222594d8180746b612c04ab1538a1cf3c0b
parent 3578188f
Loading
Loading
Loading
Loading
+32 −0
Original line number Diff line number Diff line
@@ -175,6 +175,8 @@ func neverallowMutator(ctx BottomUpMutatorContext) {
	dir := ctx.ModuleDir() + "/"
	properties := m.GetProperties()

	osClass := ctx.Module().Target().Os.Class

	for _, r := range neverallows {
		n := r.(*rule)
		if !n.appliesToPath(dir) {
@@ -189,6 +191,10 @@ func neverallowMutator(ctx BottomUpMutatorContext) {
			continue
		}

		if !n.appliesToOsClass(osClass) {
			continue
		}

		if !n.appliesToDirectDeps(ctx) {
			continue
		}
@@ -252,6 +258,8 @@ type Rule interface {

	InDirectDeps(deps ...string) Rule

	WithOsClass(osClasses ...OsClass) Rule

	ModuleType(types ...string) Rule

	NotModuleType(types ...string) Rule
@@ -276,6 +284,8 @@ type rule struct {

	directDeps map[string]bool

	osClasses []OsClass

	moduleTypes       []string
	unlessModuleTypes []string

@@ -305,6 +315,11 @@ func (r *rule) InDirectDeps(deps ...string) Rule {
	return r
}

func (r *rule) WithOsClass(osClasses ...OsClass) Rule {
	r.osClasses = append(r.osClasses, osClasses...)
	return r
}

func (r *rule) ModuleType(types ...string) Rule {
	r.moduleTypes = append(r.moduleTypes, types...)
	return r
@@ -374,6 +389,9 @@ func (r *rule) String() string {
	for k := range r.directDeps {
		s += " deps:" + k
	}
	for _, v := range r.osClasses {
		s += " os:" + v.String()
	}
	if len(r.reason) != 0 {
		s += " which is restricted because " + r.reason
	}
@@ -402,6 +420,20 @@ func (r *rule) appliesToDirectDeps(ctx BottomUpMutatorContext) bool {
	return matches
}

func (r *rule) appliesToOsClass(osClass OsClass) bool {
	if len(r.osClasses) == 0 {
		return true
	}

	for _, c := range r.osClasses {
		if c == osClass {
			return true
		}
	}

	return false
}

func (r *rule) appliesToModuleType(moduleType string) bool {
	return (len(r.moduleTypes) == 0 || InList(moduleType, r.moduleTypes)) && !InList(moduleType, r.unlessModuleTypes)
}