5b374e445d
Packages may set PKG_DESTDIR_SUPPORT to either "destdir" or "user-destdir" to flag support for this, following the same rules as PKG_INSTALLATION_TYPES (e.g. define before first include of bsd.prefs.mk). The user activates it via USE_DESTDIR. When set to "yes", packages with "user-destdir" are handled as "destdir". The installation of the package will not go to ${LOCALBASE}, but a subdirectory of ${WRKDIR} instead. pre/post install scripts are not run and the package is not registered either. A binary package can be created instead to be installed normally with pkg_add. For "user-destdir" packages, everything is run as normal user and ownership is supposed to be correctled by pkg_create later. Since the current pkg_install code uses pax and it doesn't allow overwriting owners, this does not work yet. For "destdir" packages, installation, packaging and cleaning is run as root. This commit does not change the handling of DEPENDS_TARGET or bin-install to allow recursive usage.
138 lines
4.5 KiB
Makefile
138 lines
4.5 KiB
Makefile
# $NetBSD: package.mk,v 1.18 2006/10/09 12:25:44 joerg Exp $
|
|
|
|
######################################################################
|
|
### package (PUBLIC)
|
|
######################################################################
|
|
### package is a public target to generate a binary package. It will
|
|
### acquire elevated privileges just-in-time.
|
|
###
|
|
_PACKAGE_TARGETS+= check-vulnerable
|
|
.if make(replace)
|
|
_PACKAGE_TARGETS+= replace
|
|
.else
|
|
_PACKAGE_TARGETS+= install
|
|
.endif
|
|
_PACKAGE_TARGETS+= acquire-package-lock
|
|
_PACKAGE_TARGETS+= ${_COOKIE.package}
|
|
_PACKAGE_TARGETS+= release-package-lock
|
|
|
|
.PHONY: package
|
|
.if !target(package)
|
|
. if exists(${_COOKIE.package})
|
|
package:
|
|
@${DO_NADA}
|
|
. elif defined(_PKGSRC_BARRIER)
|
|
package: ${_PACKAGE_TARGETS}
|
|
. else
|
|
package: barrier
|
|
. endif
|
|
.endif
|
|
|
|
.PHONY: acquire-package-lock release-package-lock
|
|
acquire-package-lock: acquire-lock
|
|
release-package-lock: release-lock
|
|
|
|
.if exists(${_COOKIE.package})
|
|
${_COOKIE.package}:
|
|
@${DO_NADA}
|
|
.else
|
|
${_COOKIE.package}: real-package
|
|
.endif
|
|
|
|
######################################################################
|
|
### real-package (PRIVATE)
|
|
######################################################################
|
|
### real-package is a helper target onto which one can hook all of the
|
|
### targets that do the actual packaging of the built objects.
|
|
###
|
|
_REAL_PACKAGE_TARGETS+= package-message
|
|
_REAL_PACKAGE_TARGETS+= package-all
|
|
_REAL_PACKAGE_TARGETS+= package-cookie
|
|
|
|
.PHONY: real-package
|
|
real-package: ${_REAL_PACKAGE_TARGETS}
|
|
|
|
.PHONY: package-message
|
|
package-message:
|
|
@${PHASE_MSG} "Building binary package for ${PKGNAME}"
|
|
|
|
######################################################################
|
|
### package-cookie (PRIVATE)
|
|
######################################################################
|
|
### package-cookie creates the "package" cookie file
|
|
###
|
|
.PHONY: package-cookie
|
|
package-cookie:
|
|
${_PKG_SILENT}${_PKG_DEBUG}${TEST} ! -f ${_COOKIE.package} || ${FALSE}
|
|
${_PKG_SILENT}${_PKG_DEBUG}${MKDIR} ${_COOKIE.package:H}
|
|
${_PKG_SILENT}${_PKG_DEBUG}${ECHO} ${PKGNAME} > ${_COOKIE.package}
|
|
|
|
######################################################################
|
|
### The targets below are run with elevated privileges.
|
|
######################################################################
|
|
|
|
######################################################################
|
|
### package-all, su-package-all (PRIVATE)
|
|
######################################################################
|
|
### package-all is a helper target to create the binary package and
|
|
### generate any necessary warnings.
|
|
###
|
|
.if ${_USE_DESTDIR} == "no"
|
|
_PACKAGE_ALL_TARGETS+= package-check-installed
|
|
.endif
|
|
_PACKAGE_ALL_TARGETS+= package-create
|
|
_PACKAGE_ALL_TARGETS+= package-warnings
|
|
_PACKAGE_ALL_TARGETS+= error-check
|
|
|
|
.PHONY: package-all su-package-all
|
|
.if !empty(_MAKE_PACKAGE_AS_ROOT:M[Yy][Ee][Ss])
|
|
package-all: su-target
|
|
.else
|
|
package-all: su-package-all
|
|
.endif
|
|
su-package-all: ${_PACKAGE_ALL_TARGETS}
|
|
|
|
######################################################################
|
|
### package-check-installed (PRIVATE, override)
|
|
######################################################################
|
|
### package-check-installed verifies that the package is installed on
|
|
### the system. This should be overridden per package system flavor.
|
|
###
|
|
.if !target(package-check-installed)
|
|
.PHONY: package-check-installed
|
|
package-check-installed:
|
|
@${DO_NADA}
|
|
.endif
|
|
|
|
######################################################################
|
|
### package-create (PRIVATE, override)
|
|
######################################################################
|
|
### package-create creates the binary package. This should be overridden
|
|
### per package system flavor.
|
|
###
|
|
.if !target(package-create)
|
|
.PHONY: package-create
|
|
package-create:
|
|
@${DO_NADA}
|
|
.endif
|
|
|
|
######################################################################
|
|
### package-warnings (PRIVATE)
|
|
######################################################################
|
|
### package-warnings displays warnings about the binary package.
|
|
###
|
|
.PHONY: package-warnings
|
|
package-warnings:
|
|
.if defined(NO_BIN_ON_CDROM)
|
|
@${WARNING_MSG} "${PKGNAME} may not be put on a CD-ROM:"
|
|
@${WARNING_MSG} ${NO_BIN_ON_CDROM:Q}
|
|
.endif
|
|
.if defined(NO_BIN_ON_FTP)
|
|
@${WARNING_MSG} "${PKGNAME} may not be made available through FTP:"
|
|
@${WARNING_MSG} ${NO_BIN_ON_FTP:Q}
|
|
.endif
|
|
.if defined(ABI_DEPENDS) && !empty(USE_ABI_DEPENDS:M[Nn][Oo])
|
|
@${WARNING_MSG} "ABI dependency recommendations are being ignored!"
|
|
@${WARNING_MSG} "${PKGNAME} should not be uploaded nor"
|
|
@${WARNING_MSG} "otherwise be used as a binary package!"
|
|
.endif
|