summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ulyana Trafimovich <skvadrik@google.com> 2021-07-22 09:12:25 +0000
committer Gerrit Code Review <noreply-gerritcodereview@google.com> 2021-07-22 09:12:25 +0000
commitbe67b7a7eb58f4faab5ddbc8a21b6f07da92dc34 (patch)
treed7f07cf75ad65ed5002be0814f0e264cb0e2cef0
parent5d96f64d043af9cbd2f95d5dc076c74b7906b32f (diff)
parent1b513458b163c393e2d7fe14966d9b4432852675 (diff)
Merge "manifest_check.py: trim namespace part of the module, if needed."
-rwxr-xr-xscripts/manifest_check.py20
-rwxr-xr-xscripts/manifest_check_test.py9
2 files changed, 29 insertions, 0 deletions
diff --git a/scripts/manifest_check.py b/scripts/manifest_check.py
index 8168fbf6a..4ef4399ca 100755
--- a/scripts/manifest_check.py
+++ b/scripts/manifest_check.py
@@ -90,6 +90,15 @@ def enforce_uses_libraries(manifest, required, optional, relax, is_apk, path):
else:
manifest_required, manifest_optional, tags = extract_uses_libs_xml(manifest)
+ # Trim namespace component. Normally Soong does that automatically when it
+ # handles module names specified in Android.bp properties. However not all
+ # <uses-library> entries in the manifest correspond to real modules: some of
+ # the optional libraries may be missing at build time. Therefor this script
+ # accepts raw module names as spelled in Android.bp/Amdroid.mk and trims the
+ # optional namespace part manually.
+ required = trim_namespace_parts(required)
+ optional = trim_namespace_parts(optional)
+
if manifest_required == required and manifest_optional == optional:
return None
@@ -118,6 +127,17 @@ def enforce_uses_libraries(manifest, required, optional, relax, is_apk, path):
return errmsg
+MODULE_NAMESPACE = re.compile("^//[^:]+:")
+
+def trim_namespace_parts(modules):
+ """Trim the namespace part of each module, if present. Leave only the name."""
+
+ trimmed = []
+ for module in modules:
+ trimmed.append(MODULE_NAMESPACE.sub('', module))
+ return trimmed
+
+
def extract_uses_libs_apk(badging):
"""Extract <uses-library> tags from the manifest of an APK."""
diff --git a/scripts/manifest_check_test.py b/scripts/manifest_check_test.py
index 7159bdd74..e3e8ac468 100755
--- a/scripts/manifest_check_test.py
+++ b/scripts/manifest_check_test.py
@@ -183,6 +183,15 @@ class EnforceUsesLibrariesTest(unittest.TestCase):
optional_uses_libraries=['bar'])
self.assertTrue(matches)
+ def test_mixed_with_namespace(self):
+ xml = self.xml_tmpl % ('\n'.join([uses_library_xml('foo'),
+ uses_library_xml('bar', required_xml(False))]))
+ apk = self.apk_tmpl % ('\n'.join([uses_library_apk('foo'),
+ uses_library_apk('bar', required_apk(False))]))
+ matches = self.run_test(xml, apk, uses_libraries=['//x/y/z:foo'],
+ optional_uses_libraries=['//x/y/z:bar'])
+ self.assertTrue(matches)
+
class ExtractTargetSdkVersionTest(unittest.TestCase):
def run_test(self, xml, apk, version):