1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
#!/usr/bin/python
# (C) 2018 Jack Lloyd
# Botan is released under the Simplified BSD License (see license.txt)
# Scans all source and test files and makes sure we are not using a
# BOTAN_HAS_xxx macro which is not actually defined anywhere.
from configure import ModuleInfo, load_info_files
import os
import re
import logging
src_dir = 'src'
lib_dir = os.path.join(src_dir, 'lib')
info_modules = load_info_files(lib_dir, 'Modules', "info.txt", ModuleInfo)
all_defines = set()
for module in info_modules.values():
for define in module._defines:
all_defines.add(define)
extras = ['MP_DWORD', 'VALGRIND', 'SANITIZER_UNDEFINED',
'ONLINE_REVOCATION_CHECKS', 'NIST_PRIME_REDUCERS_W32']
for extra in extras:
all_defines.add(extra)
macro = re.compile('BOTAN_HAS_([A-Z0-9_]+)')
for dirname, subdirs, files in os.walk(src_dir):
for fname in files:
if fname.endswith('.h') or fname.endswith('.cpp'):
contents = open(os.path.join(dirname, fname)).read()
for m in re.finditer(macro, contents):
if m.group(1) not in all_defines:
logging.error('In %s found unknown feature macro %s' % (fname, m.group(1)))
|