3 # thisscript.py --buildroot=~/tmp/somepackage ~/rpm/BUILD/somepackage/
12 parser = argparse.ArgumentParser()
13 parser.add_argument('sourcedir', help='RPM_SOURCE_DIR directory')
14 parser.add_argument("--buildroot", help="RPM_BUILD_ROOT directory")
15 args = parser.parse_args()
23 skip_files = [".h", ".c", ".cc", ".gif", ".png", ".jpg", ".ko", ".gz", ".o"]
26 hash_alg = hashlib.sha256()
27 with open(fname, "rb") as f:
28 for chunk in iter(lambda: f.read(4096), b""):
29 hash_alg.update(chunk)
30 return hash_alg.hexdigest()
32 rpm_build_root_files = []
34 print("%s: Caching `%s' files..." % (sys.argv[0], args.buildroot))
35 for root, dirs, files in os.walk(args.buildroot):
37 fname, fext = os.path.splitext(name)
38 if fext in skip_files:
40 fpath = os.path.join(root, name)
41 rpm_build_root_files.append(hash(fpath))
42 print("%s: Caching done." % (sys.argv[0]))
44 for root, dirs, files in os.walk(args.sourcedir):
46 fname, fext = os.path.splitext(name)
47 if fext in skip_files:
50 fpath = os.path.join(root, name)
51 with open(fpath, 'rt', encoding='utf-8', errors='replace') as f:
54 f = io.StringIO(fline)
55 shebang = f.readline()
56 except UnicodeDecodeError as e:
57 print("%s: skipping file `%s': %s" % (sys.argv[0], fpath, e), file=sys.stderr)
59 if re.compile(r'^#!/usr/bin/env python\s').match(shebang) \
60 or re.compile(r'^#!/usr/bin/env python2\s').match(shebang) \
61 or re.compile(r'^#!/usr/bin/python\s').match(shebang):
62 rep['python2'].append(fpath)
63 elif re.compile(r'^#!/usr/bin/env python3\s').match(shebang):
64 rep['python3'].append(fpath)
65 elif re.compile(r'^#!/usr/bin/env perl\s').match(shebang):
66 rep['perl'].append(fpath)
71 if not rpm_build_root_files or hash(f) in rpm_build_root_files:
77 for i in range(0, len(newfiles) - 1):
78 print("\t%s \\\n" % os.path.relpath(newfiles[i], start=args.sourcedir), end='')
79 print("\t%s\n" % os.path.relpath(newfiles[len(newfiles) - 1], start=args.sourcedir))
81 print("\n# Copy from here:")
82 print("# %s " % sys.argv[0], end='')
84 print("--root=%s " % args.buildroot, end='')
85 print("%s\n" % args.sourcedir)
87 gf("sed -i -e '1s,#!/usr/bin/env python2,%{__python},' -e '1s,#!/usr/bin/env python,%{__python},' -e '1s,#!/usr/bin/python,%{__python},' \\",
89 gf("sed -i -e '1s,#!/usr/bin/env python3,%{__python3},' \\", rep['python3'])
90 gf("sed -i -e '1s,#!/usr/bin/env perl,%{__perl},' \\", rep['perl'])