67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
# -*- 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)
|