Add mkstrip

Bug: 181797530
Test: rbcrun build/make/tests/run.rbc
Change-Id: I6b7ade400273cf5a4fd561322e8e9936bc9d8df6
diff --git a/core/product_config.rbc b/core/product_config.rbc
index 111e759..2432e64 100644
--- a/core/product_config.rbc
+++ b/core/product_config.rbc
@@ -62,7 +62,8 @@
     elif _options.format == "pretty":
         print(attr, "=", repr(value))
     elif _options.format == "make":
-        print(attr, ":=", value)
+        # Trim all spacing to a single space
+        print(attr, ":=", _mkstrip(value))
     else:
         fail("bad output format", _options.format)
 
@@ -432,6 +433,23 @@
     """Prints info."""
     print(message)
 
+def _mkstrip(s):
+    """Emulates Make's strip.
+
+    That is, removes string's leading and trailing whitespace characters and
+    replaces any sequence of whitespace characters with with a single space.
+    """
+    result = ""
+    was_space = False
+    for ch in s.strip().elems():
+        is_space = ch.isspace()
+        if not is_space:
+            if was_space:
+                result += " "
+            result += ch
+        was_space = is_space
+    return result
+
 def __get_options():
     """Returns struct containing runtime global settings."""
     settings = dict(
@@ -479,6 +497,7 @@
     mkinfo = _mkinfo,
     mkerror = _mkerror,
     mkwarning = _mkwarning,
+    mkstrip = _mkstrip,
     printvars = _printvars,
     product_configuration = _product_configuration,
     require_artifacts_in_path = _require_artifacts_in_path,
diff --git a/tests/run.rbc b/tests/run.rbc
index b13f835..6478159 100644
--- a/tests/run.rbc
+++ b/tests/run.rbc
@@ -1,4 +1,3 @@
-
 # Copyright 2021 Google LLC
 #
 # Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,6 +27,9 @@
     if expected != actual:
         fail("Expected %s, got %s" % (expected, actual))
 
+# Unit tests for non-trivial runtime functions
+assert_eq("", rblf.mkstrip(" \n \t    "))
+assert_eq("a b c", rblf.mkstrip("  a b   \n  c \t"))
 
 globals, config = rblf.product_configuration("test/device", init)
 assert_eq(