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)
16BSD_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
28PREFIX:=		${DESTDIR}/${PREFIX}
29
30OPSYS=			NetBSD
31OS_VERSION!=		sh ${.PARSEDIR}/../../../sys/conf/osrelease.sh
32
33# keep bsd.own.mk from generating an install: target.
34NEED_OWN_INSTALL_TARGET=no
35
36##### Some overrides of defaults below on a per-OS basis.
37
38DEINSTALLDEPENDS?=	NO	# add -R to pkg_delete
39
40PKGSRCDIR?=		${.CURDIR:C|/[^/]*/[^/]*$||}
41PKGVERSION?=		${OS_VERSION}.${TINY_VERSION}
42PKGWILDCARD?=		${PKGBASE}-[0-9]*
43
44# For system packages, we set this here, as the version is auto-generated.
45PKGNAME?=		${PKGBASE}-${PKGVERSION}
46
47PACKAGES?=		${PKGSRCDIR}/../packages
48PKGDIR?=		${.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.
52PACKAGE_COOKIE=		${WRKDIR}/.package_done
53
54# Miscellaneous overridable commands:
55SHCOMMENT?=		${ECHO_MSG} >/dev/null '***'
56
57MAKE_ENV+=		PREFIX=${PREFIX}
58
59TOUCH_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
65PKG_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
78WRKDIR?=		.
79
80COMMENT?=		${PKGDIR}/COMMENT
81DESCR=			${PKGDIR}/DESCR
82PLIST=			${WRKDIR}/PLIST
83PLIST_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)
88PKG_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)
93PKG_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)
98MESSAGE_FILE=		${PKGDIR}/MESSAGE
99.endif
100
101AWK?=		${TOOL_AWK:U/usr/bin/awk}
102CAT?=		/bin/cat
103CP?=		/bin/cp
104DC?=		/usr/bin/dc
105ECHO?=		echo				# Shell builtin
106FALSE?=		false				# Shell builtin
107FIND?=		/usr/bin/find
108GREP?=		/usr/bin/grep
109IDENT?=		/usr/bin/ident
110LN?=		/bin/ln
111LS?=		/bin/ls
112MKDIR?=		/bin/mkdir -p
113MV?=		/bin/mv
114PKG_TOOLS_BIN?= /usr/sbin
115RM?=		/bin/rm
116SED?=		${TOOL_SED:U/usr/bin/sed}
117SETENV?=	/usr/bin/env
118SH?=		/bin/sh
119TEST?=		test				# Shell builtin
120TOUCH?=		/usr/bin/touch
121TRUE?=		true				# Shell builtin
122
123PKG_ADD?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_add
124PKG_ADMIN?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_admin
125PKG_CREATE?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_create
126PKG_DELETE?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_delete
127PKG_INFO?=	PKG_DBDIR=${PKG_DBDIR} ${PKG_TOOLS_BIN}/pkg_info
128
129.if !defined(PKGTOOLS_VERSION)
130.if !exists(${IDENT})
131PKGTOOLS_VERSION=${PKGTOOLS_REQD}
132.else
133PKGTOOLS_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
136MAKEFLAGS+=	PKGTOOLS_VERSION="${PKGTOOLS_VERSION}"
137
138# Latest version of pkgtools required for this file.
139PKGTOOLS_REQD=		20000202
140
141# Check that we're using up-to-date pkg_* tools with this file.
142uptodate-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
156BUILD_VERSION_FILE=	${WRKDIR}/.build_version
157BUILD_INFO_FILE=	${WRKDIR}/.build_info
158
159# Files containing size of pkg w/o and w/ all required pkgs
160SIZE_PKG_FILE=		${WRKDIR}/.SizePkg
161SIZE_ALL_FILE=		${WRKDIR}/.SizeAll
162
163.ifndef PKG_ARGS_COMMON
164PKG_ARGS_COMMON=	-v -c ${COMMENT} -d ${DESCR} -f ${PLIST} -l
165PKG_ARGS_COMMON+=	-b ${BUILD_VERSION_FILE} -B ${BUILD_INFO_FILE}
166PKG_ARGS_COMMON+=	-s ${SIZE_PKG_FILE} -S ${SIZE_ALL_FILE}
167PKG_ARGS_COMMON+=	-P "`${MAKE} ${MAKEFLAGS} run-depends-list PACKAGE_DEPENDS_QUICK=true|sort -u`"
168.ifdef CONFLICTS
169PKG_ARGS_COMMON+=	-C "${CONFLICTS}"
170.endif
171.ifdef PKG_INSTALL_FILE
172PKG_ARGS_COMMON+=	-i ${PKG_INSTALL_FILE}
173.endif
174.ifdef PKG_DEINSTALL_FILE
175PKG_ARGS_COMMON+=	-k ${PKG_DEINSTALL_FILE}
176.endif
177.ifdef MESSAGE_FILE
178PKG_ARGS_COMMON+=	-D ${MESSAGE_FILE}
179.endif
180
181PKG_ARGS_INSTALL=	-p ${PREFIX} ${PKG_ARGS_COMMON}
182PKG_ARGS_BINPKG=	-p ${PREFIX:C/^${DESTDIR}//} -L ${PREFIX} ${PKG_ARGS_COMMON}
183.endif # !PKG_ARGS_COMMON
184
185PKG_SUFX?=		.tgz
186#PKG_SUFX?=		.tbz		# bzip2(1) pkgs
187# where pkg_add records its dirty deeds.
188PKG_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.
199ECHO_MSG?=		${ECHO}
200
201# How to do nothing.  Override if you, for some strange reason, would rather
202# do something.
203DO_NADA?=		${TRUE}
204
205.if !defined(PKGBASE) || !defined(SETNAME)
206.BEGIN:
207	@${ECHO_MSG} "PKGBASE and SETNAME are mandatory."
208	@${FALSE}
209.endif
210
211PKGREPOSITORY?=		${PACKAGES}
212PKGFILE?=		${PKGREPOSITORY}/${PKGNAME}${PKG_SUFX}
213
214.MAIN: all
215
216# Add these defs to the ones dumped into +BUILD_DEFS
217BUILD_DEFS+=	OPSYS OS_VERSION MACHINE_ARCH OBJECT_FMT
218
219.if !target(all)
220# We don't build here
221all:
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)
233show-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)
244do-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)
265package-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)
281delete-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)
287delete-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
297real-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)
312package: 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})
324pre-${name}:
325	@${DO_NADA}
326.endif
327
328.if !target(post-${name})
329post-${name}:
330	@${DO_NADA}
331.endif
332
333.endfor
334
335# Deinstall
336#
337# Special target to remove installation
338
339.if !target(deinstall)
340deinstall: real-deinstall
341
342.if (${DEINSTALLDEPENDS} != "NO")
343.if (${DEINSTALLDEPENDS} != "ALL")
344# used for removing stuff in bulk builds
345real-su-deinstall-flags+=	-r -R
346# used for "update" target
347.else
348real-su-deinstall-flags+=	-r
349.endif
350.endif
351.ifdef PKG_VERBOSE
352real-su-deinstall-flags+=	-v
353.endif
354
355real-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.
378info: uptodate-pkgtools
379	${_PKG_SILENT}${_PKG_DEBUG}${PKG_INFO} ${PKGWILDCARD}
380
381# The 'check' target can be used to check an installed package.
382check: uptodate-pkgtools
383	${_PKG_SILENT}${_PKG_DEBUG}${PKG_ADMIN} check ${PKGWILDCARD}
384
385# Cleaning up
386
387.if !target(pre-clean)
388pre-clean:
389	@${DO_NADA}
390.endif
391
392.if !target(clean)
393clean: 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)
398cleandir: clean
399.endif
400
401# Install binary pkg, without strict uptodate-check first
402# (XXX should be able to snarf via FTP. Later...)
403bin-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)
423package-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)
429PACKAGE_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 ...
433PACKAGE_DEPENDS_QUICK?=false
434.if !target(run-depends-list)
435run-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)
465repackage: pre-repackage package
466
467pre-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)
475package-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)
484install-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)
493show-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
499show-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.
506print-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. 
525print-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)
541register: fake-pkg
542.endif
543
544.if !target(fake-pkg)
545fake-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)
645depend:
646.endif
647
648# Same goes for tags
649.if !target(tags)
650tags:
651.endif
652
653${PLIST}:
654	sh ${.CURDIR}/../../../../sets/makeplist ${SETNAME} ${PKGBASE} > ${PLIST}
655
656.endif # BSD_SYSPKG_MK
657