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