ports/75464: bsd.port.mk install default configuration files
dirk.meyer at dinoex.sub.org
dirk.meyer at dinoex.sub.org
Fri Dec 24 11:50:20 UTC 2004
>Number: 75464
>Category: ports
>Synopsis: bsd.port.mk install default configuration files
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Fri Dec 24 11:50:19 GMT 2004
>Closed-Date:
>Last-Modified:
>Originator: Dirk Meyer
>Release: FreeBSD 4.11-PRERELEASE i386
>Organization:
privat
>Environment:
FreeBSD ports
>Description:
- add new features:
PORTEXAMPLES, similar to PORTDOCS
ETC_DEFAULT_FILES for default configuration files
>How-To-Repeat:
Install all sample files not in etc,
but in /usr/local/share/examples/<portname>/default/
eg in the apache13-modssl port you like to specify:
ETC_DEFAULT_FILES = \
apache/access.conf apache/httpd.conf \
apache/magic apache/mime.types \
apache/srm.conf \
rc.d/apache.sh
bsd.port.mk will handle:
- the pkg-plist entrys for the samples
- the installation when the coresponding files in
/usr/local/etc/ does not exist.
- the deinstalltion check, preserving existing
configuration files.
- create and removal of subdirectories.
>Fix:
apply this patch:
Index: bsd.port.mk
===================================================================
RCS file: /home/pcvs/ports/Mk/bsd.port.mk,v
retrieving revision 1.502
diff -u -r1.502 bsd.port.mk
--- bsd.port.mk 23 Dec 2004 01:35:38 -0000 1.502
+++ bsd.port.mk 24 Dec 2004 11:34:10 -0000
@@ -553,6 +553,28 @@
# installed (for example because NOPORTDOCS is defined).
# Useful for dynamically generated documentation.
#
+# Set the following to specify all documentation your port installs into
+# ${EXAMPLESDIR}
+#
+# PORTEXAMPLES - A list of files and directories relative to EXAMPLESDIR.
+# Shell glob patterns can be used, directories include
+# the entire subtree of contained files and directories.
+# Useful for dynamically generated examples.
+#
+# ETC_DEFAULT_DIR - A directory relative to EXAMPLESDIR, which contains
+# default configuration files.
+# Default: "default"
+#
+# ETC_TARGET_DIR - A directory relative to PREFIX, which contains
+# configuration files for this port at runtime
+# Default: "etc"
+#
+# ETC_DEFAULT_FILES - A list of files that are installed relative to
+# ETC_DEFAULT_DIR, to create a default configuration
+# when this config file is not present in
+# ETC_TARGET_DIR. This files are removed on deinstall
+# only when they have not beenn altered.
+#
# Default targets and their behaviors:
#
# fetch - Retrieves ${DISTFILES} (and ${PATCHFILES} if defined)
@@ -3645,7 +3667,8 @@
_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 \
- add-plist-post compress-man run-ldconfig fake-pkg security-check
+ add-plist-examples add-plist-post compress-man \
+ fake-pkg security-check
_PACKAGE_DEP= install
_PACKAGE_SEQ= package-message pre-package pre-package-script \
do-package post-package-script
@@ -4758,6 +4781,57 @@
.endif
.endif
+add-plist-docs: add-plist-examples
+
+.if !target(add-plist-examples)
+add-plist-examples:
+.if defined(PORTEXAMPLES)
+ @if ${EGREP} -qe '^@cw?d' ${TMPPLIST} && \
+ [ "`${SED} -En -e '/^@cw?d[ ]*/s,,,p' ${TMPPLIST} | ${TAIL} -n 1`" != "${PREFIX}" ]; then \
+ ${ECHO_CMD} "@cwd ${PREFIX}" >> ${TMPPLIST}; \
+ fi
+.if defined(ETC_DEFAULT_FILES)
+ @${FIND} -P ${ETC_DEFAULT_FILES:S/^/${EXAMPLESDIR_ETC}\//} ! -type d | \
+ while read sample; do \
+ src="%D/$${sample#${PREFIX}/}"; \
+ dst="%D/${ETC_TARGET_DIR}$${sample#${EXAMPLESDIR_ETC}}"; \
+ echo '@unexec if cmp -s "'$${dst}'" "'$${src}'"; then rm -f "'$${dst}'"; else echo "preserving '$${dst}'" >&2; fi';\
+ done >> ${TMPPLIST}
+.endif
+ @${FIND} -P ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} ! -type d | \
+ ${SED} -ne 's,^${PREFIX}/,,p' >> ${TMPPLIST}
+.if defined(ETC_DEFAULT_FILES)
+ @${FIND} -P -d ${EXAMPLESDIR_ETC} -type d | \
+ while read dir; do \
+ dst="${ETC_TARGET_DIR}$${dir#${EXAMPLESDIR_ETC}}"; \
+ etc="${ETC_DEFAULT_DIR}"; \
+ if [ "$${#dst}" -gt "$${#etc}" ]; then echo '@exec mkdir -p "'$${dst}'"'; fi; \
+ done >> ${TMPPLIST}
+ @${FIND} -P ${ETC_DEFAULT_FILES:S/^/${EXAMPLESDIR_ETC}\//} ! -type d | \
+ while read sample; do \
+ src="%D/$${sample#${PREFIX}/}"; \
+ dst="%D/${ETC_TARGET_DIR}$${sample#${EXAMPLESDIR_ETC}}"; \
+ echo '@exec [ ! -f "'$${dst}'" ] && cp "'$${src}'" "'$${dst}'"';\
+ done >> ${TMPPLIST}
+ @${FIND} -P -d ${EXAMPLESDIR_ETC} -type d | \
+ while read dir; do \
+ dst="${ETC_TARGET_DIR}$${dir#${EXAMPLESDIR_ETC}}"; \
+ etc="${ETC_DEFAULT_DIR}"; \
+ if [ "$${#dst}" -gt "$${#etc}" ]; then echo "@unexec rmdir %D/$${dst} 2>/dev/null || true"; fi; \
+ dst="$${dir#${PREFIX}/}"; \
+ echo "@dirrm $${dst}"; \
+ done >> ${TMPPLIST}
+.endif
+ @${FIND} -P -d ${PORTEXAMPLES:S/^/${EXAMPLESDIR}\//} -type d | \
+ ${SED} -ne 's,^${PREFIX}/, at dirrm ,p' >> ${TMPPLIST}
+ @if [ -d "${EXAMPLESDIR}" ]; then \
+ ${ECHO_CMD} "@unexec rmdir %D/${EXAMPLESDIR:S,^${PREFIX}/,,} 2>/dev/null || true" >> ${TMPPLIST}; \
+ fi
+.else
+ @${DO_NADA}
+.endif
+.endif
+
# If we're installing into a non-standard PREFIX, we need to remove that directory at
# deinstall-time
add-plist-post:
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list