1#!/usr/bin/env python3 2 3import sys, os, re 4 5srcdir = os.getenv ('srcdir', os.path.dirname (__file__)) 6base_srcdir = os.getenv ('base_srcdir', srcdir) 7 8os.chdir (srcdir) 9 10def removeprefix(s): 11 abs_path = os.path.join(base_srcdir, s) 12 return os.path.relpath(abs_path, srcdir) 13 14HBHEADERS = [os.path.basename (x) for x in os.getenv ('HBHEADERS', '').split ()] or \ 15 [x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith ('.h')] 16 17HBSOURCES = [ 18 removeprefix(x) for x in os.getenv ('HBSOURCES', '').split () 19] or [ 20 x for x in os.listdir ('.') if x.startswith ('hb') and x.endswith (('.cc', '.hh')) 21] 22 23 24stat = 0 25 26print ('Checking that public header files #include "hb-common.h" or "hb.h" first (or none)') 27for x in HBHEADERS: 28 if x == 'hb.h' or x == 'hb-common.h': continue 29 with open (x, 'r', encoding='utf-8') as f: content = f.read () 30 first = re.findall (r'#.*include.*', content)[0] 31 if first not in ['#include "hb.h"', '#include "hb-common.h"']: 32 print ('failure on %s' % x) 33 stat = 1 34 35print ('Checking that source files #include a private header first (or none)') 36for x in HBSOURCES: 37 with open (x, 'r', encoding='utf-8') as f: content = f.read () 38 includes = re.findall (r'#.*include.*', content) 39 if includes: 40 if not len (re.findall (r'".*\.hh"', includes[0])): 41 print ('failure on %s' % x) 42 stat = 1 43 44print ('Checking that there is no #include <hb-*.h>') 45for x in HBHEADERS + HBSOURCES: 46 with open (x, 'r', encoding='utf-8') as f: content = f.read () 47 if re.findall ('#.*include.*<.*hb', content): 48 print ('failure on %s' % x) 49 stat = 1 50 51sys.exit (stat) 52