pkgsrc-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/mk Next round of install script cleanup -- we now crea...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/0c3b41301993
branches:  trunk
changeset: 488491:0c3b41301993
user:      jlam <jlam%pkgsrc.org@localhost>
date:      Wed Feb 02 10:33:01 2005 +0000

description:
Next round of install script cleanup -- we now create +FILES,
+RCD_SCRIPTS, and +PERMS subscripts to handle copying config files
and rc.d scripts, and setting special permissions on files.  The +FILES
and +RCD_SCRIPTS are basically identical except for different embedded
packets of data, and they feature reference-counting for the files in
case multiple packages share the same config file.

Garbage-collect unused functions and definitions in the install scripts
now that the subscripts are self-contained.

diffstat:

 mk/bsd.pkg.install.mk |  120 +++++++++++++++++++--
 mk/install/deinstall  |  137 +++++++-----------------
 mk/install/files      |  276 ++++++++++++++++++++++++++++++++++++++++++++++++++
 mk/install/header     |   52 +---------
 mk/install/install    |  219 +++++----------------------------------
 mk/install/perms      |   78 ++++++++++++++
 6 files changed, 533 insertions(+), 349 deletions(-)

diffs (truncated from 1018 to 300 lines):

diff -r 272f5ade9f29 -r 0c3b41301993 mk/bsd.pkg.install.mk
--- a/mk/bsd.pkg.install.mk     Wed Feb 02 10:23:44 2005 +0000
+++ b/mk/bsd.pkg.install.mk     Wed Feb 02 10:33:01 2005 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: bsd.pkg.install.mk,v 1.78 2005/01/28 19:06:07 jlam Exp $
+# $NetBSD: bsd.pkg.install.mk,v 1.79 2005/02/02 10:33:01 jlam Exp $
 #
 # This Makefile fragment is included by bsd.pkg.mk to use the common
 # INSTALL/DEINSTALL scripts.  To use this Makefile fragment, simply:
@@ -173,7 +173,37 @@
 #
 SPECIAL_PERMS?=                # empty
 SETUID_ROOT_PERMS?=    ${ROOT_USER} ${ROOT_GROUP} 4711
-FILES_SUBST+=          SPECIAL_PERMS=${SPECIAL_PERMS:Q}
+
+INSTALL_PERMS_FILE=    ${WRKDIR}/.install-perms
+INSTALL_UNPACK_TMPL+=  ${INSTALL_PERMS_FILE}
+
+${INSTALL_PERMS_FILE}: ../../mk/install/perms
+       ${_PKG_SILENT}${_PKG_DEBUG}{                                    \
+       ${ECHO} "# start of install-perms";                             \
+       ${ECHO} "#";                                                    \
+       ${ECHO} "# Generate a +PERMS script that sets the special";     \
+       ${ECHO} "# permissions on files and directories used by the";   \
+       ${ECHO} "# package.";                                           \
+       ${ECHO} "#";                                                    \
+       ${ECHO} "case \$${STAGE} in";                                   \
+       ${ECHO} "PRE-INSTALL)";                                         \
+       ${ECHO} "       \$${CAT} > ./+PERMS << 'EOF_PERMS'";            \
+       ${SED} ${FILES_SUBST_SED} ../../mk/install/perms;               \
+       ${ECHO} "";                                                     \
+       eval set -- ${SPECIAL_PERMS} ;                                  \
+       while ${TEST} $$# -gt 0; do                                     \
+               file="$$1"; owner="$$2"; group="$$3"; mode="$$4";       \
+               shift; shift; shift; shift;                             \
+               ${ECHO} "# PERMS: $$file $$mode $$owner $$group";       \
+       done;                                                           \
+       ${ECHO} "EOF_PERMS";                                            \
+       ${ECHO} "       \$${CHMOD} +x ./+PERMS";                        \
+       ${ECHO} "       ;;";                                            \
+       ${ECHO} "esac";                                                 \
+       ${ECHO} "";                                                     \
+       ${ECHO} "# end of install-perms";                               \
+       } > ${.TARGET}.tmp;                                             \
+       ${MV} -f ${.TARGET}.tmp ${.TARGET}
 
 # CONF_FILES are pairs of example and true config files, used much like
 #      MLINKS in the base system.  At post-install time, if the true config
@@ -211,20 +241,86 @@
        "bsd.pkg.install.mk: RCD_SCRIPTS_EXAMPLEDIR can't be an absolute path."
 .endif
 RCD_SCRIPTS_SHELL?=    ${SH}
-FILES_SUBST+=          CONF_FILES=${CONF_FILES:Q}
-FILES_SUBST+=          CONF_FILES_MODE=${CONF_FILES_MODE}
-FILES_SUBST+=          CONF_FILES_PERMS=${CONF_FILES_PERMS:Q}
-FILES_SUBST+=          SUPPORT_FILES=${SUPPORT_FILES:Q}
-FILES_SUBST+=          SUPPORT_FILES_MODE=${SUPPORT_FILES_MODE}
-FILES_SUBST+=          SUPPORT_FILES_PERMS=${SUPPORT_FILES_PERMS:Q}
-FILES_SUBST+=          RCD_SCRIPTS=${RCD_SCRIPTS:Q}
-FILES_SUBST+=          RCD_SCRIPTS_MODE=${RCD_SCRIPTS_MODE}
-FILES_SUBST+=          RCD_SCRIPTS_DIR=${RCD_SCRIPTS_DIR}
-FILES_SUBST+=          RCD_SCRIPTS_EXAMPLEDIR=${RCD_SCRIPTS_EXAMPLEDIR}
 FILES_SUBST+=          RCD_SCRIPTS_SHELL=${RCD_SCRIPTS_SHELL}
 MESSAGE_SUBST+=                RCD_SCRIPTS_DIR=${RCD_SCRIPTS_DIR}
 MESSAGE_SUBST+=                RCD_SCRIPTS_EXAMPLEDIR=${RCD_SCRIPTS_EXAMPLEDIR}
 
+INSTALL_FILES_FILE=    ${WRKDIR}/.install-files
+INSTALL_UNPACK_TMPL+=  ${INSTALL_FILES_FILE}
+
+${INSTALL_FILES_FILE}: ../../mk/install/files
+       ${_PKG_SILENT}${_PKG_DEBUG}{                                    \
+       ${ECHO} "# start of install-files";                             \
+       ${ECHO} "#";                                                    \
+       ${ECHO} "# Generate a +FILES script that reference counts config"; \
+       ${ECHO} "# files that are required for the proper functioning"; \
+       ${ECHO} "# of the package.";                                    \
+       ${ECHO} "#";                                                    \
+       ${ECHO} "case \$${STAGE} in";                                   \
+       ${ECHO} "PRE-INSTALL)";                                         \
+       ${ECHO} "       \$${CAT} > ./+FILES << 'EOF_FILES'";            \
+       ${SED} ${FILES_SUBST_SED} ../../mk/install/files;               \
+       ${ECHO} "";                                                     \
+       eval set -- ${CONF_FILES} ;                                     \
+       while ${TEST} $$# -gt 0; do                                     \
+               egfile="$$1"; file="$$2";                               \
+               shift; shift;                                           \
+               ${ECHO} "# FILE: $$file c $$egfile ${CONF_FILES_MODE}"; \
+       done;                                                           \
+       eval set -- ${SUPPORT_FILES} ;                                  \
+       while ${TEST} $$# -gt 0; do                                     \
+               egfile="$$1"; file="$$2";                               \
+               shift; shift;                                           \
+               ${ECHO} "# FILE: $$file c $$egfile ${SUPPORT_FILES_MODE}"; \
+       done;                                                           \
+       eval set -- ${CONF_FILES_PERMS} ${SUPPORT_FILES_PERMS} ;        \
+       while ${TEST} $$# -gt 0; do                                     \
+               egfile="$$1"; file="$$2";                               \
+               owner="$$3"; group="$$4"; mode="$$5";                   \
+               shift; shift; shift; shift; shift;                      \
+               ${ECHO} "# FILE: $$file c $$egfile $$mode $$owner $$group"; \
+       done;                                                           \
+       ${ECHO} "EOF_FILES";                                            \
+       ${ECHO} "       \$${CHMOD} +x ./+FILES";                        \
+       ${ECHO} "       ;;";                                            \
+       ${ECHO} "esac";                                                 \
+       ${ECHO} "";                                                     \
+       ${ECHO} "# end of install-files";                               \
+       } > ${.TARGET}.tmp;                                             \
+       ${MV} -f ${.TARGET}.tmp ${.TARGET}
+
+INSTALL_RCD_SCRIPTS_FILE=      ${WRKDIR}/.install-rcd-scripts
+INSTALL_UNPACK_TMPL+=          ${INSTALL_RCD_SCRIPTS_FILE}
+
+${INSTALL_RCD_SCRIPTS_FILE}: ../../mk/install/files
+       ${_PKG_SILENT}${_PKG_DEBUG}{                                    \
+       ${ECHO} "# start of install-rcd-scripts";                       \
+       ${ECHO} "#";                                                    \
+       ${ECHO} "# Generate a +RCD_SCRIPTS script that reference counts config"; \
+       ${ECHO} "# files that are required for the proper functioning"; \
+       ${ECHO} "# of the package.";                                    \
+       ${ECHO} "#";                                                    \
+       ${ECHO} "case \$${STAGE} in";                                   \
+       ${ECHO} "PRE-INSTALL)";                                         \
+       ${ECHO} "       \$${CAT} > ./+RCD_SCRIPTS << 'EOF_RCD_SCRIPTS'"; \
+       ${SED} ${FILES_SUBST_SED} ../../mk/install/files;               \
+       ${ECHO} "";                                                     \
+       eval set -- ${RCD_SCRIPTS} ;                                    \
+       while ${TEST} $$# -gt 0; do                                     \
+               script="$$1"; shift;                                    \
+               file="${RCD_SCRIPTS_DIR}/$$script";                     \
+               egfile="${PREFIX}/${RCD_SCRIPTS_EXAMPLEDIR}/$$script";  \
+               ${ECHO} "# FILE: $$file c $$egfile ${RCD_SCRIPTS_MODE}"; \
+       done;                                                           \
+       ${ECHO} "EOF_RCD_SCRIPTS";                                      \
+       ${ECHO} "       \$${CHMOD} +x ./+RCD_SCRIPTS";                  \
+       ${ECHO} "       ;;";                                            \
+       ${ECHO} "esac";                                                 \
+       ${ECHO} "";                                                     \
+       ${ECHO} "# end of install-rcd-scripts";                         \
+       } > ${.TARGET}.tmp;                                             \
+       ${MV} -f ${.TARGET}.tmp ${.TARGET}
+
 # OWN_DIRS contains a list of directories for this package that should be
 #       created and should attempt to be destroyed by the INSTALL/DEINSTALL
 #      scripts.  MAKE_DIRS is used the same way, but the package admin
