| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- #!/usr/bin/env python
- import json
- import os
- import pprint
- import subprocess
- import sys
- # =============================================================================
- # Service funcs
- # =============================================================================
- def _build_path(path, *paths):
- return str(os.path.normpath(os.path.join(path, *paths)).replace('\\', '/'))
- def _unify_paths(path_list):
- return [_build_path(p) for p in path_list]
- def _exclude_by_pat_list(path_list, ignore_list):
- print('- Applying ignore list')
- path_list_res = list(path_list)
- for ign in ignore_list:
- if len(ign.strip()):
- for p in path_list:
- if p.find(ign) != -1:
- try:
- path_list_res.remove(p)
- except ValueError:
- pass
- return path_list_res
- def _file2linelist(path):
- with open(path) as f:
- lines = [line.rstrip() for line in f]
- return [str(line) for line in lines]
- # =============================================================================
- # Test funcs
- # =============================================================================
- def get_idf_path(path, *paths):
- IDF_PATH = os.getenv('IDF_PATH')
- return _build_path(IDF_PATH, path, *paths)
- def _get_apps(target, build_system):
- print('- Getting paths of apps')
- args = [sys.executable,
- get_idf_path('tools/find_apps.py'),
- '-p',
- get_idf_path('examples'),
- '--recursive',
- '--target', target,
- '--build-system', build_system]
- output = subprocess.check_output(args).decode('utf-8')
- o_list = output.split('\n')
- json_list = []
- for j in o_list:
- if j:
- json_list.append(json.loads(j))
- app_paths = []
- for j in json_list:
- app_paths.append(j['app_dir'])
- return _unify_paths(app_paths)
- def get_apps(target, build_system, ignorelist):
- apps = _get_apps(target, build_system)
- if len(ignorelist):
- return _exclude_by_pat_list(apps, ignorelist)
- else:
- return apps
- def get_cmake_ignore_list():
- print('- Getting CMake ignore list')
- return _file2linelist(
- get_idf_path('tools', 'ci',
- 'check_examples_cmake_make-cmake_ignore.txt'))
- def get_make_ignore_list():
- print('- Getting Make ignore list')
- return _file2linelist(
- get_idf_path('tools', 'ci',
- 'check_examples_cmake_make-make_ignore.txt'))
- def diff(first, second):
- print('- Comparing...')
- first = set(first)
- second = set(second)
- res = list(first - second) + list(second - first)
- return res
- def main():
- cmake_ignore = get_cmake_ignore_list()
- make_ignore = get_make_ignore_list()
- cmakes = get_apps('esp32', 'cmake', cmake_ignore)
- makes = get_apps('esp32', 'make', make_ignore)
- res = diff(cmakes, makes)
- if len(res):
- pp = pprint.PrettyPrinter(indent=4)
- print(
- '[ ERROR ] Some projects are not containing Make and Cmake project files:'
- )
- pp.pprint(res)
- raise ValueError('Test is not passed')
- else:
- print('[ DONE ]')
- if __name__ == '__main__':
- main()
|