Skip site navigation (1)Skip section navigation (2)
Date:      Sat,  4 Dec 2004 15:24:54 -0800 (PST)
From:      Kris Kennaway <kris@FreeBSD.org>
To:        FreeBSD-gnats-submit@FreeBSD.org
Subject:   ports/74691: Fix pkg-plist handling for ports that set PREFIX
Message-ID:  <20041204232454.DDA865128E@obsecurity.dyndns.org>
Resent-Message-ID: <200412042320.iB4NKUQH004450@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         74691
>Category:       ports
>Synopsis:       Fix pkg-plist handling for ports that set PREFIX
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sat Dec 04 23:20:29 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator:     Kris Kennaway
>Release:        FreeBSD 4.10-STABLE i386
>Organization:
FreeBSD
>Environment:
System: FreeBSD xor.obsecurity.org 4.10-STABLE FreeBSD 4.10-STABLE #22: Sun Oct 17 18:01:25 PDT 2004 kkenn@xor.obsecurity.org:/usr/src-4.x/sys/compile/XOR i386

>Description:

If a ports sets a non-standard PREFIX, the directories it creates are
not properly removed at deinstallation time.

>How-To-Repeat:

See e.g. the krb4 port, which leaves behind a lot of files in
/usr/local/krb4.  The following patch is the best we can do with the
current bsd.port.mk, but the info/dir file and /usr/local/krb4 are
left behind.  The add-plist-info target appends to the pkg-plist file,
so there is no way we can completely remove /usr/local/krb4 ourselves
without bsd.port.mk help.

Index: Makefile
===================================================================
RCS file: /home/ncvs/ports/security/krb4/Makefile,v
retrieving revision 1.2
diff -u -r1.2 Makefile
--- Makefile	23 Feb 2004 14:03:37 -0000	1.2
+++ Makefile	4 Dec 2004 22:58:15 -0000
@@ -18,6 +18,7 @@
 # which have the same name as some in the base system (e.g.
 # ftp, telnet, su).
 PREFIX?=	${LOCALBASE}/krb4
+NO_MTREE=	yes	# Otherwise we end up with dozens of extra directories in ${PREFIX}
 
 PKGMESSAGE=	${WRKDIR}/pkg-message
 GNU_CONFIGURE=	yes
@@ -31,6 +32,8 @@
 	"CPPFLAGS=-DOPENSSL_DES_LIBDES_COMPATIBILITY" \
 	"LDFLAGS=-Wl,-rpath,${PREFIX}/lib"
 
+INFO=	kth-krb
+
 post-install:
 	install-info ${PREFIX}/info/kth-krb.info ${PREFIX}/info/dir
 	${SED} -e "s~%%PREFIX%%~${PREFIX}~g" \
Index: pkg-plist
===================================================================
RCS file: /home/ncvs/ports/security/krb4/pkg-plist,v
retrieving revision 1.2
diff -u -r1.2 pkg-plist
--- pkg-plist	5 Apr 2003 17:00:44 -0000	1.2
+++ pkg-plist	4 Dec 2004 23:06:22 -0000
@@ -48,9 +48,6 @@
 include/sl.h
 include/ss/ss.h
 include/xdbm.h
-@unexec install-info --delete %D/info/kth-krb.info %D/info/dir
-info/kth-krb.info
-@exec install-info %D/info/kth-krb.info %D/info/dir
 lib/libacl.a
 lib/libacl.so
 lib/libacl.so.1
@@ -100,4 +97,18 @@
 sbin/kdb_util
 sbin/ksrvutil
 sbin/kstash
+@dirrm bin
 @dirrm include/ss
+@dirrm include
+@dirrm lib
+@dirrm libexec
+@dirrm man/cat1
+@dirrm man/cat3
+@dirrm man/cat5
+@dirrm man/cat8
+@dirrm man/man1
+@dirrm man/man3
+@dirrm man/man5
+@dirrm man/man8
+@dirrm man
+@dirrm sbin

>Fix:

This bsd.port.mk patch attempts to fix the plist handling for
non-standard prefixes.  The code that removes info/dir was conditional
on !NO_MTREE; according to r1.342 this was intended to deal with ports
that install with PREFIX=/usr, so make the code actually work that
way.

This fixes the first part of the problem, and /usr/local/krb4/info/dir
will be removed at deinstall time, but /usr/local/krb4/info and
/usr/local/krb4 remain, so change add-plist-info to silently try to
remove the former if we're installing with a non-standard prefix, and
add a new add-plist-post target that tries to silently remove the
latter after all the other plist munging has completed.

Index: bsd.port.mk
===================================================================
RCS file: /home/ncvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.500
diff -u -r1.500 bsd.port.mk
--- bsd.port.mk	19 Nov 2004 13:45:07 -0000	1.500
+++ bsd.port.mk	4 Dec 2004 23:23:41 -0000
@@ -3576,7 +3576,7 @@
 _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
 				pre-su-install-script do-install post-install \
 				post-install-script add-plist-info add-plist-docs \
-				compress-man run-ldconfig fake-pkg security-check
+				add-plist-post compress-man run-ldconfig fake-pkg security-check
 _PACKAGE_DEP=	install
 _PACKAGE_SEQ=	package-message pre-package pre-package-script \
 				do-package post-package-script
@@ -4677,8 +4677,20 @@
 	@${ECHO_CMD} "@exec install-info %D/${INFO_PATH}/$i.info %D/${INFO_PATH}/dir" \
 		>> ${TMPPLIST}
 .endfor
-.if !defined(NO_MTREE)
+.if (${PREFIX} != "/usr")
 	@${ECHO_CMD} "@unexec if [ -f %D/${INFO_PATH}/dir ]; then if sed -e '1,/Menu:/d' %D/${INFO_PATH}/dir | grep -q '^[*] '; then true; else rm %D/${INFO_PATH}/dir; fi; fi" >> ${TMPPLIST}
+.if (${PREFIX} != ${LOCALBASE} && ${PREFIX} != ${X11BASE} && ${PREFIX} != ${LINUXBASE})
+	@${ECHO_CMD} "@unexec rmdir %D/info 2> /dev/null || true" >> ${TMPPLIST}
+.endif
+.endif
+
+# If we're installing into a non-standard PREFIX, we need to remove that directory at
+# deinstall-time
+add-plist-post:
+.if (${PREFIX} != ${LOCALBASE} && ${PREFIX} != ${X11BASE} && ${PREFIX} != ${LINUXBASE} && ${PREFIX} != "/usr")
+	@${ECHO_CMD} "@unexec rmdir %D 2> /dev/null || true" >> ${TMPPLIST}
+.else
+	@${DO_NADA}
 .endif
 
 # Compress (or uncompress) and symlink manpages.
>Release-Note:
>Audit-Trail:
>Unformatted:



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041204232454.DDA865128E>