summaryrefslogtreecommitdiff
path: root/eclass/prefix.eclass
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /eclass/prefix.eclass
reinit the tree, so we can have metadata
Diffstat (limited to 'eclass/prefix.eclass')
-rw-r--r--eclass/prefix.eclass139
1 files changed, 139 insertions, 0 deletions
diff --git a/eclass/prefix.eclass b/eclass/prefix.eclass
new file mode 100644
index 000000000000..eb5843182f31
--- /dev/null
+++ b/eclass/prefix.eclass
@@ -0,0 +1,139 @@
+# Copyright 1999-2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+# @ECLASS: prefix.eclass
+# @MAINTAINER:
+# Feel free to contact the Prefix team through <prefix@gentoo.org> if
+# you have problems, suggestions or questions.
+# @BLURB: Eclass to provide Prefix functionality
+# @DESCRIPTION:
+# Gentoo Prefix allows users to install into a self defined offset
+# located somewhere in the filesystem. Prefix ebuilds require
+# additional functions and variables which are defined by this eclass.
+
+# @ECLASS-VARIABLE: EPREFIX
+# @DESCRIPTION:
+# The offset prefix of a Gentoo Prefix installation. When Gentoo Prefix
+# is not used, ${EPREFIX} should be "". Prefix Portage sets EPREFIX,
+# hence this eclass has nothing to do here in that case.
+# Note that setting EPREFIX in the environment with Prefix Portage sets
+# Portage into cross-prefix mode.
+if [[ ! ${EPREFIX+set} ]]; then
+ export EPREFIX=''
+fi
+
+
+# @FUNCTION: eprefixify
+# @USAGE: <list of to be eprefixified files>
+# @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
+# file failed.
+eprefixify() {
+ [[ $# -lt 1 ]] && die "at least one argument 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}"
+ eend $? || die "failed to eprefixify ${x}"
+ else
+ die "${x} does not exist"
+ fi
+ done
+
+ return 0
+}
+
+# @FUNCTION: hprefixify
+# @USAGE: [ -w <line match> ] [ -e <extended regex> ] [ -q <quotation char> ]
+# <list of files>
+# @DESCRIPTION:
+# Tries a set of heuristics to prefixify the given files. Dies if no
+# arguments are given, a file does not exist, or changing a file failed.
+#
+# Additional extended regular expression can be passed by -e or
+# environment variable PREFIX_EXTRA_REGEX. The default heuristics can
+# be constrained to lines that match a sed expression passed by -w or
+# environment variable PREFIX_LINE_MATCH. Quotation characters can be
+# specified by -q or environment variable PREFIX_QUOTE_CHAR, unless
+# EPREFIX is empty.
+#
+# @EXAMPLE:
+# Only prefixify the 30th line,
+# hprefixify -w 30 configure
+# Only prefixify lines that contain "PATH",
+# hprefixify -w "/PATH/" configure
+# Also delete all the /opt/gnu search paths,
+# hprefixify -e "/\/opt\/gnu/d" configure
+# Quote the inserted EPREFIX
+# hprefixify -q '"' etc/profile
+hprefixify() {
+ use prefix || return 0
+
+ local xl=() x
+ while [[ $# -gt 0 ]]; do
+ case $1 in
+ -e) local PREFIX_EXTRA_REGEX="$2"
+ shift
+ ;;
+ -w) local PREFIX_LINE_MATCH="$2"
+ shift
+ ;;
+ -q) local PREFIX_QUOTE_CHAR="${EPREFIX:+$2}"
+ shift
+ ;;
+ *)
+ xl+=( "$1" )
+ ;;
+ esac
+ shift
+ done
+ local dirs="/(usr|lib(|[onx]?32|n?64)|etc|bin|sbin|var|opt|run)" \
+ eprefix="${PREFIX_QUOTE_CHAR}${EPREFIX}${PREFIX_QUOTE_CHAR}"
+
+ [[ ${#xl[@]} -lt 1 ]] && die "at least one file operand is required"
+ einfo "Adjusting to prefix ${EPREFIX:-/}"
+ for x in "${xl[@]}" ; do
+ if [[ -e ${x} ]] ; then
+ ebegin " ${x##*/}"
+ sed -r \
+ -e "${PREFIX_LINE_MATCH}s,([^[:alnum:]}\)\.])${dirs},\1${eprefix}/\2,g" \
+ -e "${PREFIX_LINE_MATCH}s,^${dirs},${eprefix}/\1," \
+ -e "${PREFIX_EXTRA_REGEX}" \
+ -i "${x}"
+ eend $? || die "failed to prefixify ${x}"
+ else
+ die "${x} does not exist"
+ fi
+ done
+}
+
+# @FUNCTION: prefixify_ro
+# @USAGE: prefixify_ro <file>.
+# @DESCRIPTION:
+# prefixify a read-only file.
+# copies the files to ${T}, prefixies it, echos the new file.
+# @EXAMPLE:
+# doexe "$(prefixify_ro "${FILESDIR}"/fix_libtool_files.sh)"
+# epatch "$(prefixify_ro "${FILESDIR}"/${PN}-4.0.2-path.patch)"
+prefixify_ro() {
+ if [[ -e $1 ]] ; then
+ local f=${1##*/}
+ cp "$1" "${T}" || die "failed to copy file"
+ local x="${T}"/${f}
+ # redirect to stderr because stdout is used to
+ # return the prefixified file.
+ if grep -qs @GENTOO_PORTAGE_EPREFIX@ "${x}" ; then
+ eprefixify "${T}"/${f} 1>&2
+ else
+ hprefixify "${T}"/${f} 1>&2
+ fi
+ echo "${x}"
+ else
+ die "$1 does not exist"
+ fi
+}
+# vim: tw=72: