From: "Zac Medico" <zmedico@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:master commit in: bin/ebuild-helpers/, bin/
Date: Wed, 28 Mar 2018 05:19:53 +0000 (UTC) [thread overview]
Message-ID: <1522213755.9aaa652c86b21b925bc56fafd57b561b86ace0f8.zmedico@gentoo> (raw)
commit: 9aaa652c86b21b925bc56fafd57b561b86ace0f8
Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Mar 26 19:12:51 2018 +0000
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Wed Mar 28 05:09:15 2018 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=9aaa652c
Add dostrip for EAPI 7
This patch includes the essential parts of the dostrip implementation
from portage-mgorny. All of the prepstrip code has moved to
bin/estrip, without any changes except the addition of argument
parsing for estrip --ignore, --queue, and --deque modes which are
equivalent to the corresponding ecompressdir modes.
Due to overlap, also ban the non-standard prepstrip and prepallstrip
helpers in EAPI 7, with a die message suggesting to use 'dostrip'
instead. Also ignore the non-standard STRIP_MASK variable for EAPI 7.
Bug: https://bugs.gentoo.org/203891
bin/eapi.sh | 4 +++
bin/ebuild-helpers/prepall | 2 +-
bin/ebuild-helpers/prepallstrip | 4 +++
bin/ebuild-helpers/prepstrip | 4 +++
bin/ebuild.sh | 2 +-
bin/estrip | 74 +++++++++++++++++++++++++++++++++++++++--
bin/misc-functions.sh | 6 ++++
bin/phase-helpers.sh | 29 ++++++++++++++++
bin/save-ebuild-env.sh | 4 +--
9 files changed, 122 insertions(+), 7 deletions(-)
diff --git a/bin/eapi.sh b/bin/eapi.sh
index 326eb387e..f9a4744e9 100644
--- a/bin/eapi.sh
+++ b/bin/eapi.sh
@@ -76,6 +76,10 @@ ___eapi_has_docompress() {
[[ ! ${1-${EAPI-0}} =~ ^(0|1|2|3)$ ]]
}
+___eapi_has_dostrip() {
+ [[ ${1-${EAPI-0}} =~ ^(0|1|2|3|4|4-python|4-slot-abi|5|5-hdepend|5-progress|6)$ ]]
+}
+
___eapi_has_nonfatal() {
[[ ! ${1-${EAPI-0}} =~ ^(0|1|2|3)$ ]]
}
diff --git a/bin/ebuild-helpers/prepall b/bin/ebuild-helpers/prepall
index 44643bb58..bc77af4a1 100755
--- a/bin/ebuild-helpers/prepall
+++ b/bin/ebuild-helpers/prepall
@@ -19,7 +19,7 @@ fi
prepallman
prepallinfo
-prepallstrip
+___eapi_has_dostrip || prepallstrip
if has chflags $FEATURES ; then
# Restore all the file flags that were saved at the beginning of prepall.
diff --git a/bin/ebuild-helpers/prepallstrip b/bin/ebuild-helpers/prepallstrip
index 59fa7cc61..4bde1f4b2 100755
--- a/bin/ebuild-helpers/prepallstrip
+++ b/bin/ebuild-helpers/prepallstrip
@@ -4,6 +4,10 @@
source "${PORTAGE_BIN_PATH}"/isolated-functions.sh || exit 1
+if ___eapi_has_dostrip; then
+ die "${0##*/}: ${0##*/} has been banned for EAPI '$EAPI'; use 'dostrip' instead"
+fi
+
if ! ___eapi_has_prefix_variables; then
ED=${D}
fi
diff --git a/bin/ebuild-helpers/prepstrip b/bin/ebuild-helpers/prepstrip
index 0ec4c16b3..9db06284d 100755
--- a/bin/ebuild-helpers/prepstrip
+++ b/bin/ebuild-helpers/prepstrip
@@ -4,4 +4,8 @@
source "${PORTAGE_BIN_PATH}"/isolated-functions.sh || exit 1
+if ___eapi_has_dostrip; then
+ die "${0##*/}: ${0##*/} has been banned for EAPI '$EAPI'; use 'dostrip' instead"
+fi
+
exec -a "${0}" "${PORTAGE_BIN_PATH}"/estrip "${@}"
diff --git a/bin/ebuild.sh b/bin/ebuild.sh
index 061b1aff4..11441bfb2 100755
--- a/bin/ebuild.sh
+++ b/bin/ebuild.sh
@@ -59,7 +59,7 @@ else
# These dummy functions are for things that are likely to be called
# in global scope, even though they are completely useless during
# the "depend" phase.
- funcs="diropts docompress exeopts get_KV insopts
+ funcs="diropts docompress dostrip exeopts get_KV insopts
KV_major KV_micro KV_minor KV_to_int
libopts register_die_hook register_success_hook
__strip_duplicate_slashes
diff --git a/bin/estrip b/bin/estrip
index 2136e0d4d..fbd5882fa 100755
--- a/bin/estrip
+++ b/bin/estrip
@@ -30,6 +30,64 @@ if ${RESTRICT_strip} || ${FEATURES_nostrip} ; then
${FEATURES_installsources} || exit 0
fi
+[[ ${0##*/} == prepstrip ]] && prepstrip=true || prepstrip=false
+
+if ! ${prepstrip}; then
+while [[ $# -gt 0 ]] ; do
+ case $1 in
+ --ignore)
+ shift
+
+ skip_dirs=()
+ for skip; do
+ if [[ -d ${ED%/}/${skip#/} ]]; then
+ skip_dirs+=( "${ED%/}/${skip#/}" )
+ else
+ rm -f "${ED%/}/${skip#/}.estrip" || die
+ fi
+ done
+
+ if [[ ${skip_dirs[@]} ]]; then
+ find "${skip_dirs[@]}" -name '*.estrip' -delete || die
+ fi
+
+ exit 0
+ ;;
+ --queue)
+ shift
+
+ find_paths=()
+ for path; do
+ if [[ -e ${ED%/}/${path#/} ]]; then
+ find_paths+=( "${ED%/}/${path#/}" )
+ fi
+ done
+
+ if [[ ${find_paths[@]} ]]; then
+ while IFS= read -r path; do
+ >> "${path}.estrip" || die
+ done < <(
+ scanelf -yqRBF '#k%F' -k '.symtab' "${find_paths[@]}"
+ find "${find_paths[@]}" -type f ! -type l -name '*.a'
+ )
+ fi
+
+ exit 0
+ ;;
+ --dequeue)
+ [[ -n ${2} ]] && die "${0##*/}: --dequeue takes no additional arguments"
+ break
+ ;;
+ *)
+ die "${0##*/}: unknown arguments '$*'"
+ exit 1
+ ;;
+ esac
+ shift
+done
+set -- "${ED}"
+fi
+
PRESERVE_XATTR=false
if [[ ${KERNEL} == linux ]] && ${FEATURES_xattr} ; then
PRESERVE_XATTR=true
@@ -292,6 +350,7 @@ else
get_inode_number() { stat -c '%i' "$1"; }
fi
cd "${tmpdir}/inodes" || die "cd failed unexpectedly"
+if ${prepstrip}; then
while read -r x ; do
inode_link=$(get_inode_number "${x}") || die "stat failed unexpectedly"
echo "${x}" >> "${inode_link}" || die "echo failed unexpectedly"
@@ -302,6 +361,13 @@ done < <(
find "$@" -type f ! -type l -name '*.a'
) | LC_ALL=C sort -u
)
+else
+while IFS= read -d '' -r x ; do
+ rm -f "${x}" || die
+ inode_link=$(get_inode_number "${x%.estrip}") || die "stat failed unexpectedly"
+ echo "${x%.estrip}" >> "${inode_link}" || die "echo failed unexpectedly"
+done < <(find "${ED}" -name '*.estrip' -print0)
+fi
# Now we look for unstripped binaries.
for inode_link in $(shopt -s nullglob; echo *) ; do
@@ -318,7 +384,11 @@ do
f=$(file "${x}") || exit 0
[[ -z ${f} ]] && exit 0
- if ! ${SKIP_STRIP} ; then
+ if ${SKIP_STRIP} ; then
+ strip_this=false
+ elif ! ${prepstrip}; then
+ strip_this=true
+ else
# The noglob funk is to support STRIP_MASK="/*/booga" and to keep
# the for loop from expanding the globs.
# The eval echo is to support STRIP_MASK="/*/{booga,bar}" sex.
@@ -328,8 +398,6 @@ do
[[ /${x#${ED%/}} == ${m} ]] && strip_this=false && break
done
set +o noglob
- else
- strip_this=false
fi
# In Prefix we are usually an unprivileged user, so we can't strip
diff --git a/bin/misc-functions.sh b/bin/misc-functions.sh
index 7643af7b5..df8361036 100755
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@ -224,6 +224,12 @@ install_qa_check() {
ecompressdir --dequeue
ecompress --dequeue
+ if ___eapi_has_dostrip; then
+ "${PORTAGE_BIN_PATH}"/estrip --queue "${PORTAGE_DOSTRIP[@]}"
+ "${PORTAGE_BIN_PATH}"/estrip --ignore "${PORTAGE_DOSTRIP_SKIP[@]}"
+ "${PORTAGE_BIN_PATH}"/estrip --dequeue
+ fi
+
# Create NEEDED.ELF.2 regardless of RESTRICT=binchecks, since this info is
# too useful not to have (it's required for things like preserve-libs), and
# it's tempting for ebuild authors to set RESTRICT=binchecks for packages
diff --git a/bin/phase-helpers.sh b/bin/phase-helpers.sh
index 5eeecfef7..556d089b5 100644
--- a/bin/phase-helpers.sh
+++ b/bin/phase-helpers.sh
@@ -20,6 +20,9 @@ export MOPREFIX=${PN}
export PORTAGE_DOCOMPRESS_SIZE_LIMIT="128"
declare -a PORTAGE_DOCOMPRESS=( /usr/share/{doc,info,man} )
declare -a PORTAGE_DOCOMPRESS_SKIP=( /usr/share/doc/${PF}/html )
+declare -a PORTAGE_DOSTRIP=( / )
+has strip ${RESTRICT} && PORTAGE_DOSTRIP=()
+declare -a PORTAGE_DOSTRIP_SKIP=()
into() {
if [ "$1" == "/" ]; then
@@ -160,6 +163,32 @@ docompress() {
fi
}
+dostrip() {
+ ___eapi_has_dostrip || die "'${FUNCNAME}' not supported in this EAPI"
+
+ local f g
+ if [[ $1 = "-x" ]]; then
+ shift
+ for f; do
+ f=$(__strip_duplicate_slashes "${f}"); f=${f%/}
+ [[ ${f:0:1} = / ]] || f="/${f}"
+ for g in "${PORTAGE_DOSTRIP_SKIP[@]}"; do
+ [[ ${f} = "${g}" ]] && continue 2
+ done
+ PORTAGE_DOSTRIP_SKIP+=( "${f}" )
+ done
+ else
+ for f; do
+ f=$(__strip_duplicate_slashes "${f}"); f=${f%/}
+ [[ ${f:0:1} = / ]] || f="/${f}"
+ for g in "${PORTAGE_DOSTRIP[@]}"; do
+ [[ ${f} = "${g}" ]] && continue 2
+ done
+ PORTAGE_DOSTRIP+=( "${f}" )
+ done
+ fi
+}
+
useq() {
has $EBUILD_PHASE prerm postrm || eqawarn \
"QA Notice: The 'useq' function is deprecated (replaced by 'use')"
diff --git a/bin/save-ebuild-env.sh b/bin/save-ebuild-env.sh
index e5ae8af88..947ac79d5 100644
--- a/bin/save-ebuild-env.sh
+++ b/bin/save-ebuild-env.sh
@@ -15,7 +15,7 @@ __save_ebuild_env() {
if has --exclude-init-phases $* ; then
unset S _E_DESTTREE _E_INSDESTTREE _E_DOCDESTTREE_ _E_EXEDESTTREE_ \
PORTAGE_DOCOMPRESS_SIZE_LIMIT PORTAGE_DOCOMPRESS \
- PORTAGE_DOCOMPRESS_SKIP
+ PORTAGE_DOCOMPRESS_SKIP PORTAGE_DOSTRIP PORTAGE_DOSTRIP_SKIP
if [[ -n $PYTHONPATH &&
${PYTHONPATH%%:*} -ef $PORTAGE_PYM_PATH ]] ; then
if [[ $PYTHONPATH == *:* ]] ; then
@@ -60,7 +60,7 @@ __save_ebuild_env() {
unpack __strip_duplicate_slashes econf einstall \
__dyn_setup __dyn_unpack __dyn_clean \
into insinto exeinto docinto \
- insopts diropts exeopts libopts docompress \
+ insopts diropts exeopts libopts docompress dostrip \
__abort_handler __abort_prepare __abort_configure __abort_compile \
__abort_test __abort_install __dyn_prepare __dyn_configure \
__dyn_compile __dyn_test __dyn_install \
next reply other threads:[~2018-03-28 5:19 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-28 5:19 Zac Medico [this message]
-- strict thread matches above, loose matches on Subject: below --
2024-06-01 11:14 [gentoo-commits] proj/portage:master commit in: bin/ebuild-helpers/, bin/ Ulrich Müller
2023-10-21 19:23 Ulrich Müller
2021-05-24 4:55 Zac Medico
2018-09-20 18:49 Michał Górny
2018-03-04 21:05 Michał Górny
2014-12-04 14:01 Michał Górny
2014-08-19 7:01 Michał Górny
2014-08-10 0:10 Brian Dolbec
2013-05-12 20:47 Zac Medico
2013-05-12 11:16 Zac Medico
2012-12-11 9:01 Zac Medico
2012-11-22 22:06 Mike Frysinger
2012-09-26 20:33 Arfrever Frehtes Taifersar Arahesis
2012-09-14 7:26 Zac Medico
2012-09-14 7:26 Zac Medico
2012-09-02 22:57 Zac Medico
2012-08-15 20:45 Ulrich Mueller
2012-05-12 4:09 Mike Frysinger
2011-07-08 17:15 Zac Medico
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1522213755.9aaa652c86b21b925bc56fafd57b561b86ace0f8.zmedico@gentoo \
--to=zmedico@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox