aboutsummaryrefslogtreecommitdiff
path: root/Makefile.inc1
diff options
context:
space:
mode:
Diffstat (limited to 'Makefile.inc1')
-rw-r--r--Makefile.inc1165
1 files changed, 162 insertions, 3 deletions
diff --git a/Makefile.inc1 b/Makefile.inc1
index 222d7ec2b74f..8fc07557dbf1 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -177,6 +177,21 @@ VERSION= FreeBSD ${REVISION}-${BRANCH:C/-p[0-9]+$//} ${TARGET_ARCH} ${SRCRELDATE
.export VERSION
.endif
+.if !defined(PKG_VERSION)
+REVISION!= ${MAKE} -C ${SRCDIR}/release -V REVISION
+BRANCH!= ${MAKE} -C ${SRCDIR}/release -V BRANCH
+SRCRELDATE!= awk '/^\#define[[:space:]]*__FreeBSD_version/ { print $$3 }' \
+ ${SRCDIR}/sys/sys/param.h
+.if ${BRANCH:MSTABLE*} || ${BRANCH:MCURRENT*}
+TIMENOW= %Y%m%d%H%M%S
+EXTRA_REVISION= .s${TIMENOW:gmtime}
+.endif
+.if ${BRANCH:M*-p*}
+EXTRA_REVISION= _${BRANCH:C/.*-p([0-9]+$)/\1/}
+.endif
+PKG_VERSION= ${REVISION}${EXTRA_REVISION}
+.endif
+
KNOWN_ARCHES?= aarch64/arm64 \
amd64 \
arm \
@@ -248,10 +263,15 @@ TMPPATH= ${STRICTTMPPATH}:${PATH}
# It may not be functional, e.g., due to new ABI
# when in the middle of installing over this system.
#
-.if make(distributeworld) || make(installworld)
+.if make(distributeworld) || make(installworld) || make(stageworld)
INSTALLTMP!= /usr/bin/mktemp -d -u -t install
.endif
+.if make(stagekernel) || make(distributekernel)
+TAGS+= kernel
+PACKAGE= kernel
+.endif
+
#
# Building a world goes through the following stages
#
@@ -534,6 +554,9 @@ IMAKE+= -DNO_ROOT METALOG=${METALOG}
INSTALLFLAGS+= -U -M ${METALOG} -D ${INSTALL_DDIR}
MTREEFLAGS+= -W
.endif
+.if defined(BUILD_PKGS)
+INSTALLFLAGS+= -h sha256
+.endif
.if defined(DB_FROM_SRC) || defined(NO_ROOT)
IMAKE_INSTALL= INSTALL="install ${INSTALLFLAGS}"
IMAKE_MTREE= MTREE_CMD="mtree ${MTREEFLAGS}"
@@ -921,7 +944,7 @@ DEBUG_DISTRIBUTIONS+= base ${EXTRA_DISTRIBUTIONS:S,doc,,:S,tests,,}
MTREE_MAGIC?= mtree 2.0
-distributeworld installworld: _installcheck_world
+distributeworld installworld stageworld: _installcheck_world
mkdir -p ${INSTALLTMP}
progs=$$(for prog in ${ITOOLS}; do \
if progpath=`which $$prog`; then \
@@ -1073,6 +1096,21 @@ reinstall: .MAKE .PHONY
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
.endif
+restage: .MAKE .PHONY
+ @echo "--------------------------------------------------------------"
+ @echo ">>> Making hierarchy"
+ @echo "--------------------------------------------------------------"
+ ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 \
+ LOCAL_MTREE=${LOCAL_MTREE:Q} hierarchy distribution
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo ">>> Installing everything"
+ @echo "--------------------------------------------------------------"
+ ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install
+.if defined(LIB32TMP) && ${MK_LIB32} != "no"
+ ${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
+.endif
+
redistribute: .MAKE .PHONY
@echo "--------------------------------------------------------------"
@echo ">>> Distributing everything"
@@ -1272,7 +1310,7 @@ distributekernel distributekernel.debug:
DESTDIR=${INSTALL_DDIR}/kernel.${_kernel} \
${.TARGET:S/distributekernel/install/}
.if defined(NO_ROOT)
- sed -e 's|^./kernel|.|' \
+ sed -e "s|^./kernel.${_kernel}|.|" \
${DESTDIR}/${DISTDIR}/kernel.${_kernel}.premeta > \
${DESTDIR}/${DISTDIR}/kernel.${_kernel}.meta
.endif
@@ -1324,6 +1362,127 @@ packagekernel:
.endif
.endif
+stagekernel:
+ ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} distributekernel
+
+WSTAGEDIR= ${MAKEOBJDIRPREFIX}${.CURDIR}/worldstage
+KSTAGEDIR= ${MAKEOBJDIRPREFIX}${.CURDIR}/kernelstage
+REPODIR= ${MAKEOBJDIRPREFIX}${.CURDIR}/repo
+PKGSIGNKEY?= # empty
+
+_pkgbootstrap:
+.if !exists(${LOCALBASE}/sbin/pkg)
+ @env ASSUME_ALWAYS_YES=YES pkg bootstrap
+.endif
+
+packages: _pkgbootstrap
+ @mkdir -p ${WSTAGEDIR} ${KSTAGEDIR} ${REPODIR}
+ ${_+_}@cd ${.CURDIR}; \
+ ${MAKE} DESTDIR=${DESTDIR:U${WSTAGEDIR}} -DNO_ROOT -B stageworld ; \
+ ${MAKE} DESTDIR=${DESTDIR:U${KSTAGEDIR}} -DNO_ROOT -B stagekernel ; \
+ ${MAKE} DESTDIR=${DESTDIR:U${WSTAGEDIR}} \
+ PKG_VERSION=${PKG_VERSION} create-world-packages ; \
+ ${MAKE} DESTDIR=${DESTDIR:U${KSTAGEDIR}} \
+ PKG_VERSION=${PKG_VERSION} DISTDIR=kernel \
+ create-kernel-packages
+
+create-world-packages: _pkgbootstrap
+ @rm -f ${DESTDIR}/*.plist 2>/dev/null || :
+ @cd ${DESTDIR} ; \
+ awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \
+ ${DESTDIR}/METALOG
+ @for plist in ${DESTDIR}/*.plist; do \
+ plist=$${plist##*/} ; \
+ test -f ${SRCDIR}/release/packages/$${plist%.plist}.ucl || \
+ ( echo "Unkown package FreeBSD-$${plist%.plist}" ; false ) ; \
+ done
+ @cap_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VCAP_MKDB_ENDIAN` ; \
+ pwd_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VPWD_MKDB_ENDIAN` ; \
+ for plist in ${DESTDIR}/*.plist; do \
+ plist=$${plist##*/} ; \
+ pkgname=$${plist%.plist} ; \
+ sed -e "s/%VERSION%/${PKG_VERSION}/" \
+ -e "s/%PKGNAME%/$${pkgname}/" \
+ -e "s/%COMMENT%/Generic comment for $${pkgname}/" \
+ -e "s/%DESC%/Generic description for $${pkgname}/" \
+ -e "s/%CAP_MKDB_ENDIAN%/$${cap_arg}/g" \
+ -e "s/%PWD_MKDB_ENDIAN%/$${pwd_arg}/g" \
+ ${SRCDIR}/release/packages/$${pkgname}.ucl \
+ > ${DESTDIR}/$${pkgname}.ucl ; \
+ awk -F\" ' \
+ /^name/ { printf("===> Creating %s-", $$2); next } \
+ /^version/ { print $$2; next } \
+ ' ${DESTDIR}/$${pkgname}.ucl ; \
+ pkg -o ABI_FILE=${DESTDIR}/bin/sh \
+ create -M ${DESTDIR}/$${pkgname}.ucl \
+ -p ${DESTDIR}/$${pkgname}.plist \
+ -r ${DESTDIR} \
+ -o ${REPODIR}/$$(pkg -o ABI_FILE=${DESTDIR}/bin/sh config ABI)/latest ; \
+ done
+
+create-kernel-packages: _pkgbootstrap
+.if exists(${DESTDIR}/kernel.meta)
+.for flavor in release debug
+ @cd ${DESTDIR}/${DISTDIR} ; \
+ awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \
+ -v kernel=yes \
+ ${DESTDIR}/kernel.meta ; \
+ cap_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VCAP_MKDB_ENDIAN` ; \
+ pwd_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VPWD_MKDB_ENDIAN` ; \
+ sed -e "s/%VERSION%/${PKG_VERSION}/" \
+ -e "s/%PKGNAME%/kernel-${flavor}/" \
+ -e "s/%COMMENT%/FreeBSD ${INSTKERNNAME} kernel ${flavor}/" \
+ -e "s/%DESC%/FreeBSD ${INSTKERNNAME} kernel ${flavor}/" \
+ -e "s/%CAP_MKDB_ENDIAN%/$${cap_arg}/g" \
+ -e "s/%PWD_MKDB_ENDIAN%/$${pwd_arg}/g" \
+ ${SRCDIR}/release/packages/kernel.ucl \
+ > ${DESTDIR}/${DISTDIR}/kernel-${flavor}.ucl ; \
+ awk -F\" ' \
+ /name/ { printf("===> Creating %s-", $$2); next } \
+ /version/ {print $$2; next } ' \
+ ${DESTDIR}/${DISTDIR}/kernel-${flavor}.ucl ; \
+ pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh \
+ create -M ${DESTDIR}/${DISTDIR}/kernel-${flavor}.ucl \
+ -p ${DESTDIR}/${DISTDIR}/kernel-${flavor}.plist \
+ -r ${DESTDIR}/${DISTDIR} \
+ -o ${REPODIR}/$$(pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/latest
+.endfor
+.endif
+.if ${BUILDKERNELS:[#]} > 1 && !defined(NO_INSTALLEXTRAKERNELS)
+.for _kernel in ${BUILDKERNELS:[2..-1]}
+.if exists(${DESTDIR}/kernel.${_kernel}.meta)
+.for flavor in release debug
+ @cd ${DESTDIR}/kernel.${_kernel} ; \
+ awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \
+ -v kernel=yes -v _kernconf=${_kernel} \
+ ${DESTDIR}/kernel.${_kernel}.meta ; \
+ cap_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VCAP_MKDB_ENDIAN` ; \
+ pwd_arg=`cd ${SRCDIR}/etc ; ${MAKE} -VPWD_MKDB_ENDIAN` ; \
+ sed -e "s/%VERSION%/${PKG_VERSION}/" \
+ -e "s/%PKGNAME%/kernel-${_kernel:tl}-${flavor}/" \
+ -e "s/%COMMENT%/FreeBSD ${_kernel} kernel ${flavor}/" \
+ -e "s/%DESC%/FreeBSD ${_kernel} kernel ${flavor}/" \
+ -e "s/%CAP_MKDB_ENDIAN%/$${cap_arg}/g" \
+ -e "s/%PWD_MKDB_ENDIAN%/$${pwd_arg}/g" \
+ ${SRCDIR}/release/packages/kernel.ucl \
+ > ${DESTDIR}/kernel.${_kernel}/kernel.${_kernel}-${flavor}.ucl ; \
+ awk -F\" ' \
+ /name/ { printf("===> Creating %s-", $$2); next } \
+ /version/ {print $$2; next } ' \
+ ${DESTDIR}/kernel.${_kernel}/kernel.${_kernel}-${flavor}.ucl ; \
+ pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh \
+ create -M ${DESTDIR}/kernel.${_kernel}/kernel.${_kernel}-${flavor}.ucl \
+ -p ${DESTDIR}/kernel.${_kernel}/kernel.${_kernel}-${flavor}.plist \
+ -r ${DESTDIR}/kernel.${_kernel} \
+ -o ${REPODIR}/$$(pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI)/latest
+.endfor
+.endif
+.endfor
+.endif
+
+signpackages: _pkgbootstrap
+ @pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh repo ${REPODIR}/$$(pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh config ABI) ${PKGSIGNKEY}
+
#
# doxygen
#