diff options
author | jlam <jlam@pkgsrc.org> | 2017-06-01 02:09:43 +0000 |
---|---|---|
committer | jlam <jlam@pkgsrc.org> | 2017-06-01 02:09:43 +0000 |
commit | af0fdc41317355088c9f02fa3203e52441290057 (patch) | |
tree | 7f459269c2efa62a8b85458ec9a7c1e697d89325 /mk/pkgformat/pkg | |
parent | 07a8e2621475890f48bf8ccf5763f6f5634d5a9d (diff) | |
download | pkgsrc-af0fdc41317355088c9f02fa3203e52441290057.tar.gz |
Make creation of +DEINSTALL/+INSTALL scripts pkgformat-specific.
Move the files needed to generate +DEINSTALL and +INSTALL scripts
for the "pkg" format into pkgsrc/mk/pkgformat/pkg.
Create new script templates that make use of "pkgtasks" to perform
the actual tasks.
Diffstat (limited to 'mk/pkgformat/pkg')
-rw-r--r-- | mk/pkgformat/pkg/scripts.mk | 182 | ||||
-rw-r--r-- | mk/pkgformat/pkg/templates/deinstall | 55 | ||||
-rw-r--r-- | mk/pkgformat/pkg/templates/footer | 37 | ||||
-rw-r--r-- | mk/pkgformat/pkg/templates/header | 148 | ||||
-rw-r--r-- | mk/pkgformat/pkg/templates/install | 52 | ||||
-rw-r--r-- | mk/pkgformat/pkg/tests/Kyuafile | 49 | ||||
-rwxr-xr-x | mk/pkgformat/pkg/tests/scripts_test | 234 |
7 files changed, 757 insertions, 0 deletions
diff --git a/mk/pkgformat/pkg/scripts.mk b/mk/pkgformat/pkg/scripts.mk new file mode 100644 index 00000000000..e0407078035 --- /dev/null +++ b/mk/pkgformat/pkg/scripts.mk @@ -0,0 +1,182 @@ +# $NetBSD: scripts.mk,v 1.1 2017/06/01 02:09:43 jlam Exp $ +# +# Copyright (c) 2017 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# This Makefile fragment provides the targets to make the +DEINSTALL +# and +INSTALL scripts and hooks into metadata.mk to automatically +# generate them as needed. + +# HEADER_TEMPLATES +# List of package-provided template files to be concatenated +# into a header for the install and deinstall scripts. The +# concatenated files are placed after the main header template +# file. +# +# DEINSTALL_TEMPLATES +# List of package-provided template files to be concatenated +# to form the body of the deinstall script. The concatenated +# files are placed before the main deinstall template file. +# The script templates should exit with a code >0 if an error +# occurs. +# +# INSTALL_TEMPLATES +# List of package-provided template files to be concatenated +# to form the body of the install script. The concatenated +# files are placed after the main install template file. The +# script templates should exit with a code >0 if an error +# occurs. +# +_HEADER_TMPL= ${PKGSRCDIR}/mk/pkgformat/pkg/templates/header +HEADER_TEMPLATES?= # empty +.for _file_ in ${PKGDIR}/HEADER +. if exists(${_file_}) && empty(HEADER_TEMPLATES:M${_file_}) +HEADER_TEMPLATES+= ${_file_} +. endif +.endfor +_DEINSTALL_TMPL= ${PKGSRCDIR}/mk/pkgformat/pkg/templates/deinstall +DEINSTALL_TEMPLATES?= # empty +.for _file_ in ${PKGDIR}/DEINSTALL +. if exists(${_file_}) && empty(DEINSTALL_TEMPLATES:M${_file_}) +DEINSTALL_TEMPLATES+= ${_file_} +. endif +.endfor +_INSTALL_TMPL= ${PKGSRCDIR}/mk/pkgformat/pkg/templates/install +INSTALL_TEMPLATES?= # empty +.for _file_ in ${PKGDIR}/INSTALL +. if exists(${_file_}) && empty(INSTALL_TEMPLATES:M${_file_}) +INSTALL_TEMPLATES+= ${_file_} +. endif +.endfor +_FOOTER_TMPL?= ${PKGSRCDIR}/mk/pkgformat/pkg/templates/footer + +# DEINSTALL_SRC +# INSTALL_SRC +# List of source files that are concatenated to form the +# deinstall and install scripts. +# +.if ( "${USE_PKGTASKS:tl}" == "yes" ) || !empty(HEADER_TEMPLATES) || \ + !empty(DEINSTALL_TEMPLATES) || !empty(INSTALL_TEMPLATES) +DEINSTALL_SRC?= ${_HEADER_TMPL} ${HEADER_TEMPLATES} \ + ${DEINSTALL_TEMPLATES} ${_DEINSTALL_TMPL} \ + ${_FOOTER_TMPL} ${PKGTASKS_DATAFILE} +INSTALL_SRC?= ${_HEADER_TMPL} ${HEADER_TEMPLATES} \ + ${_INSTALL_TMPL} ${INSTALL_TEMPLATES} \ + ${_FOOTER_TMPL} ${PKGTASKS_DATAFILE} +.else +DEINSTALL_SRC?= # empty +INSTALL_SRC?= # empty +.endif + +# _DEINSTALL_FILE +# The location of the file to be added as the deinstall script +# for the package. +# +# Possible: any valid path +# Default: ${PKG_DB_TMPDIR}/+DEINSTALL +# +# _INSTALL_FILE +# The location of the file to be added as the install script +# for the package. +# +# Possible: any valid path +# Default: ${PKG_DB_TMPDIR}/+INSTALL +# +# _pkgformat-generate-install-scripts (PRIVATE) +# Convenience target to generate the deinstall and install +# scripts for the package. +# + +.if !empty(DEINSTALL_SRC) +_DEINSTALL_FILE= ${PKG_DB_TMPDIR}/+DEINSTALL + +${_DEINSTALL_FILE}: ${DEINSTALL_SRC} + ${RUN}${MKDIR} ${.TARGET:H:Q} + ${RUN}${CAT} ${.ALLSRC} | ${SED} ${FILES_SUBST_SED} > ${.TARGET}.tmp + ${RUN}${CHMOD} +x ${.TARGET}.tmp + ${RUN}${MV} -f ${.TARGET}.tmp ${.TARGET} +.endif +.if !empty(INSTALL_SRC) +_INSTALL_FILE= ${PKG_DB_TMPDIR}/+INSTALL + +${_INSTALL_FILE}: ${INSTALL_SRC} + ${RUN}${MKDIR} ${.TARGET:H:Q} + ${RUN}${CAT} ${.ALLSRC} | ${SED} ${FILES_SUBST_SED} > ${.TARGET}.tmp + ${RUN}${CHMOD} +x ${.TARGET}.tmp + ${RUN}${MV} -f ${.TARGET}.tmp ${.TARGET} +.endif + +.PHONY: _pkgformat-generate-install-scripts +_pkgformat-generate-install-scripts: ${_DEINSTALL_FILE} ${_INSTALL_FILE} + +# Hook into pkgsrc/mk/pkgformat/pkg/metadata.mk to automatically generate +# the deinstall and install scripts if needed. +# +_METADATA_TARGETS+= ${_DEINSTALL_FILE} ${_INSTALL_FILE} + +### +# Variable substitutions for the scripts. + +FILES_SUBST+= PKGBASE=${PKGBASE:Q} + +# Variables for programs for use by script templates. +FILES_SUBST+= BASENAME=${BASENAME:Q} +FILES_SUBST+= CHGRP=${CHGRP:Q} +FILES_SUBST+= CMP=${CMP:Q} +FILES_SUBST+= DIRNAME=${DIRNAME:Q} +FILES_SUBST+= ECHO=${ECHO:Q} +FILES_SUBST+= ECHO_N=${ECHO_N:Q} +FILES_SUBST+= EGREP=${EGREP:Q} +FILES_SUBST+= EXPR=${EXPR:Q} +FILES_SUBST+= FALSE=${FALSE:Q} +FILES_SUBST+= GREP=${GREP:Q} +FILES_SUBST+= GTAR=${GTAR:Q} +FILES_SUBST+= HEAD=${HEAD:Q} +FILES_SUBST+= PERL5=${PERL5:Q} +FILES_SUBST+= PWD_CMD=${PWD_CMD:Q} +FILES_SUBST+= SETENV=${SETENV:Q} +FILES_SUBST+= SH=${SH:Q} +FILES_SUBST+= SU=${SU:Q} +FILES_SUBST+= TEST=${TEST:Q} +FILES_SUBST+= TOUCH=${TOUCH:Q} +FILES_SUBST+= TR=${TR:Q} +FILES_SUBST+= TRUE=${TRUE:Q} +FILES_SUBST+= XARGS=${XARGS:Q} + +# Variables for the pkg_install package tools. +FILES_SUBST+= PKG_ADMIN=${PKG_ADMIN:Q} +FILES_SUBST+= PKG_INFO=${PKG_INFO:Q} + +# Variables for installation prefix references. +FILES_SUBST+= LOCALBASE=${LOCALBASE:Q} +FILES_SUBST+= X11BASE=${X11BASE:Q} +FILES_SUBST+= PREFIX=${PREFIX:Q} + +# Variables for the package configuration directory. +FILES_SUBST+= PKG_SYSCONFBASE=${PKG_SYSCONFBASE:Q} +FILES_SUBST+= PKG_SYSCONFBASEDIR=${PKG_SYSCONFBASEDIR:Q} +FILES_SUBST+= PKG_SYSCONFDIR=${PKG_SYSCONFDIR:Q} diff --git a/mk/pkgformat/pkg/templates/deinstall b/mk/pkgformat/pkg/templates/deinstall new file mode 100644 index 00000000000..7fd115c3560 --- /dev/null +++ b/mk/pkgformat/pkg/templates/deinstall @@ -0,0 +1,55 @@ +### START: pkgsrc/mk/pkgformat/pkg/templates/deinstall +# +# Copyright (c) 2017 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# $NetBSD: deinstall,v 1.1 2017/06/01 02:09:43 jlam Exp $ + +case ${STAGE} in +DEINSTALL) + task_load preremove + + # Use the data in the shell comments appended at the end of + # the script. + # + task_preremove "${SELF}" || exit $? + ;; + +POST-DEINSTALL) + task_load postremove + + # Use the data in the shell comments appended at the end of + # the script. + # + # Failures during the POST-DEINSTALL stage are non-fatal, so + # ignore the return value of the "postremove" task. + # + task_postremove "${SELF}" + ;; +esac + +### END: pkgsrc/mk/pkgformat/pkg/templates/deinstall diff --git a/mk/pkgformat/pkg/templates/footer b/mk/pkgformat/pkg/templates/footer new file mode 100644 index 00000000000..34a0a923a09 --- /dev/null +++ b/mk/pkgformat/pkg/templates/footer @@ -0,0 +1,37 @@ +### START: pkgsrc/mk/pkgformat/pkg/templates/footer +# +# Copyright (c) 2017 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# $NetBSD: footer,v 1.1 2017/06/01 02:09:43 jlam Exp $ + +# Exit with code 0. Any errors encountered earlier in the script are +# expected to cause the script to exit with code >0. +# +exit 0 + +### END: pkgsrc/mk/pkgformat/pkg/templates/footer diff --git a/mk/pkgformat/pkg/templates/header b/mk/pkgformat/pkg/templates/header new file mode 100644 index 00000000000..8be0f19e36f --- /dev/null +++ b/mk/pkgformat/pkg/templates/header @@ -0,0 +1,148 @@ +#!@SH@ + +### START: pkgsrc/mk/pkgformat/pkg/templates/header +# +# Copyright (c) 2017 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# $NetBSD: header,v 1.1 2017/06/01 02:09:43 jlam Exp $ + +# Package task loader. +: ${TASK_MODULE_DIR:=@LOCALBASE@/share/pkgtasks-1} +. "${TASK_MODULE_DIR}/load.subr" + +SELF="$0" +if [ $# -lt 2 ]; then + echo 1>&2 "usage: ${SELF} <pkgname> <stage>" + exit 127 +fi +# Script positional parameters. +PKGNAME="$1"; shift +STAGE="$1"; shift + +### +# PKGBASE +# ${PKGNAME} stripped of the the version number. +# +# PKGVERSION +# The version number of the package, derived from taking +# ${PKGNAME} and stripping "${PKGBASE}-" from the front. +# +# ${PKGNAME} := ${PKGBASE}-${PKGVERSION} +# +PKGBASE="@PKGBASE@" +PKGVERSION=${PKGNAME#${PKGBASE}-} + +# Prefix all task messages with "=> ". +TASK_MSG="=> " + +# Variables for programs used by pkgtasks. +AWK="@AWK@" +CAT="@CAT@" +CHMOD="@CHMOD@" +CHOWN="@CHOWN@" +CP="@CP@" +DATE="@DATE@" +FIND="@FIND@" +ID="@ID@" +LDCONFIG="@LDCONFIG@" +LN="@LN@" +LS="@LS@" +MKDIR="@MKDIR@" +MKTEMP="@MKTEMP@" +MV="@MV@" +PRINTF="@PRINTF@" +RM="@RM@" +RMDIR="@RMDIR@" +SED="@SED@" +SORT="@SORT@" +UNAME="@UNAME@" + +# Variables for addgroup/adduser programs used by pkgtasks. +GROUPADD="@GROUPADD@" +PW="@PW@" +PWD_MKDB="@PWD_MKDB@" +USERADD="@USERADD@" + +# Variables for programs for use by script templates. +BASENAME="@BASENAME@" +CHGRP="@CHGRP@" +CMP="@CMP@" +DIRNAME="@DIRNAME@" +ECHO="@ECHO@" +ECHO_N="@ECHO_N@" +EGREP="@EGREP@" +EXPR="@EXPR@" +FALSE="@FALSE@" +GREP="@GREP@" +GTAR="@GTAR@" +HEAD="@HEAD@" +PERL5="@PERL5@" +PWD_CMD="@PWD_CMD@" +SETENV="@SETENV@" +SH="@SH@" +SU="@SU@" +TEST="@TEST@" +TOUCH="@TOUCH@" +TR="@TR@" +TRUE="@TRUE@" +XARGS="@XARGS@" + +# Variables for the pkg_install package tools. +PKG_ADMIN="@PKG_ADMIN@" +PKG_INFO="@PKG_INFO@" + +# Variables for installation prefix references. +LOCALBASE="@LOCALBASE@" +X11BASE="@X11BASE@" +PREFIX="${PKG_PREFIX}" + +# Variables for the package configuration directory. +PKG_SYSCONFBASE="@PKG_SYSCONFBASE@" +PKG_SYSCONFBASEDIR="@PKG_SYSCONFBASEDIR@" +PKG_SYSCONFDIR="@PKG_SYSCONFDIR@" + +# The current working directory from which the script was invoked. +CURDIR=$( ${PWD_CMD} ) + +# Default values for environment variables set by the package tools. +: ${PKG_PREFIX:=@PREFIX@} +: ${PKG_METADATA_DIR:=${CURDIR}} +: ${PKG_DESTDIR:=""} +: ${PKG_REFCOUNT_DBDIR:=@PKG_REFCOUNT_DBDIR@} + +# Default values for environment variables that control whether +# task actions are executed. +# +: ${PKG_CONFIG:=@PKG_CONFIG@} +: ${PKG_CONFIG_PERMS:=@PKG_CONFIG_PERMS@} +: ${PKG_CREATE_USERGROUP:=@PKG_CREATE_USERGROUP@} +: ${PKG_INIT_SCRIPTS:=@PKG_INIT_SCRIPTS@} +: ${PKG_REGISTER_SHELLS:=@PKG_REGISTER_SHELLS@} +: ${PKG_UPDATE_FONTS_DB:=@PKG_UPDATE_FONTS_DB@} + +### END: pkgsrc/mk/pkgformat/pkg/templates/header diff --git a/mk/pkgformat/pkg/templates/install b/mk/pkgformat/pkg/templates/install new file mode 100644 index 00000000000..c7fea9f903b --- /dev/null +++ b/mk/pkgformat/pkg/templates/install @@ -0,0 +1,52 @@ +### START: pkgsrc/mk/pkgformat/pkg/templates/install +# +# Copyright (c) 2017 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. +# +# $NetBSD: install,v 1.1 2017/06/01 02:09:43 jlam Exp $ + +case ${STAGE} in +PRE-INSTALL) + task_load preinstall + + # Use the data in the shell comments appended at the end of + # the script. + # + task_preinstall "${SELF}" || exit $? + ;; + +POST-INSTALL) + task_load postinstall + + # Use the data in the shell comments appended at the end of + # the script. + # + task_postinstall "${SELF}" || exit $? + ;; +esac + +### END: pkgsrc/mk/pkgformat/pkg/templates/install diff --git a/mk/pkgformat/pkg/tests/Kyuafile b/mk/pkgformat/pkg/tests/Kyuafile new file mode 100644 index 00000000000..14a0caf28e9 --- /dev/null +++ b/mk/pkgformat/pkg/tests/Kyuafile @@ -0,0 +1,49 @@ +-- $NetBSD: Kyuafile,v 1.1 2017/06/01 02:09:43 jlam Exp $ +--[[----------------------------------------------------------------------- +Copyright (c) 2017 The NetBSD Foundation, Inc. +All rights reserved. + +This code is derived from software contributed to The NetBSD Foundation +by Johnny C. Lam. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +--]]----------------------------------------------------------------------- + +--[[----------------------------------------------------------------------- + + The following variables will be used if they are set. + + MAKE The name or path to the BSD make(1) utility. The default + is "make". + + PKGSRCDIR + The location of the pkgsrc source tree. The default is + "/usr/pkgsrc". + +--]]----------------------------------------------------------------------- + +syntax( 2 ) + +test_suite( "pkgsrc_pkgformat_pkg" ) + +atf_test_program { name = "scripts_test" } diff --git a/mk/pkgformat/pkg/tests/scripts_test b/mk/pkgformat/pkg/tests/scripts_test new file mode 100755 index 00000000000..c160dbfbbfb --- /dev/null +++ b/mk/pkgformat/pkg/tests/scripts_test @@ -0,0 +1,234 @@ +#!/usr/bin/env atf-sh +# +# $NetBSD: scripts_test,v 1.1 2017/06/01 02:09:43 jlam Exp $ +# +# Copyright (c) 2017 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Johnny C. Lam. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS +# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS +# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# ENVIRONMENT +# The following variables are used if they are set: +# +# MAKE The name or path to the BSD make(1) utility. The default +# is "make". +# +# PKGSRCDIR +# The location of the pkgsrc source tree. The default is +# "/usr/pkgsrc". +# + +setup() +{ + cat > mk.conf << 'EOF' +# Definitions used by pkgformat/pkg/*.mk files that are not assigned +# default values. +# +CAT?= cat +CHMOD?= chmod +MKDIR?= mkdir -p +MV?= mv +RUN?= @ +SED?= sed + +# Override any other default definitions so that generated files go into +# the current directory. +# +PKGDIR= ${.CURDIR} +WRKDIR= ${.CURDIR} +PKG_DB_TMPDIR= ${.CURDIR}/.pkgdb + +# Don't generate a pkgtasks datafile. +PKGTASKS_DATAFILE= # empty +# Generate a sed(1) script from ${FILES_SUBST}. +FILES_SUBST_SED= ${FILES_SUBST:S/=/@!/:S/$/!g/:S/^/ -e s!@/} +EOF +} + +### +### test1: no scripts +### + +atf_test_case test1 + +test1_head() +{ + atf_set "descr" "no scripts" +} + +test1_body() +{ + : ${MAKE:=make} + : ${PKGSRCDIR:=/usr/pkgsrc} + + setup + cat > Makefile << 'EOF' +.include "mk.conf" +.include "${PKGSRCDIR}/mk/pkgformat/pkg/scripts.mk" + +.PHONY: all +all: +.if defined(_DEINSTALL_FILE) + @echo "_DEINSTALL_FILE = "${_DEINSTALL_FILE:Q} +.endif +.if defined(_INSTALL_FILE) + @echo "_INSTALL_FILE = "${_INSTALL_FILE:Q} +.endif +EOF + ${MAKE} all PKGSRCDIR="${PKGSRCDIR}" > output + if grep -cq "^" output; then + cat output + atf_fail "variables should not be defined" + fi + atf_pass +} + +### +### test2: named template files exist" +### + +atf_test_case test2 + +test2_head() +{ + atf_set "descr" "named template files exist" +} + +test2_body() +{ + : ${MAKE:=make} + : ${PKGSRCDIR:=/usr/pkgsrc} + + setup + echo "### HEADER SCRIPT TEMPLATE ###" > HEADER + echo "### DEINSTALL SCRIPT TEMPLATE ###" > DEINSTALL + echo "### INSTALL SCRIPT TEMPLATE ###" > INSTALL + + cat > Makefile << 'EOF' +.include "mk.conf" + +HEADER_TEMPLATES+= ${PKGDIR}/HEADER +DEINSTALL_TEMPLATES+= ${PKGDIR}/DEINSTALL +INSTALL_TEMPLATES+= ${PKGDIR}/INSTALL + +.include "${PKGSRCDIR}/mk/pkgformat/pkg/scripts.mk" + +.PHONY: all +all: _pkgformat-generate-install-scripts +EOF + ${MAKE} all PKGSRCDIR="${PKGSRCDIR}" || atf_fail "make(1) failed" + local count + + count=$( grep -c "### HEADER SCRIPT TEMPLATE ###" .pkgdb/+DEINSTALL ) + case $count in + 0) cat .pkgdb/+DEINSTALL + atf_fail "HEADER template was not used in +DEINSTALL" ;; + 1) : "success" ;; + *) cat .pkgdb/+DEINSTALL + atf_fail "HEADER template used too many times in +DEINSTALL" ;; + esac + + count=$( grep -c "### HEADER SCRIPT TEMPLATE ###" .pkgdb/+INSTALL ) + case $count in + 0) cat .pkgdb/+INSTALL + atf_fail "HEADER template was not used in +INSTALL" ;; + 1) : "success" ;; + *) cat .pkgdb/+INSTALL + atf_fail "HEADER template used too many times in +INSTALL" ;; + esac + + count=$( grep -c "### DEINSTALL SCRIPT TEMPLATE ###" .pkgdb/+DEINSTALL ) + case $count in + 0) cat .pkgdb/+DEINSTALL + atf_fail "DEINSTALL template was not used in +DEINSTALL" ;; + 1) : "success" ;; + *) cat .pkgdb/+DEINSTALL + atf_fail "DEINSTALL template used too many times in +DEINSTALL" ;; + esac + + count=$( grep -c "### INSTALL SCRIPT TEMPLATE ###" .pkgdb/+INSTALL ) + case $count in + 0) cat .pkgdb/+INSTALL + atf_fail "INSTALL template was not used in +INSTALL" ;; + 1) : "success" ;; + *) cat .pkgdb/+INSTALL + atf_fail "INSTALL template used too many times in +INSTALL" ;; + esac + + atf_pass +} + +### +### test3: DEINSTALL_SRC and INSTALL_SRC +### + +atf_test_case test3 + +test3_head() +{ + atf_set "descr" "DEINSTALL_SRC and INSTALL_SRC" +} + +test3_body() +{ + : ${MAKE:=make} + : ${PKGSRCDIR:=/usr/pkgsrc} + + setup + ( exec > INSTALL ) # empty INSTALL script + cat > Makefile << 'EOF' +.include "mk.conf" + +DEINSTALL_SRC= # empty +INSTALL_SRC= INSTALL + +.include "${PKGSRCDIR}/mk/pkgformat/pkg/scripts.mk" + +.PHONY: all +all: _pkgformat-generate-install-scripts +EOF + ${MAKE} all PKGSRCDIR="${PKGSRCDIR}" || atf_fail "make(1) failed" + + if [ -f .pkgdb/+DEINSTALL ]; then + find . + atf_fail "DEINSTALL_SRC is empty but +DEINSTALL script exists." + fi + + if cmp INSTALL .pkgdb/+INSTALL; then + : "success" + else + cat .pkgdb/+INSTALL + atf_fail "INSTALL script not based solely on INSTALL_SRC" + fi + + atf_pass +} + +atf_init_test_cases() +{ + atf_add_test_case test1 + atf_add_test_case test2 + atf_add_test_case test3 +} |