Add mksort implementation
Bug: 218736658
Test: ./out/rbcrun ./build/make/tests/run.rbc
Change-Id: I0069e7059453c16d299cc650f56c320d905f1958
diff --git a/core/product_config.rbc b/core/product_config.rbc
index 0187251..8617fa1 100644
--- a/core/product_config.rbc
+++ b/core/product_config.rbc
@@ -676,6 +676,20 @@
return out_words if type(s) == "list" else " ".join(out_words)
+def _mksort(input):
+ """Emulate Make's sort.
+
+ This is unique from a regular sort in that it also strips
+ the input, and removes duplicate words from the input.
+ """
+ input = sorted(__words(input))
+ result = []
+ for w in input:
+ if len(result) == 0 or result[-1] != w:
+ result.append(w)
+ return result
+
+
def _mkstrip(s):
"""Emulates Make's strip.
@@ -785,6 +799,7 @@
mkerror = _mkerror,
mkpatsubst = _mkpatsubst,
mkwarning = _mkwarning,
+ mksort = _mksort,
mkstrip = _mkstrip,
mksubst = _mksubst,
notdir = _notdir,
diff --git a/tests/run.rbc b/tests/run.rbc
index 82a5e72..58cc4d6 100644
--- a/tests/run.rbc
+++ b/tests/run.rbc
@@ -32,6 +32,9 @@
fail("Expected '%s', got '%s'" % (expected, actual))
# Unit tests for non-trivial runtime functions
+assert_eq(["a", "b", "c"], rblf.mksort("b a c c"))
+assert_eq(["a", "b", "c"], rblf.mksort(["b", "a", "c", "c"]))
+
assert_eq("", rblf.mkstrip(" \n \t "))
assert_eq("a b c", rblf.mkstrip(" a b \n c \t"))
assert_eq(1, rblf.mkstrip(1))