Gentoo Archives: gentoo-commits

From: Fabian Groffen <grobian@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:prefix commit in: /
Date: Sun, 29 Oct 2017 14:52:04
Message-Id: 1509288683.d598b947524aaba3bda162fc0d2cc97a9e0dcef6.grobian@gentoo
1 commit: d598b947524aaba3bda162fc0d2cc97a9e0dcef6
2 Author: Fabian Groffen <grobian <AT> gentoo <DOT> org>
3 AuthorDate: Sun Oct 29 14:51:23 2017 +0000
4 Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org>
5 CommitDate: Sun Oct 29 14:51:23 2017 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d598b947
7
8 Merge remote-tracking branch 'overlays-gentoo-org/master' into prefix
9
10 .travis.yml | 2 +
11 NEWS | 7 ++
12 RELEASE-NOTES | 21 +++++
13 bin/ebuild-helpers/prepstrip | 20 ++++-
14 bin/install-qa-check.d/10ignored-flags | 5 +-
15 bin/misc-functions.sh | 18 +++--
16 bin/postinst-qa-check.d/50gnome2-utils | 6 ++
17 bin/postinst-qa-check.d/50xdg-utils | 12 +++
18 bin/preinst-qa-check.d/50gnome2-utils | 1 +
19 bin/preinst-qa-check.d/50xdg-utils | 1 +
20 doc/config/bashrc.docbook | 15 ++++
21 man/ebuild.5 | 78 +-----------------
22 man/emerge.1 | 2 +-
23 man/make.conf.5 | 4 +-
24 man/portage.5 | 14 ++--
25 pym/_emerge/BinpkgExtractorAsync.py | 26 +++---
26 pym/_emerge/depgraph.py | 45 ++++++++++-
27 pym/_emerge/resolver/package_tracker.py | 87 +++++++++++++++-----
28 pym/portage/checksum.py | 17 +++-
29 pym/portage/dbapi/porttree.py | 123 ++++++++++++++++++++++++++---
30 pym/portage/elog/mod_echo.py | 4 +-
31 pym/portage/package/ebuild/doebuild.py | 1 +
32 pym/portage/sync/modules/rsync/rsync.py | 6 +-
33 repoman/RELEASE-NOTES | 5 ++
34 repoman/setup.py | 2 +-
35 setup.py | 2 +-
36 src/portage_util_file_copy_reflink_linux.c | 99 +++++++++++++----------
37 27 files changed, 435 insertions(+), 188 deletions(-)
38
39 diff --cc bin/misc-functions.sh
40 index 20fd4eef8,a02aa3bfd..702f1ff4a
41 --- a/bin/misc-functions.sh
42 +++ b/bin/misc-functions.sh
43 @@@ -297,391 -256,12 +297,395 @@@ install_qa_check_misc()
44 rm -f "${ED}"/usr/share/info/dir{,.gz,.bz2} || die "rm failed!"
45 }
46
47 +install_qa_check_macho() {
48 + if ! has binchecks ${RESTRICT} ; then
49 + # on Darwin, dynamic libraries are called .dylibs instead of
50 + # .sos. In addition the version component is before the
51 + # extension, not after it. Check for this, and *only* warn
52 + # about it. Some packages do ship .so files on Darwin and make
53 + # it work (ugly!).
54 + rm -f "${T}/mach-o.check"
55 + find ${ED%/} -name "*.so" -or -name "*.so.*" | \
56 + while read i ; do
57 + [[ $(file $i) == *"Mach-O"* ]] && \
58 + echo "${i#${D}}" >> "${T}/mach-o.check"
59 + done
60 + if [[ -f ${T}/mach-o.check ]] ; then
61 + f=$(< "${T}/mach-o.check")
62 + __vecho -ne '\a\n'
63 + eqawarn "QA Notice: Found .so dynamic libraries on Darwin:"
64 + eqawarn " ${f//$'\n'/\n }"
65 + fi
66 + rm -f "${T}/mach-o.check"
67 +
68 + # The naming for dynamic libraries is different on Darwin; the
69 + # version component is before the extention, instead of after
70 + # it, as with .sos. Again, make this a warning only.
71 + rm -f "${T}/mach-o.check"
72 + find ${ED%/} -name "*.dylib.*" | \
73 + while read i ; do
74 + echo "${i#${D}}" >> "${T}/mach-o.check"
75 + done
76 + if [[ -f "${T}/mach-o.check" ]] ; then
77 + f=$(< "${T}/mach-o.check")
78 + __vecho -ne '\a\n'
79 + eqawarn "QA Notice: Found wrongly named dynamic libraries on Darwin:"
80 + eqawarn " ${f// /\n }"
81 + fi
82 + rm -f "${T}/mach-o.check"
83 + fi
84 +
85 + install_name_is_relative() {
86 + case $1 in
87 + "@executable_path/"*) return 0 ;;
88 + "@loader_path"/*) return 0 ;;
89 + "@rpath/"*) return 0 ;;
90 + *) return 1 ;;
91 + esac
92 + }
93 +
94 + # While we generate the NEEDED files, check that we don't get kernel
95 + # traps at runtime because of broken install_names on Darwin.
96 + rm -f "${T}"/.install_name_check_failed
97 + scanmacho -qyRF '%a;%p;%S;%n' "${D}" | { while IFS= read l ; do
98 + arch=${l%%;*}; l=${l#*;}
99 + obj="/${l%%;*}"; l=${l#*;}
100 + install_name=${l%%;*}; l=${l#*;}
101 + needed=${l%%;*}; l=${l#*;}
102 +
103 + ignore=
104 + qa_var="QA_IGNORE_INSTALL_NAME_FILES_${ARCH/-/_}"
105 + eval "[[ -n \${!qa_var} ]] &&
106 + QA_IGNORE_INSTALL_NAME_FILES=(\"\${${qa_var}[@]}\")"
107 +
108 + if [[ ${#QA_IGNORE_INSTALL_NAME_FILES[@]} -gt 1 ]] ; then
109 + for x in "${QA_IGNORE_INSTALL_NAME_FILES[@]}" ; do
110 + [[ ${obj##*/} == ${x} ]] && \
111 + ignore=true
112 + done
113 + else
114 + local shopts=$-
115 + set -o noglob
116 + for x in ${QA_IGNORE_INSTALL_NAME_FILES} ; do
117 + [[ ${obj##*/} == ${x} ]] && \
118 + ignore=true
119 + done
120 + set +o noglob
121 + set -${shopts}
122 + fi
123 +
124 + # See if the self-reference install_name points to an existing
125 + # and to be installed file. This usually is a symlink for the
126 + # major version.
127 + if install_name_is_relative ${install_name} ; then
128 + # try to locate the library in the installed image
129 + local inpath=${install_name#@*/}
130 + local libl
131 + for libl in $(find "${ED}" -name "${inpath##*/}") ; do
132 + if [[ ${libl} == */${inpath} ]] ; then
133 + install_name=/${libl#${D}}
134 + break
135 + fi
136 + done
137 + fi
138 + if [[ ! -e ${D}${install_name} ]] ; then
139 + eqawarn "QA Notice: invalid self-reference install_name ${install_name} in ${obj}"
140 + # remember we are in an implicit subshell, that's
141 + # why we touch a file here ... ideally we should be
142 + # able to die correctly/nicely here
143 + [[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
144 + fi
145 +
146 + # this is ugly, paths with spaces won't work
147 + for lib in ${needed//,/ } ; do
148 + if [[ ${lib} == ${D}* ]] ; then
149 + eqawarn "QA Notice: install_name references \${D}: ${lib} in ${obj}"
150 + [[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
151 + elif [[ ${lib} == ${S}* ]] ; then
152 + eqawarn "QA Notice: install_name references \${S}: ${lib} in ${obj}"
153 + [[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
154 + elif ! install_name_is_relative ${lib} && [[ ! -e ${lib} && ! -e ${D}${lib} ]] ; then
155 + eqawarn "QA Notice: invalid reference to ${lib} in ${obj}"
156 + [[ -z ${ignore} ]] && touch "${T}"/.install_name_check_failed
157 + fi
158 + done
159 +
160 + # backwards compatibility
161 + echo "${obj} ${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
162 + # what we use
163 + echo "${arch};${obj};${install_name};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.MACHO.3
164 + done }
165 + if [[ -f ${T}/.install_name_check_failed ]] ; then
166 + # secret switch "allow_broken_install_names" to get
167 + # around this and install broken crap (not a good idea)
168 + has allow_broken_install_names ${FEATURES} || \
169 + die "invalid install_name found, your application or library will crash at runtime"
170 + fi
171 +}
172 +
173 +install_qa_check_pecoff() {
174 + local _pfx_scan="readpecoff ${CHOST}"
175 +
176 + # this one uses readpecoff, which supports multiple prefix platforms!
177 + # this is absolutely _not_ optimized for speed, and there may be plenty
178 + # of possibilities by introducing one or the other cache!
179 + if ! has binchecks ${RESTRICT}; then
180 + # copied and adapted from the above scanelf code.
181 + local qa_var insecure_rpath=0 tmp_quiet=${PORTAGE_QUIET}
182 + local f x
183 +
184 + # display warnings when using stricter because we die afterwards
185 + if has stricter ${FEATURES} ; then
186 + unset PORTAGE_QUIET
187 + fi
188 +
189 + local _exec_find_opt="-executable"
190 + [[ ${CHOST} == *-winnt* ]] && _exec_find_opt='-name *.dll -o -name *.exe'
191 +
192 + # Make sure we disallow insecure RUNPATH/RPATH's
193 + # Don't want paths that point to the tree where the package was built
194 + # (older, broken libtools would do this). Also check for null paths
195 + # because the loader will search $PWD when it finds null paths.
196 +
197 + f=$(
198 + find "${ED}" -type f '(' ${_exec_find_opt} ')' -print0 | xargs -0 ${_pfx_scan} | \
199 + while IFS=";" read arch obj soname rpath needed ; do \
200 + echo "${rpath}" | grep -E "(${PORTAGE_BUILDDIR}|: |::|^:|^ )" > /dev/null 2>&1 \
201 + && echo "${obj}"; done;
202 + )
203 + # Reject set*id binaries with $ORIGIN in RPATH #260331
204 + x=$(
205 + find "${ED}" -type f '(' -perm -u+s -o -perm -g+s ')' -print0 | \
206 + xargs -0 ${_pfx_scan} | while IFS=";" read arch obj soname rpath needed; do \
207 + echo "${rpath}" | grep '$ORIGIN' > /dev/null 2>&1 && echo "${obj}"; done;
208 + )
209 + if [[ -n ${f}${x} ]] ; then
210 + __vecho -ne '\a\n'
211 + eqawarn "QA Notice: The following files contain insecure RUNPATH's"
212 + eqawarn " Please file a bug about this at http://bugs.gentoo.org/"
213 + eqawarn " with the maintaining herd of the package."
214 + eqawarn "${f}${f:+${x:+\n}}${x}"
215 + __vecho -ne '\a\n'
216 + if [[ -n ${x} ]] || has stricter ${FEATURES} ; then
217 + insecure_rpath=1
218 + else
219 + eqawarn "cannot automatically fix runpaths on interix platforms!"
220 + fi
221 + fi
222 +
223 + rm -f "${PORTAGE_BUILDDIR}"/build-info/NEEDED
224 + rm -f "${PORTAGE_BUILDDIR}"/build-info/NEEDED.PECOFF.1
225 +
226 + # Save NEEDED information after removing self-contained providers
227 + find "${ED}" -type f '(' ${_exec_find_opt} ')' -print0 | xargs -0 ${_pfx_scan} | { while IFS=';' read arch obj soname rpath needed; do
228 + # need to strip image dir from object name.
229 + obj="/${obj#${D}}"
230 + if [ -z "${rpath}" -o -n "${rpath//*ORIGIN*}" ]; then
231 + # object doesn't contain $ORIGIN in its runpath attribute
232 + echo "${obj} ${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
233 + echo "${arch};${obj};${soname};${rpath};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.PECOFF.1
234 + else
235 + dir=${obj%/*}
236 + # replace $ORIGIN with the dirname of the current object for the lookup
237 + opath=$(echo :${rpath}: | sed -e "s#.*:\(.*\)\$ORIGIN\(.*\):.*#\1${dir}\2#")
238 + sneeded=$(echo ${needed} | tr , ' ')
239 + rneeded=""
240 + for lib in ${sneeded}; do
241 + found=0
242 + for path in ${opath//:/ }; do
243 + [ -e "${ED}/${path}/${lib}" ] && found=1 && break
244 + done
245 + [ "${found}" -eq 0 ] && rneeded="${rneeded},${lib}"
246 + done
247 + rneeded=${rneeded:1}
248 + if [ -n "${rneeded}" ]; then
249 + echo "${obj} ${rneeded}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED
250 + echo "${arch};${obj};${soname};${rpath};${rneeded}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.PECOFF.1
251 + fi
252 + fi
253 + done }
254 +
255 + if [[ ${insecure_rpath} -eq 1 ]] ; then
256 + die "Aborting due to serious QA concerns with RUNPATH/RPATH"
257 + elif [[ -n ${die_msg} ]] && has stricter ${FEATURES} ; then
258 + die "Aborting due to QA concerns: ${die_msg}"
259 + fi
260 +
261 + local _so_ext='.so*'
262 +
263 + case "${CHOST}" in
264 + *-winnt*) _so_ext=".dll" ;; # no "*" intentionally!
265 + esac
266 +
267 + # Run some sanity checks on shared libraries
268 + for d in "${ED}"lib* "${ED}"usr/lib* ; do
269 + [[ -d "${d}" ]] || continue
270 + f=$(find "${d}" -name "lib*${_so_ext}" -print0 | \
271 + xargs -0 ${_pfx_scan} | while IFS=";" read arch obj soname rpath needed; \
272 + do [[ -z "${soname}" ]] && echo "${obj}"; done)
273 + if [[ -n ${f} ]] ; then
274 + __vecho -ne '\a\n'
275 + eqawarn "QA Notice: The following shared libraries lack a SONAME"
276 + eqawarn "${f}"
277 + __vecho -ne '\a\n'
278 + sleep 1
279 + fi
280 +
281 + f=$(find "${d}" -name "lib*${_so_ext}" -print0 | \
282 + xargs -0 ${_pfx_scan} | while IFS=";" read arch obj soname rpath needed; \
283 + do [[ -z "${needed}" ]] && echo "${obj}"; done)
284 + if [[ -n ${f} ]] ; then
285 + __vecho -ne '\a\n'
286 + eqawarn "QA Notice: The following shared libraries lack NEEDED entries"
287 + eqawarn "${f}"
288 + __vecho -ne '\a\n'
289 + sleep 1
290 + fi
291 + done
292 +
293 + PORTAGE_QUIET=${tmp_quiet}
294 + fi
295 +}
296 +
297 +install_qa_check_xcoff() {
298 + if ! has binchecks ${RESTRICT}; then
299 + local tmp_quiet=${PORTAGE_QUIET}
300 + local queryline deplib
301 + local insecure_rpath_list= undefined_symbols_list=
302 +
303 + # display warnings when using stricter because we die afterwards
304 + if has stricter ${FEATURES} ; then
305 + unset PORTAGE_QUIET
306 + fi
307 +
308 + rm -f "${PORTAGE_BUILDDIR}"/build-info/NEEDED.XCOFF.1
309 +
310 + local neededfd
311 + for neededfd in {3..1024} none; do ( : <&${neededfd} ) 2>/dev/null || break; done
312 + [[ ${neededfd} != none ]] || die "cannot find free file descriptor handle"
313 +
314 + eval "exec ${neededfd}>\"${PORTAGE_BUILDDIR}\"/build-info/NEEDED.XCOFF.1" || die "cannot open ${PORTAGE_BUILDDIR}/build-info/NEEDED.XCOFF.1"
315 +
316 + ( # work around a problem in /usr/bin/dump (used by aixdll-query)
317 + # dumping core when path names get too long.
318 + cd "${ED}" >/dev/null &&
319 + find . -not -type d -exec \
320 + aixdll-query '{}' FILE MEMBER FLAGS FORMAT RUNPATH DEPLIBS ';'
321 + ) > "${T}"/needed 2>/dev/null
322 +
323 + # Symlinking shared archive libraries is not a good idea on aix,
324 + # as there is nothing like "soname" on pure filesystem level.
325 + # So we create a copy instead of the symlink.
326 + local prev_FILE=
327 + local FILE MEMBER FLAGS FORMAT RUNPATH DEPLIBS
328 + while read queryline
329 + do
330 + FILE= MEMBER= FLAGS= FORMAT= RUNPATH= DEPLIBS=
331 + eval ${queryline}
332 + FILE=${FILE#./}
333 +
334 + if [[ ${prev_FILE} != ${FILE} ]]; then
335 + if [[ " ${FLAGS} " == *" SHROBJ "* && -h ${ED}${FILE} ]]; then
336 + prev_FILE=${FILE}
337 + local target=$(readlink "${ED}${FILE}")
338 + if [[ ${target} == /* ]]; then
339 + target=${D}${target}
340 + else
341 + target=${FILE%/*}/${target}
342 + fi
343 + rm -f "${ED}${FILE}" || die "cannot prune ${FILE}"
344 + cp -f "${ED}${target}" "${ED}${FILE}" || die "cannot copy ${target} to ${FILE}"
345 + fi
346 + fi
347 + done <"${T}"/needed
348 +
349 + prev_FILE=
350 + while read queryline
351 + do
352 + FILE= MEMBER= FLAGS= FORMAT= RUNPATH= DEPLIBS=
353 + eval ${queryline}
354 + FILE=${FILE#./}
355 +
356 + if [[ -n ${MEMBER} && ${prev_FILE} != ${FILE} ]]; then
357 + # Save NEEDED information for each archive library stub
358 + # even if it is static only: the already installed archive
359 + # may contain shared objects to be preserved.
360 + echo "${FORMAT##* }${FORMAT%%-*};${EPREFIX}/${FILE};${FILE##*/};;" >&${neededfd}
361 + fi
362 + prev_FILE=${FILE}
363 +
364 + # shared objects have both EXEC and SHROBJ flags,
365 + # while executables have EXEC flag only.
366 + [[ " ${FLAGS} " == *" EXEC "* ]] || continue
367 +
368 + # Make sure we disallow insecure RUNPATH's
369 + # Don't want paths that point to the tree where the package was built
370 + # (older, broken libtools would do this). Also check for null paths
371 + # because the loader will search $PWD when it finds null paths.
372 + # And we really want absolute paths only.
373 + if [[ -n $(echo ":${RUNPATH}:" | grep -E "(${PORTAGE_BUILDDIR}|::|:[^/])") ]]; then
374 + insecure_rpath_list="${insecure_rpath_list}\n${FILE}${MEMBER:+[${MEMBER}]}"
375 + fi
376 +
377 + local needed=
378 + [[ -n ${MEMBER} ]] && needed=${FILE##*/}
379 + for deplib in ${DEPLIBS}; do
380 + eval deplib=${deplib}
381 + if [[ ${deplib} == '.' || ${deplib} == '..' ]]; then
382 + # Although we do have runtime linking, we don't want undefined symbols.
383 + # AIX does indicate this by needing either '.' or '..'
384 + undefined_symbols_list="${undefined_symbols_list}\n${FILE}"
385 + else
386 + needed="${needed}${needed:+,}${deplib}"
387 + fi
388 + done
389 +
390 + FILE=${EPREFIX}/${FILE}
391 +
392 + [[ -n ${MEMBER} ]] && MEMBER="[${MEMBER}]"
393 + # Save NEEDED information
394 + echo "${FORMAT##* }${FORMAT%%-*};${FILE}${MEMBER};${FILE##*/}${MEMBER};${RUNPATH};${needed}" >&${neededfd}
395 + done <"${T}"/needed
396 +
397 + eval "exec ${neededfd}>&-" || die "cannot close handle to ${PORTAGE_BUILDDIR}/build-info/NEEDED.XCOFF.1"
398 +
399 + if [[ -n ${undefined_symbols_list} ]]; then
400 + __vecho -ne '\a\n'
401 + eqawarn "QA Notice: The following files contain undefined symbols."
402 + eqawarn " Please file a bug about this at http://bugs.gentoo.org/"
403 + eqawarn " with 'prefix' as the maintaining herd of the package."
404 + eqawarn "${undefined_symbols_list}"
405 + __vecho -ne '\a\n'
406 + fi
407 +
408 + if [[ -n ${insecure_rpath_list} ]] ; then
409 + __vecho -ne '\a\n'
410 + eqawarn "QA Notice: The following files contain insecure RUNPATH's"
411 + eqawarn " Please file a bug about this at http://bugs.gentoo.org/"
412 + eqawarn " with 'prefix' as the maintaining herd of the package."
413 + eqawarn "${insecure_rpath_list}"
414 + __vecho -ne '\a\n'
415 + if has stricter ${FEATURES} ; then
416 + insecure_rpath=1
417 + fi
418 + fi
419 +
420 + if [[ ${insecure_rpath} -eq 1 ]] ; then
421 + die "Aborting due to serious QA concerns with RUNPATH/RPATH"
422 + elif [[ -n ${die_msg} ]] && has stricter ${FEATURES} ; then
423 + die "Aborting due to QA concerns: ${die_msg}"
424 + fi
425 +
426 + PORTAGE_QUIET=${tmp_quiet}
427 + fi
428 +}
429 +
430 + preinst_qa_check() {
431 + postinst_qa_check preinst
432 + }
433 +
434 postinst_qa_check() {
435 - local d f paths qa_checks=()
436 + local d f paths qa_checks=() PORTAGE_QA_PHASE=${1:-postinst}
437 if ! ___eapi_has_prefix_variables; then
438 local EPREFIX= EROOT=${ROOT}
439 fi