Home | History | Annotate | Line # | Download | only in mk
bsd.syspkg.mk revision 1.3
      1  1.3  xtraeme #	$NetBSD: bsd.syspkg.mk,v 1.3 2004/03/02 23:25:05 xtraeme Exp $
      2  1.1    jwise #
      3  1.1    jwise #	This file is derived from:
      4  1.1    jwise #
      5  1.1    jwise #	NetBSD: bsd.pkg.mk,v 1.636 2001/01/05 18:03:14 jlam Exp
      6  1.1    jwise #
      7  1.1    jwise #	Plus many fixes and improvements from later revisions.
      8  1.1    jwise #	
      9  1.1    jwise #	However, it has been pared down to a minimum of targets, and
     10  1.1    jwise #	adapted to the standard bsd.*.mk world order.
     11  1.1    jwise #
     12  1.1    jwise #	Portions of this code are copyright (c) 2000-2002 Jim Wise
     13  1.1    jwise #
     14  1.1    jwise 
     15  1.3  xtraeme .if !defined(BSD_SYSPKG_MK)
     16  1.3  xtraeme BSD_SYSPKG_MK=	# defined
     17  1.3  xtraeme 
     18  1.1    jwise .if !target(__initialized__)
     19  1.1    jwise __initialized__:
     20  1.1    jwise .if exists(${.CURDIR}/../Makefile.inc)
     21  1.1    jwise .include "${.CURDIR}/../Makefile.inc"
     22  1.1    jwise .endif
     23  1.1    jwise .include <bsd.own.mk>
     24  1.1    jwise .include <bsd.obj.mk>
     25  1.1    jwise .MAIN:		all
     26  1.1    jwise .endif
     27  1.1    jwise 
     28  1.2    jwise PREFIX:=		${DESTDIR}/${PREFIX}
     29  1.2    jwise 
     30  1.1    jwise OPSYS=			NetBSD
     31  1.1    jwise OS_VERSION!=		sh ${.PARSEDIR}/../../../sys/conf/osrelease.sh
     32  1.1    jwise 
     33  1.1    jwise # keep bsd.own.mk from generating an install: target.
     34  1.1    jwise NEED_OWN_INSTALL_TARGET=no
     35  1.1    jwise 
     36  1.1    jwise ##### Some overrides of defaults below on a per-OS basis.
     37  1.1    jwise 
     38  1.1    jwise DEINSTALLDEPENDS?=	NO	# add -R to pkg_delete
     39  1.1    jwise 
     40  1.1    jwise PKGSRCDIR?=		${.CURDIR:C|/[^/]*/[^/]*$||}
     41  1.1    jwise PKGVERSION?=		${OS_VERSION}.${TINY_VERSION}
     42  1.1    jwise PKGWILDCARD?=		${PKGBASE}-[0-9]*
     43  1.1    jwise 
     44  1.1    jwise # For system packages, we set this here, as the version is auto-generated.
     45  1.1    jwise PKGNAME?=		${PKGBASE}-${PKGVERSION}
     46  1.1    jwise 
     47  1.1    jwise PACKAGES?=		${PKGSRCDIR}/../packages
     48  1.1    jwise PKGDIR?=		${.CURDIR}
     49  1.1    jwise 
     50  1.1    jwise # Don't change these!!!  These names are built into the _TARGET_USE macro,
     51  1.1    jwise # there is no way to refer to them cleanly from within the macro AFAIK.
     52  1.1    jwise PACKAGE_COOKIE=		${WRKDIR}/.package_done
     53  1.1    jwise 
     54  1.1    jwise # Miscellaneous overridable commands:
     55  1.1    jwise SHCOMMENT?=		${ECHO_MSG} >/dev/null '***'
     56  1.1    jwise 
     57  1.2    jwise MAKE_ENV+=		PREFIX=${PREFIX}
     58  1.1    jwise 
     59  1.1    jwise TOUCH_FLAGS?=		-f
     60  1.1    jwise 
     61  1.1    jwise # Debugging levels for this file, dependent on PKG_DEBUG_LEVEL definition
     62  1.1    jwise # 0 == normal, default, quiet operation
     63  1.1    jwise # 1 == all shell commands echoed before invocation
     64  1.1    jwise # 2 == shell "set -x" operation
     65  1.1    jwise PKG_DEBUG_LEVEL?=	0
     66  1.1    jwise _PKG_SILENT=		@
     67  1.1    jwise _PKG_DEBUG=		
     68  1.1    jwise 
     69  1.1    jwise .if ${PKG_DEBUG_LEVEL} > 0
     70  1.1    jwise _PKG_SILENT=	
     71  1.1    jwise .endif
     72  1.1    jwise 
     73  1.1    jwise .if ${PKG_DEBUG_LEVEL} > 1
     74  1.1    jwise _PKG_DEBUG=		set -x;
     75  1.1    jwise .endif
     76  1.1    jwise 
     77  1.1    jwise # In point of fact, this will often be ./obj, as per bsd.obj.mk
     78  1.1    jwise WRKDIR?=		.
     79  1.1    jwise 
     80  1.1    jwise COMMENT?=		${PKGDIR}/COMMENT
     81  1.1    jwise DESCR=			${PKGDIR}/DESCR
     82  1.1    jwise PLIST=			${WRKDIR}/PLIST
     83  1.1    jwise PLIST_SRC?=		${PKGDIR}/PLIST
     84  1.1    jwise 
     85  1.1    jwise 
     86  1.1    jwise # Set PKG_INSTALL_FILE to be the name of any INSTALL file
     87  1.1    jwise .if !defined(PKG_INSTALL_FILE) && exists(${PKGDIR}/INSTALL)
     88  1.1    jwise PKG_INSTALL_FILE=		${PKGDIR}/INSTALL
     89  1.1    jwise .endif
     90  1.1    jwise 
     91  1.1    jwise # Set PKG_DEINSTALL_FILE to be the name of any DEINSTALL file
     92  1.1    jwise .if !defined(PKG_DEINSTALL_FILE) && exists(${PKGDIR}/DEINSTALL)
     93  1.1    jwise PKG_DEINSTALL_FILE=		${PKGDIR}/DEINSTALL
     94  1.1    jwise .endif
     95  1.1    jwise 
     96  1.1    jwise # Set MESSAGE_FILE to be the name of any MESSAGE file
     97  1.1    jwise .if !defined(MESSAGE_FILE) && exists(${PKGDIR}/MESSAGE)
     98  1.1    jwise MESSAGE_FILE=		${PKGDIR}/MESSAGE
     99  1.1    jwise .endif
    100  1.1    jwise 
    101  1.1    jwise AWK?=		/usr/bin/awk
    102  1.1    jwise CAT?=		/bin/cat
    103  1.1    jwise CP?=		/bin/cp
    104  1.1    jwise DC?=		/usr/bin/dc
    105  1.1    jwise ECHO?=		echo				# Shell builtin
    106  1.1    jwise FALSE?=		false				# Shell builtin
    107  1.1    jwise FIND?=		/usr/bin/find
    108  1.1    jwise GREP?=		/usr/bin/grep
    109  1.1    jwise IDENT?=		/usr/bin/ident
    110  1.1    jwise LN?=		/bin/ln
    111  1.1    jwise LS?=		/bin/ls
    112  1.1    jwise MKDIR?=		/bin/mkdir -p
    113  1.1    jwise MV?=		/bin/mv
    114  1.1    jwise PKG_TOOLS_BIN?= /usr/sbin
    115  1.1    jwise RM?=		/bin/rm
    116  1.1    jwise SED?=		/usr/bin/sed
    117  1.1    jwise SETENV?=	/usr/bin/env
    118  1.1    jwise SH?=		/bin/sh
    119  1.1    jwise TEST?=		test				# Shell builtin
    120  1.1    jwise TOUCH?=		/usr/bin/touch
    121  1.1    jwise TRUE?=		true				# Shell builtin
    122  1.1    jwise 
    123  1.1    jwise PKG_ADD?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_add
    124  1.1    jwise PKG_ADMIN?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_admin
    125  1.1    jwise PKG_CREATE?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_create
    126  1.1    jwise PKG_DELETE?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_delete
    127  1.1    jwise PKG_INFO?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_info
    128  1.1    jwise 
    129  1.1    jwise .if !defined(PKGTOOLS_VERSION)
    130  1.1    jwise .if !exists(${IDENT})
    131  1.1    jwise PKGTOOLS_VERSION=${PKGTOOLS_REQD}
    132  1.1    jwise .else
    133  1.1    jwise PKGTOOLS_VERSION!=${IDENT} ${PKG_TOOLS_BIN}/pkg_add ${PKG_TOOLS_BIN}/pkg_admin ${PKG_TOOLS_BIN}/pkg_create ${PKG_TOOLS_BIN}/pkg_delete ${PKG_TOOLS_BIN}/pkg_info | ${AWK} 'BEGIN {n = 0;}; $$1 ~ /\$$NetBSD/ && $$2 !~ /^crt0/ {gsub("/", "", $$4); if ($$4 > n) {n = $$4;}}; END {print n;}'
    134  1.1    jwise .endif
    135  1.1    jwise .endif
    136  1.1    jwise MAKEFLAGS+=	PKGTOOLS_VERSION="${PKGTOOLS_VERSION}"
    137  1.1    jwise 
    138  1.1    jwise # Latest version of pkgtools required for this file.
    139  1.1    jwise PKGTOOLS_REQD=		20000202
    140  1.1    jwise 
    141  1.1    jwise # Check that we're using up-to-date pkg_* tools with this file.
    142  1.1    jwise uptodate-pkgtools:
    143  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}					\
    144  1.1    jwise 	if [ ${PKGTOOLS_VERSION} -lt ${PKGTOOLS_REQD} ]; then		\
    145  1.1    jwise 		case ${PKGNAME} in					\
    146  1.1    jwise 		pkg_install-*)						\
    147  1.1    jwise 			;;						\
    148  1.1    jwise 		*)							\
    149  1.1    jwise 			${ECHO} "Your package tools need to be updated to ${PKGTOOLS_REQD:C|(....)(..)(..)|\1/\2/\3|} versions."; \
    150  1.1    jwise 			${ECHO} "The installed package tools were last updated on ${PKGTOOLS_VERSION:C|(....)(..)(..)|\1/\2/\3|}."; \
    151  1.1    jwise 			${FALSE} ;;					\
    152  1.1    jwise 		esac							\
    153  1.1    jwise 	fi
    154  1.1    jwise 
    155  1.1    jwise # Files to create for versioning and build information
    156  1.1    jwise BUILD_VERSION_FILE=	${WRKDIR}/.build_version
    157  1.1    jwise BUILD_INFO_FILE=	${WRKDIR}/.build_info
    158  1.1    jwise 
    159  1.1    jwise # Files containing size of pkg w/o and w/ all required pkgs
    160  1.1    jwise SIZE_PKG_FILE=		${WRKDIR}/.SizePkg
    161  1.1    jwise SIZE_ALL_FILE=		${WRKDIR}/.SizeAll
    162  1.1    jwise 
    163  1.1    jwise .ifndef PKG_ARGS_COMMON
    164  1.1    jwise PKG_ARGS_COMMON=	-v -c ${COMMENT} -d ${DESCR} -f ${PLIST} -l
    165  1.1    jwise PKG_ARGS_COMMON+=	-b ${BUILD_VERSION_FILE} -B ${BUILD_INFO_FILE}
    166  1.1    jwise PKG_ARGS_COMMON+=	-s ${SIZE_PKG_FILE} -S ${SIZE_ALL_FILE}
    167  1.1    jwise PKG_ARGS_COMMON+=	-P "`${MAKE} ${MAKEFLAGS} run-depends-list PACKAGE_DEPENDS_QUICK=true|sort -u`"
    168  1.1    jwise .ifdef CONFLICTS
    169  1.1    jwise PKG_ARGS_COMMON+=	-C "${CONFLICTS}"
    170  1.1    jwise .endif
    171  1.1    jwise .ifdef PKG_INSTALL_FILE
    172  1.1    jwise PKG_ARGS_COMMON+=	-i ${PKG_INSTALL_FILE}
    173  1.1    jwise .endif
    174  1.1    jwise .ifdef PKG_DEINSTALL_FILE
    175  1.1    jwise PKG_ARGS_COMMON+=	-k ${PKG_DEINSTALL_FILE}
    176  1.1    jwise .endif
    177  1.1    jwise .ifdef MESSAGE_FILE
    178  1.1    jwise PKG_ARGS_COMMON+=	-D ${MESSAGE_FILE}
    179  1.1    jwise .endif
    180  1.1    jwise 
    181  1.1    jwise PKG_ARGS_INSTALL=	-p ${PREFIX} ${PKG_ARGS_COMMON}
    182  1.1    jwise PKG_ARGS_BINPKG=	-p ${PREFIX:C/^${DESTDIR}//} -L ${PREFIX} ${PKG_ARGS_COMMON}
    183  1.1    jwise .endif # !PKG_ARGS_COMMON
    184  1.1    jwise 
    185  1.1    jwise PKG_SUFX?=		.tgz
    186  1.1    jwise #PKG_SUFX?=		.tbz		# bzip2(1) pkgs
    187  1.1    jwise # where pkg_add records its dirty deeds.
    188  1.1    jwise PKG_DBDIR?=		${DESTDIR}/var/db/syspkg
    189  1.1    jwise 
    190  1.1    jwise # Define SMART_MESSAGES in /etc/mk.conf for messages giving the tree
    191  1.1    jwise # of depencies for building, and the current target.
    192  1.1    jwise .ifdef SMART_MESSAGES
    193  1.1    jwise _PKGSRC_IN?=		===> ${.TARGET} [${PKGNAME}${_PKGSRC_DEPS}] ===
    194  1.1    jwise .else
    195  1.1    jwise _PKGSRC_IN?=		===
    196  1.1    jwise .endif
    197  1.1    jwise 
    198  1.1    jwise # Used to print all the '===>' style prompts - override this to turn them off.
    199  1.1    jwise ECHO_MSG?=		${ECHO}
    200  1.1    jwise 
    201  1.1    jwise # How to do nothing.  Override if you, for some strange reason, would rather
    202  1.1    jwise # do something.
    203  1.1    jwise DO_NADA?=		${TRUE}
    204  1.1    jwise 
    205  1.1    jwise .if !defined(PKGBASE) || !defined(SETNAME)
    206  1.1    jwise .BEGIN:
    207  1.1    jwise 	@${ECHO_MSG} "PKGBASE and SETNAME are mandatory."
    208  1.1    jwise 	@${FALSE}
    209  1.1    jwise .endif
    210  1.1    jwise 
    211  1.1    jwise PKGREPOSITORY?=		${PACKAGES}
    212  1.1    jwise PKGFILE?=		${PKGREPOSITORY}/${PKGNAME}${PKG_SUFX}
    213  1.1    jwise 
    214  1.1    jwise .MAIN: all
    215  1.1    jwise 
    216  1.1    jwise # Add these defs to the ones dumped into +BUILD_DEFS
    217  1.1    jwise BUILD_DEFS+=	OPSYS OS_VERSION MACHINE_ARCH OBJECT_FMT
    218  1.1    jwise 
    219  1.1    jwise .if !target(all)
    220  1.1    jwise # We don't build here
    221  1.1    jwise all:
    222  1.1    jwise .endif
    223  1.1    jwise 
    224  1.1    jwise ################################################################
    225  1.1    jwise # More standard targets start here.
    226  1.1    jwise #
    227  1.1    jwise # These are the body of the build/install framework.  If you are
    228  1.1    jwise # not happy with the default actions, and you can't solve it by
    229  1.1    jwise # adding pre-* or post-* targets/scripts, override these.
    230  1.1    jwise ################################################################
    231  1.1    jwise 
    232  1.1    jwise .if !target(show-downlevel)
    233  1.1    jwise show-downlevel:
    234  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}					\
    235  1.1    jwise 	found="`${PKG_INFO} -e \"${PKGBASE}<${PKGVERSION}\" || ${TRUE}`";\
    236  1.1    jwise 	if [ "X$$found" != "X" -a "X$$found" != "X${PKGNAME}" ]; then	\
    237  1.1    jwise 		${ECHO} "${PKGBASE} package: $$found installed, pkgsrc version ${PKGNAME}"; \
    238  1.1    jwise 	fi
    239  1.1    jwise .endif
    240  1.1    jwise 
    241  1.1    jwise # Package
    242  1.1    jwise 
    243  1.1    jwise .if !target(do-package)
    244  1.1    jwise do-package: ${PLIST}
    245  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}\
    246  1.1    jwise 	${ECHO_MSG} "${_PKGSRC_IN}> Building binary package for ${PKGNAME}"; \
    247  1.1    jwise 	if [ ! -d ${PKGREPOSITORY} ]; then			\
    248  1.1    jwise 		${MKDIR} ${PKGREPOSITORY};			\
    249  1.1    jwise 		if [ $$? -ne 0 ]; then				\
    250  1.1    jwise 			${ECHO_MSG} "=> Can't create directory ${PKGREPOSITORY}."; \
    251  1.1    jwise 			exit 1;					\
    252  1.1    jwise 		fi;						\
    253  1.1    jwise 	fi;							\
    254  1.1    jwise 	if ${PKG_CREATE} ${PKG_ARGS_BINPKG} ${PKGFILE}; then		\
    255  1.1    jwise 		(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} package-links);		\
    256  1.1    jwise 	else							\
    257  1.1    jwise 		(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} delete-package);		\
    258  1.1    jwise 		exit 1;						\
    259  1.1    jwise 	fi
    260  1.1    jwise .endif
    261  1.1    jwise 
    262  1.1    jwise # Some support rules for do-package
    263  1.1    jwise 
    264  1.1    jwise .if !target(package-links)
    265  1.1    jwise package-links:
    266  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} delete-package-links)
    267  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}for cat in ${CATEGORIES}; do		\
    268  1.1    jwise 		if [ ! -d ${PACKAGES}/$$cat ]; then			\
    269  1.1    jwise 			${MKDIR} ${PACKAGES}/$$cat;			\
    270  1.1    jwise 			if [ $$? -ne 0 ]; then				\
    271  1.1    jwise 				${ECHO_MSG} "=> Can't create directory ${PACKAGES}/$$cat."; \
    272  1.1    jwise 				exit 1;					\
    273  1.1    jwise 			fi;						\
    274  1.1    jwise 		fi;							\
    275  1.1    jwise 		${RM} -f ${PACKAGES}/$$cat/${PKGNAME}${PKG_SUFX};	\
    276  1.1    jwise 		${LN} -s ../${PKGREPOSITORYSUBDIR}/${PKGNAME}${PKG_SUFX} ${PACKAGES}/$$cat; \
    277  1.1    jwise 	done;
    278  1.1    jwise .endif
    279  1.1    jwise 
    280  1.1    jwise .if !target(delete-package-links)
    281  1.1    jwise delete-package-links:
    282  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}\
    283  1.1    jwise 	${FIND} ${PACKAGES} -type l -name ${PKGNAME}${PKG_SUFX} | xargs ${RM} -f
    284  1.1    jwise .endif
    285  1.1    jwise 
    286  1.1    jwise .if !target(delete-package)
    287  1.1    jwise delete-package:
    288  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} delete-package-links)
    289  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${PKGFILE}
    290  1.1    jwise .endif
    291  1.1    jwise 
    292  1.1    jwise ################################################################
    293  1.1    jwise # This is the "generic" package target, actually a macro used from the
    294  1.1    jwise # six main targets.  See below for more.
    295  1.1    jwise ################################################################
    296  1.1    jwise 
    297  1.1    jwise real-package:
    298  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}cd ${.CURDIR} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKEFLAGS} ${.TARGET:S/^real-/pre-/}
    299  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}cd ${.CURDIR} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKEFLAGS} ${.TARGET:S/^real-/do-/}
    300  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}cd ${.CURDIR} && ${SETENV} ${MAKE_ENV} ${MAKE} ${MAKEFLAGS} ${.TARGET:S/^real-/post-/}
    301  1.1    jwise 
    302  1.1    jwise ################################################################
    303  1.1    jwise # Skeleton targets start here
    304  1.1    jwise # 
    305  1.1    jwise # You shouldn't have to change these.  Either add the pre-* or
    306  1.1    jwise # post-* targets/scripts or redefine the do-* targets.  These
    307  1.1    jwise # targets don't do anything other than checking for cookies and
    308  1.1    jwise # call the necessary targets/scripts.
    309  1.1    jwise ################################################################
    310  1.1    jwise 
    311  1.1    jwise .if !target(package)
    312  1.1    jwise package: uptodate-pkgtools ${PACKAGE_COOKIE}
    313  1.1    jwise .endif
    314  1.1    jwise 
    315  1.1    jwise ${PACKAGE_COOKIE}:
    316  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} real-package)
    317  1.1    jwise 
    318  1.1    jwise # Empty pre-* and post-* targets, note we can't use .if !target()
    319  1.1    jwise # in the _PORT_USE macro
    320  1.1    jwise 
    321  1.1    jwise .for name in package
    322  1.1    jwise 
    323  1.1    jwise .if !target(pre-${name})
    324  1.1    jwise pre-${name}:
    325  1.1    jwise 	@${DO_NADA}
    326  1.1    jwise .endif
    327  1.1    jwise 
    328  1.1    jwise .if !target(post-${name})
    329  1.1    jwise post-${name}:
    330  1.1    jwise 	@${DO_NADA}
    331  1.1    jwise .endif
    332  1.1    jwise 
    333  1.1    jwise .endfor
    334  1.1    jwise 
    335  1.1    jwise # Deinstall
    336  1.1    jwise #
    337  1.1    jwise # Special target to remove installation
    338  1.1    jwise 
    339  1.1    jwise .if !target(deinstall)
    340  1.1    jwise deinstall: real-deinstall
    341  1.1    jwise 
    342  1.1    jwise .if (${DEINSTALLDEPENDS} != "NO")
    343  1.1    jwise .if (${DEINSTALLDEPENDS} != "ALL")
    344  1.1    jwise # used for removing stuff in bulk builds
    345  1.1    jwise real-su-deinstall-flags+=	-r -R
    346  1.1    jwise # used for "update" target
    347  1.1    jwise .else
    348  1.1    jwise real-su-deinstall-flags+=	-r
    349  1.1    jwise .endif
    350  1.1    jwise .endif
    351  1.1    jwise .ifdef PKG_VERBOSE
    352  1.1    jwise real-su-deinstall-flags+=	-v
    353  1.1    jwise .endif
    354  1.1    jwise 
    355  1.1    jwise real-deinstall:
    356  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG} \
    357  1.1    jwise 	found="`${PKG_INFO} -e \"${PKGWILDCARD}\" || ${TRUE}`"; \
    358  1.1    jwise 	if [ "$$found" != "" ]; then \
    359  1.1    jwise 		${ECHO} Running ${PKG_DELETE} ${real-su-deinstall-flags} $$found ; \
    360  1.1    jwise 		${PKG_DELETE} ${real-su-deinstall-flags} $$found || ${TRUE} ; \
    361  1.1    jwise 	fi
    362  1.1    jwise .for pkg in ${BUILD_DEPENDS:C/:.*$//}
    363  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG} \
    364  1.1    jwise 	found="`${PKG_INFO} -e \"${pkg}\" || ${TRUE}`"; \
    365  1.1    jwise 	if [ "$$found" != "" ]; then \
    366  1.1    jwise 		${ECHO} Running ${PKG_DELETE} $$found ; \
    367  1.1    jwise 		${PKG_DELETE} ${real-su-deinstall-flags} $$found || ${TRUE} ; \
    368  1.1    jwise 	fi
    369  1.1    jwise .endfor
    370  1.1    jwise .endif						# target(deinstall)
    371  1.1    jwise 
    372  1.1    jwise 
    373  1.1    jwise ################################################################
    374  1.1    jwise # Some more targets supplied for users' convenience
    375  1.1    jwise ################################################################
    376  1.1    jwise 
    377  1.1    jwise # The 'info' target can be used to display information about a package.
    378  1.1    jwise info: uptodate-pkgtools
    379  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${PKG_INFO} ${PKGWILDCARD}
    380  1.1    jwise 
    381  1.1    jwise # The 'check' target can be used to check an installed package.
    382  1.1    jwise check: uptodate-pkgtools
    383  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${PKG_ADMIN} check ${PKGWILDCARD}
    384  1.1    jwise 
    385  1.1    jwise # Cleaning up
    386  1.1    jwise 
    387  1.1    jwise .if !target(pre-clean)
    388  1.1    jwise pre-clean:
    389  1.1    jwise 	@${DO_NADA}
    390  1.1    jwise .endif
    391  1.1    jwise 
    392  1.1    jwise .if !target(clean)
    393  1.1    jwise clean: pre-clean
    394  1.1    jwise 	${RM} -f ${PLIST} ${BUILD_VERSION_FILE} ${BUILD_INFO_FILE} ${SIZE_PKG_FILE} ${SIZE_ALL_FILE}
    395  1.1    jwise .endif
    396  1.1    jwise 
    397  1.1    jwise .if !target(cleandir)
    398  1.1    jwise cleandir: clean
    399  1.1    jwise .endif
    400  1.1    jwise 
    401  1.1    jwise # Install binary pkg, without strict uptodate-check first
    402  1.1    jwise # (XXX should be able to snarf via FTP. Later...)
    403  1.1    jwise bin-install:
    404  1.1    jwise 	@if [ -f ${PKGFILE} ] ; then 					\
    405  1.1    jwise 		${ECHO_MSG} "Installing from binary pkg ${PKGFILE}" ;	\
    406  1.1    jwise 		${PKG_ADD} ${PKGFILE} ; 				\
    407  1.1    jwise 	else 				 				\
    408  1.1    jwise 		${SHCOMMENT} Cycle through some FTP server here ;\
    409  1.1    jwise 		${ECHO_MSG} "Installing from source" ;			\
    410  1.1    jwise 		(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} package &&				\
    411  1.1    jwise 		${MAKE} ${MAKEFLAGS} clean) ;				\
    412  1.1    jwise 	fi
    413  1.1    jwise 
    414  1.1    jwise 
    415  1.1    jwise ################################################################
    416  1.1    jwise # The special package-building targets
    417  1.1    jwise # You probably won't need to touch these
    418  1.1    jwise ################################################################
    419  1.1    jwise 
    420  1.1    jwise # Nobody should want to override this unless PKGNAME is simply bogus.
    421  1.1    jwise 
    422  1.1    jwise .if !target(package-name)
    423  1.1    jwise package-name:
    424  1.1    jwise 	@${ECHO} ${PKGNAME}
    425  1.1    jwise .endif # !target(package-name)
    426  1.1    jwise 
    427  1.1    jwise # Show (recursively) all the packages this package depends on.
    428  1.1    jwise # If PACKAGE_DEPENDS_WITH_PATTERNS is set, print as pattern (if possible)
    429  1.1    jwise PACKAGE_DEPENDS_WITH_PATTERNS?=true
    430  1.1    jwise # To be used (-> true) ONLY if the pkg in question is known to be installed
    431  1.1    jwise # (i.e. when calling for pkg_create args, and for fake-pkg)
    432  1.1    jwise # Will probably not work with PACKAGE_DEPENDS_WITH_PATTERNS=false ...
    433  1.1    jwise PACKAGE_DEPENDS_QUICK?=false
    434  1.1    jwise .if !target(run-depends-list)
    435  1.1    jwise run-depends-list:
    436  1.1    jwise .for dep in ${DEPENDS}
    437  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}					\
    438  1.1    jwise 	pkg="${dep:C/:.*//}";						\
    439  1.1    jwise 	dir="${dep:C/[^:]*://}";					\
    440  1.1    jwise 	cd ${.CURDIR};							\
    441  1.1    jwise 	if ${PACKAGE_DEPENDS_WITH_PATTERNS}; then			\
    442  1.1    jwise 		${ECHO} "$$pkg";					\
    443  1.1    jwise 	else								\
    444  1.1    jwise 		if cd $$dir 2>/dev/null; then				\
    445  1.1    jwise 			(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} package-name; \
    446  1.1    jwise 		else 							\
    447  1.1    jwise 			${ECHO_MSG} "Warning: \"$$dir\" non-existent -- @pkgdep registration incomplete" >&2; \
    448  1.1    jwise 		fi;							\
    449  1.1    jwise 	fi;								\
    450  1.1    jwise 	if ${PACKAGE_DEPENDS_QUICK} ; then 			\
    451  1.1    jwise 		${PKG_INFO} -qf "$$pkg" | ${AWK} '/^@pkgdep/ {print $$2}'; \
    452  1.1    jwise 	else 							\
    453  1.1    jwise 		if cd $$dir 2>/dev/null; then				\
    454  1.1    jwise 			(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} run-depends-list; \
    455  1.1    jwise 		else 							\
    456  1.1    jwise 			${ECHO_MSG} "Warning: \"$$dir\" non-existent -- @pkgdep registration incomplete" >&2; \
    457  1.1    jwise 		fi;							\
    458  1.1    jwise 	fi
    459  1.1    jwise .endfor
    460  1.1    jwise .endif # target(run-depends-list)
    461  1.1    jwise 
    462  1.1    jwise # Build a package but don't check the package cookie
    463  1.1    jwise 
    464  1.1    jwise .if !target(repackage)
    465  1.1    jwise repackage: pre-repackage package
    466  1.1    jwise 
    467  1.1    jwise pre-repackage:
    468  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${PACKAGE_COOKIE}
    469  1.1    jwise .endif
    470  1.1    jwise 
    471  1.1    jwise # Build a package but don't check the cookie for installation, also don't
    472  1.1    jwise # install package cookie
    473  1.1    jwise 
    474  1.1    jwise .if !target(package-noinstall)
    475  1.1    jwise package-noinstall:
    476  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} PACKAGE_NOINSTALL=yes real-package)
    477  1.1    jwise .endif
    478  1.1    jwise 
    479  1.1    jwise ################################################################
    480  1.1    jwise # Dependency checking
    481  1.1    jwise ################################################################
    482  1.1    jwise 
    483  1.1    jwise .if !target(install-depends)
    484  1.1    jwise install-depends:
    485  1.1    jwise .endif
    486  1.1    jwise 
    487  1.1    jwise ################################################################
    488  1.1    jwise # Everything after here are internal targets and really
    489  1.1    jwise # shouldn't be touched by anybody but the release engineers.
    490  1.1    jwise ################################################################
    491  1.1    jwise 
    492  1.1    jwise .if !target(show-pkgtools-version)
    493  1.1    jwise show-pkgtools-version:
    494  1.1    jwise 	@${ECHO} ${PKGTOOLS_VERSION}
    495  1.1    jwise .endif
    496  1.1    jwise 
    497  1.1    jwise # convenience target, to display make variables from command line
    498  1.1    jwise # i.e. "make show-var VARNAME=var", will print var's value
    499  1.1    jwise show-var:
    500  1.1    jwise 	@${ECHO} "${${VARNAME}}"
    501  1.1    jwise 
    502  1.1    jwise # Stat all the files of one pkg and sum the sizes up. 
    503  1.1    jwise # 
    504  1.1    jwise # XXX This is intended to be run before pkg_create is called, so the
    505  1.1    jwise # existence of ${PLIST} can be assumed.
    506  1.1    jwise print-pkg-size-this:
    507  1.1    jwise 	@${SHCOMMENT} "This pkg's files" ;				\
    508  1.1    jwise 	${AWK} 'BEGIN { base = "${PREFIX}/" }				\
    509  1.1    jwise 		/^@cwd/ { base = $$2 "/" }				\
    510  1.1    jwise 		/^@ignore/ { next }					\
    511  1.1    jwise 		NF == 1 { print base $$1 }'				\
    512  1.1    jwise 		<${PLIST} 						\
    513  1.1    jwise 	| sort -u							\
    514  1.1    jwise 	| ${SED} -e 's, ,\\ ,g'						\
    515  1.1    jwise 	| xargs ${LS} -ld						\
    516  1.1    jwise 	| ${AWK} 'BEGIN { print("0 "); }				\
    517  1.1    jwise 		  { print($$5, " + "); }				\
    518  1.1    jwise 		  END { print("p"); }'					\
    519  1.1    jwise 	| ${DC}
    520  1.1    jwise 
    521  1.1    jwise # Sizes of required pkgs (only)
    522  1.1    jwise # 
    523  1.1    jwise # XXX This is intended to be run before pkg_create is called, so the
    524  1.1    jwise # dependencies are all installed. 
    525  1.1    jwise print-pkg-size-depends:
    526  1.1    jwise 	@(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} run-depends-list PACKAGE_DEPENDS_QUICK=true) \
    527  1.1    jwise 	| xargs -n 1 ${SETENV} ${PKG_INFO} -e				\
    528  1.1    jwise 	| sort -u							\
    529  1.1    jwise 	| xargs ${SETENV} ${PKG_INFO} -qs				\
    530  1.1    jwise 	| ${AWK} -- 'BEGIN { print("0 "); }				\
    531  1.1    jwise 		/^[0-9]+$$/ { print($$1, " + "); }			\
    532  1.1    jwise 		END { print("p"); }'					\
    533  1.1    jwise 	| ${DC}
    534  1.1    jwise 
    535  1.1    jwise 
    536  1.1    jwise # Fake installation of package so that user can pkg_delete it later.
    537  1.1    jwise # Also, make sure that an installed package is recognized correctly in
    538  1.1    jwise # accordance to the @pkgdep directive in the packing lists
    539  1.1    jwise 
    540  1.1    jwise .if !target(register)
    541  1.1    jwise register: fake-pkg
    542  1.1    jwise .endif
    543  1.1    jwise 
    544  1.1    jwise .if !target(fake-pkg)
    545  1.1    jwise fake-pkg: ${PLIST}
    546  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}\
    547  1.1    jwise 	if [ ! -f ${PLIST} -o ! -f ${COMMENT} -o ! -f ${DESCR} ]; then \
    548  1.1    jwise 		${ECHO} "** Missing package files for ${PKGNAME} - installation not recorded."; \
    549  1.1    jwise 		exit 1;							\
    550  1.1    jwise 	fi
    551  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}\
    552  1.1    jwise 	if [ ! -d ${PKG_DBDIR} ]; then	\
    553  1.1    jwise 		${RM} -f ${PKG_DBDIR};					\
    554  1.1    jwise 		${MKDIR} ${PKG_DBDIR};					\
    555  1.1    jwise 	fi
    556  1.1    jwise .if defined(FORCE_PKG_REGISTER)
    557  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${PKG_DELETE} -O ${PKGNAME}
    558  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${RM} -rf ${PKG_DBDIR}/${PKGNAME}
    559  1.1    jwise .endif
    560  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${BUILD_VERSION_FILE} ${BUILD_INFO_FILE}
    561  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}${RM} -f ${SIZE_PKG_FILE} ${SIZE_ALL_FILE}
    562  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}\
    563  1.1    jwise 	files="";				\
    564  1.1    jwise 	for f in ${.CURDIR}/Makefile ${FILESDIR}/* ${PKGDIR}/*; do	\
    565  1.1    jwise 		if [ -f $$f ]; then					\
    566  1.1    jwise 			files="$$files $$f";				\
    567  1.1    jwise 		fi;							\
    568  1.1    jwise 	done;								\
    569  1.1    jwise 	${GREP} '\$$NetBSD' $$files | ${SED} -e 's|^${PKGSRCDIR}/||' > ${BUILD_VERSION_FILE};
    570  1.1    jwise .for def in ${BUILD_DEFS}
    571  1.1    jwise 	@${ECHO} ${def}=	${${def}:Q} | ${SED} -e 's|^PATH=[^ 	]*|PATH=...|' >> ${BUILD_INFO_FILE}
    572  1.1    jwise .endfor
    573  1.1    jwise 	@${ECHO} "CC=	${CC}-`${CC} --version`" >> ${BUILD_INFO_FILE}
    574  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}					\
    575  1.1    jwise 	${ECHO} "_PKGTOOLS_VER=${PKGTOOLS_VERSION}" >> ${BUILD_INFO_FILE}
    576  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}					\
    577  1.1    jwise 	size_this=`(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} print-pkg-size-this)`;		\
    578  1.1    jwise 	size_depends=`(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} print-pkg-size-depends)`;	\
    579  1.1    jwise 	${ECHO} $$size_this >${SIZE_PKG_FILE};				\
    580  1.1    jwise 	${ECHO} $$size_this $$size_depends + p | ${DC} >${SIZE_ALL_FILE}
    581  1.1    jwise 	${_PKG_SILENT}${_PKG_DEBUG}					\
    582  1.1    jwise 	if [ ! -d ${PKG_DBDIR}/${PKGNAME} ]; then			\
    583  1.1    jwise 		${ECHO_MSG} "${_PKGSRC_IN}> Registering installation for ${PKGNAME}"; \
    584  1.1    jwise 		${MKDIR} ${PKG_DBDIR}/${PKGNAME};			\
    585  1.1    jwise 		${PKG_CREATE} ${PKG_ARGS_INSTALL} -O ${PKGFILE} > ${PKG_DBDIR}/${PKGNAME}/+CONTENTS; \
    586  1.1    jwise 		${CP} ${DESCR} ${PKG_DBDIR}/${PKGNAME}/+DESC;		\
    587  1.1    jwise 		${CP} ${COMMENT} ${PKG_DBDIR}/${PKGNAME}/+COMMENT;	\
    588  1.1    jwise 		${CP} ${BUILD_VERSION_FILE} ${PKG_DBDIR}/${PKGNAME}/+BUILD_VERSION; \
    589  1.1    jwise 		${CP} ${BUILD_INFO_FILE} ${PKG_DBDIR}/${PKGNAME}/+BUILD_INFO; \
    590  1.1    jwise 		if ${TEST} -e ${SIZE_PKG_FILE}; then 			\
    591  1.1    jwise 			${CP} ${SIZE_PKG_FILE} ${PKG_DBDIR}/${PKGNAME}/+SIZE_PKG; \
    592  1.1    jwise 		fi ; 							\
    593  1.1    jwise 		if ${TEST} -e ${SIZE_ALL_FILE}; then 			\
    594  1.1    jwise 			${CP} ${SIZE_ALL_FILE} ${PKG_DBDIR}/${PKGNAME}/+SIZE_ALL; \
    595  1.1    jwise 		fi ; 							\
    596  1.1    jwise 		if [ -n "${PKG_INSTALL_FILE}" ]; then			\
    597  1.1    jwise 			if ${TEST} -e ${PKG_INSTALL_FILE}; then		\
    598  1.1    jwise 				${CP} ${PKG_INSTALL_FILE} ${PKG_DBDIR}/${PKGNAME}/+INSTALL; \
    599  1.1    jwise 			fi;						\
    600  1.1    jwise 		fi;							\
    601  1.1    jwise 		if [ -n "${PKG_DEINSTALL_FILE}" ]; then			\
    602  1.1    jwise 			if ${TEST} -e ${PKG_DEINSTALL_FILE}; then		\
    603  1.1    jwise 				${CP} ${PKG_DEINSTALL_FILE} ${PKG_DBDIR}/${PKGNAME}/+DEINSTALL; \
    604  1.1    jwise 			fi;						\
    605  1.1    jwise 		fi;							\
    606  1.1    jwise 		if [ -n "${MESSAGE_FILE}" ]; then			\
    607  1.1    jwise 			if ${TEST} -e ${MESSAGE_FILE}; then		\
    608  1.1    jwise 				${CP} ${MESSAGE_FILE} ${PKG_DBDIR}/${PKGNAME}/+DISPLAY; \
    609  1.1    jwise 			fi;						\
    610  1.1    jwise 		fi;							\
    611  1.1    jwise 		list="`(cd ${.CURDIR} && ${MAKE} ${MAKEFLAGS} run-depends-list PACKAGE_DEPENDS_QUICK=true ECHO_MSG=${TRUE} | sort -u)`" ; \
    612  1.1    jwise 		for dep in $$list; do \
    613  1.1    jwise 			realdep="`${PKG_INFO} -e \"$$dep\" || ${TRUE}`" ; \
    614  1.1    jwise 			if [ `${ECHO} $$realdep | wc -w` -gt 1 ]; then 				\
    615  1.1    jwise 				${ECHO} '***' "WARNING: '$$dep' expands to several installed packages " ; \
    616  1.1    jwise 				${ECHO} "    (" `${ECHO} $$realdep` ")." ; \
    617  1.1    jwise 				${ECHO} "    Please check if this is really intended!" ; \
    618  1.1    jwise 				continue ; 				\
    619  1.1    jwise 			fi ; 						\
    620  1.1    jwise 		done ; 						\
    621  1.1    jwise 		for realdep in `echo $$list | xargs -n 1 ${SETENV} ${PKG_INFO} -e | sort -u`; do \
    622  1.1    jwise 			if ${TEST} -z "$$realdep"; then			\
    623  1.1    jwise 				${ECHO} "$$dep not installed - dependency NOT registered" ; \
    624  1.1    jwise 			elif [ -d ${PKG_DBDIR}/$$realdep ]; then	\
    625  1.1    jwise 				if ${TEST} ! -e ${PKG_DBDIR}/$$realdep/+REQUIRED_BY; then \
    626  1.1    jwise 					${TOUCH} ${PKG_DBDIR}/$$realdep/+REQUIRED_BY; \
    627  1.1    jwise 				fi; 					\
    628  1.1    jwise 				${AWK} 'BEGIN { found = 0; } 		\
    629  1.1    jwise 					$$0 == "${PKGNAME}" { found = 1; } \
    630  1.1    jwise 					{ print $$0; } 			\
    631  1.1    jwise 					END { if (!found) { printf("%s\n", "${PKGNAME}"); }}' \
    632  1.1    jwise 					< ${PKG_DBDIR}/$$realdep/+REQUIRED_BY > ${PKG_DBDIR}/$$realdep/reqby.$$$$; \
    633  1.1    jwise 				${MV} ${PKG_DBDIR}/$$realdep/reqby.$$$$ ${PKG_DBDIR}/$$realdep/+REQUIRED_BY; \
    634  1.1    jwise 				${ECHO} "${PKGNAME} requires installed package $$realdep"; \
    635  1.1    jwise 			fi;						\
    636  1.1    jwise 		done;							\
    637  1.1    jwise 	fi
    638  1.1    jwise .endif
    639  1.1    jwise 
    640  1.1    jwise # Depend is generally meaningless for arbitrary packages, but if someone wants
    641  1.1    jwise # one they can override this.  This is just to catch people who've gotten into
    642  1.1    jwise # the habit of typing `${MAKE} depend all install' as a matter of course.
    643  1.1    jwise #
    644  1.1    jwise .if !target(depend)
    645  1.1    jwise depend:
    646  1.1    jwise .endif
    647  1.1    jwise 
    648  1.1    jwise # Same goes for tags
    649  1.1    jwise .if !target(tags)
    650  1.1    jwise tags:
    651  1.1    jwise .endif
    652  1.1    jwise 
    653  1.1    jwise ${PLIST}:
    654  1.1    jwise 	sh ${.CURDIR}/../../../../sets/makeplist ${SETNAME} ${PKGBASE} > ${PLIST}
    655  1.3  xtraeme 
    656  1.3  xtraeme .endif # BSD_SYSPKG_MK
    657