vndk-def: Load LL-NDK and SP-NDK names

This commit loads LL-NDK and SP-NDK lib names from a file instead of
hard-coding them in the program.

Test: ./tests/run.py
Change-Id: Ia158f9d74fc22b4119f6f967e4d498e849eadf9e
diff --git a/vndk/tools/definition-tool/datasets/minimum_tag_file.csv b/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
new file mode 100644
index 0000000..865013d
--- /dev/null
+++ b/vndk/tools/definition-tool/datasets/minimum_tag_file.csv
@@ -0,0 +1,40 @@
+Path,Tag
+/system/${LIB}/libEGL.so,SP-NDK
+/system/${LIB}/libGLESv1_CM.so,SP-NDK
+/system/${LIB}/libGLESv2.so,SP-NDK
+/system/${LIB}/libGLESv3.so,SP-NDK
+/system/${LIB}/libandroid_net.so,LL-NDK
+/system/${LIB}/libc.so,LL-NDK
+/system/${LIB}/libdl.so,LL-NDK
+/system/${LIB}/liblog.so,LL-NDK
+/system/${LIB}/libm.so,LL-NDK
+/system/${LIB}/libnativewindow.so,SP-NDK
+/system/${LIB}/libstdc++.so,LL-NDK
+/system/${LIB}/libsync.so,SP-NDK
+/system/${LIB}/libvndksupport.so,LL-NDK
+/system/${LIB}/libvulkan.so,SP-NDK
+/system/${LIB}/libz.so,LL-NDK
+/system/${LIB}/vndk-sp/android.hardware.graphics.allocator@2.0.so,VNDK-SP
+/system/${LIB}/vndk-sp/android.hardware.graphics.common@1.0.so,VNDK-SP
+/system/${LIB}/vndk-sp/android.hardware.graphics.mapper@2.0.so,VNDK-SP
+/system/${LIB}/vndk-sp/android.hardware.renderscript@1.0.so,VNDK-SP
+/system/${LIB}/vndk-sp/android.hidl.base@1.0.so,VNDK-SP
+/system/${LIB}/vndk-sp/android.hidl.memory@1.0.so,VNDK-SP
+/system/${LIB}/vndk-sp/libRSCpuRef.so,VNDK-SP
+/system/${LIB}/vndk-sp/libRSDriver.so,VNDK-SP
+/system/${LIB}/vndk-sp/libRS_internal.so,VNDK-SP
+/system/${LIB}/vndk-sp/libbacktrace.so,VNDK-SP-Indirect
+/system/${LIB}/vndk-sp/libbase.so,VNDK-SP
+/system/${LIB}/vndk-sp/libbcinfo.so,VNDK-SP
+/system/${LIB}/vndk-sp/libblas.so,VNDK-SP-Indirect-Private
+/system/${LIB}/vndk-sp/libc++.so,VNDK-SP
+/system/${LIB}/vndk-sp/libcutils.so,VNDK-SP
+/system/${LIB}/vndk-sp/libhardware.so,VNDK-SP
+/system/${LIB}/vndk-sp/libhidlbase.so,VNDK-SP
+/system/${LIB}/vndk-sp/libhidlmemory.so,VNDK-SP
+/system/${LIB}/vndk-sp/libhidltransport.so,VNDK-SP
+/system/${LIB}/vndk-sp/libhwbinder.so,VNDK-SP
+/system/${LIB}/vndk-sp/libion.so,VNDK-SP
+/system/${LIB}/vndk-sp/liblzma.so,VNDK-SP-Indirect
+/system/${LIB}/vndk-sp/libunwind.so,VNDK-SP-Indirect
+/system/${LIB}/vndk-sp/libutils.so,VNDK-SP
diff --git a/vndk/tools/definition-tool/vndk_definition_tool.py b/vndk/tools/definition-tool/vndk_definition_tool.py
index a9ae049..4f8528f 100755
--- a/vndk/tools/definition-tool/vndk_definition_tool.py
+++ b/vndk/tools/definition-tool/vndk_definition_tool.py
@@ -698,62 +698,26 @@
     LL_NDK = 1
     SP_NDK = 2
 
-    LL_NDK_LIB_NAMES = (
-        'libc.so',
-        'libdl.so',
-        'liblog.so',
-        'libm.so',
-        'libstdc++.so',
-        'libvndksupport.so',
-        'libandroid_net.so',
-        'libz.so',
-    )
-
-    SP_NDK_LIB_NAMES = (
-        'libEGL.so',
-        'libGLESv1_CM.so',
-        'libGLESv2.so',
-        'libGLESv3.so',
-        'libnativewindow.so',
-        'libsync.so',
-        'libvulkan.so',
-    )
-
-    @staticmethod
-    def _create_pattern(names):
-        return '|'.join('(?:^\\/system\\/lib(?:64)?\\/' + re.escape(i) + '$)'
-                        for i in names)
-
-    @staticmethod
-    def _compile_path_matcher(names):
-        return re.compile(NDKLibDict._create_pattern(names))
-
-    @staticmethod
-    def _compile_multi_path_matcher(name_lists):
-        patt = '|'.join('(' + NDKLibDict._create_pattern(names) + ')'
-                        for names in name_lists)
-        return re.compile(patt)
-
     def __init__(self):
-        self.ll_ndk_patterns = self._compile_path_matcher(self.LL_NDK_LIB_NAMES)
-        self.sp_ndk_patterns = self._compile_path_matcher(self.SP_NDK_LIB_NAMES)
-        self.ndk_patterns = self._compile_multi_path_matcher(
-                (self.LL_NDK_LIB_NAMES, self.SP_NDK_LIB_NAMES))
+        script_dir = os.path.dirname(os.path.abspath(__file__))
+        self.tagged_paths = TaggedPathDict.create_from_csv_path(
+                os.path.join(script_dir, 'datasets', 'minimum_tag_file.csv'))
 
     def is_ll_ndk(self, path):
-        return self.ll_ndk_patterns.match(path)
+        return path in self.tagged_paths.ll_ndk
 
     def is_sp_ndk(self, path):
-        return self.sp_ndk_patterns.match(path)
+        return path in self.tagged_paths.sp_ndk
 
     def is_ndk(self, path):
-        return self.ndk_patterns.match(path)
+        return self.is_ll_ndk(path) or self.is_sp_ndk(path)
 
     def classify(self, path):
-        match = self.ndk_patterns.match(path)
-        if not match:
-            return 0
-        return match.lastindex
+        if self.is_ll_ndk(path):
+            return NDKLibDict.LL_NDK
+        if self.is_sp_ndk(path):
+            return NDKLibDict.SP_NDK
+        return NDKLibDict.NOT_NDK
 
 NDK_LIBS = NDKLibDict()