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