xref: /openbmc/openbmc/poky/scripts/gen-lockedsig-cache (revision eb8dc40360f0cfef56fb6947cc817a547d6d9bc6)
1*eb8dc403SDave Cobbley#!/usr/bin/env python3
2*eb8dc403SDave Cobbley
3*eb8dc403SDave Cobbleyimport os
4*eb8dc403SDave Cobbleyimport sys
5*eb8dc403SDave Cobbleyimport glob
6*eb8dc403SDave Cobbleyimport shutil
7*eb8dc403SDave Cobbleyimport errno
8*eb8dc403SDave Cobbley
9*eb8dc403SDave Cobbleydef mkdir(d):
10*eb8dc403SDave Cobbley    try:
11*eb8dc403SDave Cobbley        os.makedirs(d)
12*eb8dc403SDave Cobbley    except OSError as e:
13*eb8dc403SDave Cobbley        if e.errno != errno.EEXIST:
14*eb8dc403SDave Cobbley            raise e
15*eb8dc403SDave Cobbley
16*eb8dc403SDave Cobbleyif len(sys.argv) < 5:
17*eb8dc403SDave Cobbley    print("Incorrect number of arguments specified")
18*eb8dc403SDave Cobbley    print("syntax: gen-lockedsig-cache <locked-sigs.inc> <input-cachedir> <output-cachedir> <nativelsbstring> [filterfile]")
19*eb8dc403SDave Cobbley    sys.exit(1)
20*eb8dc403SDave Cobbley
21*eb8dc403SDave Cobbleyfilterlist = []
22*eb8dc403SDave Cobbleyif len(sys.argv) > 5:
23*eb8dc403SDave Cobbley    print('Reading filter file %s' % sys.argv[5])
24*eb8dc403SDave Cobbley    with open(sys.argv[5]) as f:
25*eb8dc403SDave Cobbley        for l in f.readlines():
26*eb8dc403SDave Cobbley            if ":" in l:
27*eb8dc403SDave Cobbley                filterlist.append(l.rstrip())
28*eb8dc403SDave Cobbley
29*eb8dc403SDave Cobbleyprint('Reading %s' % sys.argv[1])
30*eb8dc403SDave Cobbleysigs = []
31*eb8dc403SDave Cobbleywith open(sys.argv[1]) as f:
32*eb8dc403SDave Cobbley    for l in f.readlines():
33*eb8dc403SDave Cobbley        if ":" in l:
34*eb8dc403SDave Cobbley            task, sig = l.split()[0].rsplit(':', 1)
35*eb8dc403SDave Cobbley            if filterlist and not task in filterlist:
36*eb8dc403SDave Cobbley                print('Filtering out %s' % task)
37*eb8dc403SDave Cobbley            else:
38*eb8dc403SDave Cobbley                sigs.append(sig)
39*eb8dc403SDave Cobbley
40*eb8dc403SDave Cobbleyprint('Gathering file list')
41*eb8dc403SDave Cobbleyfiles = set()
42*eb8dc403SDave Cobbleyfor s in sigs:
43*eb8dc403SDave Cobbley    p = sys.argv[2] + "/" + s[:2] + "/*" + s + "*"
44*eb8dc403SDave Cobbley    files |= set(glob.glob(p))
45*eb8dc403SDave Cobbley    p = sys.argv[2] + "/%s/" % sys.argv[4] + s[:2] + "/*" + s + "*"
46*eb8dc403SDave Cobbley    files |= set(glob.glob(p))
47*eb8dc403SDave Cobbley
48*eb8dc403SDave Cobbleyprint('Processing files')
49*eb8dc403SDave Cobbleyfor f in files:
50*eb8dc403SDave Cobbley    sys.stdout.write('Processing %s... ' % f)
51*eb8dc403SDave Cobbley    _, ext = os.path.splitext(f)
52*eb8dc403SDave Cobbley    if not ext in ['.tgz', '.siginfo', '.sig']:
53*eb8dc403SDave Cobbley        # Most likely a temp file, skip it
54*eb8dc403SDave Cobbley        print('skipping')
55*eb8dc403SDave Cobbley        continue
56*eb8dc403SDave Cobbley    dst = os.path.join(sys.argv[3], os.path.relpath(f, sys.argv[2]))
57*eb8dc403SDave Cobbley    destdir = os.path.dirname(dst)
58*eb8dc403SDave Cobbley    mkdir(destdir)
59*eb8dc403SDave Cobbley
60*eb8dc403SDave Cobbley    src = os.path.realpath(f)
61*eb8dc403SDave Cobbley    if os.path.exists(dst):
62*eb8dc403SDave Cobbley        os.remove(dst)
63*eb8dc403SDave Cobbley    if (os.stat(src).st_dev == os.stat(destdir).st_dev):
64*eb8dc403SDave Cobbley        print('linking')
65*eb8dc403SDave Cobbley        try:
66*eb8dc403SDave Cobbley            os.link(src, dst)
67*eb8dc403SDave Cobbley        except OSError as e:
68*eb8dc403SDave Cobbley            print('hard linking failed, copying')
69*eb8dc403SDave Cobbley            shutil.copyfile(src, dst)
70*eb8dc403SDave Cobbley    else:
71*eb8dc403SDave Cobbley        print('copying')
72*eb8dc403SDave Cobbley        shutil.copyfile(src, dst)
73*eb8dc403SDave Cobbley
74*eb8dc403SDave Cobbleyprint('Done!')
75