Merge "Correct abspath implementation"
diff --git a/core/product_config.rbc b/core/product_config.rbc
index ddf55c7..0189323 100644
--- a/core/product_config.rbc
+++ b/core/product_config.rbc
@@ -405,12 +405,26 @@
"""Gets to the value of the variable in the namespace."""
return g.get(_soong_config_namespaces_key, {}).get(nsname, {}).get(var, None)
-
-def _abspath(path):
+def _abspath(paths):
"""Provided for compatibility, to be removed later."""
- if type(path) == "list":
- path = " ".join(path)
- return rblf_shell("realpath "+path)
+ cwd = rblf_shell('pwd')
+ results = []
+ for path in __words(paths):
+ if path[0] != "/":
+ path = cwd + "/" + path
+
+ resultparts = []
+ for part in path.split('/'):
+ if part == "." or part == "":
+ continue
+ elif part == "..":
+ if resultparts:
+ resultparts.pop()
+ else:
+ resultparts.append(part)
+ results.append("/" + "/".join(resultparts))
+
+ return " ".join(results)
def _addprefix(prefix, string_or_list):
diff --git a/tests/run.rbc b/tests/run.rbc
index 77b6e89..2d35e85 100644
--- a/tests/run.rbc
+++ b/tests/run.rbc
@@ -73,6 +73,14 @@
assert_eq("", rblf.notdir("/"))
assert_eq("", rblf.notdir(""))
+cwd = rblf_shell('pwd')
+assert_eq(cwd+"/foo/bar", rblf.abspath("foo/bar"))
+assert_eq(cwd+"/bar", rblf.abspath("foo/.././bar"))
+assert_eq(cwd+"/bar", rblf.abspath("foo/..////bar//"))
+assert_eq("/foo/baz", rblf.abspath("/foo/bar/../baz"))
+assert_eq(cwd+"/foo/bar "+cwd+"/foo/baz", rblf.abspath("foo/bar foo/baz"))
+assert_eq("/baz", rblf.abspath("/../../../../../../../../../../../../../../../../baz"))
+
assert_eq(
["build/make/tests/board.rbc", "build/make/tests/board_input_vars.rbc"],
rblf.expand_wildcard("build/make/tests/board*.rbc")