1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
From 4ec83c32024a8faf0a66a4275acbcd15751ee303 Mon Sep 17 00:00:00 2001
From: renhongxun <renhongxun@huawei.com>
Date: Wed, 29 Dec 2021 16:37:45 +0800
Subject: [PATCH] still in use of python scripts from old version
---
platform.in | 3 ++
scripts/Makefile.am | 8 +--
scripts/brp-python-bytecompile | 112 +++++++++++++++++++++++++++++++++++++++++
scripts/brp-python-hardlink | 25 +++++++++
4 files changed, 144 insertions(+), 4 deletions(-)
create mode 100644 scripts/brp-python-bytecompile
create mode 100755 scripts/brp-python-hardlink
diff --git a/platform.in b/platform.in
index 71496b8..748186e 100644
--- a/platform.in
+++ b/platform.in
@@ -82,10 +82,13 @@
#
%__arch_install_post @ARCH_INSTALL_POST@
+%_python_bytecompile_errors_terminate_build 0
+%_python_bytecompile_extra 1
# Standard brp-macro naming:
# convert all '-' in basename to '_', add two leading underscores.
%__brp_compress %{_rpmconfigdir}/brp-compress %{?_prefix}
+%__brp_python_bytecompile %{_rpmconfigdir}/brp-python-bytecompile "" "%{?_python_bytecompile_errors_terminate_build}" "%{?_python_bytecompile_extra}"
%__brp_strip %{_rpmconfigdir}/brp-strip %{__strip}
%__brp_strip_comment_note %{_rpmconfigdir}/brp-strip-comment-note %{__strip} %{__objdump}
%__brp_strip_static_archive %{_rpmconfigdir}/brp-strip-static-archive %{__strip}
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 4aed76b..5a1c494 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -6,8 +6,8 @@ AM_CFLAGS = @RPMCFLAGS@
CLEANFILES =
EXTRA_DIST = \
- brp-compress \
- brp-strip brp-strip-comment-note \
+ brp-compress brp-python-bytecompile \
+ brp-strip brp-strip-comment-note brp-python-hardlink \
brp-strip-static-archive brp-elfperms \
brp-remove-la-files \
check-files check-prereqs \
@@ -23,8 +23,8 @@ EXTRA_DIST = \
fontconfig.prov script.req
rpmconfig_SCRIPTS = \
- brp-compress \
- brp-strip brp-strip-comment-note \
+ brp-compress brp-python-bytecompile \
+ brp-strip brp-strip-comment-note brp-python-hardlink \
brp-strip-static-archive brp-elfperms \
brp-remove-la-files \
check-files check-prereqs \
diff --git a/scripts/brp-python-bytecompile b/scripts/brp-python-bytecompile
new file mode 100644
index 0000000..d9c4832
--- /dev/null
+++ b/scripts/brp-python-bytecompile
@@ -0,0 +1,112 @@
+#!/bin/bash
+errors_terminate=$2
+extra=$3
+
+# If using normal root, avoid changing anything.
+if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then
+ exit 0
+fi
+
+# Figure out how deep we need to descend. We could pick an insanely high
+# number and hope it's enough, but somewhere, somebody's sure to run into it.
+depth=`(find "$RPM_BUILD_ROOT" -type f -name "*.py" -print0 ; echo /) | \
+ xargs -0 -n 1 dirname | sed 's,[^/],,g' | sort -u | tail -n 1 | wc -c`
+if [ -z "$depth" ] || [ "$depth" -le "1" ]; then
+ exit 0
+fi
+
+function python_bytecompile()
+{
+ local options=$1
+ local python_binary=$2
+ local exclude=$3
+ local python_libdir=$4
+ local depth=$5
+ local real_libdir=$6
+
+cat << EOF | $python_binary $options
+import compileall, sys, os, re
+
+python_libdir = "$python_libdir"
+depth = $depth
+real_libdir = "$real_libdir"
+build_root = "$RPM_BUILD_ROOT"
+exclude = r"$exclude"
+
+class Filter:
+ def search(self, path):
+ ret = not os.path.realpath(path).startswith(build_root)
+ if exclude:
+ ret = ret or re.search(exclude, path)
+ return ret
+
+sys.exit(not compileall.compile_dir(python_libdir, depth, real_libdir, force=1, rx=Filter(), quiet=1))
+EOF
+}
+
+# .pyc/.pyo files embed a "magic" value, identifying the ABI version of Python
+# bytecode that they are for.
+#
+# The files below RPM_BUILD_ROOT could be targeting multiple versions of
+# python (e.g. a single build that emits several subpackages e.g. a
+# python26-foo subpackage, a python31-foo subpackage etc)
+#
+# Support this by assuming that below each /usr/lib/python$VERSION/, all
+# .pyc/.pyo files are to be compiled for /usr/bin/python$VERSION.
+#
+# For example, below /usr/lib/python2.6/, we're targeting /usr/bin/python2.6
+# and below /usr/lib/python3.1/, we're targeting /usr/bin/python3.1
+
+shopt -s nullglob
+for python_libdir in `find "$RPM_BUILD_ROOT" -type d|grep -E "/usr/lib(64)?/python[0-9]\.([0-9]$|[0-9]{2}$)"`;
+do
+ python_binary=/usr/bin/$(basename $python_libdir)
+ real_libdir=${python_libdir/$RPM_BUILD_ROOT/}
+ echo "Bytecompiling .py files below $python_libdir using $python_binary"
+
+ # Generate normal (.pyc) byte-compiled files.
+ python_bytecompile "" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir"
+ if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
+ # One or more of the files had a syntax error
+ exit 1
+ fi
+
+ # Generate optimized (.pyo) byte-compiled files.
+ python_bytecompile "-O" "$python_binary" "" "$python_libdir" "$depth" "$real_libdir"
+ if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
+ # One or more of the files had a syntax error
+ exit 1
+ fi
+done
+
+
+# Handle other locations in the filesystem using the default python implementation
+# if extra is set to 0, don't do this
+if [ 0$extra -eq 0 ]; then
+ exit 0
+fi
+
+# If we don't have a default python interpreter, we cannot proceed
+default_python=${1:-/usr/bin/python}
+if [ ! -x "$default_python" ]; then
+ exit 0
+fi
+
+# Figure out if there are files to be bytecompiled with the default_python at all
+# this prevents unnecessary default_python invocation
+find "$RPM_BUILD_ROOT" -type f -name "*.py" | grep -Ev "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" || exit 0
+
+# Generate normal (.pyc) byte-compiled files.
+python_bytecompile "" $default_python "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" "$RPM_BUILD_ROOT" "$depth" "/"
+if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
+ # One or more of the files had a syntax error
+ exit 1
+fi
+
+# Generate optimized (.pyo) byte-compiled files.
+python_bytecompile "-O" $default_python "/bin/|/sbin/|/usr/lib(64)?/python[0-9]\.[0-9]|/usr/share/doc" "$RPM_BUILD_ROOT" "$depth" "/"
+if [ $? -ne 0 ] && [ 0$errors_terminate -ne 0 ]; then
+ # One or more of the files had a syntax error
+ exit 1
+fi
+exit 0
diff --git a/scripts/brp-python-hardlink b/scripts/brp-python-hardlink
new file mode 100755
index 0000000..5fd1b43
--- /dev/null
+++ b/scripts/brp-python-hardlink
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+# If using normal root, avoid changing anything.
+if [ -z "$RPM_BUILD_ROOT" ] || [ "$RPM_BUILD_ROOT" = "/" ]; then
+ exit 0
+fi
+
+hardlink_if_same() {
+ if cmp -s "$1" "$2" ; then
+ ln -f "$1" "$2"
+ return 0
+ fi
+ return 1
+}
+
+# Hardlink identical *.pyc, *.pyo, and *.opt-[12].pyc.
+# Originally from PLD's rpm-build-macros
+find "$RPM_BUILD_ROOT" -type f -name "*.pyc" -not -name "*.opt-[12].pyc" | while read pyc ; do
+ hardlink_if_same "$pyc" "${pyc%c}o"
+ o1pyc="${pyc%pyc}opt-1.pyc"
+ hardlink_if_same "$pyc" "$o1pyc"
+ o2pyc="${pyc%pyc}opt-2.pyc"
+ hardlink_if_same "$pyc" "$o2pyc" || hardlink_if_same "$o1pyc" "$o2pyc"
+done
+exit 0
--
1.8.3.1
|