Merge from vendor branch TNF:
[pkgsrcv2.git] / mk / bsd.pkg.mk
1 #       $NetBSD: bsd.pkg.mk,v 1.1974 2010/08/24 19:08:28 bad Exp $
2 #
3 # This file is in the public domain.
4 #
5 # Please see the pkgsrc/doc/guide manual for details on the
6 # variables used in this make file template.
7 #
8 # Default sequence for "all" is:
9 #
10 #    bootstrap-depends
11 #    fetch
12 #    checksum
13 #    depends
14 #    tools
15 #    extract
16 #    patch
17 #    wrapper
18 #    configure
19 #    build
20 #
21
22 .include "misc/common.mk"
23
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 ############################################################################
29
30 ##### PKGBASE, PKGNAME[_NOREV], PKGVERSION
31
32 PKGBASE?=               ${PKGNAME:C/-[^-]*$//}
33 PKGVERSION?=            ${PKGNAME:C/^.*-//}
34 .if defined(PKGREVISION) && !empty(PKGREVISION) && (${PKGREVISION} != "0")
35 .  if defined(PKGNAME)
36 PKGNAME_NOREV:=         ${PKGNAME}
37 PKGNAME:=               ${PKGNAME}nb${PKGREVISION}
38 .  else
39 PKGNAME?=               ${DISTNAME}nb${PKGREVISION}
40 PKGNAME_NOREV=          ${DISTNAME}
41 .  endif
42 .else
43 PKGNAME?=               ${DISTNAME}
44 PKGNAME_NOREV=          ${PKGNAME}
45 .endif
46 PKGVERSION_NOREV=       ${PKGNAME_NOREV:C/^.*-//}
47
48 # Fail-safe in the case of circular dependencies
49 .if defined(_PKGSRC_DEPS) && defined(PKGNAME) && !empty(_PKGSRC_DEPS:M${PKGNAME})
50 PKG_FAIL_REASON+=       "Circular dependency detected"
51 .endif
52
53 ####
54
55 ############################################################################
56 # Allow various phases to define the default variables
57 ############################################################################
58 .if defined(EMUL_PLATFORMS) && !empty(EMUL_PLATFORMS)
59 .  include "emulator/emulator.mk"
60 .endif
61
62 .include "features/features.mk"
63
64 .include "flavor/bsd.flavor-vars.mk"
65 .include "check/bsd.check-vars.mk"
66 .include "depends/bsd.depends-vars.mk"
67 .include "fetch/bsd.fetch-vars.mk"
68 .include "checksum/bsd.checksum-vars.mk"
69 .include "extract/bsd.extract-vars.mk"
70 .include "patch/bsd.patch-vars.mk"
71 .include "configure/bsd.configure-vars.mk"
72 .include "build/bsd.build-vars.mk"
73 .include "install/bsd.install-vars.mk"
74
75 .include "bsd.pkg.error.mk"
76
77 .include "bsd.hacks.mk"
78
79 ############################################################################
80 # Transform package Makefile variables and set defaults
81 ############################################################################
82
83 MKCRYPTO?=              YES     # build crypto packages by default
84
85 ##### Others
86
87 BUILD_DEPENDS?=         # empty
88 COMMENT?=               (no description)
89 DEPENDS?=               # empty
90 DESCR_SRC?=             ${PKGDIR}/DESCR
91 INTERACTIVE_STAGE?=     none
92 .if defined(OWNER)
93 MAINTAINER=${OWNER}
94 .else
95 MAINTAINER?=            pkgsrc-users@NetBSD.org
96 .endif
97 PKGWILDCARD?=           ${PKGBASE}-[0-9]*
98 SVR4_PKGNAME?=          ${PKGNAME}
99 WRKSRC?=                ${WRKDIR}/${DISTNAME}
100
101 # Override for SU_CMD user check
102 _SU_ROOT_USER?=         ${ROOT_USER}
103 REAL_ROOT_USER?=        ${ROOT_USER}
104 REAL_ROOT_GROUP?=       ${ROOT_GROUP}
105
106 .if (defined(INSTALL_UNSTRIPPED) && !empty(INSTALL_UNSTRIPPED:M[yY][eE][sS])) || defined(DEBUG_FLAGS)
107 _INSTALL_UNSTRIPPED=    # set (flag used by platform/*.mk)
108 .endif
109
110 ##### Transform USE_* into dependencies
111
112 .include "bsd.pkg.use.mk"
113
114 ############################################################################
115 # Sanity checks
116 ############################################################################
117
118 .if defined(BUILDLINK_DEPTH) || defined(BUILDLINK_PACKAGES) || \
119     defined(BUILDLINK_DEPENDS) || defined(BUILDLINK_ORDER)
120 PKG_FAIL_REASON+=       "Out-dated buildlink3.mk detected, please update"
121 .endif
122
123 # PKG_INSTALLATION_TYPE can only be one of two values: "pkgviews" or
124 # "overwrite".
125 .if (${PKG_INSTALLATION_TYPE} != "pkgviews") && \
126     (${PKG_INSTALLATION_TYPE} != "overwrite")
127 PKG_FAIL_REASON+=       "PKG_INSTALLATION_TYPE must be \`\`pkgviews'' or \`\`overwrite''."
128 .endif
129
130 .if empty(PKG_INSTALLATION_TYPES:M${PKG_INSTALLATION_TYPE})
131 PKG_FAIL_REASON+=       "This package doesn't support PKG_INSTALLATION_TYPE=${PKG_INSTALLATION_TYPE}."
132 .endif
133
134 .if !defined(CATEGORIES) || !defined(DISTNAME)
135 PKG_FAIL_REASON+='CATEGORIES and DISTNAME are mandatory.'
136 .endif
137
138 .if defined(PKG_PATH)
139 PKG_FAIL_REASON+='Please unset PKG_PATH before doing pkgsrc work!'
140 .endif
141
142 # Allow variables to be set on a per-OS basis
143 OPSYSVARS+=     CFLAGS CXXFLAGS CPPFLAGS LDFLAGS LIBS
144 .for _var_ in ${OPSYSVARS:O}
145 .  if defined(${_var_}.${OPSYS})
146 ${_var_}+=      ${${_var_}.${OPSYS}}
147 .  elif defined(${_var_}.*)
148 ${_var_}+=      ${${_var_}.*}
149 .  endif
150 .endfor
151
152 CPPFLAGS+=      ${CPP_PRECOMP_FLAGS}
153
154 ALL_ENV+=       CC=${CC:Q}
155 ALL_ENV+=       CFLAGS=${CFLAGS:M*:Q}
156 ALL_ENV+=       CPPFLAGS=${CPPFLAGS:M*:Q}
157 ALL_ENV+=       CXX=${CXX:Q}
158 ALL_ENV+=       CXXFLAGS=${CXXFLAGS:M*:Q}
159 ALL_ENV+=       COMPILER_RPATH_FLAG=${COMPILER_RPATH_FLAG:Q}
160 ALL_ENV+=       F77=${FC:Q}
161 ALL_ENV+=       FC=${FC:Q}
162 ALL_ENV+=       FFLAGS=${FFLAGS:M*:Q}
163 ALL_ENV+=       LANG=C
164 ALL_ENV+=       LC_COLLATE=C
165 ALL_ENV+=       LC_CTYPE=C
166 ALL_ENV+=       LC_MESSAGES=C
167 ALL_ENV+=       LC_MONETARY=C
168 ALL_ENV+=       LC_NUMERIC=C
169 ALL_ENV+=       LC_TIME=C
170 ALL_ENV+=       LDFLAGS=${LDFLAGS:M*:Q}
171 ALL_ENV+=       LINKER_RPATH_FLAG=${LINKER_RPATH_FLAG:Q}
172 ALL_ENV+=       PATH=${PATH:Q}:${LOCALBASE}/bin:${X11BASE}/bin
173 ALL_ENV+=       PREFIX=${PREFIX}
174
175 # This variable can be added to MAKE_ENV to ease installation of packages
176 # that use BSD-style Makefiles.
177 BSD_MAKE_ENV=   BINOWN=${BINOWN} BINGRP=${BINGRP}
178 BSD_MAKE_ENV+=  GAMEOWN=${GAMEOWN} GAMEGRP=${GAMEGRP}
179 BSD_MAKE_ENV+=  MANOWN=${MANOWN} MANGRP=${MANGRP}
180 BSD_MAKE_ENV+=  SHAREOWN=${SHAREOWN} SHAREGRP=${SHAREGRP}
181 BSD_MAKE_ENV+=  DOCOWN=${DOCOWN} DOCGRP=${DOCGRP}
182 BSD_MAKE_ENV+=  BINMODE=${BINMODE} NONBINMODE=${NONBINMODE}
183 BSD_MAKE_ENV+=  BINDIR=${PREFIX}/bin
184 BSD_MAKE_ENV+=  INCSDIR=${PREFIX}/include
185 BSD_MAKE_ENV+=  LIBDIR=${PREFIX}/lib
186 BSD_MAKE_ENV+=  MANDIR=${PREFIX}/${PKGMANDIR}
187 BSD_MAKE_ENV+=  STRIPFLAG=${_STRIPFLAG_INSTALL:Q}
188 BSD_MAKE_ENV+=  MANINSTALL=${MANINSTALL:Q}
189 BSD_MAKE_ENV+=  MKHTML=no
190
191 _BUILD_DEFS=            ${BUILD_DEFS}
192 _BUILD_DEFS+=           LOCALBASE
193 _BUILD_DEFS+=           PKGINFODIR
194 _BUILD_DEFS+=           PKGMANDIR
195 _BUILD_DEFS+=           _USE_DESTDIR
196
197 # Store the result in the +BUILD_INFO file so we can query for the build
198 # options using "pkg_info -Q PKG_OPTIONS <pkg>".
199 #
200 .if defined(PKG_SUPPORTED_OPTIONS) && defined(PKG_OPTIONS)
201 _BUILD_DEFS+=            PKG_OPTIONS
202 .endif
203
204 .if empty(DEPOT_SUBDIR)
205 PKG_FAIL_REASON+=       "DEPOT_SUBDIR may not be empty."
206 .endif
207
208 # ZERO_FILESIZE_P exits with a successful return code if the given file
209 #       has zero length.
210 # NONZERO_FILESIZE_P exits with a successful return code if the given file
211 #       has nonzero length.
212 #
213 _ZERO_FILESIZE_P=       ${AWK} 'END { exit (NR > 0) ? 1 : 0; }'
214 _NONZERO_FILESIZE_P=    ${AWK} 'END { exit (NR > 0) ? 0 : 1; }'
215
216 # Automatically increase process limit where necessary for building.
217 _ULIMIT_CMD=            ${UNLIMIT_RESOURCES:@_lim_@${ULIMIT_CMD_${_lim_}};@}
218
219 _NULL_COOKIE=           ${WRKDIR}/.null
220
221 # Miscellaneous overridable commands:
222 SHCOMMENT?=             ${ECHO_MSG} >/dev/null '***'
223
224 LIBABISUFFIX?=
225
226 TOUCH_FLAGS?=           -f
227
228 # A few aliases for *-install targets
229 INSTALL=                ${TOOLS_INSTALL}        # XXX override sys.mk
230 INSTALL_PROGRAM?=       \
231         ${INSTALL} ${COPY} ${_STRIPFLAG_INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}
232 INSTALL_GAME?=          \
233         ${INSTALL} ${COPY} ${_STRIPFLAG_INSTALL} -o ${GAMEOWN} -g ${GAMEGRP} -m ${GAMEMODE}
234 INSTALL_SCRIPT?=        \
235         ${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}
236 INSTALL_LIB?=           \
237         ${INSTALL} ${COPY} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE}
238 INSTALL_DATA?=          \
239         ${INSTALL} ${COPY} -o ${SHAREOWN} -g ${SHAREGRP} -m ${SHAREMODE}
240 INSTALL_GAME_DATA?=     \
241         ${INSTALL} ${COPY} -o ${GAMEOWN} -g ${GAMEGRP} -m ${GAMEDATAMODE}
242 INSTALL_MAN?=           \
243         ${INSTALL} ${COPY} -o ${MANOWN} -g ${MANGRP} -m ${MANMODE}
244 INSTALL_PROGRAM_DIR?=   \
245         ${INSTALL} -d -o ${BINOWN} -g ${BINGRP} -m ${PKGDIRMODE}
246 INSTALL_GAME_DIR?=              \
247         ${INSTALL} -d -o ${GAMEOWN} -g ${GAMEGRP} -m ${GAMEDIRMODE}
248 INSTALL_SCRIPT_DIR?=    \
249         ${INSTALL_PROGRAM_DIR}
250 INSTALL_LIB_DIR?=       \
251         ${INSTALL_PROGRAM_DIR}
252 INSTALL_DATA_DIR?=      \
253         ${INSTALL} -d -o ${SHAREOWN} -g ${SHAREGRP} -m ${PKGDIRMODE}
254 INSTALL_MAN_DIR?=       \
255         ${INSTALL} -d -o ${MANOWN} -g ${MANGRP} -m ${PKGDIRMODE}
256
257 INSTALL_MACROS= BSD_INSTALL_PROGRAM=${INSTALL_PROGRAM:Q}                \
258                 BSD_INSTALL_SCRIPT=${INSTALL_SCRIPT:Q}                  \
259                 BSD_INSTALL_LIB=${INSTALL_LIB:Q}                        \
260                 BSD_INSTALL_DATA=${INSTALL_DATA:Q}                      \
261                 BSD_INSTALL_MAN=${INSTALL_MAN:Q}                        \
262                 BSD_INSTALL=${INSTALL:Q}                                \
263                 BSD_INSTALL_PROGRAM_DIR=${INSTALL_PROGRAM_DIR:Q}        \
264                 BSD_INSTALL_SCRIPT_DIR=${INSTALL_SCRIPT_DIR:Q}          \
265                 BSD_INSTALL_LIB_DIR=${INSTALL_LIB_DIR:Q}                \
266                 BSD_INSTALL_DATA_DIR=${INSTALL_DATA_DIR:Q}              \
267                 BSD_INSTALL_MAN_DIR=${INSTALL_MAN_DIR:Q}                \
268                 BSD_INSTALL_GAME=${INSTALL_GAME:Q}                      \
269                 BSD_INSTALL_GAME_DATA=${INSTALL_GAME_DATA:Q}            \
270                 BSD_INSTALL_GAME_DIR=${INSTALL_GAME_DIR:Q}
271 MAKE_ENV+=      ${INSTALL_MACROS:M*}
272 SCRIPTS_ENV+=   ${INSTALL_MACROS:M*}
273
274 # If pkgsrc is supposed to ensure that tests are run before installation
275 # of the package, then the build targets should be "build test", otherwise
276 # just "build" suffices.
277 #
278 .if !empty(PKGSRC_RUN_TEST:M[yY][eE][sS])
279 _PKGSRC_BUILD_TARGETS=  build test
280 .else
281 _PKGSRC_BUILD_TARGETS=  build
282 .endif
283
284 # OVERRIDE_DIRDEPTH represents the common directory depth under
285 #       ${WRKSRC} up to which we find the files that need to be
286 #       overridden.  By default, we search two levels down, i.e.,
287 #       */*/file.
288 #
289 OVERRIDE_DIRDEPTH?=     2
290
291 # Handle alternatives
292 #
293 .include "alternatives.mk"
294
295 # Define SMART_MESSAGES in /etc/mk.conf for messages giving the tree
296 # of dependencies for building, and the current target.
297 _PKGSRC_IN?=            ===${SMART_MESSAGES:D> ${.TARGET} [${PKGNAME}${_PKGSRC_DEPS}] ===}
298
299 # Used to print all the '===>' style prompts - override this to turn them off.
300 ECHO_MSG?=              ${ECHO}
301 PHASE_MSG?=             ${ECHO_MSG} ${_PKGSRC_IN:Q}\>
302 STEP_MSG?=              ${ECHO_MSG} "=>"
303 INFO_MSG?=              ${ECHO_MSG} "INFO:"
304 WARNING_MSG?=           ${ECHO_MSG} 1>&2 "WARNING:"
305 ERROR_MSG?=             ${ECHO_MSG} 1>&2 "ERROR:"
306 FAIL_MSG?=              ${FAIL} ${ERROR_MSG}
307
308 WARNING_CAT?=           ${SED} -e "s|^|WARNING: |" 1>&2
309 ERROR_CAT?=             ${SED} -e "s|^|ERROR: |" 1>&2
310
311 # How to do nothing.  Override if you, for some strange reason, would rather
312 # do something.
313 DO_NADA?=               ${TRUE}
314
315 # the FAIL command executes its arguments and then exits with a non-zero
316 # status.
317 FAIL?=                  ${SH} ${PKGSRCDIR}/mk/scripts/fail
318
319 #
320 # Config file related settings - see doc/pkgsrc.txt
321 #
322 PKG_SYSCONFVAR?=        ${PKGBASE}
323 PKG_SYSCONFSUBDIR?=     # empty
324 .if ${PKG_INSTALLATION_TYPE} == "overwrite"
325 PKG_SYSCONFDEPOTBASE=   # empty
326 PKG_SYSCONFBASEDIR=     ${PKG_SYSCONFBASE}
327 .else
328 .  if !empty(PKG_SYSCONFBASE:M${PREFIX}) || \
329       !empty(PKG_SYSCONFBASE:M${PREFIX}/*)
330 PKG_SYSCONFDEPOTBASE=   # empty
331 PKG_SYSCONFBASEDIR=     ${PKG_SYSCONFBASE}
332 .  else
333 PKG_SYSCONFDEPOTBASE=   ${PKG_SYSCONFBASE}/${DEPOT_SUBDIR}
334 PKG_SYSCONFBASEDIR=     ${PKG_SYSCONFDEPOTBASE}/${PKGNAME}
335 .  endif
336 .endif
337 .if empty(PKG_SYSCONFSUBDIR)
338 DFLT_PKG_SYSCONFDIR:=   ${PKG_SYSCONFBASEDIR}
339 .else
340 DFLT_PKG_SYSCONFDIR:=   ${PKG_SYSCONFBASEDIR}/${PKG_SYSCONFSUBDIR}
341 .endif
342 PKG_SYSCONFDIR=         ${DFLT_PKG_SYSCONFDIR}
343 .if defined(PKG_SYSCONFDIR.${PKG_SYSCONFVAR})
344 PKG_SYSCONFDIR=         ${PKG_SYSCONFDIR.${PKG_SYSCONFVAR}}
345 PKG_SYSCONFBASEDIR=     ${PKG_SYSCONFDIR.${PKG_SYSCONFVAR}}
346 PKG_SYSCONFDEPOTBASE=   # empty
347 .endif
348 PKG_SYSCONFDIR_PERMS?=  ${REAL_ROOT_USER} ${REAL_ROOT_GROUP} 755
349
350 ALL_ENV+=               PKG_SYSCONFDIR=${PKG_SYSCONFDIR:Q}
351 _BUILD_DEFS+=           PKG_SYSCONFBASEDIR PKG_SYSCONFDIR
352
353 # These are all of the tools use by pkgsrc Makefiles.  This should
354 # eventually be split up into lists of tools required by different
355 # phases of a pkgsrc build.
356 #
357 USE_TOOLS+=                                                             \
358         [ awk basename cat chgrp chmod chown cmp cp cut dirname echo    \
359         egrep env false file find grep head hostname id install ln ls   \
360         mkdir mv printf pwd rm rmdir sed sh sort                        \
361         tail test touch tr true wc xargs
362
363 # bsd.wrapper.mk
364 USE_TOOLS+=     expr
365
366 # bsd.bulk-pkg.mk uses certain tools
367 .if defined(BATCH)
368 USE_TOOLS+=     tee tsort
369 .endif
370
371 # INSTALL/DEINSTALL script framework
372 .include "pkginstall/bsd.pkginstall.mk"
373
374 # Locking
375 .include "internal/locking.mk"
376
377 # Tools
378 .include "tools/bsd.tools.mk"
379
380 # Barrier
381 .include "bsd.pkg.barrier.mk"
382
383 # Unprivileged builds
384 .include "unprivileged.mk"
385
386 # If NO_BUILD is defined, default to not needing a compiler.
387 .if defined(NO_BUILD)
388 USE_LANGUAGES?=         # empty
389 .endif
390
391 # Get the proper dependencies and set the PATH to use the compiler
392 # named in PKGSRC_COMPILER.
393 #
394 .include "compiler.mk"
395
396 #Fake up a home directory
397 WRAPPER_TARGETS+=       fake-home
398 FAKEHOMEDIR=            ${WRKDIR}/.home
399 ALL_ENV+=               HOME=${FAKEHOMEDIR}
400 .PHONY: fake-home
401 fake-home: ${FAKEHOMEDIR}
402 ${FAKEHOMEDIR}:
403         ${RUN} ${MKDIR} ${.TARGET}
404
405 .include "wrapper/bsd.wrapper.mk"
406
407 .if defined(ABI_DEPENDS) || defined(BUILD_ABI_DEPENDS)
408 .  if !empty(USE_ABI_DEPENDS:M[yY][eE][sS])
409 DEPENDS+=               ${ABI_DEPENDS}
410 BUILD_DEPENDS+=         ${BUILD_ABI_DEPENDS}
411 .  else
412 _BUILD_DEFS+=           USE_ABI_DEPENDS
413 .  endif
414 .endif
415
416 # Find out the PREFIX of dependencies where the PREFIX is needed at build time.
417 .if defined(EVAL_PREFIX)
418 FIND_PREFIX:=   ${EVAL_PREFIX}
419 .  include "find-prefix.mk"
420 .endif
421
422 .if !defined(_PATH_ORIG)
423 _PATH_ORIG:=            ${PATH}
424 MAKEFLAGS+=             _PATH_ORIG=${_PATH_ORIG:Q}
425 .endif
426
427 .if !empty(PREPEND_PATH:M*)
428 # This is very Special.  Because PREPEND_PATH is set with += in reverse order,
429 # this command reverses the order again (since bootstrap bmake doesn't
430 # yet support the :[-1..1] construct).
431 _PATH_CMD= \
432         path=${_PATH_ORIG:Q};                                           \
433         for i in ${PREPEND_PATH}; do path="$$i:$$path"; done;           \
434         ${ECHO} "$$path"
435 PATH=   ${_PATH_CMD:sh} # DOES NOT use :=, to defer evaluation
436 .endif
437
438 ################################################################
439 # Many ways to disable a package.
440 #
441 # Ignore packages that can't be resold if building for a CDROM.
442 #
443 # Don't build a package if it's restricted and we don't want to
444 # get into that.
445 #
446 # Don't build any package that utilizes strong cryptography, for
447 # when the law of the land forbids it.
448 #
449 # Don't attempt to build packages against X if we don't have X.
450 #
451 # Don't build a package if it's broken.
452 ################################################################
453 .if ${X11_TYPE} == "xorg"
454 PKG_FAIL_REASON+=       "Support for X11_TYPE=xorg was removed."
455 PKG_FAIL_REASON+=       "Please switch to X11_TYPE=modular."
456 X11_TYPE:=              native
457 X11BASE:=               /usr
458 .endif
459
460 .if !defined(NO_SKIP)
461 .  if (defined(NO_BIN_ON_CDROM) && defined(FOR_CDROM))
462 PKG_FAIL_REASON+= "${PKGNAME} may not be placed in binary form on a CDROM:" \
463          "    "${NO_BIN_ON_CDROM:Q}
464 .  endif
465 .  if (defined(NO_SRC_ON_CDROM) && defined(FOR_CDROM))
466 PKG_FAIL_REASON+= "${PKGNAME} may not be placed in source form on a CDROM:" \
467          "    "${NO_SRC_ON_CDROM:Q}
468 .  endif
469 .  if (defined(RESTRICTED) && defined(NO_RESTRICTED))
470 PKG_FAIL_REASON+= "${PKGNAME} is restricted:" \
471          "    "${RESTRICTED:Q}
472 .  endif
473 .  if !(${MKCRYPTO} == "YES" || ${MKCRYPTO} == yes)
474 .    if defined(CRYPTO)
475 PKG_FAIL_REASON+= "${PKGNAME} may not be built, because it utilizes strong cryptography"
476 .    endif
477 .  endif
478 .  if defined(USE_X11) && (${X11_TYPE} == "native") && !exists(${X11BASE})
479 PKG_FAIL_REASON+= "${PKGNAME} uses X11, but ${X11BASE} not found"
480 .  endif
481 .  if defined(BROKEN)
482 PKG_FAIL_REASON+= "${PKGNAME} is marked as broken:" ${BROKEN:Q}
483 .  endif
484
485 .include "license.mk"
486
487 # Define __PLATFORM_OK only if the OS matches the pkg's allowed list.
488 .  if defined(ONLY_FOR_PLATFORM) && !empty(ONLY_FOR_PLATFORM)
489 .    for __tmp__ in ${ONLY_FOR_PLATFORM}
490 .      if ${MACHINE_PLATFORM:M${__tmp__}} != ""
491 __PLATFORM_OK?= yes
492 .      endif    # MACHINE_PLATFORM
493 .    endfor     # __tmp__
494 .  else # !ONLY_FOR_PLATFORM
495 __PLATFORM_OK?= yes
496 .  endif        # ONLY_FOR_PLATFORM
497 .  for __tmp__ in ${NOT_FOR_PLATFORM}
498 .    if ${MACHINE_PLATFORM:M${__tmp__}} != ""
499 .      undef __PLATFORM_OK
500 .    endif      # MACHINE_PLATFORM
501 .  endfor       # __tmp__
502 .  if !defined(__PLATFORM_OK)
503 PKG_FAIL_REASON+= "${PKGNAME} is not available for ${MACHINE_PLATFORM}"
504 .  endif        # !__PLATFORM_OK
505 .endif
506
507 # Add these defs to the ones dumped into +BUILD_DEFS
508 _BUILD_DEFS+=   PKGPATH
509 _BUILD_DEFS+=   OPSYS OS_VERSION MACHINE_ARCH MACHINE_GNU_ARCH
510 _BUILD_DEFS+=   ABI
511 _BUILD_DEFS+=   CPPFLAGS CFLAGS FFLAGS LDFLAGS
512 _BUILD_DEFS+=   OBJECT_FMT LICENSE RESTRICTED
513 _BUILD_DEFS+=   NO_SRC_ON_FTP NO_SRC_ON_CDROM
514 _BUILD_DEFS+=   NO_BIN_ON_FTP NO_BIN_ON_CDROM
515
516 .if defined(OSVERSION_SPECIFIC)
517 _BUILD_DEFS+=   OSVERSION_SPECIFIC
518 DEPENDS+=       osabi-${OPSYS}-${OS_VERSION}:../../pkgtools/osabi
519 .endif # OSVERSION_SPECIFIC
520
521 .for _pkg_ in ${_BUILTIN_PKGS}
522 .  if defined(USE_BUILTIN.${_pkg_}) && \
523       !empty(USE_BUILTIN.${_pkg_}:M[yY][eE][sS]) && \
524       defined(BUILTIN_PKG.${_pkg_}) && !empty(BUILTIN_PKG.${_pkg_})
525 BUILTIN_PKGS+=  ${BUILTIN_PKG.${_pkg_}}
526 .  endif
527 .endfor
528 .if defined(BUILTIN_PKGS)
529 _BUILD_DEFS+=   BUILTIN_PKGS
530 .endif
531
532 .if defined(GLIBC_VERSION)
533 _BUILD_DEFS+=   GLIBC_VERSION
534 .endif # GLIBC_VERSION
535
536 .PHONY: all
537 .if !target(all)
538 all: ${_PKGSRC_BUILD_TARGETS}
539 .endif
540
541 .PHONY: makedirs
542 makedirs: ${WRKDIR}
543
544 ${WRKDIR}:
545 .if !defined(KEEP_WRKDIR)
546 .  if ${WRKDIR_LOCKTYPE} != "none"
547         ${RUN} ${TEST} -f ${_WRKDIR_LOCKFILE} || ${RM} -fr ${WRKDIR}
548 .  endif
549 .endif
550         ${RUN} umask 077 && ${MKDIR} ${WRKDIR}
551
552 # Create a symlink from ${WRKDIR} to the package directory if
553 # CREATE_WRKDIR_SYMLINK is "yes".
554 #
555 CREATE_WRKDIR_SYMLINK?= no
556
557 .if defined(WRKOBJDIR) && !empty(CREATE_WRKDIR_SYMLINK:M[Yy][Ee][Ss])
558 makedirs: ${.CURDIR}/${WRKDIR_BASENAME}
559 ${.CURDIR}/${WRKDIR_BASENAME}:
560 .  if ${WRKDIR_LOCKTYPE} != "none"
561         ${RUN} ${TEST} -f ${_WRKDIR_LOCKFILE} || ${RM} -f ${.TARGET}
562 .  endif
563         ${RUN} \
564         if ${LN} -s ${WRKDIR} ${.TARGET} 2>/dev/null; then              \
565                 ${ECHO_MSG} "${.TARGET:T} -> ${WRKDIR}";                \
566         fi
567 .endif
568
569 .include "flavor/bsd.flavor.mk"
570
571 .include "depends/bsd.depends.mk"
572 .include "check/bsd.check.mk"
573 .include "fetch/bsd.fetch.mk"
574 .include "checksum/bsd.checksum.mk"
575 .include "extract/bsd.extract.mk"
576 .include "patch/bsd.patch.mk"
577 .include "configure/bsd.configure.mk"
578 .include "build/bsd.build.mk"
579 .include "install/bsd.install.mk"
580 .include "package/bsd.package.mk"
581
582 .include "bsd.pkg.clean.mk"
583 .include "bsd.pkg.update.mk"
584
585 # su-target is a macro target that does just-in-time su-to-root before
586 # reinvoking the make process as root.  It acquires root privileges and
587 # invokes a new make process with the target named "su-${.TARGET}".
588 #
589 # MAKEFLAGS.su-${.TARGET}
590 #       The additional flags that are passed to the make process.
591 #
592
593 # XXX: Shouldn't the $${PATH} be ${PATH} here? This may be related to
594 # PR 34470.
595 _ROOT_CMD=      cd ${.CURDIR} &&                                        \
596                 ${SETENV} ${PKGSRC_MAKE_ENV}                            \
597                         PATH="$${PATH}:"${SU_CMD_PATH_APPEND:Q}         \
598                 ${MAKE} ${MAKEFLAGS} _PKGSRC_BARRIER=yes                \
599                         PKG_DEBUG_LEVEL=${PKG_DEBUG_LEVEL:Q}            \
600                         su-${.TARGET} ${MAKEFLAGS.su-${.TARGET}}
601
602 .PHONY: su-target
603 su-target: .USE
604         ${RUN} \
605         case ${PRE_CMD.su-${.TARGET}:Q}"" in                            \
606         "")     ;;                                                      \
607         *)      ${PRE_CMD.su-${.TARGET}} ;;                             \
608         esac;                                                           \
609         if ${TEST} `${ID} -u` = `${ID} -u ${_SU_ROOT_USER}`; then       \
610                 ${_ROOT_CMD};                                           \
611         else                                                            \
612                 case ${PRE_ROOT_CMD:Q}"" in                             \
613                 ${TRUE:Q}"")    ;;                                      \
614                 *) ${WARNING_MSG} "Running: "${PRE_ROOT_CMD:Q} ;;       \
615                 esac;                                                   \
616                 ${PRE_ROOT_CMD};                                        \
617                 ${STEP_MSG} "Becoming \`\`${_SU_ROOT_USER}'' to make su-${.TARGET} (`${ECHO} ${SU_CMD} | ${AWK} '{ print $$1 }'`)"; \
618                 ${SU_CMD} ${_ROOT_CMD:Q};                               \
619                 ${STEP_MSG} "Dropping \`\`${_SU_ROOT_USER}'' privileges.";      \
620         fi
621
622 ################################################################
623 # Some more targets supplied for users' convenience
624 ################################################################
625
626 # Run pkglint:
627 .PHONY: lint
628 lint:
629         ${RUN} ${LOCALBASE}/bin/pkglint
630
631 # List of flags to pass to pkg_add(1) for bin-install:
632
633 BIN_INSTALL_FLAGS?=     # -v
634 .if ${PKG_INSTALLATION_TYPE} == "pkgviews"
635 PKG_ARGS_ADD=           -W ${LOCALBASE} -w ${DEFAULT_VIEW}
636 .endif
637 _BIN_INSTALL_FLAGS=     ${BIN_INSTALL_FLAGS}
638 .if defined(_AUTOMATIC) && !empty(_AUTOMATIC:M[Yy][Ee][Ss])
639 _BIN_INSTALL_FLAGS+=    -A
640 .endif
641 _BIN_INSTALL_FLAGS+=    ${PKG_ARGS_ADD}
642
643 _SHORT_UNAME_R= ${:!${UNAME} -r!:C@\.([0-9]*)[_.].*@.\1@} # n.n[_.]anything => n.n
644
645 .include "install/bin-install.mk"
646
647 .PHONY: show-pkgtools-version
648 .if !target(show-pkgtools-version)
649 show-pkgtools-version:
650         @${ECHO} ${PKGTOOLS_VERSION}
651 .endif
652
653 # convenience target, to display make variables from command line
654 # i.e. "make show-var VARNAME=var", will print var's value
655 #
656 # See also:
657 #       show-vars, show-subdir-var
658 #
659 .PHONY: show-var
660 show-var:
661         @${ECHO} ${${VARNAME}:Q}
662
663 # enhanced version of target above, to display multiple variables
664 .PHONY: show-vars
665 show-vars:
666 .for VARNAME in ${VARNAMES}
667         @${ECHO} ${${VARNAME}:Q}
668 .endfor
669
670 # displays multiple variables as shell expressions
671 # VARS is space separated list of VARNAME:shellvarname
672 .PHONY: show-vars-eval
673 show-vars-eval:
674 .for var in ${VARS}
675         @${ECHO} ${var:C/^.*://}="${${var:C/:.*$//}:Q}"
676 .endfor
677
678 LICENSE_FILE?=          ${PKGSRCDIR}/licenses/${LICENSE}
679
680 .if !target(show-license)
681 show-license show-licence: .PHONY
682         @license=${LICENSE:Q};                                          \
683         license_file=${LICENSE_FILE:Q};                                 \
684         pager=${PAGER:Q};                                               \
685         case "$$pager" in "") pager=${CAT:Q};; esac;                    \
686         case "$$license" in "") exit 0;; esac;                          \
687         if ${TEST} -f "$$license_file"; then                            \
688                 $$pager "$$license_file";                               \
689         else                                                            \
690                 ${ECHO} "Generic $$license information not available";  \
691                 ${ECHO} "See the package description (pkg_info -d ${PKGNAME}) for more information."; \
692         fi
693 .endif
694
695 # This target is defined in bsd.options.mk for packages that use
696 # the options framework.
697 .if !target(show-options)
698 .PHONY: show-options
699 show-options:
700         @${ECHO} This package does not use the options framework.
701 .endif
702
703 # Depend is generally meaningless for arbitrary packages, but if someone wants
704 # one they can override this.  This is just to catch people who've gotten into
705 # the habit of typing `${MAKE} depend all install' as a matter of course.
706 #
707 .PHONY: depend
708 .if !target(depend)
709 depend:
710 .endif
711
712 # Same goes for tags
713 .PHONY: tags
714 .if !target(tags)
715 tags:
716 .endif
717
718 .include "plist/bsd.plist.mk"
719
720 .include "bsd.utils.mk"
721
722 .include "subst.mk"
723
724 #
725 # For bulk build targets (bulk-install, bulk-package), the
726 # BATCH variable must be set in /etc/mk.conf:
727 #
728 .if defined(BATCH)
729 .  include "bulk/bsd.bulk-pkg.mk"
730 .endif
731
732 # README generation code.
733 .include "bsd.pkg.readme.mk"
734
735 # Create a PKG_ERROR_HANDLER shell command for each class listed in
736 # PKG_ERROR_CLASSES.  The error handler is meant to be invoked within
737 # a make target.
738 #
739 .for _class_ in ${PKG_ERROR_CLASSES}
740 PKG_ERROR_HANDLER.${_class_}?=  {                                       \
741                 ec=$$?;                                                 \
742                 for str in ${PKG_ERROR_MSG.${_class_}}; do              \
743                         ${PHASE_MSG} "$$str";                           \
744                 done;                                                   \
745                 exit $$ec;                                              \
746         }
747 .endfor
748
749 # Cache variables listed in MAKEVARS in a phase-specific "makevars.mk"
750 # file.  These variables are effectively passed to sub-make processes
751 # that are invoked on the same Makefile.
752 #
753 .for _phase_ in ${_ALL_PHASES}
754 ${_MAKEVARS_MK.${_phase_}}: ${WRKDIR}
755         ${RUN}${RM} -f ${.TARGET}.tmp
756 .  for _var_ in ${MAKEVARS:O:u}
757 .    if defined(${_var_})
758         ${RUN}                                  \
759         ${ECHO} ${_var_}"=      "${${_var_}:Q} >> ${.TARGET}.tmp
760 .    endif
761 .  endfor
762         ${RUN}                                  \
763         if ${TEST} -f ${.TARGET}.tmp; then                              \
764                 ( ${ECHO} ".if !defined(_MAKEVARS_MK)";                 \
765                   ${ECHO} "_MAKEVARS_MK=        defined";               \
766                   ${ECHO} "";                                           \
767                   ${CAT} ${.TARGET}.tmp;                                \
768                   ${ECHO} "";                                           \
769                   ${ECHO} ".endif # _MAKEVARS_MK";                      \
770                 ) > ${.TARGET};                                         \
771                 ${RM} -f ${.TARGET}.tmp;                                \
772         fi
773         ${RUN}${TOUCH} ${TOUCH_FLAGS} ${.TARGET}
774 .endfor
775
776 .if make(pbulk-index) || make(pbulk-index-item) || make(pbulk-save-wrkdir)
777 .include "pbulk/pbulk-index.mk"
778 .endif
779
780 .if defined(PKG_DEVELOPER) && ${PKG_DEVELOPER} != "no"
781 .  include "misc/developer.mk"
782 .endif
783 .include "misc/show.mk"
784 .if make(debug)
785 .  include "bsd.pkg.debug.mk"
786 .endif
787 .include "misc/warnings.mk"
788 .if make(import)
789 .include "misc/import.mk"
790 .endif
791 .include "misc/can-be-built-here.mk"