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