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

Commit 46fb7aba authored by Liz Kammer's avatar Liz Kammer
Browse files

Support empty strings in bp2build

Previously, could not set an empty string as a value of an attribute;
however, this is necessary in some cases. To not unnecessarily create an
empty string, use string pointers for attributes rather than strings.

Test: go test bp2build tests
Change-Id: I03b3a3567452d455246d22d81f86c317d06b7c39
parent 7c721018
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -3186,7 +3186,7 @@ type bazelApexBundleAttributes struct {
	File_contexts      bazel.LabelAttribute
	Key                bazel.LabelAttribute
	Certificate        bazel.LabelAttribute
	Min_sdk_version    string
	Min_sdk_version    *string
	Updatable          bazel.BoolAttribute
	Installable        bazel.BoolAttribute
	Native_shared_libs bazel.LabelListAttribute
@@ -3226,9 +3226,9 @@ func apexBundleBp2BuildInternal(ctx android.TopDownMutatorContext, module *apexB
		fileContextsLabelAttribute.SetValue(android.BazelLabelForModuleDepSingle(ctx, *module.properties.File_contexts))
	}

	var minSdkVersion string
	var minSdkVersion *string
	if module.properties.Min_sdk_version != nil {
		minSdkVersion = *module.properties.Min_sdk_version
		minSdkVersion = module.properties.Min_sdk_version
	}

	var keyLabelAttribute bazel.LabelAttribute
+3 −3
Original line number Diff line number Diff line
@@ -698,9 +698,9 @@ func isZero(value reflect.Value) bool {
		} else {
			return true
		}
	// Always print bools, if you want a bool attribute to be able to take the default value, use a
	// bool pointer instead
	case reflect.Bool:
	// Always print bool/strings, if you want a bool/string attribute to be able to take the default value, use a
	// pointer instead
	case reflect.Bool, reflect.String:
		return false
	default:
		if !value.IsValid() {
+24 −4
Original line number Diff line number Diff line
@@ -41,6 +41,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) {
    soong_module_deps = [
    ],
    bool_prop = False,
    string_prop = "",
)`,
		},
		{
@@ -58,6 +59,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) {
    soong_module_deps = [
    ],
    bool_prop = True,
    string_prop = "",
)`,
		},
		{
@@ -76,6 +78,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) {
    ],
    bool_prop = False,
    owner = "a_string_with\"quotes\"_and_\\backslashes\\\\",
    string_prop = "",
)`,
		},
		{
@@ -94,6 +97,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) {
    ],
    bool_prop = False,
    required = ["bar"],
    string_prop = "",
)`,
		},
		{
@@ -111,6 +115,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) {
    soong_module_deps = [
    ],
    bool_prop = False,
    string_prop = "",
    target_required = [
        "qux",
        "bazqux",
@@ -147,6 +152,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) {
        "tag": ".bar",
        "targets": ["goal_bar"],
    }],
    string_prop = "",
)`,
		},
		{
@@ -179,6 +185,7 @@ func TestGenerateSoongModuleTargets(t *testing.T) {
    }],
    owner = "custom_owner",
    required = ["bar"],
    string_prop = "",
    target_required = [
        "qux",
        "bazqux",
@@ -222,12 +229,25 @@ func TestGenerateSoongModuleTargets(t *testing.T) {

func TestGenerateBazelTargetModules(t *testing.T) {
	testCases := []bp2buildTestCase{
		{
			description: "string ptr props",
			blueprint: `custom {
	name: "foo",
    string_ptr_prop: "",
    bazel_module: { bp2build_available: true },
}`,
			expectedBazelTargets: []string{
				makeBazelTarget("custom", "foo", attrNameToString{
					"string_ptr_prop": `""`,
				}),
			},
		},
		{
			description: "string props",
			blueprint: `custom {
	name: "foo",
    string_list_prop: ["a", "b"],
    string_prop: "a",
    string_ptr_prop: "a",
    bazel_module: { bp2build_available: true },
}`,
			expectedBazelTargets: []string{
@@ -236,7 +256,7 @@ func TestGenerateBazelTargetModules(t *testing.T) {
        "a",
        "b",
    ]`,
					"string_prop": `"a"`,
					"string_ptr_prop": `"a"`,
				}),
			},
		},
@@ -245,7 +265,7 @@ func TestGenerateBazelTargetModules(t *testing.T) {
			blueprint: `custom {
    name: "foo",
    string_list_prop: ["\t", "\n"],
    string_prop: "a\t\n\r",
    string_ptr_prop: "a\t\n\r",
    bazel_module: { bp2build_available: true },
}`,
			expectedBazelTargets: []string{
@@ -254,7 +274,7 @@ func TestGenerateBazelTargetModules(t *testing.T) {
        "\t",
        "\n",
    ]`,
					"string_prop": `"a\t\n\r"`,
					"string_ptr_prop": `"a\t\n\r"`,
				}),
			},
		},
+7 −7
Original line number Diff line number Diff line
@@ -149,15 +149,15 @@ func runBp2BuildTestCase(t *testing.T, registerModuleTypes func(ctx android.Regi
}

type nestedProps struct {
	Nested_prop string
	Nested_prop *string
}

type EmbeddedProps struct {
	Embedded_prop string
	Embedded_prop *string
}

type OtherEmbeddedProps struct {
	Other_embedded_prop string
	Other_embedded_prop *string
}

type customProps struct {
@@ -262,17 +262,17 @@ func customDefaultsModuleFactory() android.Module {
}

type EmbeddedAttr struct {
	Embedded_attr string
	Embedded_attr *string
}

type OtherEmbeddedAttr struct {
	Other_embedded_attr string
	Other_embedded_attr *string
}

type customBazelModuleAttributes struct {
	EmbeddedAttr
	*OtherEmbeddedAttr
	String_prop      string
	String_ptr_prop  *string
	String_list_prop []string
	Arch_paths       bazel.LabelListAttribute
}
@@ -296,7 +296,7 @@ func customBp2BuildMutator(ctx android.TopDownMutatorContext) {
		paths.ResolveExcludes()

		attrs := &customBazelModuleAttributes{
			String_prop:      m.props.String_prop,
			String_ptr_prop:  m.props.String_ptr_prop,
			String_list_prop: m.props.String_list_prop,
			Arch_paths:       paths,
		}
+9 −1
Original line number Diff line number Diff line
@@ -388,7 +388,15 @@ func bp2buildResolveCppStdValue(c_std *string, cpp_std *string, gnu_extensions *
	}

	cStdVal, cppStdVal = maybeReplaceGnuToC(gnu_extensions, cStdVal, cppStdVal)
	return &cStdVal, &cppStdVal
	var c_std_prop, cpp_std_prop *string
	if cStdVal != "" {
		c_std_prop = &cStdVal
	}
	if cppStdVal != "" {
		cpp_std_prop = &cppStdVal
	}

	return c_std_prop, cpp_std_prop
}

// bp2BuildParseCompilerProps returns copts, srcs and hdrs and other attributes.
Loading