- Explicitly verify if all needed libs were found by ldd(1). Do so

through scanning its output as ldd(1) returns a non-zero status only
  for really abnormal conditions such as an improper file format.
  Now cp(1) won't get bogus "not" and "found" arguments if a lib
  is missing. [1]

- Don't guess if an element of a complex pipeline is assigned to the main
  shell or a sub-shell.  Namely use stdio, not vars, to pass lists out from
  loops.  If using vars, there's the risk that a loop will run in a sub-shell
  and the list won't make it to the main shell.  It appears that braces and
  parens give only limited control over the issue while stdio always works
  as intended.  Apply this solution to both $progs and $libs for consistency,
  although I've failed to go without it only in the $libs part.

Requested by:	emaste [1]
This commit is contained in:
Yaroslav Tykhiy 2007-12-04 12:55:27 +00:00
parent d24031dd0c
commit c93073c260

View File

@ -591,17 +591,25 @@ ITOOLS= [ awk cap_mkdb cat chflags chmod chown \
#
distributeworld installworld: installcheck
mkdir -p ${INSTALLTMP}
for prog in ${ITOOLS}; do \
progs=$$(for prog in ${ITOOLS}; do \
if progpath=`which $$prog`; then \
progs="$$progs $$progpath"; \
echo $$progpath; \
else \
echo "Required tool $$prog not found in PATH." >&2; \
exit 1; \
fi; \
done; \
cp $$progs ${INSTALLTMP}; \
cp `ldd -f "%p\n" -f "%p\n" $$progs 2>/dev/null | \
sort -u` ${INSTALLTMP}
done); \
libs=$$(ldd -f "%o %p\n" -f "%o %p\n" $$progs 2>/dev/null | sort -u | \
while read line; do \
set -- $$line; \
if [ "$$2 $$3" != "not found" ]; then \
echo $$2; \
else \
echo "Required library $$1 not found." >&2; \
exit 1; \
fi; \
done); \
cp $$libs $$progs ${INSTALLTMP}
cp -R $${PATH_LOCALE:-"/usr/share/locale"} ${INSTALLTMP}/locale
${_+_}cd ${.CURDIR}; ${IMAKE} re${.TARGET:S/world$//}; \
${IMAKEENV} rm -rf ${INSTALLTMP}