]> git.pld-linux.org Git - packages/rpm-build-tools.git/blame - check-shebang.py
Add awk to shebangs that need fixing
[packages/rpm-build-tools.git] / check-shebang.py
CommitLineData
ba239351
AM
1#!/usr/bin/python3
2
178671a1 3# thisscript.py --buildroot=~/tmp/somepackage ~/rpm/BUILD/somepackage/
b7387090
AM
4
5import argparse
ba289b0b 6import hashlib
ba239351
AM
7import io
8import os
9import re
10import sys
11
b7387090
AM
12parser = argparse.ArgumentParser()
13parser.add_argument('sourcedir', help='RPM_SOURCE_DIR directory')
14parser.add_argument("--buildroot", help="RPM_BUILD_ROOT directory")
15args = parser.parse_args()
16
ba239351
AM
17rep = {
18 'python2': [],
19 'python3': [],
20 'perl': [],
2d40e6ee 21 'ruby': [],
cd0845cf 22 'bash': [],
8829b228 23 'awk': [],
ba239351
AM
24}
25
b7387090
AM
26skip_files = [".h", ".c", ".cc", ".gif", ".png", ".jpg", ".ko", ".gz", ".o"]
27
ba289b0b
AM
28def hash(fname):
29 hash_alg = hashlib.sha256()
30 with open(fname, "rb") as f:
31 for chunk in iter(lambda: f.read(4096), b""):
32 hash_alg.update(chunk)
33 return hash_alg.hexdigest()
34
35rpm_build_root_files = []
b7387090
AM
36if args.buildroot:
37 print("%s: Caching `%s' files..." % (sys.argv[0], args.buildroot))
b7387090
AM
38 for root, dirs, files in os.walk(args.buildroot):
39 for name in files:
40 fname, fext = os.path.splitext(name)
41 if fext in skip_files:
42 continue
ba289b0b 43 fpath = os.path.join(root, name)
58c0fa8a
JR
44 try:
45 rpm_build_root_files.append(hash(fpath))
46 except FileNotFoundError:
47 pass
b7387090 48 print("%s: Caching done." % (sys.argv[0]))
ba239351 49
b7387090 50for root, dirs, files in os.walk(args.sourcedir):
ba239351
AM
51 for name in files:
52 fname, fext = os.path.splitext(name)
53 if fext in skip_files:
54 continue
55
56 fpath = os.path.join(root, name)
58c0fa8a
JR
57 try:
58 with open(fpath, 'rt', encoding='utf-8', errors='replace') as f:
59 try:
60 fline = f.read(128)
61 f = io.StringIO(fline)
62 shebang = f.readline()
63 except UnicodeDecodeError as e:
64 print("%s: skipping file `%s': %s" % (sys.argv[0], fpath, e), file=sys.stderr)
65 continue
66 if re.compile(r'^#!\s*/usr/bin/env python\s').match(shebang) \
67 or re.compile(r'^#!\s*/usr/bin/env\s+python2\s').match(shebang) \
68 or re.compile(r'^#!\s*/usr/bin/python\s').match(shebang):
69 rep['python2'].append(fpath)
70 elif re.compile(r'^#!\s*/usr/bin/env\s+python3\s').match(shebang):
71 rep['python3'].append(fpath)
72 elif re.compile(r'^#!\s*/usr/bin/env\s+perl\s').match(shebang):
73 rep['perl'].append(fpath)
74 elif re.compile(r'^#!\s*/usr/bin/env\s+ruby\s').match(shebang):
75 rep['ruby'].append(fpath)
cd0845cf
JR
76 elif re.compile(r'^#!\s*/usr/bin/env\s+bash\s').match(shebang):
77 rep['bash'].append(fpath)
8829b228
JR
78 elif re.compile(r'^#!\s*/usr/bin/env\s+awk\s').match(shebang):
79 rep['awk'].append(fpath)
58c0fa8a
JR
80 except FileNotFoundError:
81 pass
ba239351 82
ba289b0b 83def gf(cmd, files):
b7387090
AM
84 newfiles = []
85 for f in files:
ba289b0b 86 if not rpm_build_root_files or hash(f) in rpm_build_root_files:
b7387090
AM
87 newfiles.append(f)
88 newfiles.sort()
ba289b0b
AM
89 if not newfiles:
90 return
91 print(cmd)
b7387090 92 for i in range(0, len(newfiles) - 1):
2c47d05a
AM
93 print(" %s \\\n" % os.path.relpath(newfiles[i], start=args.sourcedir), end='')
94 print(" %s\n" % os.path.relpath(newfiles[len(newfiles) - 1], start=args.sourcedir))
ba239351 95
178671a1 96print("\n# Copy from here:")
b7387090
AM
97print("# %s " % sys.argv[0], end='')
98if args.buildroot:
2c47d05a 99 print("--buildroot=%s " % args.buildroot, end='')
b7387090 100print("%s\n" % args.sourcedir)
ba239351 101
2d40e6ee 102gf("%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+python2(\s|$),#!%{__python}\\1,' -e '1s,#!\s*/usr/bin/env\s+python(\s|$),#!%{__python}\\1,' -e '1s,#!\s*/usr/bin/python(\s|$),#!%{__python}\\1,' \\",
ba289b0b 103 rep['python2'])
2d40e6ee
JR
104gf("%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+python3(\s|$),#!%{__python3}\\1,' \\", rep['python3'])
105gf("%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+perl(\s|$),#!%{__perl}\\1,' \\", rep['perl'])
106gf("%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+ruby(\s|$),#!%{__ruby}\\1,' \\", rep['ruby'])
cd0845cf 107gf("%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+bash(\s|$),#!/bin/bash\\1,' \\", rep['bash'])
8829b228 108gf("%{__sed} -E -i -e '1s,#!\s*/usr/bin/env\s+awk(\s|$),#!/bin/awk\\1,' \\", rep['awk'])
This page took 0.057353 seconds and 4 git commands to generate.