Projects
Factory:RISC-V:Base
rpm
_service:tar_scm:still-in-use-of-python-scripts...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:still-in-use-of-python-scripts-from-old-version.patch of Package rpm
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
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2