1 # $NetBSD: bsd.pkg.mk,v 1.1956 2009/04/09 00:51:23 joerg Exp $
3 # This file is in the public domain.
5 # Please see the pkgsrc/doc/guide manual for details on the
6 # variables used in this make file template.
8 # Default sequence for "all" is:
22 .include "misc/common.mk"
24 ############################################################################
25 # Transform package Makefile variables and set defaults
26 # This is the early set used directly or indirectly in
27 # the phase variables.
28 ############################################################################
30 ##### PKGBASE, PKGNAME[_NOREV], PKGVERSION
32 PKGBASE?= ${PKGNAME:C/-[^-]*$//}
33 PKGVERSION?= ${PKGNAME:C/^.*-//}
34 PKGVERSION?= ${PKGNAME:C/^.*-//}
35 .if defined(PKGREVISION) && !empty(PKGREVISION) && (${PKGREVISION} != "0")
37 PKGNAME_NOREV:= ${PKGNAME}
38 PKGNAME:= ${PKGNAME}nb${PKGREVISION}
40 PKGNAME?= ${DISTNAME}nb${PKGREVISION}
41 PKGNAME_NOREV= ${DISTNAME}
45 PKGNAME_NOREV= ${PKGNAME}
47 PKGVERSION_NOREV= ${PKGNAME_NOREV:C/^.*-//}
49 # Fail-safe in the case of circular dependencies
50 .if defined(_PKGSRC_DEPS) && defined(PKGNAME) && !empty(_PKGSRC_DEPS:M${PKGNAME})
51 PKG_FAIL_REASON+= "Circular dependency detected"
56 ############################################################################
57 # Allow various phases to define the default variables
58 ############################################################################
59 .if defined(EMUL_PLATFORMS) && !empty(EMUL_PLATFORMS)
60 . include "emulator/emulator.mk"
63 .include "features/features.mk"
65 .include "flavor/bsd.flavor-vars.mk"
66 .include "check/bsd.check-vars.mk"
67 .include "depends/bsd.depends-vars.mk"
68 .include "fetch/bsd.fetch-vars.mk"
69 .include "checksum/bsd.checksum-vars.mk"
70 .include "extract/bsd.extract-vars.mk"
71 .include "patch/bsd.patch-vars.mk"
72 .include "configure/bsd.configure-vars.mk"
73 .include "build/bsd.build-vars.mk"
74 .include "install/bsd.install-vars.mk"
76 .include "bsd.pkg.error.mk"
78 .include "bsd.hacks.mk"
80 ############################################################################
81 # Transform package Makefile variables and set defaults
82 ############################################################################
84 MKCRYPTO?= YES # build crypto packages by default
88 BUILD_DEPENDS?= # empty
89 COMMENT?= (no description)
91 DESCR_SRC?= ${PKGDIR}/DESCR
92 INTERACTIVE_STAGE?= none
96 MAINTAINER?= pkgsrc-users@NetBSD.org
98 PKGWILDCARD?= ${PKGBASE}-[0-9]*
99 SVR4_PKGNAME?= ${PKGNAME}
100 WRKSRC?= ${WRKDIR}/${DISTNAME}
102 # Override for SU_CMD user check
103 _SU_ROOT_USER?= ${ROOT_USER}
104 REAL_ROOT_USER?= ${ROOT_USER}
105 REAL_ROOT_GROUP?= ${ROOT_GROUP}
107 .if (defined(INSTALL_UNSTRIPPED) && !empty(INSTALL_UNSTRIPPED:M[yY][eE][sS])) || defined(DEBUG_FLAGS)
108 _INSTALL_UNSTRIPPED= # set (flag used by platform/*.mk)
111 ##### Transform USE_* into dependencies
113 .include "bsd.pkg.use.mk"
115 ############################################################################
117 ############################################################################
119 .if defined(BUILDLINK_DEPTH) || defined(BUILDLINK_PACKAGES) || \
120 defined(BUILDLINK_DEPENDS) || defined(BUILDLINK_ORDER)
121 PKG_FAIL_REASON+= "Out-dated buildlink3.mk detected, please update"
124 # PKG_INSTALLATION_TYPE can only be one of two values: "pkgviews" or
126 .if (${PKG_INSTALLATION_TYPE} != "pkgviews") && \
127 (${PKG_INSTALLATION_TYPE} != "overwrite")
128 PKG_FAIL_REASON+= "PKG_INSTALLATION_TYPE must be \`\`pkgviews'' or \`\`overwrite''."
131 .if empty(PKG_INSTALLATION_TYPES:M${PKG_INSTALLATION_TYPE})
132 PKG_FAIL_REASON+= "This package doesn't support PKG_INSTALLATION_TYPE=${PKG_INSTALLATION_TYPE}."
135 .if defined(ALL_TARGET)
136 PKG_FAIL_REASON+='ALL_TARGET is deprecated and must be replaced with BUILD_TARGET.'
139 .if defined(NO_WRKSUBDIR)
140 PKG_FAIL_REASON+='NO_WRKSUBDIR has been deprecated - please replace it with an explicit'
141 PKG_FAIL_REASON+='assignment of WRKSRC= $${WRKDIR}'
142 .endif # NO_WRKSUBDIR
144 # We need to make sure the buildlink-x11 package is not installed since it
145 # breaks builds that use imake.
146 .if defined(USE_IMAKE)
147 . if exists(${LOCALBASE}/lib/X11/config/buildlinkX11.def) || \
148 exists(${X11BASE}/lib/X11/config/buildlinkX11.def)
149 PKG_FAIL_REASON+= "${PKGNAME} uses imake, but the buildlink-x11 package was found." \
150 " Please deinstall it (pkg_delete buildlink-x11)."
154 .if !defined(CATEGORIES) || !defined(DISTNAME)
155 PKG_FAIL_REASON+='CATEGORIES and DISTNAME are mandatory.'
158 .if defined(PKG_PATH)
159 PKG_FAIL_REASON+='Please unset PKG_PATH before doing pkgsrc work!'
162 .if defined(MASTER_SITE_SUBDIR)
163 PKG_FAIL_REASON+='MASTER_SITE_SUBDIR is deprecated and must be replaced with MASTER_SITES.'
166 .if defined(PATCH_SITE_SUBDIR)
167 PKG_FAIL_REASON+='PATCH_SITE_SUBDIR is deprecated and must be replaced with PATCH_SITES.'
170 .if defined(ONLY_FOR_ARCHS) || defined(NOT_FOR_ARCHS) \
171 || defined(ONLY_FOR_OPSYS) || defined(NOT_FOR_OPSYS)
172 PKG_FAIL_REASON+='ONLY/NOT_FOR_ARCHS/OPSYS are deprecated and must be replaced with ONLY/NOT_FOR_PLATFORM.'
175 # Allow variables to be set on a per-OS basis
176 OPSYSVARS+= CFLAGS CXXFLAGS CPPFLAGS LDFLAGS LIBS
177 .for _var_ in ${OPSYSVARS:O}
178 . if defined(${_var_}.${OPSYS})
179 ${_var_}+= ${${_var_}.${OPSYS}}
180 . elif defined(${_var_}.*)
181 ${_var_}+= ${${_var_}.*}
185 CPPFLAGS+= ${CPP_PRECOMP_FLAGS}
188 ALL_ENV+= CFLAGS=${CFLAGS:M*:Q}
189 ALL_ENV+= CPPFLAGS=${CPPFLAGS:M*:Q}
190 ALL_ENV+= CXX=${CXX:Q}
191 ALL_ENV+= CXXFLAGS=${CXXFLAGS:M*:Q}
192 ALL_ENV+= COMPILER_RPATH_FLAG=${COMPILER_RPATH_FLAG:Q}
193 ALL_ENV+= F77=${FC:Q}
195 ALL_ENV+= FFLAGS=${FFLAGS:M*:Q}
197 ALL_ENV+= LC_COLLATE=C
199 ALL_ENV+= LC_MESSAGES=C
200 ALL_ENV+= LC_MONETARY=C
201 ALL_ENV+= LC_NUMERIC=C
203 ALL_ENV+= LDFLAGS=${LDFLAGS:M*:Q}
204 ALL_ENV+= LINKER_RPATH_FLAG=${LINKER_RPATH_FLAG:Q}
205 ALL_ENV+= PATH=${PATH:Q}:${LOCALBASE}/bin:${X11BASE}/bin
206 ALL_ENV+= PREFIX=${PREFIX}
208 # This variable can be added to MAKE_ENV to ease installation of packages
209 # that use BSD-style Makefiles.
210 BSD_MAKE_ENV= BINOWN=${BINOWN} BINGRP=${BINGRP}
211 BSD_MAKE_ENV+= GAMEOWN=${GAMEOWN} GAMEGRP=${GAMEGRP}
212 BSD_MAKE_ENV+= MANOWN=${MANOWN} MANGRP=${MANGRP}
213 BSD_MAKE_ENV+= SHAREOWN=${SHAREOWN} SHAREGRP=${SHAREGRP}
214 BSD_MAKE_ENV+= DOCOWN=${DOCOWN} DOCGRP=${DOCGRP}
215 BSD_MAKE_ENV+= BINMODE=${BINMODE} NONBINMODE=${NONBINMODE}
216 BSD_MAKE_ENV+= BINDIR=${PREFIX}/bin
217 BSD_MAKE_ENV+= INCSDIR=${PREFIX}/include
218 BSD_MAKE_ENV+= LIBDIR=${PREFIX}/lib
219 BSD_MAKE_ENV+= MANDIR=${PREFIX}/${PKGMANDIR}
220 BSD_MAKE_ENV+= STRIPFLAG=${_STRIPFLAG_INSTALL:Q}
221 BSD_MAKE_ENV+= MKHTML=no
223 _BUILD_DEFS= ${BUILD_DEFS}
224 _BUILD_DEFS+= LOCALBASE
225 _BUILD_DEFS+= PKGINFODIR
226 _BUILD_DEFS+= PKGMANDIR
227 _BUILD_DEFS+= _USE_DESTDIR
229 # Store the result in the +BUILD_INFO file so we can query for the build
230 # options using "pkg_info -Q PKG_OPTIONS <pkg>".
232 .if defined(PKG_SUPPORTED_OPTIONS) && defined(PKG_OPTIONS)
233 _BUILD_DEFS+= PKG_OPTIONS
236 .if empty(DEPOT_SUBDIR)
237 PKG_FAIL_REASON+= "DEPOT_SUBDIR may not be empty."
240 # ZERO_FILESIZE_P exits with a successful return code if the given file
242 # NONZERO_FILESIZE_P exits with a successful return code if the given file
243 # has nonzero length.
245 _ZERO_FILESIZE_P= ${AWK} 'END { exit (NR > 0) ? 1 : 0; }'
246 _NONZERO_FILESIZE_P= ${AWK} 'END { exit (NR > 0) ? 0 : 1; }'
248 # Automatically increase process limit where necessary for building.
249 _ULIMIT_CMD= ${UNLIMIT_RESOURCES:@_lim_@${ULIMIT_CMD_${_lim_}};@}
251 _NULL_COOKIE= ${WRKDIR}/.null
253 # Miscellaneous overridable commands:
254 SHCOMMENT?= ${ECHO_MSG} >/dev/null '***'
260 # A few aliases for *-install targets
261 INSTALL= ${TOOLS_INSTALL} # XXX override sys.mk
263 ${INSTALL} ${COPY} ${_STRIPFLAG_INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}
265 ${INSTALL} ${COPY} ${_STRIPFLAG_INSTALL} -o ${GAMEOWN} -g ${GAMEGRP} -m ${GAMEMODE}
267 ${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}
269 ${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}
271 ${INSTALL} ${COPY} -o ${SHAREOWN} -g ${SHAREGRP} -m ${SHAREMODE}
272 INSTALL_GAME_DATA?= \
273 ${INSTALL} ${COPY} -o ${GAMEOWN} -g ${GAMEGRP} -m ${GAMEDATAMODE}
275 ${INSTALL} ${COPY} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE}
276 INSTALL_PROGRAM_DIR?= \
277 ${INSTALL} -d -o ${BINOWN} -g ${BINGRP} -m ${PKGDIRMODE}
279 ${INSTALL} -d -o ${GAMEOWN} -g ${GAMEGRP} -m ${GAMEDIRMODE}
280 INSTALL_SCRIPT_DIR?= \
281 ${INSTALL_PROGRAM_DIR}
283 ${INSTALL_PROGRAM_DIR}
285 ${INSTALL} -d -o ${SHAREOWN} -g ${SHAREGRP} -m ${PKGDIRMODE}
287 ${INSTALL} -d -o ${MANOWN} -g ${MANGRP} -m ${PKGDIRMODE}
289 INSTALL_MACROS= BSD_INSTALL_PROGRAM=${INSTALL_PROGRAM:Q} \
290 BSD_INSTALL_SCRIPT=${INSTALL_SCRIPT:Q} \
291 BSD_INSTALL_LIB=${INSTALL_LIB:Q} \
292 BSD_INSTALL_DATA=${INSTALL_DATA:Q} \
293 BSD_INSTALL_MAN=${INSTALL_MAN:Q} \
294 BSD_INSTALL=${INSTALL:Q} \
295 BSD_INSTALL_PROGRAM_DIR=${INSTALL_PROGRAM_DIR:Q} \
296 BSD_INSTALL_SCRIPT_DIR=${INSTALL_SCRIPT_DIR:Q} \
297 BSD_INSTALL_LIB_DIR=${INSTALL_LIB_DIR:Q} \
298 BSD_INSTALL_DATA_DIR=${INSTALL_DATA_DIR:Q} \
299 BSD_INSTALL_MAN_DIR=${INSTALL_MAN_DIR:Q} \
300 BSD_INSTALL_GAME=${INSTALL_GAME:Q} \
301 BSD_INSTALL_GAME_DATA=${INSTALL_GAME_DATA:Q} \
302 BSD_INSTALL_GAME_DIR=${INSTALL_GAME_DIR:Q}
303 MAKE_ENV+= ${INSTALL_MACROS:M*}
304 SCRIPTS_ENV+= ${INSTALL_MACROS:M*}
306 # If pkgsrc is supposed to ensure that tests are run before installation
307 # of the package, then the build targets should be "build test", otherwise
308 # just "build" suffices.
310 .if !empty(PKGSRC_RUN_TEST:M[yY][eE][sS])
311 _PKGSRC_BUILD_TARGETS= build test
313 _PKGSRC_BUILD_TARGETS= build
316 # OVERRIDE_DIRDEPTH represents the common directory depth under
317 # ${WRKSRC} up to which we find the files that need to be
318 # overridden. By default, we search two levels down, i.e.,
321 OVERRIDE_DIRDEPTH?= 2
323 # Handle alternatives
325 .include "alternatives.mk"
327 # Define SMART_MESSAGES in /etc/mk.conf for messages giving the tree
328 # of dependencies for building, and the current target.
329 _PKGSRC_IN?= ===${SMART_MESSAGES:D> ${.TARGET} [${PKGNAME}${_PKGSRC_DEPS}] ===}
331 # Used to print all the '===>' style prompts - override this to turn them off.
333 PHASE_MSG?= ${ECHO_MSG} ${_PKGSRC_IN:Q}\>
334 STEP_MSG?= ${ECHO_MSG} "=>"
335 INFO_MSG?= ${ECHO_MSG} "INFO:"
336 WARNING_MSG?= ${ECHO_MSG} 1>&2 "WARNING:"
337 ERROR_MSG?= ${ECHO_MSG} 1>&2 "ERROR:"
338 FAIL_MSG?= ${FAIL} ${ERROR_MSG}
340 WARNING_CAT?= ${SED} -e "s|^|WARNING: |" 1>&2
341 ERROR_CAT?= ${SED} -e "s|^|ERROR: |" 1>&2
343 # How to do nothing. Override if you, for some strange reason, would rather
347 # the FAIL command executes its arguments and then exits with a non-zero
349 FAIL?= ${SH} ${PKGSRCDIR}/mk/scripts/fail
352 # Config file related settings - see doc/pkgsrc.txt
354 PKG_SYSCONFVAR?= ${PKGBASE}
355 PKG_SYSCONFSUBDIR?= # empty
356 .if ${PKG_INSTALLATION_TYPE} == "overwrite"
357 PKG_SYSCONFDEPOTBASE= # empty
358 PKG_SYSCONFBASEDIR= ${PKG_SYSCONFBASE}
360 . if !empty(PKG_SYSCONFBASE:M${PREFIX}) || \
361 !empty(PKG_SYSCONFBASE:M${PREFIX}/*)
362 PKG_SYSCONFDEPOTBASE= # empty
363 PKG_SYSCONFBASEDIR= ${PKG_SYSCONFBASE}
365 PKG_SYSCONFDEPOTBASE= ${PKG_SYSCONFBASE}/${DEPOT_SUBDIR}
366 PKG_SYSCONFBASEDIR= ${PKG_SYSCONFDEPOTBASE}/${PKGNAME}
369 .if empty(PKG_SYSCONFSUBDIR)
370 DFLT_PKG_SYSCONFDIR:= ${PKG_SYSCONFBASEDIR}
372 DFLT_PKG_SYSCONFDIR:= ${PKG_SYSCONFBASEDIR}/${PKG_SYSCONFSUBDIR}
374 PKG_SYSCONFDIR= ${DFLT_PKG_SYSCONFDIR}
375 .if defined(PKG_SYSCONFDIR.${PKG_SYSCONFVAR})
376 PKG_SYSCONFDIR= ${PKG_SYSCONFDIR.${PKG_SYSCONFVAR}}
377 PKG_SYSCONFBASEDIR= ${PKG_SYSCONFDIR.${PKG_SYSCONFVAR}}
378 PKG_SYSCONFDEPOTBASE= # empty
380 PKG_SYSCONFDIR_PERMS?= ${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 755
382 ALL_ENV+= PKG_SYSCONFDIR=${PKG_SYSCONFDIR:Q}
383 _BUILD_DEFS+= PKG_SYSCONFBASEDIR PKG_SYSCONFDIR
385 # These are all of the tools use by pkgsrc Makefiles. This should
386 # eventually be split up into lists of tools required by different
387 # phases of a pkgsrc build.
390 [ awk basename cat chgrp chmod chown cmp cp cut dirname echo \
391 egrep env false file find grep head hostname id install ln ls \
392 mkdir mv printf pwd rm rmdir sed sh sort \
393 tail test touch tr true wc xargs
398 # bsd.bulk-pkg.mk uses certain tools
400 USE_TOOLS+= tee tsort
403 # INSTALL/DEINSTALL script framework
404 .include "pkginstall/bsd.pkginstall.mk"
407 .include "internal/locking.mk"
410 .include "tools/bsd.tools.mk"
413 .include "bsd.pkg.barrier.mk"
415 # Unprivileged builds
416 .include "unprivileged.mk"
418 # If NO_BUILD is defined, default to not needing a compiler.
419 .if defined(NO_BUILD)
420 USE_LANGUAGES?= # empty
423 # Get the proper dependencies and set the PATH to use the compiler
424 # named in PKGSRC_COMPILER.
426 .include "compiler.mk"
428 #Fake up a home directory
429 WRAPPER_TARGETS+= fake-home
430 FAKEHOMEDIR= ${WRKDIR}/.home
431 ALL_ENV+= HOME=${FAKEHOMEDIR}
433 fake-home: ${FAKEHOMEDIR}
435 ${RUN} ${MKDIR} ${.TARGET}
437 .include "wrapper/bsd.wrapper.mk"
439 .if defined(ABI_DEPENDS) || defined(BUILD_ABI_DEPENDS)
440 . if !empty(USE_ABI_DEPENDS:M[yY][eE][sS])
441 DEPENDS+= ${ABI_DEPENDS}
442 BUILD_DEPENDS+= ${BUILD_ABI_DEPENDS}
444 _BUILD_DEFS+= USE_ABI_DEPENDS
448 # Find out the PREFIX of dependencies where the PREFIX is needed at build time.
449 .if defined(EVAL_PREFIX)
450 FIND_PREFIX:= ${EVAL_PREFIX}
451 . include "find-prefix.mk"
454 .if !defined(_PATH_ORIG)
456 MAKEFLAGS+= _PATH_ORIG=${_PATH_ORIG:Q}
459 .if !empty(PREPEND_PATH:M*)
460 # This is very Special. Because PREPEND_PATH is set with += in reverse order,
461 # this command reverses the order again (since bootstrap bmake doesn't
462 # yet support the :[-1..1] construct).
464 path=${_PATH_ORIG:Q}; \
465 for i in ${PREPEND_PATH}; do path="$$i:$$path"; done; \
467 PATH= ${_PATH_CMD:sh} # DOES NOT use :=, to defer evaluation
470 ################################################################
471 # Many ways to disable a package.
473 # Ignore packages that can't be resold if building for a CDROM.
475 # Don't build a package if it's restricted and we don't want to
478 # Don't build any package that utilizes strong cryptography, for
479 # when the law of the land forbids it.
481 # Don't attempt to build packages against X if we don't have X.
483 # Don't build a package if it's broken.
484 ################################################################
485 .if ${X11_TYPE} == "xorg"
486 PKG_FAIL_REASON+= "Support for X11_TYPE=xorg was removed."
487 PKG_FAIL_REASON+= "Please switch to X11_TYPE=modular."
492 .if !defined(NO_SKIP)
493 . if (defined(NO_BIN_ON_CDROM) && defined(FOR_CDROM))
494 PKG_FAIL_REASON+= "${PKGNAME} may not be placed in binary form on a CDROM:" \
495 " "${NO_BIN_ON_CDROM:Q}
497 . if (defined(NO_SRC_ON_CDROM) && defined(FOR_CDROM))
498 PKG_FAIL_REASON+= "${PKGNAME} may not be placed in source form on a CDROM:" \
499 " "${NO_SRC_ON_CDROM:Q}
501 . if (defined(RESTRICTED) && defined(NO_RESTRICTED))
502 PKG_FAIL_REASON+= "${PKGNAME} is restricted:" \
505 . if !(${MKCRYPTO} == "YES" || ${MKCRYPTO} == yes)
507 PKG_FAIL_REASON+= "${PKGNAME} may not be built, because it utilizes strong cryptography"
510 . if defined(USE_X11) && (${X11_TYPE} == "native") && !exists(${X11BASE})
511 PKG_FAIL_REASON+= "${PKGNAME} uses X11, but ${X11BASE} not found"
514 PKG_FAIL_REASON+= "${PKGNAME} is marked as broken:" ${BROKEN:Q}
517 .include "license.mk"
519 # Define __PLATFORM_OK only if the OS matches the pkg's allowed list.
520 . if defined(ONLY_FOR_PLATFORM) && !empty(ONLY_FOR_PLATFORM)
521 . for __tmp__ in ${ONLY_FOR_PLATFORM}
522 . if ${MACHINE_PLATFORM:M${__tmp__}} != ""
524 . endif # MACHINE_PLATFORM
526 . else # !ONLY_FOR_PLATFORM
528 . endif # ONLY_FOR_PLATFORM
529 . for __tmp__ in ${NOT_FOR_PLATFORM}
530 . if ${MACHINE_PLATFORM:M${__tmp__}} != ""
531 . undef __PLATFORM_OK
532 . endif # MACHINE_PLATFORM
534 . if !defined(__PLATFORM_OK)
535 PKG_FAIL_REASON+= "${PKGNAME} is not available for ${MACHINE_PLATFORM}"
536 . endif # !__PLATFORM_OK
539 # Add these defs to the ones dumped into +BUILD_DEFS
540 _BUILD_DEFS+= PKGPATH
541 _BUILD_DEFS+= OPSYS OS_VERSION MACHINE_ARCH MACHINE_GNU_ARCH
543 _BUILD_DEFS+= CPPFLAGS CFLAGS FFLAGS LDFLAGS
544 _BUILD_DEFS+= OBJECT_FMT LICENSE RESTRICTED
545 _BUILD_DEFS+= NO_SRC_ON_FTP NO_SRC_ON_CDROM
546 _BUILD_DEFS+= NO_BIN_ON_FTP NO_BIN_ON_CDROM
548 .if defined(OSVERSION_SPECIFIC)
549 _BUILD_DEFS+= OSVERSION_SPECIFIC
550 .endif # OSVERSION_SPECIFIC
554 all: ${_PKGSRC_BUILD_TARGETS}
561 .if !defined(KEEP_WRKDIR)
562 . if ${WRKDIR_LOCKTYPE} != "none"
563 ${RUN} ${TEST} -f ${_WRKDIR_LOCKFILE} || ${RM} -fr ${WRKDIR}
566 ${RUN} ${MKDIR} ${WRKDIR}
568 # Create a symlink from ${WRKDIR} to the package directory if
569 # CREATE_WRKDIR_SYMLINK is "yes".
571 CREATE_WRKDIR_SYMLINK?= no
573 .if defined(WRKOBJDIR) && !empty(CREATE_WRKDIR_SYMLINK:M[Yy][Ee][Ss])
574 makedirs: ${.CURDIR}/${WRKDIR_BASENAME}
575 ${.CURDIR}/${WRKDIR_BASENAME}:
576 . if ${WRKDIR_LOCKTYPE} != "none"
577 ${RUN} ${TEST} -f ${_WRKDIR_LOCKFILE} || ${RM} -f ${.TARGET}
580 if ${LN} -s ${WRKDIR} ${.TARGET} 2>/dev/null; then \
581 ${ECHO_MSG} "${.TARGET:T} -> ${WRKDIR}"; \
585 .include "flavor/bsd.flavor.mk"
587 .include "depends/bsd.depends.mk"
588 .include "check/bsd.check.mk"
589 .include "fetch/bsd.fetch.mk"
590 .include "checksum/bsd.checksum.mk"
591 .include "extract/bsd.extract.mk"
592 .include "patch/bsd.patch.mk"
593 .include "configure/bsd.configure.mk"
594 .include "build/bsd.build.mk"
595 .include "install/bsd.install.mk"
596 .include "package/bsd.package.mk"
598 .include "bsd.pkg.clean.mk"
599 .include "bsd.pkg.update.mk"
601 # su-target is a macro target that does just-in-time su-to-root before
602 # reinvoking the make process as root. It acquires root privileges and
603 # invokes a new make process with the target named "su-${.TARGET}".
605 # MAKEFLAGS.su-${.TARGET}
606 # The additional flags that are passed to the make process.
609 # XXX: Shouldn't the $${PATH} be ${PATH} here? This may be related to
611 _ROOT_CMD= cd ${.CURDIR} && \
612 ${SETENV} ${PKGSRC_MAKE_ENV} \
613 PATH="$${PATH}:"${SU_CMD_PATH_APPEND:Q} \
614 ${MAKE} ${MAKEFLAGS} _PKGSRC_BARRIER=yes \
615 PKG_DEBUG_LEVEL=${PKG_DEBUG_LEVEL:Q} \
616 su-${.TARGET} ${MAKEFLAGS.su-${.TARGET}}
621 case ${PRE_CMD.su-${.TARGET}:Q}"" in \
623 *) ${PRE_CMD.su-${.TARGET}} ;; \
625 if ${TEST} `${ID} -u` = `${ID} -u ${_SU_ROOT_USER}`; then \
628 case ${PRE_ROOT_CMD:Q}"" in \
630 *) ${WARNING_MSG} "Running: "${PRE_ROOT_CMD:Q} ;; \
633 ${STEP_MSG} "Becoming \`\`${_SU_ROOT_USER}'' to make su-${.TARGET} (`${ECHO} ${SU_CMD} | ${AWK} '{ print $$1 }'`)"; \
634 ${SU_CMD} ${_ROOT_CMD:Q}; \
635 ${STEP_MSG} "Dropping \`\`${_SU_ROOT_USER}'' privileges."; \
638 ################################################################
639 # Some more targets supplied for users' convenience
640 ################################################################
645 ${RUN} ${LOCALBASE}/bin/pkglint
647 # List of flags to pass to pkg_add(1) for bin-install:
649 BIN_INSTALL_FLAGS?= # -v
650 .if ${PKG_INSTALLATION_TYPE} == "pkgviews"
651 PKG_ARGS_ADD= -W ${LOCALBASE} -w ${DEFAULT_VIEW}
653 _BIN_INSTALL_FLAGS= ${BIN_INSTALL_FLAGS}
654 .if defined(_AUTOMATIC) && !empty(_AUTOMATIC:M[Yy][Ee][Ss])
655 _BIN_INSTALL_FLAGS+= -A
657 _BIN_INSTALL_FLAGS+= ${PKG_ARGS_ADD}
659 _SHORT_UNAME_R= ${:!${UNAME} -r!:C@\.([0-9]*)[_.].*@.\1@} # n.n[_.]anything => n.n
661 .include "install/bin-install.mk"
663 .PHONY: show-pkgtools-version
664 .if !target(show-pkgtools-version)
665 show-pkgtools-version:
666 @${ECHO} ${PKGTOOLS_VERSION}
669 # convenience target, to display make variables from command line
670 # i.e. "make show-var VARNAME=var", will print var's value
673 # show-vars, show-subdir-var
677 @${ECHO} ${${VARNAME}:Q}
679 # enhanced version of target above, to display multiple variables
682 .for VARNAME in ${VARNAMES}
683 @${ECHO} ${${VARNAME}:Q}
686 # displays multiple variables as shell expressions
687 # VARS is space separated list of VARNAME:shellvarname
688 .PHONY: show-vars-eval
691 @${ECHO} ${var:C/^.*://}="${${var:C/:.*$//}:Q}"
694 LICENSE_FILE?= ${PKGSRCDIR}/licenses/${LICENSE}
696 .if !target(show-license)
697 show-license show-licence: .PHONY
698 @license=${LICENSE:Q}; \
699 license_file=${LICENSE_FILE:Q}; \
701 case "$$pager" in "") pager=${CAT:Q};; esac; \
702 case "$$license" in "") exit 0;; esac; \
703 if ${TEST} -f "$$license_file"; then \
704 $$pager "$$license_file"; \
706 ${ECHO} "Generic $$license information not available"; \
707 ${ECHO} "See the package description (pkg_info -d ${PKGNAME}) for more information."; \
711 # This target is defined in bsd.options.mk for packages that use
712 # the options framework.
713 .if !target(show-options)
716 @${ECHO} This package does not use the options framework.
719 # Depend is generally meaningless for arbitrary packages, but if someone wants
720 # one they can override this. This is just to catch people who've gotten into
721 # the habit of typing `${MAKE} depend all install' as a matter of course.
734 .include "plist/bsd.plist.mk"
736 .include "bsd.utils.mk"
741 # For bulk build targets (bulk-install, bulk-package), the
742 # BATCH variable must be set in /etc/mk.conf:
745 . include "bulk/bsd.bulk-pkg.mk"
748 # README generation code.
749 .include "bsd.pkg.readme.mk"
751 # Create a PKG_ERROR_HANDLER shell command for each class listed in
752 # PKG_ERROR_CLASSES. The error handler is meant to be invoked within
755 .for _class_ in ${PKG_ERROR_CLASSES}
756 PKG_ERROR_HANDLER.${_class_}?= { \
758 for str in ${PKG_ERROR_MSG.${_class_}}; do \
759 ${PHASE_MSG} "$$str"; \
765 # Cache variables listed in MAKEVARS in a phase-specific "makevars.mk"
766 # file. These variables are effectively passed to sub-make processes
767 # that are invoked on the same Makefile.
769 .for _phase_ in ${_ALL_PHASES}
770 ${_MAKEVARS_MK.${_phase_}}: ${WRKDIR}
771 ${RUN}${RM} -f ${.TARGET}.tmp
772 . for _var_ in ${MAKEVARS:O:u}
773 . if defined(${_var_})
775 ${ECHO} ${_var_}"= "${${_var_}:Q} >> ${.TARGET}.tmp
779 if ${TEST} -f ${.TARGET}.tmp; then \
780 ( ${ECHO} ".if !defined(_MAKEVARS_MK)"; \
781 ${ECHO} "_MAKEVARS_MK= defined"; \
783 ${CAT} ${.TARGET}.tmp; \
785 ${ECHO} ".endif # _MAKEVARS_MK"; \
787 ${RM} -f ${.TARGET}.tmp; \
789 ${RUN}${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
792 .if make(pbulk-index) || make(pbulk-index-item) || make(pbulk-save-wrkdir)
793 .include "pbulk/pbulk-index.mk"
796 .if defined(PKG_DEVELOPER)
797 . include "misc/developer.mk"
799 .include "misc/show.mk"
801 . include "bsd.pkg.debug.mk"
803 .include "misc/warnings.mk"
804 .include "misc/can-be-built-here.mk"