Files
mango/tools/kexttool/kext.py

107 lines
2.4 KiB
Python

import yaml
import io
import os
import glob
class KextSource:
src_languages = {
'C': [ '.c' ],
'CXX': [ '.cpp' ],
'ASM': [ '.S' ],
}
def scan(path):
result = []
scan_arg = os.path.join(path, '**/extension.yaml')
for filename in glob.iglob(scan_arg, recursive=True):
try:
kext_src = KextSource(filename)
except Exception as e:
continue
result.append(kext_src)
return result
def __init__(self, info_file):
self.__src_dir_path = os.path.relpath(os.path.dirname(info_file), os.getcwd())
with io.open(info_file, 'r', encoding='utf-8') as info_fp:
self.__kext_info = yaml.safe_load(info_fp)
def __extension_is_of_lang(ext, lang_name):
for name, exts in KextSource.src_languages.items():
if name == lang_name and ext in exts:
return True
return False
def __extension_get_lang(ext):
for name, exts in src_languages.items():
if ext in exts:
return name
return None
def name(self):
return self.__kext_info['name']
def description(self):
return self.__kext_info['description']
def id(self, underscores=False):
if underscores:
return self.__kext_info['id'].replace('.', '_').replace('-', '_')
return self.__kext_info['id']
def license(self):
return self.__kext_info['license']
def copyright(self):
return self.__kext_info['copyright']
def sources(self):
return self.__kext_info['sources']
def source_languages(self):
langs = []
for src in self.__kext_info['sources']:
ext = os.path.splitext(src)[1]
lang = KextSource.__extension_get_lang(ext)
if lang == None:
continue
langs.append(lang)
return langs
def sources_filepath(self, lang=None):
sources = []
for s in self.__kext_info['sources']:
if lang != None:
ext = os.path.splitext(s)[1]
if KextSource.__extension_is_of_lang(lang, ext):
continue
full_path = os.path.join(self.__src_dir_path, s)
sources.append(full_path)
return sources
def src_dirpath(self):
return self.__src_dir_path