public inbox for gentoo-commits@lists.gentoo.org
 help / color / mirror / Atom feed
From: "Fabian Groffen" <grobian@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/portage:prefix commit in: /
Date: Fri,  1 Jul 2011 17:44:18 +0000 (UTC)	[thread overview]
Message-ID: <1683b8f2933a2e23785ae2e7e3b23eec831f9d93.grobian@gentoo> (raw)

commit:     1683b8f2933a2e23785ae2e7e3b23eec831f9d93
Author:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
AuthorDate: Fri Jul  1 17:42:16 2011 +0000
Commit:     Fabian Groffen <grobian <AT> gentoo <DOT> org>
CommitDate: Fri Jul  1 17:42:16 2011 +0000
URL:        http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=1683b8f2

Merge remote-tracking branch 'overlays-gentoo-org/master' into prefix

Conflicts:
	pym/portage/package/ebuild/prepare_build_dirs.py
	pym/portage/util/__init__.py


 RELEASE-NOTES                                      |    2 +-
 bin/ebuild                                         |   23 +++-
 bin/ebuild-helpers/ecompress                       |    6 +-
 bin/emaint                                         |   45 +++++-
 bin/misc-functions.sh                              |   11 ++
 bin/portageq                                       |   13 +-
 bin/repoman                                        |   37 ++++-
 cnf/make.globals                                   |    2 +-
 man/ebuild.5                                       |    5 +-
 man/env-update.1                                   |    3 +-
 man/make.conf.5                                    |    9 +-
 man/portage.5                                      |    7 +
 man/repoman.1                                      |    4 +
 pym/_emerge/EbuildPhase.py                         |   10 ++
 pym/_emerge/Package.py                             |   33 ++++-
 pym/_emerge/UseFlagDisplay.py                      |    8 +-
 pym/_emerge/depgraph.py                            |   21 ++-
 pym/_emerge/resolver/circular_dependency.py        |   24 ++-
 pym/_emerge/resolver/output.py                     |   13 +-
 pym/portage/checksum.py                            |   15 ++-
 pym/portage/const.py                               |    2 +-
 pym/portage/dbapi/vartree.py                       |   30 ++--
 pym/portage/dep/__init__.py                        |    4 +-
 pym/portage/package/ebuild/_config/UseManager.py   |  170 +++++++++++++-------
 .../package/ebuild/_config/special_env_vars.py     |    6 +
 pym/portage/package/ebuild/config.py               |   57 +++++++-
 pym/portage/package/ebuild/doebuild.py             |  141 ++++++++++++++++-
 pym/portage/package/ebuild/prepare_build_dirs.py   |   14 ++-
 pym/portage/repository/config.py                   |    3 +
 pym/portage/tests/util/test_varExpand.py           |   35 ++++-
 pym/portage/util/__init__.py                       |   52 +++----
 pym/portage/util/_dyn_libs/LinkageMapELF.py        |   30 +++-
 pym/portage/util/env_update.py                     |   14 +-
 33 files changed, 668 insertions(+), 181 deletions(-)

diff --cc bin/emaint
index 6d68cb0,fdd01ed..c8a76d5
--- a/bin/emaint
+++ b/bin/emaint
@@@ -10,16 -12,18 +12,20 @@@ import textwra
  import time
  from optparse import OptionParser, OptionValueError
  
 -try:
 -	import portage
 -except ImportError:
 -	from os import path as osp
 -	sys.path.insert(0, osp.join(osp.dirname(osp.dirname(osp.realpath(__file__))), "pym"))
 -	import portage
 +# for an explanation on this logic, see pym/_emerge/__init__.py
 +import os
 +import sys
 +if os.environ.__contains__("PORTAGE_PYTHONPATH"):
 +	sys.path.insert(0, os.environ["PORTAGE_PYTHONPATH"])
 +else:
 +	sys.path.insert(0, os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), "pym"))
 +import portage
  
  from portage import os
+ from portage.util import writemsg
+ 
+ if sys.hexversion >= 0x3000000:
+ 	long = int
  
  class WorldHandler(object):
  
diff --cc bin/misc-functions.sh
index dce730a,d708c1d..bfb6b03
mode 100644,100755..100644
--- a/bin/misc-functions.sh
+++ b/bin/misc-functions.sh
@@@ -758,490 -715,18 +759,500 @@@ install_qa_check_misc() 
  		done
  		[[ ${abort} == yes ]] && die "multilib-strict check failed!"
  	fi
