2021-12-27 19:59:18 +08:00
|
|
|
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
|
|
|
|
|
|
|
|
|
|
---
|
2022-10-27 02:00:37 +00:00
|
|
|
platform.in | 3 ++
|
2021-12-27 19:59:18 +08:00
|
|
|
scripts/Makefile.am | 8 +--
|
2022-10-27 02:00:37 +00:00
|
|
|
scripts/brp-python-bytecompile | 112 +++++++++++++++++++++++++++++++++++++++++
|
|
|
|
|
scripts/brp-python-hardlink | 25 +++++++++
|
2021-12-27 19:59:18 +08:00
|
|
|
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
|
2022-10-27 02:00:37 +00:00
|
|
|
index 4aed76b..5a1c494 100644
|
2021-12-27 19:59:18 +08:00
|
|
|
--- 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 \
|
2022-10-27 02:00:37 +00:00
|
|
|
@@ -23,8 +23,8 @@ EXTRA_DIST = \
|
2021-12-27 19:59:18 +08:00
|
|
|
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
|
2022-10-27 02:00:37 +00:00
|
|
|
index 0000000..d9c4832
|
2021-12-27 19:59:18 +08:00
|
|
|
--- /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
|
2022-02-16 11:46:19 +08:00
|
|
|
+for python_libdir in `find "$RPM_BUILD_ROOT" -type d|grep -E "/usr/lib(64)?/python[0-9]\.([0-9]$|[0-9]{2}$)"`;
|
2021-12-27 19:59:18 +08:00
|
|
|
+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
|
|
|
|
|
--
|
2022-10-27 02:00:37 +00:00
|
|
|
1.8.3.1
|
2021-12-27 19:59:18 +08:00
|
|
|
|