mirror of
				https://github.com/espressif/esp-idf.git
				synced 2025-11-04 06:11:06 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			124 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#!/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()
 |