diff -r 272f5ade9f29 -r 0c3b41301993 mk/install/deinstall
--- a/mk/install/deinstall      Wed Feb 02 10:23:44 2005 +0000
+++ b/mk/install/deinstall      Wed Feb 02 10:33:01 2005 +0000
@@ -1,50 +1,24 @@
 # start of deinstall
 #
-# $NetBSD: deinstall,v 1.31 2005/01/28 07:37:55 jlam Exp $
-
-eval set -- ${CONF_FILES} ${SUPPORT_FILES}
-while [ $# -gt 0 ]; do
-       samplefile="$1"; file="$2"
-       shift; shift
-       ALL_FILES="${ALL_FILES} \"${samplefile}\" \"${file}\""
-       VIEW_FILES="${VIEW_FILES} \"${file}\""
-done
-if [ "${_PKG_RCD_SCRIPTS}" = "YES" ]; then
-       eval set -- ${RCD_SCRIPTS}
-       for script; do
-               samplefile="${PKG_PREFIX}/${RCD_SCRIPTS_EXAMPLEDIR}/${script}"
-               file="${RCD_SCRIPTS_DIR}/${script}"
-               shift
-               ALL_FILES="${ALL_FILES} \"${samplefile}\" \"${file}\""
-       done
-fi
-eval set -- ${CONF_FILES_PERMS} ${SUPPORT_FILES_PERMS}
-while [ $# -gt 0 ]; do
-       samplefile="$1"; file="$2"; owner="$3"; group="$4"; mode="$5"
-       shift; shift; shift; shift; shift
-       ALL_FILES="${ALL_FILES} \"${samplefile}\" \"${file}\""
-       VIEW_FILES="${VIEW_FILES} \"${file}\""
-done
+# $NetBSD: deinstall,v 1.32 2005/02/02 10:33:01 jlam Exp $
 
 case ${STAGE} in
 VIEW-DEINSTALL)
-       if [ "${_PKG_CONFIG}" = "YES" -a -n "${VIEW_FILES}" ]; then
-               if [ -n "${PKG_SYSCONFDEPOTBASE}" ]; then
+       case ${_PKG_CONFIG} in
+       YES)
+               case ${PKG_SYSCONFDEPOTBASE} in
+               "")
+                       ${TEST} -x ./+FILES &&
+                               ./+FILES VIEW-REMOVE ${PREFIX} ${PKG_PREFIX}
+                       ;;
+               *)
                        ${SETENV} PLIST_IGNORE_FILES="${CONF_IGNORE_FILES}" \
                                ${LINKFARM} -D -t ${PKG_SYSCONFVIEWBASE} -d ${PKG_SYSCONFDEPOTBASE} ${PKGNAME}
                        ${RMDIR} -p ${PKG_SYSCONFVIEWBASE} 2>/dev/null || ${TRUE}
