diff options
author | Michael Haubenwallner <haubi@gentoo.org> | 2019-06-25 11:20:34 +0200 |
---|---|---|
committer | Michael Haubenwallner <haubi@gentoo.org> | 2019-06-25 11:21:01 +0200 |
commit | 028e1033d6b22f0b9d7af5f796d232a912923547 (patch) | |
tree | 1a08111a0ca92cde167f8e75528fde7d5241333e /app-portage | |
parent | dev-util/buildbot: add ~amd64-linux keyword (diff) | |
download | gentoo-028e1033d6b22f0b9d7af5f796d232a912923547.tar.gz gentoo-028e1033d6b22f0b9d7af5f796d232a912923547.tar.bz2 gentoo-028e1033d6b22f0b9d7af5f796d232a912923547.zip |
app-portage/prefix-toolkit: old
Package-Manager: Portage-2.3.66, Repoman-2.3.11
Signed-off-by: Michael Haubenwallner <haubi@gentoo.org>
Diffstat (limited to 'app-portage')
-rw-r--r-- | app-portage/prefix-toolkit/prefix-toolkit-0.ebuild | 565 | ||||
-rw-r--r-- | app-portage/prefix-toolkit/prefix-toolkit-1.ebuild | 567 | ||||
-rw-r--r-- | app-portage/prefix-toolkit/prefix-toolkit-2.ebuild | 614 |
3 files changed, 0 insertions, 1746 deletions
diff --git a/app-portage/prefix-toolkit/prefix-toolkit-0.ebuild b/app-portage/prefix-toolkit/prefix-toolkit-0.ebuild deleted file mode 100644 index ae2ca111babd..000000000000 --- a/app-portage/prefix-toolkit/prefix-toolkit-0.ebuild +++ /dev/null @@ -1,565 +0,0 @@ -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=7 - -DESCRIPTION="Utilities for users of Gentoo Prefix" -HOMEPAGE="https://prefix.gentoo.org/" -SRC_URI="" - -LICENSE="GPL-3" -SLOT="0" - -[[ ${PV} == 9999 ]] || -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris ~x86-winnt" - -DEPEND="" -RDEPEND=" - >sys-apps/portage-2.3.62 - !app-portage/prefix-chain-setup - !sys-apps/prefix-chain-utils - prefix-stack? ( - >=sys-apps/baselayout-prefix-2.6 - ) -" - -S="${WORKDIR}" - -my_unpack() { - local infile=$1 - local outfile=${2:-${infile}} - ebegin "extracting ${outfile}" - sed -ne "/^: ${infile} /,/EOIN/{/EOIN/d;p}" "${EBUILD}" \ - > "${outfile}" || die "Failed to unpack ${outfile}" - eend $? -} - -src_unpack() { - if use prefix-stack ; then - my_unpack prefix-stack.bash_login - my_unpack prefix-stack.bashrc - my_unpack prefix-stack.envd.99stack - my_unpack prefix-stack-ccwrap - local editor pager - for editor in "${EDITOR}" {"${EPREFIX}","${BROOT}"}/bin/nano - do - [[ -x ${editor} ]] || continue - done - for pager in "${PAGER}" {"${EPREFIX}","${BROOT}"}/usr/bin/less - do - [[ -x ${pager} ]] || continue - done - printf '%s\n' "EDITOR=\"${editor}\"" "PAGER=\"${pager}\"" > 000fallback - else - my_unpack prefix-stack-setup - fi - my_unpack startprefix -} - -my_prefixify() { - local ebash eenv - if use prefix-stack ; then - ebash="${BROOT}/bin/bash" - eenv="${BROOT}/usr/bin/env" - else - ebash="${EPREFIX}/bin/bash" - eenv="${EPREFIX}/usr/bin/env" - fi - - # the @=@ prevents repoman from believing we set readonly vars - sed -e "s,@GENTOO_PORTAGE_BPREFIX@,${BROOT},g" \ - -e "s,@GENTOO_PORTAGE_EPREFIX@,${EPREFIX},g" \ - -e "s,@GENTOO_PORTAGE_CHOST@,${CHOST},g" \ - -e "s,@GENTOO_PORTAGE_EBASH@,${ebash},g" \ - -e "s,@GENTOO_PORTAGE_EENV@,${eenv},g" \ - -e "s,@=@,=,g" \ - -i "$@" || die -} - -src_configure() { - # do not eprefixify during unpack, to allow userpatches to apply - my_prefixify * -} - -src_install-prefix-stack-ccwrap() { - # install toolchain wrapper. - local wrapperdir=/usr/${CHOST}/gcc-bin/${CHOST}-${PN}/${PV} - local wrappercfg=${CHOST}-${P} - - exeinto $wrapperdir - doexe prefix-stack-ccwrap - - local cc - for cc in \ - gcc \ - g++ \ - cpp \ - c++ \ - windres \ - ; do - dosym prefix-stack-ccwrap $wrapperdir/${CHOST}-${cc} - dosym ${CHOST}-${cc} $wrapperdir/${cc} - done - - # LDPATH is required to keep gcc-config happy :( - cat > ./${wrappercfg} <<-EOF - GCC_PATH="${EPREFIX}$wrapperdir" - LDPATH="${EPREFIX}$wrapperdir" - EOF - - insinto /etc/env.d/gcc - doins ./${wrappercfg} -} - -src_install() { - if use prefix-stack; then - src_install-prefix-stack-ccwrap - insinto /etc - doins prefix-stack.bash_login - insinto /etc/bash - newins prefix-stack.bashrc bashrc - newenvd prefix-stack.envd.99stack 99stack - doenvd 000fallback - else - dobin prefix-stack-setup - fi - exeinto / - doexe startprefix -} - -return 0 - -: startprefix <<'EOIN' -#!@GENTOO_PORTAGE_EBASH@ -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -# Fabian Groffen <grobian@gentoo.org> -- 2007-03-10 -# Enters the prefix environment by starting a login shell from the -# prefix. The SHELL environment variable is elevated in order to make -# applications that start login shells to work, such as `screen`. - -# if you come from a substantially polluted environment (another -# Prefix), a cleanup as follows resolves most oddities I've ever seen: -# env -i HOME=$HOME TERM=$TERM USER=$USER $SHELL -l -# hence this script starts the Prefix shell like this - -if [[ ${SHELL#@GENTOO_PORTAGE_EPREFIX@} != ${SHELL} ]] -then - echo "You appear to be in prefix already (SHELL=${SHELL})" > /dev/stderr - exit -1 -elif [[ ${SHELL#@GENTOO_PORTAGE_BPREFIX@} != ${SHELL} ]] && - [[ ${EPREFIX-unset} == '@GENTOO_PORTAGE_EPREFIX@' ]] -then - echo "You appear to be in stacked prefix already (EPREFIX=${EPREFIX})" > /dev/stderr - exit -1 -fi - -# What is our prefix? -EPREFIX@=@'@GENTOO_PORTAGE_EPREFIX@' -BPREFIX@=@'@GENTOO_PORTAGE_BPREFIX@' - -# not all systems have the same location for shells, however what it -# boils down to, is that we need to know what the shell is, and then we -# can find it in the bin dir of our prefix -for SHELL in \ - "${EPREFIX}/bin/${SHELL##*/}" \ - "${BPREFIX}/bin/${SHELL##*/}" \ - ${SHELL##*/} -do - [[ ${SHELL} == */* && -x ${SHELL} ]] && break -done - -# check if the shell exists -if [[ ${SHELL} != */* ]] -then - echo "Failed to find the Prefix shell, this is probably" > /dev/stderr - echo "because you didn't emerge the shell ${SHELL}" > /dev/stderr - exit 1 -fi - -# set the prefix shell in the environment -export SHELL - -# give a small notice -echo "Entering Gentoo Prefix ${EPREFIX}" -# start the login shell, clean the entire environment but what's needed -RETAIN="HOME=$HOME TERM=$TERM USER=$USER SHELL=$SHELL" -# PROFILEREAD is necessary on SUSE not to wipe the env on shell start -[[ -n ${PROFILEREAD} ]] && RETAIN+=" PROFILEREAD=$PROFILEREAD" -# ssh-agent is handy to keep, of if set, inherit it -[[ -n ${SSH_AUTH_SOCK} ]] && RETAIN+=" SSH_AUTH_SOCK=$SSH_AUTH_SOCK" -# if we're on some X terminal, makes sense to inherit that too -[[ -n ${DISPLAY} ]] && RETAIN+=" DISPLAY=$DISPLAY" -# do it! -if [[ ${SHELL#${EPREFIX}} != ${SHELL} ]] ; then - '@GENTOO_PORTAGE_EENV@' -i $RETAIN $SHELL -l -elif [[ ' bash ' == *" ${SHELL##*/} "* ]] ; then - # shell coming from different prefix would load it's own - # etc/profile upon -l, so we have to override - '@GENTOO_PORTAGE_EENV@' -i ${RETAIN} "${SHELL}" --rcfile "${EPREFIX}"/etc/prefix-stack.bash_login -i -else - echo "Only bash is supported with stacked Prefix (you have ${SHELL##*/}), sorry!" > /dev/stderr - exit 1 -fi -# and leave a message when we exit... the shell might return non-zero -# without having real problems, so don't send alarming messages about -# that -echo "Leaving Gentoo Prefix with exit status $?" -EOIN - -: prefix-stack.bashrc <<'EOIN' -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 -# -# In stacked Prefix there is no bash installed, yet -# etc/bash/bashrc from base Prefix still is useful. -# - -if [[ $- != *i* ]] ; then - # Shell is non-interactive, bashrc does not apply - return -fi - -if [[ -r @GENTOO_PORTAGE_BPREFIX@/etc/bash/bashrc ]] ; then - source '@GENTOO_PORTAGE_BPREFIX@/etc/bash/bashrc' - # only if base Prefix does have an etc/bash/bashrc, we also - # run bashrc snippets provided by packages in stacked Prefix - for sh in '@GENTOO_PORTAGE_EPREFIX@'/etc/bash/bashrc.d/* ; do - [[ -r ${sh} ]] && source "${sh}" - done - unset sh -else - # etc/profile does expect etc/bash/bashrc to set PS1 - PS1='\u@\h \w \$ ' -fi -EOIN - -: prefix-stack.bash_login <<'EOIN' -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 -# -# In stacked Prefix there is no bash installed, so there is -# no bash able to load this Prefix' profile as login shell. -# Instead, you can specify this one as bash rcfile to mimic -# a bash login shell using this stacked Prefix profile. -# - -if [[ -s '@GENTOO_PORTAGE_EPREFIX@/etc/profile' ]] ; then - . '@GENTOO_PORTAGE_EPREFIX@/etc/profile' -fi -if [[ -s ~/.bash_profile ]] ; then - . ~/.bash_profile -elif [[ -s ~/.bash_login ]] ; then - . ~/.bash_login -elif [[ -s ~/.profile ]] ; then - . ~/.profile -fi -EOIN - -: prefix-stack.envd.99stack <<'EOIN' -PKG_CONFIG_PATH@=@"@GENTOO_PORTAGE_EPREFIX@/usr/lib/pkgconfig:@GENTOO_PORTAGE_EPREFIX@/usr/share/pkgconfig" -PORTAGE_CONFIGROOT@=@"@GENTOO_PORTAGE_EPREFIX@" -EPREFIX@=@"@GENTOO_PORTAGE_EPREFIX@" -EOIN - -: prefix-stack-setup <<'EOIN' -#!@GENTOO_PORTAGE_EPREFIX@/bin/bash -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -PARENT_EPREFIX="@GENTOO_PORTAGE_EPREFIX@" -PARENT_CHOST="@GENTOO_PORTAGE_CHOST@" -CHILD_EPREFIX= -CHILD_PROFILE= - -# -# get ourselfs the functions.sh script for ebegin/eend/etc. -# -for f in \ - /lib/gentoo/functions.sh \ - /etc/init.d/functions.sh \ - /sbin/functions.sh \ -; do - if [[ -r ${PARENT_EPREFIX}${f} ]] ; then - . "${PARENT_EPREFIX}${f}" - f=found - break - fi -done - -if [[ ${f} != found ]] ; then - echo "Cannot find Gentoo functions, aborting." >&2 - exit 1 -fi - -for arg in "$@"; do - case "${arg}" in - --eprefix=*) CHILD_EPREFIX="${arg#--eprefix=}" ;; - --profile=*) CHILD_PROFILE="${arg#--profile=}" ;; - - --help) - einfo "$0 usage:" - einfo " --eprefix=[PATH] Path to new EPREFIX to create stacked to the prefix" - einfo " where this script is installed (${PARENT_EPREFIX})" - einfo " --profile=[PATH] The absolute path to the profile to use. This path" - einfo " must point to a directory within ${PARENT_EPREFIX}" - exit 0 - ;; - esac -done - -# -# sanity check of given values -# - -test -n "${CHILD_EPREFIX}" || { eerror "no eprefix argument given"; exit 1; } -test -d "${CHILD_EPREFIX}" && { eerror "${CHILD_EPREFIX} already exists"; exit 1; } -test -n "${CHILD_PROFILE}" || { eerror "no profile argument given"; exit 1; } -test -d "${CHILD_PROFILE}" || { eerror "${CHILD_PROFILE} does not exist"; exit 1; } - -einfo "creating stacked prefix ${CHILD_EPREFIX}" - -# -# functions needed below. -# -eend_exit() { - eend $1 - [[ $1 != 0 ]] && exit 1 -} - -# -# create the directories required to bootstrap the least. -# -ebegin "creating directory structure" -( - set -e - mkdir -p "${CHILD_EPREFIX}"/etc/portage/profile/use.mask - mkdir -p "${CHILD_EPREFIX}"/etc/portage/profile/use.force - mkdir -p "${CHILD_EPREFIX}"/etc/portage/env - mkdir -p "${CHILD_EPREFIX}"/etc/portage/package.env - ln -s "${PARENT_EPREFIX}"/etc/portage/repos.conf "${CHILD_EPREFIX}"/etc/portage/repos.conf -) -eend_exit $? - -# -# create a make.conf and set PORTDIR and PORTAGE_TMPDIR -# -ebegin "creating make.conf" -( - set -e - echo "#" - echo "# The following values where taken from the parent prefix's" - echo "# environment. Feel free to adopt them as you like." - echo "#" - echo "CFLAGS=\"$(portageq envvar CFLAGS)\"" - echo "CXXFLAGS=\"$(portageq envvar CXXFLAGS)\"" - echo "MAKEOPTS=\"$(portageq envvar MAKEOPTS)\"" - niceness=$(portageq envvar PORTAGE_NICENESS || true) - [[ -n ${niceness} ]] && - echo "PORTAGE_NICENESS=\"${niceness}\"" - echo - echo "# Mirrors from parent prefix." - echo "GENTOO_MIRRORS=\"$(portageq envvar GENTOO_MIRRORS || true)\"" - echo - echo "# Below comes the prefix-stack setup. Only change things" - echo "# if you know exactly what you are doing!" - echo "EPREFIX=\"${CHILD_EPREFIX}\"" - echo "PORTAGE_OVERRIDE_EPREFIX=\"${PARENT_EPREFIX}\"" - echo "BROOT=\"${PARENT_EPREFIX}\"" -) > "${CHILD_EPREFIX}"/etc/portage/make.conf -eend_exit $? - -ebegin "creating use.mask/prefix-stack" -printf -- '-%s\n' prefix{,-guest,-stack} > "${CHILD_EPREFIX}"/etc/portage/profile/use.mask/prefix-stack -eend_exit $? - -ebegin "creating use.force/prefix-stack" -printf -- '%s\n' prefix{,-guest,-stack} > "${CHILD_EPREFIX}"/etc/portage/profile/use.force/prefix-stack -eend_exit $? - -ebegin "creating env/host-cc.conf" -cat > "${CHILD_EPREFIX}"/etc/portage/env/host-cc.conf <<-EOM - CC=${PARENT_CHOST}-gcc - CXX=${PARENT_CHOST}-g++ - EOM -eend_exit $? - -ebegin "creating package.env/prefix-stack" -cat > "${CHILD_EPREFIX}"/etc/portage/package.env/prefix-stack <<-'EOM' - # merge with the parent's chost. this forces the use of the parent - # compiler, which generally would be illegal - this is an exception. - # This is required for example on winnt, because the wrapper has to - # be able to use/resolve symlinks, etc. native winnt binaries miss - # that ability, but cygwin binaries don't. - sys-devel/gcc-config host-cc.conf - sys-apps/gentoo-functions host-cc.conf - EOM -eend_exit $? - -# -# create the make.profile symlinks. -# -ebegin "creating make.profile" -( - ln -s "${CHILD_PROFILE}" "${CHILD_EPREFIX}/etc/portage/make.profile" -) -eend_exit $? - -# -# adjust permissions of generated files. -# -ebegin "adjusting permissions" -( - set -e - chmod 644 "${CHILD_EPREFIX}"/etc/portage/make.conf - chmod 644 "${CHILD_EPREFIX}"/etc/portage/env/host-cc.conf - chmod 644 "${CHILD_EPREFIX}"/etc/portage/package.env/prefix-stack -) -eend_exit $? - -# -# now merge some basics. -# -ebegin "installing required basic packages" -( - set -e - export PORTAGE_CONFIGROOT@=@"${CHILD_EPREFIX}" - export EPREFIX@=@"${CHILD_EPREFIX}" - export PORTAGE_OVERRIDE_EPREFIX@=@"${PARENT_EPREFIX}" - -# # this -pv is there to avoid the global update output, which is -# # there on the first emerge run. (thus, just cosmetics). -# emerge --pretend --oneshot --nodeps baselayout-prefix - - # let baselayout create the directories - USE@=@"${USE} build" \ - emerge --verbose --nodeps --oneshot \ - '>=baselayout-prefix-2.6' - - # Record the prefix-toolkit into @world file, as it provides the - # env.d telling the PM to manage this stacked Prefix, but may not - # (unlike baselayout) be part of @system set per the profile. - emerge --verbose --nodeps \ - prefix-toolkit - - emerge --verbose --nodeps --oneshot \ - gentoo-functions \ - elt-patches \ - gnuconfig \ - gcc-config - - # select the stack wrapper profile from gcc-config - env -i PORTAGE_CONFIGROOT="${CHILD_EPREFIX}" "$(type -P bash)" "${CHILD_EPREFIX}"/usr/bin/gcc-config 1 - - # do this _after_ selecting the correct compiler! - emerge --verbose --nodeps --oneshot \ - libtool -) -eend_exit $? - -# -# wow, all ok :) -# -ewarn -ewarn "all done. don't forget to tune ${CHILD_EPREFIX}/etc/portage/make.conf." -ewarn "to enter the new prefix, run \"${CHILD_EPREFIX}/startprefix\"." -ewarn -EOIN - -: prefix-stack-ccwrap <<'EOIN' -#!@GENTOO_PORTAGE_BPREFIX@/bin/bash - -if [ -r /cygdrive/. ]; then - winpath2unix() { cygpath -u "$1"; } - unixpath2win() { cygpath -w "$1"; } -fi - -myself=${0##*/} # basename $0 -link_dirs=() -opts=() -chost="@GENTOO_PORTAGE_CHOST@" -prefix="@GENTOO_PORTAGE_EPREFIX@" -absprefix=${prefix} -if [[ ${chost} == *"-winnt"* ]]; then - # we may get called from windows binary, like pkgdata in dev-libs/icu - # in this case, PATH elements get the "/dev/fs/C/WINDOWS/SUA" prefix - absprefix=$(winpath2unix "$(unixpath2win "${absprefix}")") -fi -[[ ${myself} == *windres* ]] && mode=compile || mode=link -orig_args=("$@") - -for opt in "$@" -do - case "$opt" in - -L) - link_dirs=("${link_dirs[@]}" "-L$1") - shift - ;; - -L*) - link_dirs=("${link_dirs[@]}" "${opt}") - ;; - *) - case "${opt}" in - -v) - # -v done right: only use mode version if -v is the _only_ - # argument on the command line. - [[ ${#orig_args[@]} -gt 1 ]] || mode=version - ;; - --version) mode=version ;; - -c|-E|-S) mode=compile ;; - -print-search-dirs) mode=dirs ;; - esac - opts=("${opts[@]}" "${opt}") - ;; - esac -done - -# remove any path to current prefix, need base prefix only -new_path= -save_ifs=$IFS -IFS=':' -for p in $PATH -do - IFS=$save_ifs - [[ ${p#${absprefix}} != "${p}" ]] && continue - if [[ -z "${new_path}" ]]; then - new_path="${p}" - else - new_path="${new_path}:${p}" - fi -done -IFS=$save_ifs - -PATH=${new_path} - -# binutils-config's ldwrapper understands '-R' for aix and hpux too. -# parity (winnt) understands -rpath only ... -case "${chost}" in -*-winnt*) rpath_opt="-Wl,-rpath," ;; -*) rpath_opt="-Wl,-R," ;; -esac - -pfx_link=("-L${prefix}/usr/lib" "-L${prefix}/lib") -pfx_link_r=("${rpath_opt}${prefix}/lib" "${rpath_opt}${prefix}/usr/lib") -pfx_comp=("-I${prefix}/include" "-I${prefix}/usr/include") - -# ensure we run the right chost program in base prefix -[[ ${myself} == *-*-*-* ]] || myself=${chost}-${myself#${chost}-} - -case "$mode" in -link) exec "${myself}" "${link_dirs[@]}" "${pfx_link[@]}" "${opts[@]}" "${pfx_comp[@]}" "${pfx_link_r[@]}" ;; -compile) exec "${myself}" "${link_dirs[@]}" "${opts[@]}" "${pfx_comp[@]}" ;; -version) exec "${myself}" "${orig_args[@]}" ;; -dirs) - "${myself}" "${orig_args[@]}" | while read line; do - if [[ "${line}" == "libraries: ="* ]]; then - echo "libraries: =${prefix}/usr/lib:${prefix}/lib:${line#"libraries: ="}" - else - echo "${line}" - fi - done - ;; -*) echo "cannot infer ${myself}'s mode from comamnd line arguments"; exit 1 ;; -esac -EOIN diff --git a/app-portage/prefix-toolkit/prefix-toolkit-1.ebuild b/app-portage/prefix-toolkit/prefix-toolkit-1.ebuild deleted file mode 100644 index 0b61ff486871..000000000000 --- a/app-portage/prefix-toolkit/prefix-toolkit-1.ebuild +++ /dev/null @@ -1,567 +0,0 @@ -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=7 - -DESCRIPTION="Utilities for users of Gentoo Prefix" -HOMEPAGE="https://prefix.gentoo.org/" -SRC_URI="" - -LICENSE="GPL-3" -SLOT="0" - -[[ ${PV} == 9999 ]] || -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris ~x86-winnt" - -BDEPEND=" - >sys-apps/portage-2.3.62 -" -DEPEND="" -RDEPEND=" - !app-portage/prefix-chain-setup - !sys-apps/prefix-chain-utils - prefix-stack? ( - >=sys-apps/baselayout-prefix-2.6 - ) -" - -S="${WORKDIR}" - -my_unpack() { - local infile=$1 - local outfile=${2:-${infile}} - ebegin "extracting ${outfile}" - sed -ne "/^: ${infile} /,/EOIN/{/EOIN/d;p}" "${EBUILD}" \ - > "${outfile}" || die "Failed to unpack ${outfile}" - eend $? -} - -src_unpack() { - if use prefix-stack ; then - my_unpack prefix-stack.bash_login - my_unpack prefix-stack.bashrc - my_unpack prefix-stack.envd.99stack - my_unpack prefix-stack-ccwrap - local editor pager - for editor in "${EDITOR}" {"${EPREFIX}","${BROOT}"}/bin/nano - do - [[ -x ${editor} ]] || continue - done - for pager in "${PAGER}" {"${EPREFIX}","${BROOT}"}/usr/bin/less - do - [[ -x ${pager} ]] || continue - done - printf '%s\n' "EDITOR=\"${editor}\"" "PAGER=\"${pager}\"" > 000fallback - else - my_unpack prefix-stack-setup - fi - my_unpack startprefix -} - -my_prefixify() { - local ebash eenv - if use prefix-stack ; then - ebash="${BROOT}/bin/bash" - eenv="${BROOT}/usr/bin/env" - else - ebash="${EPREFIX}/bin/bash" - eenv="${EPREFIX}/usr/bin/env" - fi - - # the @=@ prevents repoman from believing we set readonly vars - sed -e "s,@GENTOO_PORTAGE_BPREFIX@,${BROOT},g" \ - -e "s,@GENTOO_PORTAGE_EPREFIX@,${EPREFIX},g" \ - -e "s,@GENTOO_PORTAGE_CHOST@,${CHOST},g" \ - -e "s,@GENTOO_PORTAGE_EBASH@,${ebash},g" \ - -e "s,@GENTOO_PORTAGE_EENV@,${eenv},g" \ - -e "s,@=@,=,g" \ - -i "$@" || die -} - -src_configure() { - # do not eprefixify during unpack, to allow userpatches to apply - my_prefixify * -} - -src_install-prefix-stack-ccwrap() { - # install toolchain wrapper. - local wrapperdir=/usr/${CHOST}/gcc-bin/${CHOST}-${PN}/${PV} - local wrappercfg=${CHOST}-${P} - - exeinto $wrapperdir - doexe prefix-stack-ccwrap - - local cc - for cc in \ - gcc \ - g++ \ - cpp \ - c++ \ - windres \ - ; do - dosym prefix-stack-ccwrap $wrapperdir/${CHOST}-${cc} - dosym ${CHOST}-${cc} $wrapperdir/${cc} - done - - # LDPATH is required to keep gcc-config happy :( - cat > ./${wrappercfg} <<-EOF - GCC_PATH="${EPREFIX}$wrapperdir" - LDPATH="${EPREFIX}$wrapperdir" - EOF - - insinto /etc/env.d/gcc - doins ./${wrappercfg} -} - -src_install() { - if use prefix-stack; then - src_install-prefix-stack-ccwrap - insinto /etc - doins prefix-stack.bash_login - insinto /etc/bash - newins prefix-stack.bashrc bashrc - newenvd prefix-stack.envd.99stack 99stack - doenvd 000fallback - else - dobin prefix-stack-setup - fi - exeinto / - doexe startprefix -} - -return 0 - -: startprefix <<'EOIN' -#!@GENTOO_PORTAGE_EBASH@ -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -# Fabian Groffen <grobian@gentoo.org> -- 2007-03-10 -# Enters the prefix environment by starting a login shell from the -# prefix. The SHELL environment variable is elevated in order to make -# applications that start login shells to work, such as `screen`. - -# if you come from a substantially polluted environment (another -# Prefix), a cleanup as follows resolves most oddities I've ever seen: -# env -i HOME=$HOME TERM=$TERM USER=$USER $SHELL -l -# hence this script starts the Prefix shell like this - -if [[ ${SHELL#@GENTOO_PORTAGE_EPREFIX@} != ${SHELL} ]] -then - echo "You appear to be in prefix already (SHELL=${SHELL})" > /dev/stderr - exit -1 -elif [[ ${SHELL#@GENTOO_PORTAGE_BPREFIX@} != ${SHELL} ]] && - [[ ${EPREFIX-unset} == '@GENTOO_PORTAGE_EPREFIX@' ]] -then - echo "You appear to be in stacked prefix already (EPREFIX=${EPREFIX})" > /dev/stderr - exit -1 -fi - -# What is our prefix? -EPREFIX@=@'@GENTOO_PORTAGE_EPREFIX@' -BPREFIX@=@'@GENTOO_PORTAGE_BPREFIX@' - -# not all systems have the same location for shells, however what it -# boils down to, is that we need to know what the shell is, and then we -# can find it in the bin dir of our prefix -for SHELL in \ - "${EPREFIX}/bin/${SHELL##*/}" \ - "${BPREFIX}/bin/${SHELL##*/}" \ - ${SHELL##*/} -do - [[ ${SHELL} == */* && -x ${SHELL} ]] && break -done - -# check if the shell exists -if [[ ${SHELL} != */* ]] -then - echo "Failed to find the Prefix shell, this is probably" > /dev/stderr - echo "because you didn't emerge the shell ${SHELL}" > /dev/stderr - exit 1 -fi - -# set the prefix shell in the environment -export SHELL - -# give a small notice -echo "Entering Gentoo Prefix ${EPREFIX}" -# start the login shell, clean the entire environment but what's needed -RETAIN="HOME=$HOME TERM=$TERM USER=$USER SHELL=$SHELL" -# PROFILEREAD is necessary on SUSE not to wipe the env on shell start -[[ -n ${PROFILEREAD} ]] && RETAIN+=" PROFILEREAD=$PROFILEREAD" -# ssh-agent is handy to keep, of if set, inherit it -[[ -n ${SSH_AUTH_SOCK} ]] && RETAIN+=" SSH_AUTH_SOCK=$SSH_AUTH_SOCK" -# if we're on some X terminal, makes sense to inherit that too -[[ -n ${DISPLAY} ]] && RETAIN+=" DISPLAY=$DISPLAY" -# do it! -if [[ ${SHELL#${EPREFIX}} != ${SHELL} ]] ; then - '@GENTOO_PORTAGE_EENV@' -i $RETAIN $SHELL -l -elif [[ ' bash ' == *" ${SHELL##*/} "* ]] ; then - # shell coming from different prefix would load it's own - # etc/profile upon -l, so we have to override - '@GENTOO_PORTAGE_EENV@' -i ${RETAIN} "${SHELL}" --rcfile "${EPREFIX}"/etc/prefix-stack.bash_login -i -else - echo "Only bash is supported with stacked Prefix (you have ${SHELL##*/}), sorry!" > /dev/stderr - exit 1 -fi -# and leave a message when we exit... the shell might return non-zero -# without having real problems, so don't send alarming messages about -# that -echo "Leaving Gentoo Prefix with exit status $?" -EOIN - -: prefix-stack.bashrc <<'EOIN' -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 -# -# In stacked Prefix there is no bash installed, yet -# etc/bash/bashrc from base Prefix still is useful. -# - -if [[ $- != *i* ]] ; then - # Shell is non-interactive, bashrc does not apply - return -fi - -if [[ -r @GENTOO_PORTAGE_BPREFIX@/etc/bash/bashrc ]] ; then - source '@GENTOO_PORTAGE_BPREFIX@/etc/bash/bashrc' - # only if base Prefix does have an etc/bash/bashrc, we also - # run bashrc snippets provided by packages in stacked Prefix - for sh in '@GENTOO_PORTAGE_EPREFIX@'/etc/bash/bashrc.d/* ; do - [[ -r ${sh} ]] && source "${sh}" - done - unset sh -else - # etc/profile does expect etc/bash/bashrc to set PS1 - PS1='\u@\h \w \$ ' -fi -EOIN - -: prefix-stack.bash_login <<'EOIN' -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 -# -# In stacked Prefix there is no bash installed, so there is -# no bash able to load this Prefix' profile as login shell. -# Instead, you can specify this one as bash rcfile to mimic -# a bash login shell using this stacked Prefix profile. -# - -if [[ -s '@GENTOO_PORTAGE_EPREFIX@/etc/profile' ]] ; then - . '@GENTOO_PORTAGE_EPREFIX@/etc/profile' -fi -if [[ -s ~/.bash_profile ]] ; then - . ~/.bash_profile -elif [[ -s ~/.bash_login ]] ; then - . ~/.bash_login -elif [[ -s ~/.profile ]] ; then - . ~/.profile -fi -EOIN - -: prefix-stack.envd.99stack <<'EOIN' -PKG_CONFIG_PATH@=@"@GENTOO_PORTAGE_EPREFIX@/usr/lib/pkgconfig:@GENTOO_PORTAGE_EPREFIX@/usr/share/pkgconfig" -PORTAGE_CONFIGROOT@=@"@GENTOO_PORTAGE_EPREFIX@" -EPREFIX@=@"@GENTOO_PORTAGE_EPREFIX@" -EOIN - -: prefix-stack-setup <<'EOIN' -#!@GENTOO_PORTAGE_EPREFIX@/bin/bash -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -PARENT_EPREFIX="@GENTOO_PORTAGE_EPREFIX@" -PARENT_CHOST="@GENTOO_PORTAGE_CHOST@" -CHILD_EPREFIX= -CHILD_PROFILE= - -# -# get ourselfs the functions.sh script for ebegin/eend/etc. -# -for f in \ - /lib/gentoo/functions.sh \ - /etc/init.d/functions.sh \ - /sbin/functions.sh \ -; do - if [[ -r ${PARENT_EPREFIX}${f} ]] ; then - . "${PARENT_EPREFIX}${f}" - f=found - break - fi -done - -if [[ ${f} != found ]] ; then - echo "Cannot find Gentoo functions, aborting." >&2 - exit 1 -fi - -for arg in "$@"; do - case "${arg}" in - --eprefix=*) CHILD_EPREFIX="${arg#--eprefix=}" ;; - --profile=*) CHILD_PROFILE="${arg#--profile=}" ;; - - --help) - einfo "$0 usage:" - einfo " --eprefix=[PATH] Path to new EPREFIX to create stacked to the prefix" - einfo " where this script is installed (${PARENT_EPREFIX})" - einfo " --profile=[PATH] The absolute path to the profile to use. This path" - einfo " must point to a directory within ${PARENT_EPREFIX}" - exit 0 - ;; - esac -done - -# -# sanity check of given values -# - -test -n "${CHILD_EPREFIX}" || { eerror "no eprefix argument given"; exit 1; } -test -d "${CHILD_EPREFIX}" && { eerror "${CHILD_EPREFIX} already exists"; exit 1; } -test -n "${CHILD_PROFILE}" || { eerror "no profile argument given"; exit 1; } -test -d "${CHILD_PROFILE}" || { eerror "${CHILD_PROFILE} does not exist"; exit 1; } - -einfo "creating stacked prefix ${CHILD_EPREFIX}" - -# -# functions needed below. -# -eend_exit() { - eend $1 - [[ $1 != 0 ]] && exit 1 -} - -# -# create the directories required to bootstrap the least. -# -ebegin "creating directory structure" -( - set -e - mkdir -p "${CHILD_EPREFIX}"/etc/portage/profile/use.mask - mkdir -p "${CHILD_EPREFIX}"/etc/portage/profile/use.force - mkdir -p "${CHILD_EPREFIX}"/etc/portage/env - mkdir -p "${CHILD_EPREFIX}"/etc/portage/package.env - ln -s "${PARENT_EPREFIX}"/etc/portage/repos.conf "${CHILD_EPREFIX}"/etc/portage/repos.conf -) -eend_exit $? - -# -# create a make.conf and set PORTDIR and PORTAGE_TMPDIR -# -ebegin "creating make.conf" -( - set -e - echo "#" - echo "# The following values where taken from the parent prefix's" - echo "# environment. Feel free to adopt them as you like." - echo "#" - echo "CFLAGS=\"$(portageq envvar CFLAGS)\"" - echo "CXXFLAGS=\"$(portageq envvar CXXFLAGS)\"" - echo "MAKEOPTS=\"$(portageq envvar MAKEOPTS)\"" - niceness=$(portageq envvar PORTAGE_NICENESS || true) - [[ -n ${niceness} ]] && - echo "PORTAGE_NICENESS=\"${niceness}\"" - echo - echo "# Mirrors from parent prefix." - echo "GENTOO_MIRRORS=\"$(portageq envvar GENTOO_MIRRORS || true)\"" - echo - echo "# Below comes the prefix-stack setup. Only change things" - echo "# if you know exactly what you are doing!" - echo "EPREFIX=\"${CHILD_EPREFIX}\"" - echo "PORTAGE_OVERRIDE_EPREFIX=\"${PARENT_EPREFIX}\"" - echo "BROOT=\"${PARENT_EPREFIX}\"" -) > "${CHILD_EPREFIX}"/etc/portage/make.conf -eend_exit $? - -ebegin "creating use.mask/prefix-stack" -printf -- '-%s\n' prefix{,-guest,-stack} > "${CHILD_EPREFIX}"/etc/portage/profile/use.mask/prefix-stack -eend_exit $? - -ebegin "creating use.force/prefix-stack" -printf -- '%s\n' prefix{,-guest,-stack} > "${CHILD_EPREFIX}"/etc/portage/profile/use.force/prefix-stack -eend_exit $? - -ebegin "creating env/host-cc.conf" -cat > "${CHILD_EPREFIX}"/etc/portage/env/host-cc.conf <<-EOM - CC=${PARENT_CHOST}-gcc - CXX=${PARENT_CHOST}-g++ - EOM -eend_exit $? - -ebegin "creating package.env/prefix-stack" -cat > "${CHILD_EPREFIX}"/etc/portage/package.env/prefix-stack <<-'EOM' - # merge with the parent's chost. this forces the use of the parent - # compiler, which generally would be illegal - this is an exception. - # This is required for example on winnt, because the wrapper has to - # be able to use/resolve symlinks, etc. native winnt binaries miss - # that ability, but cygwin binaries don't. - sys-devel/gcc-config host-cc.conf - sys-apps/gentoo-functions host-cc.conf - EOM -eend_exit $? - -# -# create the make.profile symlinks. -# -ebegin "creating make.profile" -( - ln -s "${CHILD_PROFILE}" "${CHILD_EPREFIX}/etc/portage/make.profile" -) -eend_exit $? - -# -# adjust permissions of generated files. -# -ebegin "adjusting permissions" -( - set -e - chmod 644 "${CHILD_EPREFIX}"/etc/portage/make.conf - chmod 644 "${CHILD_EPREFIX}"/etc/portage/env/host-cc.conf - chmod 644 "${CHILD_EPREFIX}"/etc/portage/package.env/prefix-stack -) -eend_exit $? - -# -# now merge some basics. -# -ebegin "installing required basic packages" -( - set -e - export PORTAGE_CONFIGROOT@=@"${CHILD_EPREFIX}" - export EPREFIX@=@"${CHILD_EPREFIX}" - export PORTAGE_OVERRIDE_EPREFIX@=@"${PARENT_EPREFIX}" - -# # this -pv is there to avoid the global update output, which is -# # there on the first emerge run. (thus, just cosmetics). -# emerge --pretend --oneshot --nodeps baselayout-prefix - - # let baselayout create the directories - USE@=@"${USE} build" \ - emerge --verbose --nodeps --oneshot \ - '>=baselayout-prefix-2.6' - - # Record the prefix-toolkit into @world file, as it provides the - # env.d telling the PM to manage this stacked Prefix, but may not - # (unlike baselayout) be part of @system set per the profile. - emerge --verbose --nodeps \ - prefix-toolkit - - emerge --verbose --nodeps --oneshot \ - gentoo-functions \ - elt-patches \ - gnuconfig \ - gcc-config - - # select the stack wrapper profile from gcc-config - env -i PORTAGE_CONFIGROOT="${CHILD_EPREFIX}" "$(type -P bash)" "${CHILD_EPREFIX}"/usr/bin/gcc-config 1 - - # do this _after_ selecting the correct compiler! - emerge --verbose --nodeps --oneshot \ - libtool -) -eend_exit $? - -# -# wow, all ok :) -# -ewarn -ewarn "all done. don't forget to tune ${CHILD_EPREFIX}/etc/portage/make.conf." -ewarn "to enter the new prefix, run \"${CHILD_EPREFIX}/startprefix\"." -ewarn -EOIN - -: prefix-stack-ccwrap <<'EOIN' -#!@GENTOO_PORTAGE_BPREFIX@/bin/bash - -if [ -r /cygdrive/. ]; then - winpath2unix() { cygpath -u "$1"; } - unixpath2win() { cygpath -w "$1"; } -fi - -myself=${0##*/} # basename $0 -link_dirs=() -opts=() -chost="@GENTOO_PORTAGE_CHOST@" -prefix="@GENTOO_PORTAGE_EPREFIX@" -absprefix=${prefix} -if [[ ${chost} == *"-winnt"* ]]; then - # we may get called from windows binary, like pkgdata in dev-libs/icu - # in this case, PATH elements get the "/dev/fs/C/WINDOWS/SUA" prefix - absprefix=$(winpath2unix "$(unixpath2win "${absprefix}")") -fi -[[ ${myself} == *windres* ]] && mode=compile || mode=link -orig_args=("$@") - -for opt in "$@" -do - case "$opt" in - -L) - link_dirs=("${link_dirs[@]}" "-L$1") - shift - ;; - -L*) - link_dirs=("${link_dirs[@]}" "${opt}") - ;; - *) - case "${opt}" in - -v) - # -v done right: only use mode version if -v is the _only_ - # argument on the command line. - [[ ${#orig_args[@]} -gt 1 ]] || mode=version - ;; - --version) mode=version ;; - -c|-E|-S) mode=compile ;; - -print-search-dirs) mode=dirs ;; - esac - opts=("${opts[@]}" "${opt}") - ;; - esac -done - -# remove any path to current prefix, need base prefix only -new_path= -save_ifs=$IFS -IFS=':' -for p in $PATH -do - IFS=$save_ifs - [[ ${p#${absprefix}} != "${p}" ]] && continue - if [[ -z "${new_path}" ]]; then - new_path="${p}" - else - new_path="${new_path}:${p}" - fi -done -IFS=$save_ifs - -PATH=${new_path} - -# binutils-config's ldwrapper understands '-R' for aix and hpux too. -# parity (winnt) understands -rpath only ... -case "${chost}" in -*-winnt*) rpath_opt="-Wl,-rpath," ;; -*) rpath_opt="-Wl,-R," ;; -esac - -pfx_link=("-L${prefix}/usr/lib" "-L${prefix}/lib") -pfx_link_r=("${rpath_opt}${prefix}/lib" "${rpath_opt}${prefix}/usr/lib") -pfx_comp=("-I${prefix}/include" "-I${prefix}/usr/include") - -# ensure we run the right chost program in base prefix -[[ ${myself} == *-*-*-* ]] || myself=${chost}-${myself#${chost}-} - -case "$mode" in -link) exec "${myself}" "${link_dirs[@]}" "${pfx_link[@]}" "${opts[@]}" "${pfx_comp[@]}" "${pfx_link_r[@]}" ;; -compile) exec "${myself}" "${link_dirs[@]}" "${opts[@]}" "${pfx_comp[@]}" ;; -version) exec "${myself}" "${orig_args[@]}" ;; -dirs) - "${myself}" "${orig_args[@]}" | while read line; do - if [[ "${line}" == "libraries: ="* ]]; then - echo "libraries: =${prefix}/usr/lib:${prefix}/lib:${line#"libraries: ="}" - else - echo "${line}" - fi - done - ;; -*) echo "cannot infer ${myself}'s mode from comamnd line arguments"; exit 1 ;; -esac -EOIN diff --git a/app-portage/prefix-toolkit/prefix-toolkit-2.ebuild b/app-portage/prefix-toolkit/prefix-toolkit-2.ebuild deleted file mode 100644 index 21c172139b10..000000000000 --- a/app-portage/prefix-toolkit/prefix-toolkit-2.ebuild +++ /dev/null @@ -1,614 +0,0 @@ -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=7 - -DESCRIPTION="Utilities for users of Gentoo Prefix" -HOMEPAGE="https://prefix.gentoo.org/" -SRC_URI="" - -LICENSE="GPL-3" -SLOT="0" - -[[ ${PV} == 9999 ]] || -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86 ~ppc-aix ~x64-cygwin ~amd64-fbsd ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos ~x86-macos ~m68k-mint ~sparc-solaris ~sparc64-solaris ~x64-solaris ~x86-solaris ~x86-winnt" - -DEPEND=" - !app-portage/prefix-chain-setup - !sys-apps/prefix-chain-utils -" -BDEPEND="${DEPEND} - >sys-apps/portage-2.3.62 -" -# In prefix-stack, these dependencies actually are the @system set, -# as we rely on the base prefix anyway for package management, -# which should have a proper @system set. -# See als: pkg_preinst -RDEPEND="${DEPEND} - prefix-stack? ( - >=sys-apps/baselayout-prefix-2.6 - sys-apps/gentoo-functions - app-portage/elt-patches - sys-devel/gnuconfig - sys-devel/gcc-config - ) -" - -S="${WORKDIR}" - -my_unpack() { - local infile=$1 - local outfile=${2:-${infile}} - ebegin "extracting ${outfile}" - sed -ne "/^: ${infile} /,/EOIN/{/EOIN/d;p}" "${EBUILD}" \ - > "${outfile}" || die "Failed to unpack ${outfile}" - eend $? -} - -src_unpack() { - if use prefix-stack ; then - my_unpack prefix-stack.bash_login - my_unpack prefix-stack.bashrc - my_unpack prefix-stack.envd.99stack - my_unpack prefix-stack-ccwrap - local editor pager - for editor in "${EDITOR}" {"${EPREFIX}","${BROOT}"}/bin/nano - do - [[ -x ${editor} ]] || continue - done - for pager in "${PAGER}" {"${EPREFIX}","${BROOT}"}/usr/bin/less - do - [[ -x ${pager} ]] || continue - done - printf '%s\n' "EDITOR=\"${editor}\"" "PAGER=\"${pager}\"" > 000fallback - else - my_unpack prefix-stack-setup - fi - my_unpack startprefix -} - -my_prefixify() { - local ebash eenv - if use prefix-stack ; then - ebash="${BROOT}/bin/bash" - eenv="${BROOT}/usr/bin/env" - else - ebash="${EPREFIX}/bin/bash" - eenv="${EPREFIX}/usr/bin/env" - fi - - # the @=@ prevents repoman from believing we set readonly vars - sed -e "s,@GENTOO_PORTAGE_BPREFIX@,${BROOT},g" \ - -e "s,@GENTOO_PORTAGE_EPREFIX@,${EPREFIX},g" \ - -e "s,@GENTOO_PORTAGE_CHOST@,${CHOST},g" \ - -e "s,@GENTOO_PORTAGE_EBASH@,${ebash},g" \ - -e "s,@GENTOO_PORTAGE_EENV@,${eenv},g" \ - -e "s,@=@,=,g" \ - -i "$@" || die -} - -src_configure() { - # do not eprefixify during unpack, to allow userpatches to apply - my_prefixify * -} - -src_install-prefix-stack-ccwrap() { - # install toolchain wrapper. - local wrapperdir=/usr/${CHOST}/gcc-bin/${CHOST}-${PN}/${PV} - local wrappercfg=${CHOST}-${P} - - exeinto $wrapperdir - doexe prefix-stack-ccwrap - - local cc - for cc in \ - gcc \ - g++ \ - cpp \ - c++ \ - windres \ - ; do - dosym prefix-stack-ccwrap $wrapperdir/${CHOST}-${cc} - dosym ${CHOST}-${cc} $wrapperdir/${cc} - done - - # LDPATH is required to keep gcc-config happy :( - cat > ./${wrappercfg} <<-EOF - GCC_PATH="${EPREFIX}$wrapperdir" - LDPATH="${EPREFIX}$wrapperdir" - EOF - - insinto /etc/env.d/gcc - doins ./${wrappercfg} -} - -src_install() { - if use prefix-stack; then - src_install-prefix-stack-ccwrap - insinto /etc - doins prefix-stack.bash_login - insinto /etc/bash - newins prefix-stack.bashrc bashrc - newenvd prefix-stack.envd.99stack 99stack - doenvd 000fallback - else - dobin prefix-stack-setup - fi - exeinto / - doexe startprefix -} - -pkg_preinst() { - use prefix-stack || return 0 - ebegin "Purging @system package set for prefix stack" - # In prefix stack we empty out the @system set defined via make.profile, - # as we may be using some normal profile, but that @system set applies - # to the base prefix only. - # Instead, we only put ourselve into the @system set, and have additional - # @system packages in our RDEPEND. - my_lsprofile() { - ( - cd -P "${1:-.}" || exit 1 - [[ -r ./parent ]] && - for p in $(<parent) - do - my_lsprofile "${p}" || exit 1 - done - pwd -P - ) - } - local systemset="/etc/portage/profile/packages" - dodir "${systemset%/*}" - [[ -s ${EROOT}${systemset} ]] && - grep -v "# maintained by ${PN}" \ - "${EROOT}${systemset}" \ - > "${ED}${systemset}" - local p - for p in $(my_lsprofile "${EPREFIX}"/etc/portage/make.profile) - do - [[ -s ${p}/${systemset##*/} ]] || continue - awk '/^[ \t]*[^-#]/{print "-" $1 " # maintained by '"${PN}-${PVR}"'"}' \ - < "${p}"/packages || die - done | sort -u >> "${ED}${systemset}" - [[ ${PIPESTATUS[@]} == "0 0" ]] || die "failed to collect for ${systemset}" - echo "*${CATEGORY}/${PN} # maintained by ${PN}-${PVR}" >> "${ED}${systemset}" || die - eend $? -} - -return 0 - -: startprefix <<'EOIN' -#!@GENTOO_PORTAGE_EBASH@ -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -# Fabian Groffen <grobian@gentoo.org> -- 2007-03-10 -# Enters the prefix environment by starting a login shell from the -# prefix. The SHELL environment variable is elevated in order to make -# applications that start login shells to work, such as `screen`. - -# if you come from a substantially polluted environment (another -# Prefix), a cleanup as follows resolves most oddities I've ever seen: -# env -i HOME=$HOME TERM=$TERM USER=$USER $SHELL -l -# hence this script starts the Prefix shell like this - -if [[ ${SHELL#@GENTOO_PORTAGE_EPREFIX@} != ${SHELL} ]] -then - echo "You appear to be in prefix already (SHELL=${SHELL})" > /dev/stderr - exit -1 -elif [[ ${SHELL#@GENTOO_PORTAGE_BPREFIX@} != ${SHELL} ]] && - [[ ${EPREFIX-unset} == '@GENTOO_PORTAGE_EPREFIX@' ]] -then - echo "You appear to be in stacked prefix already (EPREFIX=${EPREFIX})" > /dev/stderr - exit -1 -fi - -# What is our prefix? -EPREFIX@=@'@GENTOO_PORTAGE_EPREFIX@' -BPREFIX@=@'@GENTOO_PORTAGE_BPREFIX@' - -# not all systems have the same location for shells, however what it -# boils down to, is that we need to know what the shell is, and then we -# can find it in the bin dir of our prefix -for SHELL in \ - "${EPREFIX}/bin/${SHELL##*/}" \ - "${BPREFIX}/bin/${SHELL##*/}" \ - ${SHELL##*/} -do - [[ ${SHELL} == */* && -x ${SHELL} ]] && break -done - -# check if the shell exists -if [[ ${SHELL} != */* ]] -then - echo "Failed to find the Prefix shell, this is probably" > /dev/stderr - echo "because you didn't emerge the shell ${SHELL}" > /dev/stderr - exit 1 -fi - -# set the prefix shell in the environment -export SHELL - -# give a small notice -echo "Entering Gentoo Prefix ${EPREFIX}" -# start the login shell, clean the entire environment but what's needed -RETAIN="HOME=$HOME TERM=$TERM USER=$USER SHELL=$SHELL" -# PROFILEREAD is necessary on SUSE not to wipe the env on shell start -[[ -n ${PROFILEREAD} ]] && RETAIN+=" PROFILEREAD=$PROFILEREAD" -# ssh-agent is handy to keep, of if set, inherit it -[[ -n ${SSH_AUTH_SOCK} ]] && RETAIN+=" SSH_AUTH_SOCK=$SSH_AUTH_SOCK" -# if we're on some X terminal, makes sense to inherit that too -[[ -n ${DISPLAY} ]] && RETAIN+=" DISPLAY=$DISPLAY" -# do it! -if [[ ${SHELL#${EPREFIX}} != ${SHELL} ]] ; then - '@GENTOO_PORTAGE_EENV@' -i $RETAIN $SHELL -l -elif [[ ' bash ' == *" ${SHELL##*/} "* ]] ; then - # shell coming from different prefix would load it's own - # etc/profile upon -l, so we have to override - '@GENTOO_PORTAGE_EENV@' -i ${RETAIN} "${SHELL}" --rcfile "${EPREFIX}"/etc/prefix-stack.bash_login -i -else - echo "Only bash is supported with stacked Prefix (you have ${SHELL##*/}), sorry!" > /dev/stderr - exit 1 -fi -# and leave a message when we exit... the shell might return non-zero -# without having real problems, so don't send alarming messages about -# that -echo "Leaving Gentoo Prefix with exit status $?" -EOIN - -: prefix-stack.bashrc <<'EOIN' -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 -# -# In stacked Prefix there is no bash installed, yet -# etc/bash/bashrc from base Prefix still is useful. -# - -if [[ $- != *i* ]] ; then - # Shell is non-interactive, bashrc does not apply - return -fi - -if [[ -r @GENTOO_PORTAGE_BPREFIX@/etc/bash/bashrc ]] ; then - source '@GENTOO_PORTAGE_BPREFIX@/etc/bash/bashrc' - # only if base Prefix does have an etc/bash/bashrc, we also - # run bashrc snippets provided by packages in stacked Prefix - for sh in '@GENTOO_PORTAGE_EPREFIX@'/etc/bash/bashrc.d/* ; do - [[ -r ${sh} ]] && source "${sh}" - done - unset sh -else - # etc/profile does expect etc/bash/bashrc to set PS1 - PS1='\u@\h \w \$ ' -fi -EOIN - -: prefix-stack.bash_login <<'EOIN' -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 -# -# In stacked Prefix there is no bash installed, so there is -# no bash able to load this Prefix' profile as login shell. -# Instead, you can specify this one as bash rcfile to mimic -# a bash login shell using this stacked Prefix profile. -# - -if [[ -s '@GENTOO_PORTAGE_EPREFIX@/etc/profile' ]] ; then - . '@GENTOO_PORTAGE_EPREFIX@/etc/profile' -fi -if [[ -s ~/.bash_profile ]] ; then - . ~/.bash_profile -elif [[ -s ~/.bash_login ]] ; then - . ~/.bash_login -elif [[ -s ~/.profile ]] ; then - . ~/.profile -fi -EOIN - -: prefix-stack.envd.99stack <<'EOIN' -PKG_CONFIG_PATH@=@"@GENTOO_PORTAGE_EPREFIX@/usr/lib/pkgconfig:@GENTOO_PORTAGE_EPREFIX@/usr/share/pkgconfig" -PORTAGE_CONFIGROOT@=@"@GENTOO_PORTAGE_EPREFIX@" -EPREFIX@=@"@GENTOO_PORTAGE_EPREFIX@" -EOIN - -: prefix-stack-setup <<'EOIN' -#!@GENTOO_PORTAGE_EPREFIX@/bin/bash -# Copyright 1999-2019 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -PARENT_EPREFIX="@GENTOO_PORTAGE_EPREFIX@" -PARENT_CHOST="@GENTOO_PORTAGE_CHOST@" -CHILD_EPREFIX= -CHILD_PROFILE= - -# -# get ourselfs the functions.sh script for ebegin/eend/etc. -# -for f in \ - /lib/gentoo/functions.sh \ - /etc/init.d/functions.sh \ - /sbin/functions.sh \ -; do - if [[ -r ${PARENT_EPREFIX}${f} ]] ; then - . "${PARENT_EPREFIX}${f}" - f=found - break - fi -done - -if [[ ${f} != found ]] ; then - echo "Cannot find Gentoo functions, aborting." >&2 - exit 1 -fi - -for arg in "$@"; do - case "${arg}" in - --eprefix=*) CHILD_EPREFIX="${arg#--eprefix=}" ;; - --profile=*) CHILD_PROFILE="${arg#--profile=}" ;; - - --help) - einfo "$0 usage:" - einfo " --eprefix=[PATH] Path to new EPREFIX to create stacked to the prefix" - einfo " where this script is installed (${PARENT_EPREFIX})" - einfo " --profile=[PATH] The absolute path to the profile to use. This path" - einfo " must point to a directory within ${PARENT_EPREFIX}" - exit 0 - ;; - esac -done - -# -# sanity check of given values -# - -test -n "${CHILD_EPREFIX}" || { eerror "no eprefix argument given"; exit 1; } -test -d "${CHILD_EPREFIX}" && { eerror "${CHILD_EPREFIX} already exists"; exit 1; } -test -n "${CHILD_PROFILE}" || { eerror "no profile argument given"; exit 1; } -test -d "${CHILD_PROFILE}" || { eerror "${CHILD_PROFILE} does not exist"; exit 1; } - -einfo "creating stacked prefix ${CHILD_EPREFIX}" - -# -# functions needed below. -# -eend_exit() { - eend $1 - [[ $1 != 0 ]] && exit 1 -} - -# -# create the directories required to bootstrap the least. -# -ebegin "creating directory structure" -( - set -e - mkdir -p "${CHILD_EPREFIX}"/etc/portage/profile/use.mask - mkdir -p "${CHILD_EPREFIX}"/etc/portage/profile/use.force - mkdir -p "${CHILD_EPREFIX}"/etc/portage/env - mkdir -p "${CHILD_EPREFIX}"/etc/portage/package.env - ln -s "${PARENT_EPREFIX}"/etc/portage/repos.conf "${CHILD_EPREFIX}"/etc/portage/repos.conf -) -eend_exit $? - -# -# create a make.conf and set PORTDIR and PORTAGE_TMPDIR -# -ebegin "creating make.conf" -( - set -e - echo "#" - echo "# The following values where taken from the parent prefix's" - echo "# environment. Feel free to adopt them as you like." - echo "#" - echo "CFLAGS=\"$(portageq envvar CFLAGS)\"" - echo "CXXFLAGS=\"$(portageq envvar CXXFLAGS)\"" - echo "MAKEOPTS=\"$(portageq envvar MAKEOPTS)\"" - niceness=$(portageq envvar PORTAGE_NICENESS || true) - [[ -n ${niceness} ]] && - echo "PORTAGE_NICENESS=\"${niceness}\"" - echo - echo "# Mirrors from parent prefix." - echo "GENTOO_MIRRORS=\"$(portageq envvar GENTOO_MIRRORS || true)\"" - echo - echo "# Below comes the prefix-stack setup. Only change things" - echo "# if you know exactly what you are doing!" - echo "EPREFIX=\"${CHILD_EPREFIX}\"" - echo "PORTAGE_OVERRIDE_EPREFIX=\"${PARENT_EPREFIX}\"" - echo "BROOT=\"${PARENT_EPREFIX}\"" -) > "${CHILD_EPREFIX}"/etc/portage/make.conf -eend_exit $? - -ebegin "creating use.mask/prefix-stack" -printf -- '-%s\n' prefix{,-guest,-stack} > "${CHILD_EPREFIX}"/etc/portage/profile/use.mask/prefix-stack -eend_exit $? - -ebegin "creating use.force/prefix-stack" -printf -- '%s\n' prefix{,-guest,-stack} > "${CHILD_EPREFIX}"/etc/portage/profile/use.force/prefix-stack -eend_exit $? - -ebegin "creating env/host-cc.conf" -cat > "${CHILD_EPREFIX}"/etc/portage/env/host-cc.conf <<-EOM - CC=${PARENT_CHOST}-gcc - CXX=${PARENT_CHOST}-g++ - EOM -eend_exit $? - -ebegin "creating package.env/prefix-stack" -cat > "${CHILD_EPREFIX}"/etc/portage/package.env/prefix-stack <<-'EOM' - # merge with the parent's chost. this forces the use of the parent - # compiler, which generally would be illegal - this is an exception. - # This is required for example on winnt, because the wrapper has to - # be able to use/resolve symlinks, etc. native winnt binaries miss - # that ability, but cygwin binaries don't. - sys-devel/gcc-config host-cc.conf - sys-apps/gentoo-functions host-cc.conf - EOM -eend_exit $? - -# -# create the make.profile symlinks. -# -ebegin "creating make.profile" -( - ln -s "${CHILD_PROFILE}" "${CHILD_EPREFIX}/etc/portage/make.profile" -) -eend_exit $? - -# -# adjust permissions of generated files. -# -ebegin "adjusting permissions" -( - set -e - chmod 644 "${CHILD_EPREFIX}"/etc/portage/make.conf - chmod 644 "${CHILD_EPREFIX}"/etc/portage/env/host-cc.conf - chmod 644 "${CHILD_EPREFIX}"/etc/portage/package.env/prefix-stack -) -eend_exit $? - -# -# now merge some basics. -# -ebegin "installing required basic packages" -( - set -e - export PORTAGE_CONFIGROOT@=@"${CHILD_EPREFIX}" - export EPREFIX@=@"${CHILD_EPREFIX}" - export PORTAGE_OVERRIDE_EPREFIX@=@"${PARENT_EPREFIX}" - - # let baselayout create the directories - USE@=@"${USE} build" \ - emerge --verbose --nodeps --oneshot \ - '>=baselayout-prefix-2.6' - - # In prefix-stack, app-portage/prefix-toolkit does - # install/update an etc/portage/profile/packages file, - # removing all @system packages from current make.profile, - # and adding itself to @system set instead. - emerge --verbose --nodeps --oneshot \ - app-portage/prefix-toolkit - - # In prefix-stack, prefix-toolkit does have an RDEPEND on them, - # to hold them in the @system set. - emerge --verbose --nodeps --oneshot \ - sys-apps/gentoo-functions \ - app-portage/elt-patches \ - sys-devel/gnuconfig \ - sys-devel/gcc-config - - # select the stack wrapper profile from gcc-config - env -i PORTAGE_CONFIGROOT="${CHILD_EPREFIX}" \ - "$(type -P bash)" "${CHILD_EPREFIX}"/usr/bin/gcc-config 1 -) -eend_exit $? - -# -# wow, all ok :) -# -ewarn -ewarn "all done. don't forget to tune ${CHILD_EPREFIX}/etc/portage/make.conf." -ewarn "to enter the new prefix, run \"${CHILD_EPREFIX}/startprefix\"." -ewarn -EOIN - -: prefix-stack-ccwrap <<'EOIN' -#!@GENTOO_PORTAGE_BPREFIX@/bin/bash - -if [ -r /cygdrive/. ]; then - winpath2unix() { cygpath -u "$1"; } - unixpath2win() { cygpath -w "$1"; } -fi - -myself=${0##*/} # basename $0 -link_dirs=() -opts=() -chost="@GENTOO_PORTAGE_CHOST@" -prefix="@GENTOO_PORTAGE_EPREFIX@" -absprefix=${prefix} -if [[ ${chost} == *"-winnt"* ]]; then - # we may get called from windows binary, like pkgdata in dev-libs/icu - # in this case, PATH elements get the "/dev/fs/C/WINDOWS/SUA" prefix - absprefix=$(winpath2unix "$(unixpath2win "${absprefix}")") -fi -[[ ${myself} == *windres* ]] && mode=compile || mode=link -orig_args=("$@") - -for opt in "$@" -do - case "$opt" in - -L) - link_dirs=("${link_dirs[@]}" "-L$1") - shift - ;; - -L*) - link_dirs=("${link_dirs[@]}" "${opt}") - ;; - *) - case "${opt}" in - -v) - # -v done right: only use mode version if -v is the _only_ - # argument on the command line. - [[ ${#orig_args[@]} -gt 1 ]] || mode=version - ;; - --version) mode=version ;; - -c|-E|-S) mode=compile ;; - -print-search-dirs) mode=dirs ;; - esac - opts=("${opts[@]}" "${opt}") - ;; - esac -done - -# remove any path to current prefix, need base prefix only -new_path= -save_ifs=$IFS -IFS=':' -for p in $PATH -do - IFS=$save_ifs - [[ ${p#${absprefix}} != "${p}" ]] && continue - if [[ -z "${new_path}" ]]; then - new_path="${p}" - else - new_path="${new_path}:${p}" - fi -done -IFS=$save_ifs - -PATH=${new_path} - -pfx_comp=("-I${prefix}/include" "-I${prefix}/usr/include") -pfx_link=("-L${prefix}/usr/lib" "-L${prefix}/lib") -# binutils-config's ldwrapper understands '-R' for aix and hpux too. -pfx_link_r=("-Wl,-R,${prefix}/lib" "-Wl,-R,${prefix}/usr/lib") -case "${chost}" in -*-winnt*) - # parity (winnt) understands -rpath only ... - pfx_link_r=("-Wl,-rpath,${prefix}/lib" "-Wl,-rpath,${prefix}/usr/lib") - ;; -*-linux*) - # With gcc, -isystem would avoid warning messages in installed headers, - # but that breaks with AIX host headers. - pfx_comp=("-isystem" "${prefix}/include" "-isystem" "${prefix}/usr/include") - ;; -esac - -# ensure we run the right chost program in base prefix -[[ ${myself} == *-*-*-* ]] || myself=${chost}-${myself#${chost}-} - -case "$mode" in -link) exec "${myself}" "${link_dirs[@]}" "${pfx_link[@]}" "${opts[@]}" "${pfx_comp[@]}" "${pfx_link_r[@]}" ;; -compile) exec "${myself}" "${link_dirs[@]}" "${opts[@]}" "${pfx_comp[@]}" ;; -version) exec "${myself}" "${orig_args[@]}" ;; -dirs) - "${myself}" "${orig_args[@]}" | while read line; do - if [[ "${line}" == "libraries: ="* ]]; then - echo "libraries: =${prefix}/usr/lib:${prefix}/lib:${line#"libraries: ="}" - else - echo "${line}" - fi - done - ;; -*) echo "cannot infer ${myself}'s mode from comamnd line arguments"; exit 1 ;; -esac -EOIN |