+ 
+ 	# ensure packages don't install systemd units automagically
+ 	if ! hasq systemd ${INHERITED} && \
+ 		[[ -d "${D}"/lib/systemd/system ]]
+ 	then
+ 		eqawarn "QA Notice: package installs systemd unit files (/lib/systemd/system)"
+ 		eqawarn "           but does not inherit systemd.eclass."
+ 		hasq stricter ${FEATURES} \
+ 			&& die "install aborted due to missing inherit of systemd.eclass"
+ 	fi
  }
  
 +install_qa_check_prefix() {
 +	if [[ -d ${ED}/${D} ]] ; then
 +		find "${ED}/${D}" | \
 +		while read i ; do
 +			eqawarn "QA Notice: /${i##${ED}/${D}} installed in \${ED}/\${D}"
 +		done
 +		die "Aborting due to QA concerns: files installed in ${ED}/${D}"
 +	fi
 +
 +	if [[ -d ${ED}/${EPREFIX} ]] ; then
 +		find "${ED}/${EPREFIX}/" | \
 +		while read i ; do
 +			eqawarn "QA Notice: ${i#${D}} double prefix"
 +		done
 +		die "Aborting due to QA concerns: double prefix files installed"
 +	fi
 +
 +	if [[ -d ${D} ]] ; then
 +		INSTALLTOD=$(find ${D%/} | egrep -v "^${ED}" | sed -e "s|^${D%/}||" | awk '{if (length($0) <= length("'"${EPREFIX}"'")) { if (substr("'"${EPREFIX}"'", 1, length($0)) != $0) {print $0;} } else if (substr($0, 1, length("'"${EPREFIX}"'")) != "'"${EPREFIX}"'") {print $0;} }') 
 +		if [[ -n ${INSTALLTOD} ]] ; then
 +			eqawarn "QA Notice: the following files are outside of the prefix:"
 +			eqawarn "${INSTALLTOD}"
 +			die "Aborting due to QA concerns: there are files installed outside the prefix"
 +		fi
 +	fi
 +
 +	# all further checks rely on ${ED} existing
 +	[[ -d ${ED} ]] || return
 +
 +	# this does not really belong here, but it's closely tied to
 +	# the code below; many runscripts generate positives here, and we
 +	# know they don't work (bug #196294) so as long as that one
 +	# remains an issue, simply remove them as they won't work
 +	# anyway, avoid etc/init.d/functions.sh from being thrown away
 +	if [[ ( -d "${ED}"/etc/conf.d || -d "${ED}"/etc/init.d ) && ! -f "${ED}"/etc/init.d/functions.sh ]] ; then
 +		ewarn "removed /etc/init.d and /etc/conf.d directories until bug #196294 has been resolved"
 +		rm -Rf "${ED}"/etc/{conf,init}.d
 +	fi
 +
 +	# check shebangs, bug #282539
 +	rm -f "${T}"/non-prefix-shebangs-errs
 +	local WHITELIST=" /usr/bin/env "
 +	# this is hell expensive, but how else?
 +	find "${ED}" -executable \! -type d -print0 \
 +			| xargs -0 grep -H -n -m1 "^#!" \
 +			| while read f ;
 +	do
 +		local fn=${f%%:*}
 +		local pos=${f#*:} ; pos=${pos%:*}
 +		local line=${f##*:}
 +		# shebang always appears on the first line ;)
 +		[[ ${pos} != 1 ]] && continue
 +		local oldIFS=${IFS}
 +		IFS=$'\r'$'\n'$'\t'" "
 +		line=( ${line#"#!"} )
 +		IFS=${oldIFS}
 +		[[ ${WHITELIST} == *" ${line[0]} "* ]] && continue
 +		local fp=${fn#${D}} ; fp=/${fp%/*}
 +		# line[0] can be an absolutised path, bug #342929
 +		local eprefix=$(canonicalize ${EPREFIX})
 +		local rf=${fn}
 +		# in case we deal with a symlink, make sure we don't replace it
 +		# with a real file (sed -i does that)
 +		if [[ -L ${fn} ]] ; then
 +			rf=$(readlink ${fn})
 +			[[ ${rf} != /* ]] && rf=${fn%/*}/${rf}
 +			# ignore symlinks pointing to outside prefix
 +			# as seen in sys-devel/native-cctools
 +			[[ ${rf} != ${EPREFIX}/* && $(canonicalize "${rf}") != ${eprefix}/* ]] && continue
 +		fi
 +		# does the shebang start with ${EPREFIX}, and does it exist?
 +		if [[ ${line[0]} == ${EPREFIX}/* || ${line[0]} == ${eprefix}/* ]] ; then
 +			if [[ ! -e ${ROOT%/}${line[0]} && ! -e ${D%/}${line[0]} ]] ; then
 +				# hmm, refers explicitly to $EPREFIX, but doesn't exist,
 +				# if it's in PATH that's wrong in any case
 +				if [[ ":${PATH}:" == *":${fp}:"* ]] ; then
 +					echo "${fn#${D}}:${line[0]} (explicit EPREFIX but target not found)" \
 +						>> "${T}"/non-prefix-shebangs-errs
 +				else
 +					eqawarn "${fn#${D}} has explicit EPREFIX in shebang but target not found (${line[0]})"
 +				fi
 +			fi
 +			continue
 +		fi
 +		# unprefixed shebang, is the script directly in $PATH?
 +		if [[ ":${PATH}:" == *":${fp}:"* ]] ; then
 +			if [[ -e ${EROOT}${line[0]} || -e ${ED}${line[0]} ]] ; then
 +				# is it unprefixed, but we can just fix it because a
 +				# prefixed variant exists
 +				eqawarn "prefixing shebang of ${fn#${D}}"
 +				# statement is made idempotent on purpose, because
 +				# symlinks may point to the same target, and hence the
 +				# same real file may be sedded multiple times since we
 +				# read the shebangs in one go upfront for performance
 +				# reasons
 +				sed -i -e '1s:^#! \?'"${line[0]}"':#!'"${EPREFIX}"${line[0]}':' "${rf}"
 +				continue
 +			else
 +				# this is definitely wrong: script in $PATH and invalid shebang
 +				echo "${fn#${D}}:${line[0]} (script ${fn##*/} installed in PATH but interpreter ${line[0]} not found)" \
 +					>> "${T}"/non-prefix-shebangs-errs
 +			fi
 +		else
 +			# unprefixed/invalid shebang, but outside $PATH, this may be
 +			# intended (e.g. config.guess) so remain silent by default
 +			hasq stricter ${FEATURES} && \
 +				eqawarn "invalid shebang in ${fn#${D}}: ${line[0]}"
 +		fi
 +	done
 +	if [[ -e "${T}"/non-prefix-shebangs-errs ]] ; then
 +		eqawarn "QA Notice: the following files use invalid (possible non-prefixed) shebangs:"
 +		while read line ; do
 +			eqawarn "  ${line}"
 +		done < "${T}"/non-prefix-shebangs-errs
 +		rm -f "${T}"/non-prefix-shebangs-errs
 +		die "Aborting due to QA concerns: invalid shebangs found"
 +	fi
 +}
 +
 +install_qa_check_macho() {
 +	if ! hasq binchecks ${RESTRICT} ; then
 +		# on Darwin, dynamic libraries are called .dylibs instead of
 +		# .sos.  In addition the version component is before the
 +		# extension, not after it.  Check for this, and *only* warn
 +		# about it.  Some packages do ship .so files on Darwin and make
 +		# it work (ugly!).
 +		rm -f "${T}/mach-o.check"
 +		find ${ED%/} -name "*.so" -or -name "*.so.*" | \
 +		while read i ; do
 +			[[ $(file $i) == *"Mach-O"* ]] && \
 +				echo "${i#${D}}" >> "${T}/mach-o.check"
 +		done
 +		if [[ -f ${T}/mach-o.check ]] ; then
 +			f=$(< "${T}/mach-o.check")
 +			vecho -ne '\a\n'
 +			eqawarn "QA Notice: Found .so dynamic libraries on Darwin:"
 +			eqawarn "    ${f//$'\n'/\n    }"
 +		fi
 +		rm -f "${T}/mach-o.check"
 +
 +		# The naming for dynamic libraries is different on Darwin; the
 +		# version component is before the extention, instead of after
 +		# it, as with .sos.  Again, make this a warning only.
 +		rm -f "${T}/mach-o.check"
 +		find ${ED%/} -name "*.dylib.*" | \
 +		while read i ; do
 +			echo "${i#${D}}" >> "${T}/mach-o.check"
 +		done
 +		if [[ -f "${T}/mach-o.check" ]] ; then
 +			f=$(< "${T}/mach-o.check")
 +			vecho -ne '\a\n'
 +			eqawarn "QA Notice: Found wrongly named dynamic libraries on Darwin:"
 +			eqawarn "    ${f// /\n    }"
 +		fi
 +		rm -f "${T}/mach-o.check"
 +	fi
 +
 +	# While we generate the NEEDED files, check that we don't get kernel
 +	# traps at runtime because of broken install_names on Darwin.
 +	rm -f "${T}"/.install_name_check_failed
 +	scanmacho -qyRF '%a;%p;%S;%n' "${D}" | { while IFS= read l ; do
 +		arch=${l%%;*}; l=${l#*;}
 +		obj="/${l%%;*}"; l=${l#*;}
 +		install_name=${l%%;*}; l=${l#*;}
 +		needed=${l%%;*}; l=${l#*;}
 +
 +		# See if the self-reference install_name points to an existing
 +		# and to be installed file.  This usually is a symlink for the
 +		# major version.
 +		if [[ ! -e ${D}${install_name} ]] ; then
 +			eqawarn "QA Notice: invalid self-reference install_name ${install_name} in ${obj}"
 +			# remember we are in an implicit subshell, that's
 +			# why we touch a file here ... ideally we should be
 +			# able to die correctly/nicely here
 +			touch "${T}"/.install_name_check_failed
 +		fi
 +
 +		# this is ugly, paths with spaces won't work
 +		reevaluate=0
 +		for lib in ${needed//,/ } ; do
 +			if [[ ${lib} == ${D}* ]] ; then
 +				eqawarn "QA Notice: install_name references \${D}: ${lib} in ${obj}"
 +				touch "${T}"/.install_name_check_failed
 +			elif [[ ${lib} == ${S}* ]] ; then
 +				eqawarn "QA Notice: install_name references \${S}: ${lib} in ${obj}"
 +				touch "${T}"/.install_name_check_failed
 +			elif [[ ! -e ${lib} && ! -e ${D}${lib} && ${lib} != "@executable_path/"* && ${lib} != "@loader_path/"* ]] ; then
 +				# try to "repair" this if possible, happens because of
 +				# gen_usr_ldscript tactics
 +				s=${lib%usr/*}${lib##*/usr/}
 +				if [[ -e ${D}${s} ]] ; then
 +					ewarn "correcting install_name from ${lib} to ${s} in ${obj}"
 +					install_name_tool -change \
 +						"${lib}" "${s}" "${D}${obj}"
 +					reevaluate=1
 +				else
 +					eqawarn "QA Notice: invalid reference to ${lib} in ${obj}"
 +					# remember we are in an implicit subshell, that's
 +					# why we touch a file here ... ideally we should be
 +					# able to die correctly/nicely here
 +					touch "${T}"/.install_name_check_failed
 +				fi
 +			fi
 +		done
 +		if [[ ${reevaluate} == 1 ]]; then
 +			# install_name(s) have been changed, refresh data so we
 +			# store the correct meta data
 +			l=$(scanmacho -qyF '%a;%p;%S;%n' ${D}${obj})
 +			arch=${l%%;*}; l=${l#*;}
 +			obj="/${l%%;*}"; l=${l#*;}
 +			install_name=${l%%;*}; l=${l#*;}
 +			needed=${l%%;*}; l=${l#*;}
 +		fi
 +
 +		# backwards compatability
 +		echo "${obj} ${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
 +		# what we use
 +		echo "${arch};${obj};${install_name};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.MACHO.3
 +	done }
 +	if [[ -f ${T}/.install_name_check_failed ]] ; then
 +		# secret switch "allow_broken_install_names" to get
 +		# around this and install broken crap (not a good idea)
 +		hasq allow_broken_install_names ${FEATURES} || \
 +			die "invalid install_name found, your application or library will crash at runtime"
 +	fi
 +}
 +
 +install_qa_check_pecoff() {
 +	local _pfx_scan="readpecoff ${CHOST}"
 +
 +	# this one uses readpecoff, which supports multiple prefix platforms!
 +	# this is absolutely _not_ optimized for speed, and there may be plenty
 +	# of possibilities by introducing one or the other cache!
 +	if ! hasq binchecks ${RESTRICT}; then
 +		# copied and adapted from the above scanelf code.
 +		local qa_var insecure_rpath=0 tmp_quiet=${PORTAGE_QUIET}
 +		local f x
 +
 +		# display warnings when using stricter because we die afterwards
 +		if has stricter ${FEATURES} ; then
 +			unset PORTAGE_QUIET
 +		fi
 +
 +		local _exec_find_opt="-executable"
 +		[[ ${CHOST} == *-winnt* ]] && _exec_find_opt='-name *.dll -o -name *.exe'
 +
 +		# Make sure we disallow insecure RUNPATH/RPATH's
 +		# Don't want paths that point to the tree where the package was built
 +		# (older, broken libtools would do this).  Also check for null paths
 +		# because the loader will search $PWD when it finds null paths.
 +
 +		f=$(
 +			find "${ED}" -type f '(' ${_exec_find_opt} ')' -print0 | xargs -0 ${_pfx_scan} | \
 +			while IFS=";" read arch obj soname rpath needed ; do \
 +			echo "${rpath}" | grep -E "(${PORTAGE_BUILDDIR}|: |::|^:|^ )" > /dev/null 2>&1 \
 +				&& echo "${obj}"; done;
 +		)
 +		# Reject set*id binaries with $ORIGIN in RPATH #260331
 +		x=$(
 +			find "${ED}" -type f '(' -perm -u+s -o -perm -g+s ')' -print0 | \
 +			xargs -0 ${_pfx_scan} | while IFS=";" read arch obj soname rpath needed; do \
 +			echo "${rpath}" | grep '$ORIGIN' > /dev/null 2>&1 && echo "${obj}"; done;
 +		)
 +		if [[ -n ${f}${x} ]] ; then
 +			vecho -ne '\a\n'
 +			eqawarn "QA Notice: The following files contain insecure RUNPATH's"
 +			eqawarn " Please file a bug about this at http://bugs.gentoo.org/"
 +			eqawarn " with the maintaining herd of the package."
 +			eqawarn "${f}${f:+${x:+\n}}${x}"
 +			vecho -ne '\a\n'
 +			if [[ -n ${x} ]] || has stricter ${FEATURES} ; then
 +				insecure_rpath=1
 +			else
 +				eqawarn "cannot automatically fix runpaths on interix platforms!"
 +			fi
 +		fi
 +
 +		rm -f "${PORTAGE_BUILDDIR}"/build-info/NEEDED
 +		rm -f "${PORTAGE_BUILDDIR}"/build-info/NEEDED.PECOFF.1
 +
 +		# Save NEEDED information after removing self-contained providers
 +		find "${ED}" -type f '(' ${_exec_find_opt} ')' -print0 | xargs -0 ${_pfx_scan} | { while IFS=';' read arch obj soname rpath needed; do
 +			# need to strip image dir from object name.
 +			obj="/${obj#${D}}"
 +			if [ -z "${rpath}" -o -n "${rpath//*ORIGIN*}" ]; then
 +				# object doesn't contain $ORIGIN in its runpath attribute
 +				echo "${obj} ${needed}"	>> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
 +				echo "${arch};${obj};${soname};${rpath};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.PECOFF.1
 +			else
 +				dir=${obj%/*}
 +				# replace $ORIGIN with the dirname of the current object for the lookup
 +				opath=$(echo :${rpath}: | sed -e "s#.*:\(.*\)\$ORIGIN\(.*\):.*#\1${dir}\2#")
 +				sneeded=$(echo ${needed} | tr , ' ')
 +				rneeded=""
 +				for lib in ${sneeded}; do
 +					found=0
 +					for path in ${opath//:/ }; do
 +						[ -e "${ED}/${path}/${lib}" ] && found=1 && break
 +					done
 +					[ "${found}" -eq 0 ] && rneeded="${rneeded},${lib}"
 +				done
 +				rneeded=${rneeded:1}
 +				if [ -n "${rneeded}" ]; then
 +					echo "${obj} ${rneeded}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
 +					echo "${arch};${obj};${soname};${rpath};${rneeded}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.PECOFF.1
 +				fi
 +			fi
 +		done }
 +		
 +		if [[ ${insecure_rpath} -eq 1 ]] ; then
 +			die "Aborting due to serious QA concerns with RUNPATH/RPATH"
 +		elif [[ -n ${die_msg} ]] && has stricter ${FEATURES} ; then
 +			die "Aborting due to QA concerns: ${die_msg}"
 +		fi
 +
 +		local _so_ext='.so*'
 +
 +		case "${CHOST}" in
 +			*-winnt*) _so_ext=".dll" ;; # no "*" intentionally!
 +		esac
 +
 +		# Run some sanity checks on shared libraries
 +		for d in "${ED}"lib* "${ED}"usr/lib* ; do
 +			[[ -d "${d}" ]] || continue
 +			f=$(find "${d}" -name "lib*${_so_ext}" -print0 | \
 +				xargs -0 ${_pfx_scan} | while IFS=";" read arch obj soname rpath needed; \
 +				do [[ -z "${soname}" ]] && echo "${obj}"; done)
 +			if [[ -n ${f} ]] ; then
 +				vecho -ne '\a\n'
 +				eqawarn "QA Notice: The following shared libraries lack a SONAME"
 +				eqawarn "${f}"
 +				vecho -ne '\a\n'
 +				sleep 1
 +			fi
 +
 +			f=$(find "${d}" -name "lib*${_so_ext}" -print0 | \
 +				xargs -0 ${_pfx_scan} | while IFS=";" read arch obj soname rpath needed; \
 +				do [[ -z "${needed}" ]] && echo "${obj}"; done)
 +			if [[ -n ${f} ]] ; then
 +				vecho -ne '\a\n'
 +				eqawarn "QA Notice: The following shared libraries lack NEEDED entries"
 +				eqawarn "${f}"
 +				vecho -ne '\a\n'
 +				sleep 1
 +			fi
 +		done
 +
 +		PORTAGE_QUIET=${tmp_quiet}
 +	fi
 +}
 +
 +install_qa_check_xcoff() {
 +	if ! hasq binchecks ${RESTRICT}; then
 +		local tmp_quiet=${PORTAGE_QUIET}
 +		local queryline deplib
 +		local insecure_rpath_list= undefined_symbols_list=
 +
 +		# display warnings when using stricter because we die afterwards
 +		if has stricter ${FEATURES} ; then
 +			unset PORTAGE_QUIET
 +		fi
 +
 +		rm -f "${PORTAGE_BUILDDIR}"/build-info/NEEDED.XCOFF.1
 +
 +		local neededfd
 +		for neededfd in {3..1024} none; do ( : <&${neededfd} ) 2>/dev/null || break; done
 +		[[ ${neededfd} != none ]] || die "cannot find free file descriptor handle"
 +
 +		eval "exec ${neededfd}>\"${PORTAGE_BUILDDIR}\"/build-info/NEEDED.XCOFF.1" || die "cannot open ${PORTAGE_BUILDDIR}/build-info/NEEDED.XCOFF.1"
 +
 +		(	# work around a problem in /usr/bin/dump (used by aixdll-query)
 +			# dumping core when path names get too long.
 +			cd "${ED}" >/dev/null &&
 +			find . -not -type d -exec \
 +				aixdll-query '{}' FILE MEMBER FLAGS FORMAT RUNPATH DEPLIBS ';'
 +		) > "${T}"/needed 2>/dev/null
 +
 +		# Symlinking shared archive libraries is not a good idea on aix,
 +		# as there is nothing like "soname" on pure filesystem level.
 +		# So we create a copy instead of the symlink.
 +		local prev_FILE=
 +		local FILE MEMBER FLAGS FORMAT RUNPATH DEPLIBS
 +		while read queryline
 +		do
 +			FILE= MEMBER= FLAGS= FORMAT= RUNPATH= DEPLIBS=
 +			eval ${queryline}
 +			FILE=${FILE#./}
 +
 +			if [[ ${prev_FILE} != ${FILE} ]]; then
 +				if [[ " ${FLAGS} " == *" SHROBJ "* && -h ${ED}${FILE} ]]; then
 +					prev_FILE=${FILE}
 +					local target=$(readlink "${ED}${FILE}")
 +					if [[ ${target} == /* ]]; then
 +						target=${D}${target}
 +					else
 +						target=${FILE%/*}/${target}
 +					fi
 +					rm -f "${ED}${FILE}" || die "cannot prune ${FILE}"
 +					cp -f "${ED}${target}" "${ED}${FILE}" || die "cannot copy ${target} to ${FILE}"
 +				fi
 +			fi
 +		done <"${T}"/needed
 +
 +		prev_FILE=
 +		while read queryline
 +		do
 +			FILE= MEMBER= FLAGS= FORMAT= RUNPATH= DEPLIBS=
 +			eval ${queryline}
 +			FILE=${FILE#./}
 +
 +			if [[ -n ${MEMBER} && ${prev_FILE} != ${FILE} ]]; then
 +				# Save NEEDED information for each archive library stub
 +				# even if it is static only: the already installed archive
 +				# may contain shared objects to be preserved.
 +				echo "${FORMAT##* }${FORMAT%%-*};${EPREFIX}/${FILE};${FILE##*/};;" >&${neededfd}
 +			fi
 +			prev_FILE=${FILE}
 +
 +			[[ " ${FLAGS} " == *" SHROBJ "* ]] || continue
 +
 +			# Make sure we disallow insecure RUNPATH's
 +			# Don't want paths that point to the tree where the package was built
 +			# (older, broken libtools would do this).  Also check for null paths
 +			# because the loader will search $PWD when it finds null paths.
 +			# And we really want absolute paths only.
 +			if [[ -n $(echo ":${RUNPATH}:" | grep -E "(${PORTAGE_BUILDDIR}|::|:[^/])") ]]; then
 +				insecure_rpath_list="${insecure_rpath_list}\n${FILE}${MEMBER:+[${MEMBER}]}"
 +			fi
 +
 +			local needed=
 +			[[ -n ${MEMBER} ]] && needed=${FILE##*/}
 +			for deplib in ${DEPLIBS}; do
 +				eval deplib=${deplib}
 +				if [[ ${deplib} == '.' || ${deplib} == '..' ]]; then
 +					# Although we do have runtime linking, we don't want undefined symbols.
 +					# AIX does indicate this by needing either '.' or '..'
 +					undefined_symbols_list="${undefined_symbols_list}\n${FILE}"
 +				else
 +					needed="${needed}${needed:+,}${deplib}"
 +				fi
 +			done
 +
 +			FILE=${EPREFIX}/${FILE}
 +
 +			[[ -n ${MEMBER} ]] && MEMBER="[${MEMBER}]"
 +			# Save NEEDED information
 +			echo "${FORMAT##* }${FORMAT%%-*};${FILE}${MEMBER};${FILE##*/}${MEMBER};${RUNPATH};${needed}" >&${neededfd}
 +		done <"${T}"/needed
 +
 +		eval "exec ${neededfd}>&-" || die "cannot close handle to ${PORTAGE_BUILDDIR}/build-info/NEEDED.XCOFF.1"
 +
 +		if [[ -n ${undefined_symbols_list} ]]; then
 +			vecho -ne '\a\n'
 +			eqawarn "QA Notice: The following files contain undefined symbols."
 +			eqawarn " Please file a bug about this at http://bugs.gentoo.org/"
 +			eqawarn " with 'prefix' as the maintaining herd of the package."
 +			eqawarn "${undefined_symbols_list}"
 +			vecho -ne '\a\n'
 +		fi
 +
 +		if [[ -n ${insecure_rpath_list} ]] ; then
 +			vecho -ne '\a\n'
 +			eqawarn "QA Notice: The following files contain insecure RUNPATH's"
 +			eqawarn " Please file a bug about this at http://bugs.gentoo.org/"
 +			eqawarn " with 'prefix' as the maintaining herd of the package."
 +			eqawarn "${insecure_rpath_list}"
 +			vecho -ne '\a\n'
 +			if has stricter ${FEATURES} ; then
 +				insecure_rpath=1
 +			fi
 +		fi
 +
 +		if [[ ${insecure_rpath} -eq 1 ]] ; then
 +			die "Aborting due to serious QA concerns with RUNPATH/RPATH"
 +		elif [[ -n ${die_msg} ]] && has stricter ${FEATURES} ; then
 +			die "Aborting due to QA concerns: ${die_msg}"
 +		fi
 +
 +		PORTAGE_QUIET=${tmp_quiet}
 +	fi
 +}
 +
  
  install_mask() {
  	local root="$1"
diff --cc bin/repoman
index 25a03f0,0e3820f..74b4f45
--- a/bin/repoman
+++ b/bin/repoman
@@@ -378,9 -376,9 +379,10 @@@ qacats = list(qahelp
  qacats.sort()
  
  qawarnings = set((
 +"changelog.ebuildadded",
  "changelog.missing",
  "changelog.notadded",
+ "dependency.unknown",
  "digest.assumed",
  "digest.unused",
  "ebuild.notadded",
diff --cc cnf/make.globals
index de05b3b,2892d50..ae98d16
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@@ -108,21 -106,11 +108,21 @@@ CONFIG_PROTECT="/etc
  CONFIG_PROTECT_MASK="/etc/env.d"
  
  # Disable auto-use
- USE_ORDER="env:pkg:conf:defaults:pkginternal:env.d"
+ USE_ORDER="env:pkg:conf:defaults:pkginternal:repo:env.d"
  
 +# Default portage user/group
 +PORTAGE_USER='@portageuser@'
 +PORTAGE_GROUP='@portagegroup@'
 +PORTAGE_ROOT_USER='@rootuser@'
 +
  # Default ownership of installed files.
 -PORTAGE_INST_UID="0"
 -PORTAGE_INST_GID="0"
 +PORTAGE_INST_UID="@rootuid@"
 +PORTAGE_INST_GID="@rootgid@"
 +
 +# Default PATH for ebuild env
 +DEFAULT_PATH="@DEFAULT_PATH@"
 +# Any extra PATHs to add to the ebuild environment's PATH (if any)
 +EXTRA_PATH="@EXTRA_PATH@"
  
  # Mode bits for ${WORKDIR} (see ebuild.5).
  PORTAGE_WORKDIR_MODE="0700"
diff --cc pym/portage/package/ebuild/prepare_build_dirs.py
index a1086fd,259bedf..053ebcc
--- a/pym/portage/package/ebuild/prepare_build_dirs.py
+++ b/pym/portage/package/ebuild/prepare_build_dirs.py
@@@ -143,14 -142,22 +143,22 @@@ def _adjust_perms_msg(settings, msg)
  
  def _prepare_features_dirs(mysettings):
  
+ 	# Use default ABI libdir in accordance with bug #355283.
+ 	libdir = None
+ 	default_abi = mysettings.get("DEFAULT_ABI")
+ 	if default_abi:
+ 		libdir = mysettings.get("LIBDIR_" + default_abi)
+ 	if not libdir:
+ 		libdir = "lib"
+ 
  	features_dirs = {
  		"ccache":{
- 			"path_dir": EPREFIX+"/usr/lib/ccache/bin",
 -			"path_dir": "/usr/%s/ccache/bin" % (libdir,),
++			"path_dir": EPREFIX+"/usr/%s/ccache/bin" % (libdir,),
  			"basedir_var":"CCACHE_DIR",
  			"default_dir":os.path.join(mysettings["PORTAGE_TMPDIR"], "ccache"),
  			"always_recurse":False},
  		"distcc":{
- 			"path_dir": EPREFIX+"/usr/lib/distcc/bin",
 -			"path_dir": "/usr/%s/distcc/bin" % (libdir,),
++			"path_dir": EPREFIX+"/usr/%s/distcc/bin" % (libdir,),
  			"basedir_var":"DISTCC_DIR",
  			"default_dir":os.path.join(mysettings["BUILD_PREFIX"], ".distcc"),
  			"subdirs":("lock", "state"),
diff --cc pym/portage/util/__init__.py
index 0182c76,5468e28..3f202eb
--- a/pym/portage/util/__init__.py
+++ b/pym/portage/util/__init__.py
@@@ -1581,24 -1570,14 +1571,26 @@@ def find_updated_config_files(target_ro
  					else:
  						yield (x, None)
  
- def getlibpaths(root):
+ def getlibpaths(root, env=None):
  	""" Return a list of paths that are used for library lookups """
+ 	if env is None:
+ 		env = os.environ
 +
 +	# PREFIX HACK: LD_LIBRARY_PATH isn't portable, and considered
 +	# harmfull, so better not use it.  We don't need any host OS lib
 +	# paths either, so do Prefix case.
 +	if EPREFIX != '':
 +		rval = []
 +		rval.append(EPREFIX + "/usr/lib")
 +		rval.append(EPREFIX + "/lib")
 +		# we don't know the CHOST here, so it's a bit hard to guess
 +		# where GCC's and ld's libs are.  Though, GCC's libs should be
 +		# in lib and usr/lib, binutils' libs rarely used
 +	else:
- 		# the following is based on the information from ld.so(8)
- 		rval = os.environ.get("LD_LIBRARY_PATH", "").split(":")
+ 	# the following is based on the information from ld.so(8)
 -	rval = env.get("LD_LIBRARY_PATH", "").split(":")
 -	rval.extend(grabfile(os.path.join(root, "etc", "ld.so.conf")))
 -	rval.append("/usr/lib")
 -	rval.append("/lib")
++		rval = env.get("LD_LIBRARY_PATH", "").split(":")
 +		rval.extend(grabfile(os.path.join(root, "etc", "ld.so.conf")))
 +		rval.append("/usr/lib")
 +		rval.append("/lib")
  
  	return [normalize_path(x) for x in rval if x]



             reply	other threads:[~2011-07-01 17:44 UTC|newest]

Thread overview: 195+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-01 17:44 Fabian Groffen [this message]
  -- strict thread matches above, loose matches on Subject: below --
2024-02-25  9:40 [gentoo-commits] proj/portage:prefix commit in: / Fabian Groffen
2024-02-22  7:27 Fabian Groffen
2024-01-18 10:22 Fabian Groffen
2024-01-18  9:36 Fabian Groffen
2023-12-03 10:10 Fabian Groffen
2023-12-03  9:54 Fabian Groffen
2023-12-03  9:54 Fabian Groffen
2023-12-03  9:54 Fabian Groffen
2023-11-24 20:18 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-11-24 20:06 Fabian Groffen
2023-06-22  8:47 Fabian Groffen
2023-06-17  9:04 Fabian Groffen
2023-06-17  8:41 Fabian Groffen
2022-07-28 17:38 Fabian Groffen
2022-07-27 19:20 Fabian Groffen
2022-07-26 19:39 Fabian Groffen
2022-07-25 15:20 Fabian Groffen
2022-07-24 19:27 Fabian Groffen
2022-07-24 14:01 Fabian Groffen
2022-07-24  9:45 Fabian Groffen
2022-01-14 10:40 Fabian Groffen
2022-01-14 10:32 Fabian Groffen
2021-07-06  7:10 Fabian Groffen
2021-04-16 13:37 Fabian Groffen
2021-01-24  9:02 Fabian Groffen
2021-01-04 10:48 Fabian Groffen
2020-12-07 17:28 Fabian Groffen
2020-12-07 16:46 Fabian Groffen
2020-11-23  7:48 Fabian Groffen
2020-11-22 11:15 Fabian Groffen
2020-09-26 11:29 Fabian Groffen
2020-08-02 12:33 Fabian Groffen
2020-06-02 18:55 Fabian Groffen
2020-01-08 19:14 Fabian Groffen
2019-07-01 13:11 Fabian Groffen
2019-05-30  9:20 Fabian Groffen
2019-02-28 12:31 Fabian Groffen
2019-01-11 10:19 Fabian Groffen
2019-01-07 10:22 Fabian Groffen
2018-12-23 11:14 Fabian Groffen
2018-12-12 18:54 Fabian Groffen
2018-08-04  6:56 Fabian Groffen
2018-06-25  8:34 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-06-17 14:38 Fabian Groffen
2018-05-28 15:24 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-25 19:44 Fabian Groffen
2018-05-18 19:46 Fabian Groffen
2017-12-12  8:19 Fabian Groffen
2017-10-29 14:51 Fabian Groffen
2017-10-03  7:32 Fabian Groffen
2017-09-22 10:08 Fabian Groffen
2017-08-21 13:27 Fabian Groffen
2017-08-13  7:21 Fabian Groffen
2017-05-23 13:34 Fabian Groffen
2017-03-25  9:12 Fabian Groffen
2017-03-24 19:09 Fabian Groffen
2017-03-24  7:43 Fabian Groffen
2017-03-23 17:46 Fabian Groffen
2017-03-23 17:32 Fabian Groffen
2017-03-23 17:23 Fabian Groffen
2017-03-23 15:38 Fabian Groffen
2017-03-17  8:25 Fabian Groffen
2017-03-02  8:48 Fabian Groffen
2017-03-02  8:18 Fabian Groffen
2017-02-23 14:05 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2017-01-27 15:08 Fabian Groffen
2016-03-20 19:31 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-21 16:17 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2016-02-18 19:35 Fabian Groffen
2015-06-20  7:12 Fabian Groffen
2015-06-09 18:30 Fabian Groffen
2015-06-09 18:01 Fabian Groffen
2015-06-04 19:47 Fabian Groffen
2015-04-05  9:15 Fabian Groffen
2014-11-12 17:31 Fabian Groffen
2014-10-02 18:48 Fabian Groffen
2014-09-28 17:52 Fabian Groffen
2014-05-06 19:32 Fabian Groffen
2014-05-06 19:18 Fabian Groffen
2014-04-22 19:52 Fabian Groffen
2014-02-06 21:09 Fabian Groffen
2014-01-06  9:47 Fabian Groffen
2013-09-24 17:29 Fabian Groffen
2013-09-20 17:59 Fabian Groffen
2013-09-18 18:34 Fabian Groffen
2013-09-13 18:02 Fabian Groffen
2013-08-10 20:54 Fabian Groffen
2013-07-10  5:31 Fabian Groffen
2013-07-08 19:32 Fabian Groffen
2013-06-29  5:41 Fabian Groffen
2013-06-27 17:20 Fabian Groffen
2013-06-12  9:02 Fabian Groffen
2013-06-09 15:53 Fabian Groffen
2013-05-04 18:55 Fabian Groffen
2013-04-02 16:57 Fabian Groffen
2013-03-31 19:03 Fabian Groffen
2013-03-31 19:00 Fabian Groffen
2013-03-24  8:36 Fabian Groffen
2013-03-23 19:54 Fabian Groffen
2013-02-28 19:29 Fabian Groffen
2013-02-07 20:01 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-27 21:41 Fabian Groffen
2013-01-13 10:26 Fabian Groffen
2013-01-10 21:02 Fabian Groffen
2013-01-05 18:14 Fabian Groffen
2012-12-26 14:48 Fabian Groffen
2012-12-02 15:47 Fabian Groffen
2012-12-02 15:36 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 15:33 Fabian Groffen
2012-12-02 13:12 Fabian Groffen
2012-12-02 12:59 Fabian Groffen
2012-11-04 10:48 Fabian Groffen
2012-10-22 17:25 Fabian Groffen
2012-10-02 12:02 Fabian Groffen
2012-09-30 11:22 Fabian Groffen
2012-09-26 18:26 Fabian Groffen
2012-09-12 18:18 Fabian Groffen
2012-09-09  7:40 Fabian Groffen
2012-09-06 18:14 Fabian Groffen
2012-08-27  6:44 Fabian Groffen
2012-08-12  7:50 Fabian Groffen
2012-07-19 16:25 Fabian Groffen
2012-07-06  7:05 Fabian Groffen
2012-04-23 19:23 Fabian Groffen
2012-04-03 18:04 Fabian Groffen
2012-03-31 19:31 Fabian Groffen
2012-03-01 20:32 Fabian Groffen
2012-02-19  9:58 Fabian Groffen
2012-02-09  8:01 Fabian Groffen
2012-01-10 17:45 Fabian Groffen
2011-12-31 16:45 Fabian Groffen
2011-12-26  9:12 Fabian Groffen
2011-12-23  9:51 Fabian Groffen
2011-12-22  9:51 Fabian Groffen
2011-12-19 18:30 Fabian Groffen
2011-12-14 15:25 Fabian Groffen
2011-12-10 11:28 Fabian Groffen
2011-12-09 20:33 Fabian Groffen
2011-12-02 20:31 Fabian Groffen
2011-12-02 19:20 Fabian Groffen
2011-12-02 19:19 Fabian Groffen
2011-12-02 19:18 Fabian Groffen
2011-12-02 18:03 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-21 17:34 Fabian Groffen
2011-10-20 20:28 Fabian Groffen
2011-10-20 17:08 Fabian Groffen
2011-10-20 16:38 Fabian Groffen
2011-10-17 18:36 Fabian Groffen
2011-10-16 13:59 Fabian Groffen
2011-10-15 18:27 Fabian Groffen
2011-10-13  6:52 Fabian Groffen
2011-09-23 18:38 Fabian Groffen
2011-09-23 18:23 Fabian Groffen
2011-09-20 18:25 Fabian Groffen
2011-09-14 18:43 Fabian Groffen
2011-09-14 18:38 Fabian Groffen
2011-09-13 17:41 Fabian Groffen
2011-08-31 18:39 Fabian Groffen
2011-08-30 18:45 Fabian Groffen
2011-08-29 19:03 Fabian Groffen
2011-08-25 20:25 Fabian Groffen
2011-08-20 17:50 Fabian Groffen
2011-07-26 17:35 Fabian Groffen
2011-07-17  9:48 Fabian Groffen
2011-07-17  8:12 Fabian Groffen
2011-06-14 15:39 Fabian Groffen
2011-06-06 17:12 Fabian Groffen
2011-05-28  8:29 Fabian Groffen
2011-05-27 17:41 Fabian Groffen
2011-05-14 13:59 Fabian Groffen
2011-05-02 17:41 Fabian Groffen
2011-04-24 12:08 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-04-15 18:27 Fabian Groffen
2011-03-28 16:52 Fabian Groffen
2011-03-23 19:26 Fabian Groffen
2011-03-17 19:08 Fabian Groffen
2011-03-13 14:45 Fabian Groffen
2011-03-09 19:44 Fabian Groffen
2011-02-26 21:15 Fabian Groffen
2011-02-10 18:46 Fabian Groffen
2011-02-10 18:44 Fabian Groffen
2011-02-10 18:20 Fabian Groffen
2011-02-05 12:25 Fabian Groffen

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=1683b8f2933a2e23785ae2e7e3b23eec831f9d93.grobian@gentoo \
    --to=grobian@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