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