-               else
-                       eval set -- ${VIEW_FILES}
-                       for file; do
-                               link=`${ECHO} ${file} | ${SED} "s,^${PREFIX}/,${PKG_PREFIX}/,"`
-                               dir=`${DIRNAME} ${link}`
-                               if [ -h "${link}" ]; then
-                                       ${RM} -f ${link}
-                                       ${RMDIR} -p ${dir} 2>/dev/null || ${TRUE}
-                               fi
-                       done
-               fi
-       fi
+                       ;;
+               esac
+               ;;
+       esac
        if [ -n "${PKG_SHELL}" -a "${PKG_REGISTER_SHELLS}" = "YES" ]; then
                ${ECHO} "===> Updating /etc/shells"
                ${CP} /etc/shells /etc/shells.pkgsrc."$$"
@@ -57,34 +31,17 @@
        # Remove configuration files if they don't differ from the default
        # config file.
        #
-        if [ "${_PKG_CONFIG}" = "YES" ]; then
-               eval set -- ${ALL_FILES}
-               while [ $# -gt 0 ]; do
-                       samplefile="$1"; file="$2"
-                       shift; shift
-
-                       if [ ! "${file}" -ef "${samplefile}" -a         \
-                            -f "${file}" -a -f "${samplefile}" ]; then
-                               if ${CMP} -s "${file}" "${samplefile}"; then
-                                       ${RM} -f "${file}"
-                               fi
-                       fi
-               done
-       fi
+       case ${_PKG_CONFIG} in
+       YES)    ${TEST} -x ./+FILES &&
+                       ./+FILES REMOVE ${PKG_METADATA_DIR} ;;
+       esac
+       case ${_PKG_CONFIG}${_PKG_RCD_SCRIPTS} in
+       YESYES) ${TEST} -x ./+RCD_SCRIPTS &&
+                       ./+RCD_SCRIPTS REMOVE ${PKG_METADATA_DIR} ;;
+       esac
        ;;
 
 POST-DEINSTALL)
-       modified_files=''
-       eval set -- ${ALL_FILES}
-       while [ $# -gt 0 ]; do
-               samplefile="$1"; file="$2"
-               shift; shift
-
-               if [ -f "${file}" ]; then
-                       modified_files="${modified_files} \"${file}\""
-               fi
-       done
-
        if [ "${PKG_INSTALLATION_TYPE}" = "pkgviews" -a                 \
             "${_PKG_CONFIG}" = "YES" -a -n "${CONF_DEPENDS}" ]; then
                if [ -h ${PKG_SYSCONFDIR} ]; then
@@ -92,44 +49,28 @@
                fi
                ${RMDIR} -p `${DIRNAME} ${PKG_SYSCONFDIR}` 2>/dev/null || ${TRUE}
        fi
-
+       #
+       # Remove empty directories and unused users/groups.
+       #
        case ${_PKG_CONFIG} in
-       YES)    ${TEST} -x ./+DIRS && ./+DIRS REMOVE ${PKG_METADATA_DIR} ;;
+       YES)    ${TEST} -x ./+DIRS &&
+                       ./+DIRS REMOVE ${PKG_METADATA_DIR} ;;
        esac
        case ${_PKG_CREATE_USERGROUP} in
-       YES)    ${TEST} -x ./+USERGROUP && ./+USERGROUP REMOVE ${PKG_METADATA_DIR} ;;
+       YES)    ${TEST} -x ./+USERGROUP &&
+                       ./+USERGROUP REMOVE ${PKG_METADATA_DIR} ;;
        esac
-
-       if [ -n "${modified_files}" ]; then
-               ${CAT} << EOF
-===========================================================================
-If you won't be using ${PKGNAME} any longer, you may want to remove
-EOF
-               if [ -n "${modified_files}" ]; then
-                       ${CAT} << EOF
-
-  * the following files:
-
-EOF
-                       eval set -- ${modified_files}
-                       for file; do
-                               ${ECHO} "       ${file}"
-                       done
-               fi
-               if [ -n "${RCD_SCRIPTS}" ]; then
-                       ${CAT} << EOF
-
-You may also want to remove any settings in rc.conf that you may have
-made in order to use ${PKGNAME}.
-EOF
-               fi
-               ${CAT} << EOF
-===========================================================================
-EOF



Home | Main Index | Thread Index | Old Index