Hi,
This is a patch to extend prefix.eclass.
1. a set of heuristics is added to eprefixify:
"s,([^[:alnum:]}])/(usr|etc|bin|sbin|var|opt)/,\1${EPREFIX}/\2/,g"
2. a function wrapper "fprefixity" to do inplace substitution in ${T}.
Please help review it.
Benda
--- prefix.eclass 2015-08-09 09:38:18.0 +0900
+++ prefix.eclass.new 2016-06-29 10:45:00.101628307 +0900
@@ -25,20 +25,36 @@
# @FUNCTION: eprefixify
-# @USAGE:
+# @USAGE: [-e ]
# @DESCRIPTION:
-# replaces @GENTOO_PORTAGE_EPREFIX@ with ${EPREFIX} for the given files,
-# dies if no arguments are given, a file does not exist, or changing a
+# Replaces @GENTOO_PORTAGE_EPREFIX@ with ${EPREFIX} for the given files,
+# tries a set of heuristics if @GENTOO_PORTAGE_EPREFIX@ is not found.
+# Additional extended regular expression can be passed by -e or
+# environment variable PREFIX_EXTRA_REGEX.
+# Dies if no arguments are given, a file does not exist, or changing a
# file failed.
eprefixify() {
[[ $# -lt 1 ]] && die "at least one argument required"
+ local PREFIX_EXTRA_REGEX
+ if [[ ${1} == -e ]]; then
+ PREFIX_EXTRA_REGEX="${2}"
+ shift 2
+ fi
+ [[ $# -lt 1 ]] && die "at least one file operand is required"
einfo "Adjusting to prefix ${EPREFIX:-/}"
local x
for x in "$@" ; do
if [[ -e ${x} ]] ; then
ebegin " ${x##*/}"
- sed -i -e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}|g" "${x}"
+ if grep -qs @GENTOO_PORTAGE_EPREFIX@ "${x}" ; then
+sed -i -e "s|@GENTOO_PORTAGE_EPREFIX@|${EPREFIX}|g" "${x}"
+ else
+sed -r \
+ -e "s,([^[:alnum:]}])/(usr|etc|bin|sbin|var|opt)/,\1${EPREFIX}/\2/,g" \
+ -e "${PREFIX_EXTRA_REGEX}" \
+ -i "${x}"
+ fi
eend $? || die "failed to eprefixify ${x}"
else
die "${x} does not exist"
@@ -48,5 +64,54 @@
return 0
}
+# @FUNCTION: __temp_prefixify
+# @USAGE: a single file. Internal use only.
+# @DESCRIPTION:
+# copies the files to ${T}, calls eprefixify, echos the new file.
+__temp_prefixify() {
+ if [[ -e $1 ]] ; then
+ local f=${1##*/}
+ cp "$1" "${T}" || die "failed to copy file"
+ eprefixify "${T}"/${f} > /dev/null
+ echo "${T}"/${f}
+ else
+ die "$1 does not exist"
+ fi
+}
+
+# @FUNCTION: fprefixify
+# @USAGE:
+# @DESCRIPTION:
+# prefixify a function call.
+# copies the files to ${T}, calls eprefixify, and calls the function.
+# @EXAMPLE:
+# fprefixify doexe ${FILESDIR}/fix_libtool_files.sh
+# fprefixify epatch ${FILESDIR}/${PN}-4.0.2-path.patch
+fprefixify() {
+ [[ $# -lt 2 ]] && die "at least two arguments required"
+
+ local func=$1 f
+ einfo "Adjusting ${func} to prefix ${EPREFIX:-/}"
+ shift
+ case ${func} in
+ new*)
+ [[ $# -ne 2 ]] && die "${func} takes two arguments"
+ ebegin " ${1##*/}"
+ f=$(__temp_prefixify "$1")
+ ${func} "${f}" "$2"
+ eend $? || die "failed to execute ${func}"
+ ;;
+ *)
+ for x in "$@" ; do
+ebegin " ${x##*/}"
+f=$(__temp_prefixify "${x}")
+${func} "${f}"
+eend $? || die "failed to execute ${func}"
+ done
+ ;;
+ esac
+
+ return 0
+}
# vim: tw=72: