ports/186619: [Patch]: Fix symlink handling for uniquefiles USES
Marcus von Appen
mva at FreeBSD.org
Mon Feb 10 07:40:00 UTC 2014
>Number: 186619
>Category: ports
>Synopsis: [Patch]: Fix symlink handling for uniquefiles USES
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Feb 10 07:40:00 UTC 2014
>Closed-Date:
>Last-Modified:
>Originator: Marcus von Appen
>Release: FreeBSD 9.2-STABLE amd64
>Organization:
>Environment:
System: FreeBSD medusa.sysfault.org 9.2-STABLE FreeBSD 9.2-STABLE #14 r260254: Sat Jan 4 14:59:59 CET 2014 root at medusa.sysfault.org:/usr/obj/usr/src/sys/MEDUSA amd64
>Description:
The uniquefiles USES does not handle symlinks to files, which do not
point to a valid location. Since test -e only evaluates to true, if
the symlink exists, symlinks within a stagedir pointing to ${PREFIX}
would not be properly prefixed or suffixed.
>How-To-Repeat:
Several ports from the exp-run of ports/185947 suffer from that.
>Fix:
--- symlink_uniquefiles2.diff begins here ---
Index: Mk/Uses/uniquefiles.mk
===================================================================
--- Mk/Uses/uniquefiles.mk (revision 343443)
+++ Mk/Uses/uniquefiles.mk (working copy)
@@ -100,7 +100,7 @@
.if ${UNIQUE_DEFAULT_LINKS} == yes
_DO_CONDITIONAL_SYMLINK= \
- if [ ! -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+ if [ ! -e ${STAGEDIR}${PREFIX}/$${fname} -a ! -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
${ECHO_MSG} " $${newf} --> @$${fname}"; \
${LN} -s ${PREFIX}/$${newf} ${STAGEDIR}${PREFIX}/$${fname}; \
${ECHO_CMD} LINKED:$${newf}:$${fname} >> ${_UNIQUEPKGLIST}; \
@@ -116,7 +116,7 @@
.endif
.for entry in ${UNIQUE_PREFIX_FILES}
@fname=${entry}; \
- if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+ if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
newf=$${fname%/*}/${UNIQUE_PREFIX}$${fname##*/} ; \
${ECHO_MSG} " $${fname} --> $${newf}" ; \
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
@@ -129,7 +129,7 @@
.endfor
.if ${UNIQUE_FIND_PREFIX_FILES}
@for fname in `${UNIQUE_FIND_PREFIX_FILES}`; do \
- if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+ if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
newf=$${fname%/*}/${UNIQUE_PREFIX}$${fname##*/} ; \
${ECHO_MSG} " $${fname} --> $${newf}" ; \
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
@@ -147,7 +147,7 @@
.endif
.for entry in ${UNIQUE_SUFFIX_FILES}
@fname=${entry}; \
- if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+ if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
newf=$${fname%/*}/$${fname##*/}${UNIQUE_SUFFIX}; \
${ECHO_MSG} " $${fname} --> $${newf}"; \
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
@@ -160,7 +160,7 @@
.endfor
.if ${UNIQUE_FIND_SUFFIX_FILES}
@for fname in `${UNIQUE_FIND_SUFFIX_FILES}`; do \
- if [ -e ${STAGEDIR}${PREFIX}/$${fname} ]; then \
+ if [ -e ${STAGEDIR}${PREFIX}/$${fname} -o -L ${STAGEDIR}${PREFIX}/$${fname} ]; then \
newf=$${fname%/*}/$${fname##*/}${UNIQUE_SUFFIX}; \
${ECHO_MSG} " $${fname} --> $${newf}"; \
${MV} ${STAGEDIR}${PREFIX}/$${fname} ${STAGEDIR}${PREFIX}/$${newf}; \
--- symlink_uniquefiles2.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list