diff --git a/core/product_config.rbc b/core/product_config.rbc index ddf55c7a9d..018932366e 100644 --- a/core/product_config.rbc +++ b/core/product_config.rbc @@ -405,12 +405,26 @@ def _soong_config_get(g, nsname, var): """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 77b6e89fdb..2d35e85e81 100644 --- a/tests/run.rbc +++ b/tests/run.rbc @@ -73,6 +73,14 @@ assert_eq("foo.c no_folder", rblf.notdir("src/foo.c no_folder")) 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")