ports/69758: [PORTS ERROR] Invalid check for installed Linux shared libs in bsd.port.mk script
Alexander Novitsky
alecn2002 at yandex.ru
Thu Jul 29 12:30:26 UTC 2004
>Number: 69758
>Category: ports
>Synopsis: [PORTS ERROR] Invalid check for installed Linux shared libs in bsd.port.mk script
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Thu Jul 29 12:30:25 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator: Alexander Novitsky
>Release: FreeBSD 5.2-RELEASE i386
>Organization:
Inzhcomcentre VVD
>Environment:
System: FreeBSD server.v42of.icc-vvd.ru 5.2-RELEASE FreeBSD 5.2-RELEASE #2: Mon Jul 12 21:45:44 MSD 2004 root at server.v42of.icc-vvd.ru:/usr/src/sys/i386/compile/ORACLE i386
>Description:
When try to install port of some Linux software (USE_LINUX=yes) which relays (via LIB_DEPENDS=...) on other
already installed Linux port with shared library, bsd.port.mk script uses native FreeBSD' /sbin/ldconfig to
check if library installed instead of /compat/linux/sbin/ldconfig
>How-To-Repeat:
Try to install Linux software port which relays on other already installed Linux shared library which doesn't have
correspondent native FreeBSD library with the same name.
bsd.port.mk will not see presence of dependant Linux library and will start it's installation again,
and the whole installation will fail.
>Fix:
--- bsd.port.mk.diff begins here ---
--- bsd.port.mk.orig Thu Jul 29 12:06:51 2004
+++ bsd.port.mk Thu Jul 29 12:21:49 2004
@@ -838,7 +838,17 @@
HEAD?= /usr/bin/head
ID?= /usr/bin/id
IDENT?= /usr/bin/ident
+.if defined(USE_LINUX)
+LDCONFIG?= ${LINUX_BASE}/sbin/ldconfig
+LDCONFIG_LISTCMD= -p
+LDCONFIG_REBUILDCMD= -l
+LDCONFIG_GBLREBUILDCMD=
+.else
LDCONFIG?= /sbin/ldconfig
+LDCONFIG_LISTCMD= -r
+LDCONFIG_REBUILDCMD= -m
+LDCONFIG_GBLREBUILDCMD= -R
+.end
LN?= /bin/ln
LS?= /bin/ls
MKDIR?= /bin/mkdir -p
@@ -3365,10 +3375,10 @@
.if defined(INSTALLS_SHLIB)
.if !defined(INSTALL_AS_USER)
@${ECHO_MSG} "===> Running ldconfig"
- ${LDCONFIG} -m ${LDCONFIG_RUNLIST}
+ ${LDCONFIG} ${LDCONFIG_REBUILDCMD} ${LDCONFIG_RUNLIST}
.else
@${ECHO_MSG} "===> Running ldconfig (errors are ignored)"
- -${LDCONFIG} -m ${LDCONFIG_RUNLIST}
+ -${LDCONFIG} ${LDCONFIG_REBUILDCMD} ${LDCONFIG_RUNLIST}
.endif
.else
@${DO_NADA}
@@ -4142,7 +4152,7 @@
dir=$${dir%%:*}; \
fi; \
${ECHO_MSG} -n "===> ${PKGNAME} depends on shared library: $$lib"; \
- if ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
+ if ${LDCONFIG} ${LDCONFIG_LISTCMD} | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
${ECHO_MSG} " - found"; \
if [ ${_DEPEND_ALWAYS} = 1 ]; then \
${ECHO_MSG} " (but building it anyway)"; \
@@ -4171,7 +4181,7 @@
(cd $$dir; ${MAKE} -DINSTALLS_DEPENDS $$target $$depends_args) ; \
fi ; \
${ECHO_MSG} "===> Returning to build of ${PKGNAME}"; \
- if ! ${LDCONFIG} -r | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
+ if ! ${LDCONFIG} ${LDCONFIG_LISTCMD} | ${GREP} -vwF -e "${PKGCOMPATDIR}" | ${GREP} -qwE -e "-l$$pattern"; then \
${ECHO_MSG} "Error: shared library \"$$lib\" does not exist"; \
${FALSE}; \
fi; \
@@ -4603,11 +4613,11 @@
@${ECHO_CMD} ${dir} | ${SED} ${PLIST_SUB:S/$/!g/:S/^/ -e s!%%/:S/=/%%!/} | ${SED} -e 's,^, at dirrm ,' >> ${TMPPLIST}
.endfor
.if defined(INSTALLS_SHLIB) && !defined(INSTALL_AS_USER)
- @${ECHO_CMD} "@exec ${LDCONFIG} -m ${LDCONFIG_PLIST}" >> ${TMPPLIST}
- @${ECHO_CMD} "@unexec ${LDCONFIG} -R" >> ${TMPPLIST}
+ @${ECHO_CMD} "@exec ${LDCONFIG} ${LDCONFIG_LISTCMD} ${LDCONFIG_PLIST}" >> ${TMPPLIST}
+ @${ECHO_CMD} "@unexec ${LDCONFIG} ${LDCONFIG_GBLREBUILDCMD}" >> ${TMPPLIST}
.elif defined(INSTALLS_SHLIB)
- @${ECHO_CMD} "@exec ${LDCONFIG} -m ${LDCONFIG_PLIST} || ${TRUE}" >> ${TMPPLIST}
- @${ECHO_CMD} "@unexec ${LDCONFIG} -R || ${TRUE}" >> ${TMPPLIST}
+ @${ECHO_CMD} "@exec ${LDCONFIG} ${LDCONFIG_LISTCMD} ${LDCONFIG_PLIST} || ${TRUE}" >> ${TMPPLIST}
+ @${ECHO_CMD} "@unexec ${LDCONFIG} ${LDCONFIG_GBLREBUILDCMD} || ${TRUE}" >> ${TMPPLIST}
.endif
.if !defined(NO_FILTER_SHLIBS)
.if (${PORTOBJFORMAT} == "aout")
--- bsd.port.mk.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list