diff --git a/Makefile b/Makefile index ff5769895c9d..1bffd18ec29b 100644 --- a/Makefile +++ b/Makefile @@ -125,7 +125,7 @@ TGTS= all all-man buildenv buildenvvars buildkernel buildworld \ _worldtmp _legacy _bootstrap-tools _cleanobj _obj \ _build-tools _cross-tools _includes _libraries _depend \ build32 builddtb distribute32 install32 xdev xdev-build xdev-install \ - xdev-links native-xtools create-kernel-packages stageworld \ + xdev-links native-xtools create-kernel-packages stageworld stagekernel \ create-world-packages packages installconfig signpackages TGTS+= ${SUBDIR_TARGETS} diff --git a/Makefile.inc1 b/Makefile.inc1 index 73ca1497fc6e..5d53736f947e 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -267,6 +267,11 @@ TMPPATH= ${STRICTTMPPATH}:${PATH} 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 # @@ -1305,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 @@ -1357,7 +1362,11 @@ packagekernel: .endif .endif -STAGEDIR= ${MAKEOBJDIRPREFIX}${.CURDIR}/stage +stagekernel: + ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} distributekernel + +WSTAGEDIR= ${MAKEOBJDIRPREFIX}${.CURDIR}/worldstage +KSTAGEDIR= ${MAKEOBJDIRPREFIX}${.CURDIR}/kernelstage REPODIR= ${MAKEOBJDIRPREFIX}${.CURDIR}/repo PKGSIGNKEY?= # empty @@ -1365,10 +1374,12 @@ _pkgbootstrap: @env ASSUME_ALWAYS_YES=YES pkg bootstrap packages: _pkgbootstrap - @mkdir -p ${STAGEDIR} ${REPODIR} + @mkdir -p ${WSTAGEDIR} ${KSTAGEDIR} ${REPODIR} ${_+_}@cd ${.CURDIR}; \ - ${MAKE} DESTDIR=${DESTDIR:U${STAGEDIR}} -DNO_ROOT -B stageworld ; \ - ${MAKE} DESTDIR=${DESTDIR:U${STAGEDIR}} create-world-packages + ${MAKE} DESTDIR=${DESTDIR:U${WSTAGEDIR}} -DNO_ROOT -B stageworld ; \ + ${MAKE} DESTDIR=${DESTDIR:U${WSTAGEDIR}} create-world-packages ; \ + ${MAKE} DESTDIR=${DESTDIR:U${KSTAGEDIR}} -DNO_ROOT -B stagekernel ; \ + ${MAKE} DESTDIR=${DESTDIR:U${KSTAGEDIR}} DISTDIR=kernel create-kernel-packages create-world-packages: _pkgbootstrap @rm -f ${DESTDIR}/*.plist 2>/dev/null || : @@ -1404,55 +1415,65 @@ create-world-packages: _pkgbootstrap done create-kernel-packages: _pkgbootstrap - @cd ${DESTDIR}/${DISTDIR} ; \ - awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \ - ${DESTDIR}/${DISTDIR}/kernel.meta +.if exists(${DESTDIR}/kernel.meta) .for flavor in release debug -.if exists(${DESTDIR}/${DISTDIR}/${flavor}.plist) - @rm -rf ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir - @cp -r ${SRCDIR}/release/packages/kernel \ - ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir @cd ${DESTDIR}/${DISTDIR} ; \ - sed -i '' -e "s/%VERSION%/${PKG_VERSION}/" \ + 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 ${KERNCONF} kernel ${flavor}/" \ - -e "s/%DESC%/FreeBSD ${KERNCONF} kernel ${flavor}/" \ - ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir/+MANIFEST - @awk -F\" '/name/ { printf("===> Creating %s-", $$2) } /version/ {print $$2 }' \ - ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir/+MANIFEST - @pkg -o ABI_FILE=${DESTDIR}/bin/sh create -m ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir \ - -p ${DESTDIR}/${DISTDIR}/${flavor}.plist \ - -r ${DESTDIR}/${DISTDIR}/kernel \ - -o ${DESTDIR} + -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 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-${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}/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 config ABI)/latest +.endfor .endif .endfor -.for _kernel in ${BUILDKERNELS:S/${INSTALLKERNEL}//} - @cd ${DESTDIR}/${DISTDIR} ; \ - awk -f ${SRCDIR}/release/scripts/mtree-to-plist.awk \ - ${DESTDIR}/${DISTDIR}/kernel${_kernel}.meta -.for flavor in release debug -.if exists(${DESTDIR}/${DISTDIR}/${flavor}.plist) - @rm -rf ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir - @cp -r ${SRCDIR}/release/packages/kernel \ - ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir - @cd ${DESTDIR}/${DISTDIR} ; \ - sed -i '' -e "s/%VERSION%/${PKG_VERSION}/" \ - -e "s/%PKGNAME%/kernel-${flavor}/" \ - -e "s/%COMMENT%/FreeBSD ${KERNCONF} kernel ${flavor}/" \ - -e "s/%DESC%/FreeBSD ${KERNCONF} kernel ${flavor}/" \ - ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir/+MANIFEST - @awk -F\" '/name/ { printf("===> Creating %s-", $$2) } /version/ {print $$2 }' \ - ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir/+MANIFEST - @pkg -o ABI_FILE=${DESTDIR}/bin/sh create -m ${DESTDIR}/${DISTDIR}/${flavor}-manifestdir \ - -p ${DESTDIR}/${DISTDIR}/${flavor}.plist \ - -r ${DESTDIR}/${DISTDIR}/kernel.${_kernel} \ - -o ${DESTDIR} .endif -.endfor -.endfor signpackages: _pkgbootstrap - @pkg -o ABI_FILE=${STAGEDIR}/bin/sh repo ${REPODIR}/$$(pkg config ABI) ${PKGSIGNKEY} + @pkg -o ABI_FILE=${WSTAGEDIR}/bin/sh repo ${REPODIR}/$$(pkg config ABI) ${PKGSIGNKEY} # # doxygen diff --git a/release/scripts/mtree-to-plist.awk b/release/scripts/mtree-to-plist.awk index 9aa172b79ddc..a60a62416741 100644 --- a/release/scripts/mtree-to-plist.awk +++ b/release/scripts/mtree-to-plist.awk @@ -22,6 +22,12 @@ type="dir" } } + if (kernel != "") { + tags="package=kernel" + if (_kernconf != "") { + tags=tags""_kernconf + } + } if (length(tags) == 0) next if (tags ~ /package=/) { @@ -57,10 +63,22 @@ } } } else { - print "No packages specified in line: $0" > 2 + print "No packages specified in line: $0" next } - output=pkgname".plist" + if (kernel != "") { + output="kernel" + if (_kernconf != "") { + output=output"."_kernconf + } + if ($1 ~ /^\/usr\/lib\/debug\/boot/) { + output=output"-debug.plist" + } else { + output=output"-release.plist" + } + } else { + output=pkgname".plist" + } print "@"type"("uname","gname","mode","flags") " $1 > output }