Files
mcu-codegen-template/tools/verify_shared.py
T

67 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- coding: utf-8 -*-
"""验证共享层结构:uvprojx XML 合法性 + 所有 FilePath/IncludePath 相对解析存在。"""
import os, sys, re, xml.etree.ElementTree as ET
ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJS = [
('App', 'MDK-ARM/project.uvprojx', 'App'),
('Bootloader', 'MDK-ARM/Bootloader.uvprojx', 'Bootloader'),
]
ok = True
for name, rel, proj in PROJS:
p = os.path.join(ROOT, proj, rel)
d = os.path.dirname(p)
print('===== %s (%s) =====' % (name, rel))
# 1) XML 合法性
try:
tree = ET.parse(p)
print(' XML: 合法')
except Exception as e:
print(' XML: 非法 -> %s' % e)
ok = False
continue
# 2) FilePath 存在性
missing = []
for fp in tree.iter('FilePath'):
v = fp.text or ''
if not v.strip():
continue
full = os.path.normpath(os.path.join(d, v))
if not os.path.isfile(full):
missing.append(v)
print(' FilePath: %d 个,缺失 %d 个' % (
len(list(tree.iter('FilePath'))), len(missing)))
for m in missing[:10]:
print(' MISSING: %s' % m)
ok = False
# 3) IncludePath 存在性(目录)
inc_missing = []
for ip in tree.iter('IncludePath'):
v = ip.text or ''
for seg in v.split(';'):
if not seg.strip():
continue
full = os.path.normpath(os.path.join(d, seg))
if not os.path.isdir(full):
inc_missing.append(seg)
print(' IncludePath 段: 缺失 %d 个' % len(inc_missing))
for m in inc_missing[:10]:
print(' MISSING: %s' % m)
ok = False
# 4) 是否引用对方工程(除 Shared/Drivers 外)
cross = []
for fp in tree.iter('FilePath'):
v = fp.text or ''
low = v.lower()
if ('..\\..\\' in low) and ('shared' not in low) and ('drivers' not in low):
cross.append(v)
print(' 跨工程引用(非 Shared/Drivers: %d 个' % len(cross))
for c in cross[:10]:
print(' CROSS: %s' % c)
if cross:
ok = False
print('\n%s' % ('=== 全部通过 ✓ ===' if ok else '=== 存在缺失 ✗ ==='))
sys.exit(0 if ok else 1)