Index: bsd.port.mk
===================================================================
RCS file: /exports/cvsroot-freebsd/ports/Mk/bsd.port.mk,v
retrieving revision 1.682
diff -u -r1.682 bsd.port.mk
--- bsd.port.mk	6 May 2011 06:20:12 -0000	1.682
+++ bsd.port.mk	18 May 2011 20:08:55 -0000
@@ -631,6 +631,8 @@
 # INSTALL_DATA	- A command to install sharable data.
 # INSTALL_MAN	- A command to install manpages.  May or not compress,
 #				  depending on the value of MANCOMPRESSED (see below).
+# INSTALL_CONF	- A command to install configuration files. Not normally called
+#				  by ports directly, use CONF_FILES (see below).
 #
 # Boolean to control whether manpages are installed.
 #
@@ -971,6 +973,18 @@
 # MTREE_FILE	- The name of the mtree file.
 #				  Default: ${PORTSDIR}/Templates/BSD.local.dist or
 #				  /etc/mtree/BSD.usr.dist if ${PREFIX} == "/usr".
+# CONF_FILES	- A list of "absolute_path/src_file:relative_path/[dest_file]"
+#				  tuples of configuration files this package should install
+#				  as sample files (extension .pkgconf).  "absolute_path" is
+#				  usually ${WRKSRC}/path_to_conf_file, and "src_file" can be
+#				  a filename or sh glob.  If "dest_file" is omitted, the 
+#				  trailing slash is non-optional, and the filename is taken from
+#				  "src_file".  If a glob is used in "src_file" then "dest_file"
+#				  should be omitted.  The sample files are copied to conf files
+#				  if there is no existing conf file, and unchanged conf files
+#				  are removed on deinstall.
+# CONF_DIRS		- Directories to be created to put config files in and
+#				  added to the packing list
 # PLIST_DIRS	- Directories to be added to packing list
 # PLIST_DIRSTRY	- Directories to be added to packing list and try to remove them.
 # PLIST_FILES	- Files and symbolic links to be added to packing list
@@ -2419,12 +2433,20 @@
 _BINOWNGRP=	-o ${BINOWN} -g ${BINGRP}
 _SHROWNGRP=	-o ${SHAREOWN} -g ${SHAREGRP}
 _MANOWNGRP=	-o ${MANOWN} -g ${MANGRP}
+_CONFOWNGRP=	-o ${CONFOWN} -g ${CONFGRP}
 .else
 _BINOWNGRP=
 _SHROWNGRP=
 _MANOWNGRP=
+_CONFOWNGRP=
 .endif
 
+# CONF* macros are only defined in recent versions; these
+# lines can be removed once 8.2-RELEASE is no longer supported.
+CONFOWN?=	root
+CONFGRP?=	wheel
+CONFMODE?=	644
+
 # A few aliases for *-install targets
 INSTALL_PROGRAM= \
 	${INSTALL} ${COPY} ${STRIP} ${_BINOWNGRP} -m ${BINMODE}
@@ -2438,6 +2460,8 @@
 	${INSTALL} ${COPY} ${_SHROWNGRP} -m ${SHAREMODE}
 INSTALL_MAN= \
 	${INSTALL} ${COPY} ${_MANOWNGRP} -m ${MANMODE}
+INSTALL_CONF= \
+	${INSTALL} ${COPY} ${_CONFOWNGRP} -m ${CONFMODE}
 
 INSTALL_MACROS=	BSD_INSTALL_PROGRAM="${INSTALL_PROGRAM}" \
 			BSD_INSTALL_LIB="${INSTALL_LIB}" \
@@ -4468,10 +4492,10 @@
 				pre-install-script generate-plist check-already-installed
 _INSTALL_SUSEQ= check-umask install-mtree pre-su-install \
 				pre-su-install-script create-users-groups do-install \
-				install-desktop-entries install-license install-rc-script \
-				post-install post-install-script add-plist-info \
-				add-plist-docs add-plist-examples add-plist-data \
-				add-plist-post fix-plist-sequence compress-man \
+				install-desktop-entries install-license install-conf-files \
+				install-rc-script post-install post-install-script \
+				add-plist-info add-plist-docs add-plist-examples \
+				add-plist-data add-plist-post fix-plist-sequence compress-man \
 				install-ldconfig-file fake-pkg security-check
 _PACKAGE_DEP=	install
 _PACKAGE_SEQ=	package-message pre-package pre-package-script \
@@ -5973,6 +5997,46 @@
 .endif
 .endif
 
+.if !target(install-conf-files)
+install-conf-files:
+. if defined(CONF_FILES)
+	@${ECHO_MSG} "===> Installing configuration file(s)"
+	@${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}
+.  if defined(CONF_DIRS)
+.	for dir in ${CONF_DIRS}
+	@${MKDIR} ${dir}
+.   endfor
+.  endif
+.  for confs in ${CONF_FILES}
+	CONF_FILES_SRC=$$(${ECHO_CMD} \
+		"${confs}" | ${SED} -E -e 's,([^: ]*).*,\1,') ; \
+	CONF_FILES_DEST=$$(${ECHO_CMD} \
+		"${confs}" | ${SED} -E -e 's,([^: ]*):([^: ]*),\2,') ; \
+	for src in $${CONF_FILES_SRC} ; \
+	do \
+		[ -z $${CONF_FILES_DEST##*/} ] \
+			&& dest=$${CONF_FILES_DEST}$${src##*/} \
+			|| dest=$${CONF_FILES_DEST} ; \
+		${INSTALL_DATA} $${src} ${PREFIX}/$${dest}.pkgconf ; \
+		[ -f ${PREFIX}/$${dest} ] \
+			|| ${INSTALL_CONF} ${PREFIX}/$${dest}.pkgconf \
+				${PREFIX}/$${dest} ; \
+		${ECHO_CMD} "@unexec cmp -s %D/$${dest}.pkgconf %D/$${dest} \
+			&& ${RM} -f %D/$${dest} || true" >> ${TMPPLIST} ; \
+		${ECHO_CMD} "$${dest}.pkgconf" >> ${TMPPLIST} ; \
+		${ECHO_CMD} "@exec [ -f %D/$${dest} ] \
+			|| ${INSTALL_CONF} %D/%F %B/$${dest}" >> ${TMPPLIST} ; \
+	done
+.  endfor
+.  if defined(CONF_DIRS_
+.	for dir in ${CONF_DIRS}
+	@${ECHO_CMD} "@unexec rmdir %D/${dir} 2>/dev/null || true" \
+		>> ${TMPPLIST}
+.	endfor
+.  endif
+. endif
+.endif
+
 .if !target(install-rc-script)
 install-rc-script:
 .if defined(USE_RCORDER) || defined(USE_RC_SUBR) && ${USE_RC_SUBR:U} != "YES"
