Merge "Make mk2rbc output paths relative to android root"
diff --git a/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc.go
index 77394d9..8225df6 100644
--- a/mk2rbc/mk2rbc.go
+++ b/mk2rbc/mk2rbc.go
@@ -163,6 +163,21 @@
var identifierFullMatchRegex = regexp.MustCompile("^[a-zA-Z_][a-zA-Z0-9_]*$")
+func RelativeToCwd(path string) (string, error) {
+ cwd, err := os.Getwd()
+ if err != nil {
+ return "", err
+ }
+ path, err = filepath.Rel(cwd, path)
+ if err != nil {
+ return "", err
+ }
+ if strings.HasPrefix(path, "../") {
+ return "", fmt.Errorf("Could not make path relative to current working directory: " + path)
+ }
+ return path, nil
+}
+
// Conversion request parameters
type Request struct {
MkFile string // file to convert
@@ -320,6 +335,14 @@
loadedSubConfigs := make(map[string]string)
for _, mi := range gctx.starScript.inherited {
uri := mi.path
+ if strings.HasPrefix(uri, "/") && !strings.HasPrefix(uri, "//") {
+ var err error
+ uri, err = RelativeToCwd(uri)
+ if err != nil {
+ panic(err)
+ }
+ uri = "//" + uri
+ }
if m, ok := loadedSubConfigs[uri]; ok {
// No need to emit load statement, but fix module name.
mi.moduleLocalName = m
diff --git a/mk2rbc/mk2rbc/mk2rbc.go b/mk2rbc/mk2rbc/mk2rbc.go
index cc83430..08c363f 100644
--- a/mk2rbc/mk2rbc/mk2rbc.go
+++ b/mk2rbc/mk2rbc/mk2rbc.go
@@ -187,7 +187,7 @@
quit(fmt.Errorf("the product launcher input variables file failed to convert"))
}
- err := writeGenerated(*launcher, mk2rbc.Launcher(outputFilePath(files[0]), outputFilePath(*inputVariables),
+ err := writeGenerated(*launcher, mk2rbc.Launcher(outputModulePath(files[0]), outputModulePath(*inputVariables),
mk2rbc.MakePath2ModuleName(files[0])))
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %s", files[0], err)
@@ -205,7 +205,7 @@
quit(fmt.Errorf("the board launcher input variables file failed to convert"))
}
err := writeGenerated(*boardlauncher, mk2rbc.BoardLauncher(
- outputFilePath(files[0]), outputFilePath(*inputVariables)))
+ outputModulePath(files[0]), outputModulePath(*inputVariables)))
if err != nil {
fmt.Fprintf(os.Stderr, "%s: %s", files[0], err)
ok = false
@@ -402,6 +402,15 @@
return path
}
+func outputModulePath(mkFile string) string {
+ path := outputFilePath(mkFile)
+ path, err := mk2rbc.RelativeToCwd(path)
+ if err != nil {
+ panic(err)
+ }
+ return "//" + path
+}
+
func writeGenerated(path string, contents string) error {
if err := os.MkdirAll(filepath.Dir(path), os.ModeDir|os.ModePerm); err != nil {
return err
diff --git a/mk2rbc/soong_variables_test.go b/mk2rbc/soong_variables_test.go
index c883882..58e98f6 100644
--- a/mk2rbc/soong_variables_test.go
+++ b/mk2rbc/soong_variables_test.go
@@ -42,8 +42,8 @@
{"BUILD_ID", VarClassSoong, starlarkTypeString},
{"PLATFORM_SDK_VERSION", VarClassSoong, starlarkTypeInt},
{"DEVICE_PACKAGE_OVERLAYS", VarClassSoong, starlarkTypeList},
- {"ENABLE_CFI", VarClassSoong, starlarkTypeBool},
- {"ENABLE_PREOPT", VarClassSoong, starlarkTypeBool},
+ {"ENABLE_CFI", VarClassSoong, starlarkTypeString},
+ {"ENABLE_PREOPT", VarClassSoong, starlarkTypeString},
}}
if !reflect.DeepEqual(expected, actual) {
t.Errorf("\nExpected: %v\n Actual: %v", expected, actual)