public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
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 \


             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