diff options
| author | 2021-07-22 09:12:25 +0000 | |
|---|---|---|
| committer | 2021-07-22 09:12:25 +0000 | |
| commit | be67b7a7eb58f4faab5ddbc8a21b6f07da92dc34 (patch) | |
| tree | d7f07cf75ad65ed5002be0814f0e264cb0e2cef0 | |
| parent | 5d96f64d043af9cbd2f95d5dc076c74b7906b32f (diff) | |
| parent | 1b513458b163c393e2d7fe14966d9b4432852675 (diff) | |
Merge "manifest_check.py: trim namespace part of the module, if needed."
| -rwxr-xr-x | scripts/manifest_check.py | 20 | ||||
| -rwxr-xr-x | scripts/manifest_check_test.py | 9 |
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): |