2023-04-04 10:59:42 +01:00
|
|
|
import yaml
|
|
|
|
|
import io
|
|
|
|
|
import os
|
2023-04-05 18:53:10 +01:00
|
|
|
import glob
|
2023-04-04 10:59:42 +01:00
|
|
|
|
|
|
|
|
class KextSource:
|
2023-04-06 21:20:20 +01:00
|
|
|
src_languages = {
|
|
|
|
|
'C': [ '.c' ],
|
|
|
|
|
'CXX': [ '.cpp' ],
|
|
|
|
|
'ASM': [ '.S' ],
|
|
|
|
|
}
|
2023-04-05 18:53:10 +01:00
|
|
|
|
|
|
|
|
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
|
2023-04-04 10:59:42 +01:00
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
2023-04-06 21:20:20 +01:00
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
2023-04-04 10:59:42 +01:00
|
|
|
def name(self):
|
|
|
|
|
return self.__kext_info['name']
|
|
|
|
|
|
|
|
|
|
|
2023-04-06 21:20:20 +01:00
|
|
|
def description(self):
|
|
|
|
|
return self.__kext_info['description']
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def id(self, underscores=False):
|
|
|
|
|
if underscores:
|
|
|
|
|
return self.__kext_info['id'].replace('.', '_').replace('-', '_')
|
|
|
|
|
|
2023-04-04 10:59:42 +01:00
|
|
|
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']
|
|
|
|
|
|
|
|
|
|
|
2023-04-06 21:20:20 +01:00
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
2023-04-04 10:59:42 +01:00
|
|
|
def src_dirpath(self):
|
|
|
|
|
return self.__src_dir_path
|