Dnia 2014-07-05, o godz. 10:24:03
X dej <dreplaceelettereejbyelette...@gmail.com> napisał(a):

> Patch to apply against HEAD of sys-app/portage project.
> I did git clone git://git.overlays.gentoo.org/proj/portage.git on 2014-07-04
> 13:47:53.442947599 +0000.
> 
> diff -ru old_portage/pym/portage/const.py portage/pym/portage/const.py
> --- old_portage/pym/portage/const.py  2014-07-04 16:35:37.462942289 +0200
> +++ portage/pym/portage/const.py      2014-07-04 17:03:00.347420753 +0200
> @@ -119,6 +119,7 @@
>       "other",
>  )
>  SUPPORTED_FEATURES       = frozenset([
> +     "uncooperative-root",

I don't want to nitpick but the name seems very unclear. The feature
name should tell what it does or enables.

>       "assume-digests",
>       "binpkg-logs",
>       "buildpkg",
> diff -ru old_portage/cnf/make.conf.example portage/cnf/make.conf.example
> --- old_portage/cnf/make.conf.example 2014-07-04 16:52:24.438859863 +0200
> +++ portage/cnf/make.conf.example     2014-07-04 17:08:10.658545393 +0200
> @@ -362,3 +362,29 @@
>  #                               ${PACKAGE} - see description of 
> PORTAGE_ELOG_COMMAND
>  #                               ${HOST} - FQDN of the host portage is 
> running on
>  #PORTAGE_ELOG_MAILSUBJECT="[portage] ebuild log for \${PACKAGE} on \${HOST}"
> +#
> +# Variant for Prefix installations
> +# ================================
> +#
> +#MAKEOPTS="-j2 TMPDIR=${EPREFIX}/tmp CONFIG_SHELL=${EPREFIX}/bin/sh 
> SHELL=${EPREFIX}/bin/bash"
> +#PORTAGE_PYTHON=$EPREFIX/usr/bin/python # e.g. for 
> portage/bin/misc-functions.sh
> +#PREFIX_DISABLE_GEN_USR_LDSCRIPT=set # e.g. for 
> net-libs/libtirpc-0.2.2-r1.ebuild
> +#FEATURES="uncooperative-root"
> +#USE="uncooperative-root"

A general remark: wouldn't it be better to substitute this to the main
part of make.conf.example when 'use prefix' is in use?

> +# 
> +#     has uncooperative-root ${FEATURES}
> +# is a condition meaning that /tmp, /bin/bash,
> +# /bin/sh, /dev, /usr/bin/{env,find,file} may not be available at buiding 
> time
> +# and despite being in various standards (FHS, ...) root administrator will 
> not
> +# cooperate or will break compatibility without notice. They are to be used 
> now
> +# in .eclass and in sys-app/portage (typical example: Android; needed for
> +# gentooandroid.sourceforge.net).
> +# It will likely be used in any *.ebuild file whose EAPI officially contains
> +# SUPPORTED_FEATURES=uncooperative-root.
> +# 
> +#     use uncooperative-root
> +# is the equivalent condition to use in files *.ebuild whose EAPI doesn't
> +# officially contain SUPPORTED_FEATURES=uncooperative-root.  To enable that
> +# condition, a file *.ebuild not inherite-ing anything should contain
> +# IUSE=-uncooperative-root for that (otherwise, prefix.eclass will have
> +# IUSE_IMPLICIT=uncooperative-root even if not directly inherited).

This doesn't belong in make.conf.example but rather in the manpage.
Which is a good point to note that you haven't added the description of
the new FEATURE to make.conf(5).

> diff -ru old_portage/bin/ebuild-helpers/emake portage/bin/ebuild-helpers/emake
> --- old_portage/bin/ebuild-helpers/emake      2014-07-04 16:17:50.847841909 
> +0200
> +++ portage/bin/ebuild-helpers/emake  2014-07-04 16:30:26.020612108 +0200
> @@ -11,6 +11,14 @@
>  
>  source "${PORTAGE_BIN_PATH:-/usr/lib/portage/bin}"/isolated-functions.sh
>  
> +#${MAKEOPTS} is not transmitted to things called by make
> +has uncooperative-root ${FEATURES} && { 
> +  export TMPDIR="${EPREFIX}"/tmp

Isn't TMPDIR already set by portage? PMS says it ought to be.

> +  export BASH="${EPREFIX}"/bin/bash
> +  export CONFIG_SHELL="${EPREFIX}"/bin/sh
> +}

If you export it all anyway... what's the point of passing them via
MAKEOPTS?

> +
> +
>  if [[ $PORTAGE_QUIET != 1 ]] ; then
>       (
>       for arg in ${MAKE:-make} $MAKEOPTS $EXTRA_EMAKE "$@" ; do
> diff -ru old_portage/bin/ebuild.sh portage/bin/ebuild.sh
> --- old_portage/bin/ebuild.sh 2014-07-04 15:59:24.022279274 +0200
> +++ portage/bin/ebuild.sh     2014-07-04 16:01:08.613886159 +0200
> @@ -90,8 +90,13 @@
>  __qa_call() {
>       local shopts=$(shopt) OLDIFS="$IFS"
>       local retval
> -     "$@"
> -     retval=$?
> +        if has uncooperative-root ${FEATURES} ; then
> +             uncooperative-root-wrapper "$@" # from prefix.eclass

I don't think it is a good idea to call eclass functions from within
portage.

> +             retval=$?
> +     else
> +             "$@"
> +             retval=$?
> +     fi
>       set +e
>       [[ $shopts != $(shopt) ]] &&
>               eqawarn "QA Notice: Global shell options changed and were not 
> restored while calling '$*'"
> diff -ru old_portage/bin/misc-functions.sh portage/bin/misc-functions.sh
> --- old_portage/bin/misc-functions.sh 2014-07-04 16:03:59.416144645 +0200
> +++ portage/bin/misc-functions.sh     2014-07-04 16:57:13.327124754 +0200
> @@ -820,7 +820,7 @@
>       rm -f "${ED}"/usr/share/info/dir{,.gz,.bz2} || die "rm failed!"
>  
>       if has multilib-strict ${FEATURES} && \
> -        [[ -x /usr/bin/file && -x /usr/bin/find ]] && \
> +        [[ -x "`has uncooperative-root ${FEATURES} && echo 
> ${EPREFIX}`/usr/bin/file" && -x "`has uncooperative-root ${FEATURES} && echo 
> ${EPREFIX}`/usr/bin/find" ]] && \

Please use $() instead of `` because the latter is hard to read
and doesn't support nesting.

Doesn't this also need to consider ${ROOT}?

>          [[ -n ${MULTILIB_STRICT_DIRS} && -n ${MULTILIB_STRICT_DENY} ]]
>       then
>               rm -f "${T}/multilib-strict.log"
> @@ -1193,6 +1193,10 @@
>       fi
>       [ -n "${md5_hash}" ] && \
>               echo ${md5_hash} > "${PORTAGE_BUILDDIR}"/build-info/BINPKGMD5
> +     # inform about trial patching done by uncooperative-root
> +     has uncooperative-root ${FEATURES} && bzip2 -c \
> +       < "${PORTAGE_BUILDDIR}"/temp/build.log \
> +       > "${PORTAGE_BUILDDIR}"/build-info/build.log.bz2
>       __vecho ">>> Done."
>  
>       # cleanup our temp tree
> diff -ru old_portage/bin/phase-helpers.sh portage/bin/phase-helpers.sh
> --- old_portage/bin/phase-helpers.sh  2014-07-04 16:27:01.655594020 +0200
> +++ portage/bin/phase-helpers.sh      2014-07-04 16:27:22.888250815 +0200
> @@ -471,6 +471,10 @@
>       local x
>       local pid=${BASHPID:-$(__bashpid)}
>  
> +     has uncooperative-root ${FEATURES} && { 
> +             export TMPDIR="${EPREFIX}"/tmp
> +             export CONFIG_SHELL="${EPREFIX}"/bin/sh
> +     }
>       if ! ___eapi_has_prefix_variables; then
>               local EPREFIX=
>       fi
> @@ -592,6 +596,7 @@
>  
>  einstall() {
>       # CONF_PREFIX is only set if they didn't pass in libdir above.
> +     has uncooperative-root ${FEATURES} && export TMPDIR="${EPREFIX}"/tmp
>       local LOCAL_EXTRA_EINSTALL="${EXTRA_EINSTALL}"
>       if ! ___eapi_has_prefix_variables; then
>               local ED=${D}



-- 
Best regards,
Michał Górny

Attachment: signature.asc
Description: PGP signature

Reply via email to