1# $FreeBSD$ 2# 3# Makefile for building releases and release media. 4# 5# User-driven targets: 6# cdrom: Builds release CD-ROM media (release.iso) 7# ftp: Sets up FTP distribution area (ftp) 8# release: Build all media and FTP distribution area 9# 10# Variables affecting the build process: 11# WORLDDIR: location of src tree -- must have built world and default kernel 12# (by default, the directory above this one) 13# PORTSDIR: location of ports tree to distribute (default: /usr/ports) 14# DOCDIR: location of doc tree (default: /usr/doc) 15# NOPORTS: if set, do not distribute ports tree 16# NOSRC: if set, do not distribute source tree 17# NODOC: if set, do not generate release documentation 18# TARGET/TARGET_ARCH: architecture of built release 19# 20 21WORLDDIR?= ${.CURDIR}/.. 22PORTSDIR?= /usr/ports 23DOCDIR?= /usr/doc 24RELNOTES_LANG?= en_US.ISO8859-1 25 26TARGET_ARCH?= ${MACHINE_ARCH} 27.if ${TARGET_ARCH} == ${MACHINE_ARCH} 28TARGET?= ${MACHINE} 29.else 30TARGET?= ${TARGET_ARCH} 31.endif 32IMAKE= ${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} 33DISTDIR= ${.OBJDIR}/dist 34 35.if !exists(${DOCDIR}) 36NODOC= true 37.endif 38.if !exists(${PORTSDIR}) 39NOPORTS= true 40.endif 41 42EXTRA_PACKAGES= 43.if !defined(NOPORTS) 44EXTRA_PACKAGES+= ports.txz 45.endif 46.if !defined(NOSRC) 47EXTRA_PACKAGES+= src.txz 48.endif 49.if !defined(NODOC) 50EXTRA_PACKAGES+= reldoc 51.endif 52 53RELEASE_TARGETS= ftp 54.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh) 55RELEASE_TARGETS+= cdrom 56.endif 57.if exists(${.CURDIR}/${TARGET}/make-memstick.sh) 58RELEASE_TARGETS+= memstick 59.endif 60 61.include <bsd.obj.mk> 62 63base.txz: 64 -mkdir ${DISTDIR} 65 cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${DISTDIR} 66# Set up mergemaster root database 67 sh ${.CURDIR}/scripts/mm-mtree.sh -F \ 68 "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" -D "${DISTDIR}/base" 69# Merge handbook, etc. from doc tree into src tree doc distribution 70.if !defined(NODOC) 71 cd ${DOCDIR} && ${IMAKE} all install \ 72 DOCDIR=${DISTDIR}/doc/usr/share/doc 'FORMATS=html html-split txt' \ 73 INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES 74.endif 75 cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${DISTDIR} 76 mv ${DISTDIR}/*.txz ${.OBJDIR} 77 78kernel.txz: 79 -mkdir ${DISTDIR} 80 cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${DISTDIR} 81 mv ${DISTDIR}/kernel.txz ${.OBJDIR} 82 83src.txz: 84 -mkdir -p ${DISTDIR}/usr 85 ln -fs ${WORLDDIR} ${DISTDIR}/usr/src 86 cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/src.txz --exclude .svn \ 87 --exclude CVS usr/src 88 89ports.txz: 90 -mkdir -p ${DISTDIR}/usr 91 ln -fs ${PORTSDIR} ${DISTDIR}/usr/ports 92 cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/ports.txz \ 93 --exclude usr/ports/distfiles --exclude usr/ports/packages \ 94 --exclude 'usr/ports/INDEX*' --exclude work usr/ports 95 96reldoc: 97 cd ${.CURDIR}/doc && ${MAKE} all install clean 'FORMATS=html txt' \ 98 INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc 99 -mkdir ${.OBJDIR}/reldoc 100.for i in hardware readme relnotes errata 101 ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.txt \ 102 ${.OBJDIR}/reldoc/${i:U}.TXT 103 ln -f ${.OBJDIR}/rdoc/${RELNOTES_LANG}/${i}/article.html \ 104 ${.OBJDIR}/reldoc/${i:U}.HTM 105.endfor 106 cp ${.OBJDIR}/rdoc/${RELNOTES_LANG}/readme/docbook.css ${.OBJDIR}/reldoc 107 108system: packagesystem 109# Install system 110 -mkdir ${.OBJDIR}/release 111 cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution DESTDIR=${.OBJDIR}/release 112 -rm ${.OBJDIR}/release/boot/kernel/*.symbols 113# Copy distfiles 114 mkdir ${.OBJDIR}/release/usr/freebsd-dist 115 cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST \ 116 ${.OBJDIR}/release/usr/freebsd-dist 117# Copy documentation, if generated 118.if !defined(NODOC) 119 cp ${.OBJDIR}/reldoc/* ${.OBJDIR}/release 120.endif 121# Set up installation environment 122 ln -s /tmp/bsdinstall_etc/resolv.conf ${.OBJDIR}/release/etc/resolv.conf 123 echo sendmail_enable=\"NONE\" > ${.OBJDIR}/release/etc/rc.conf 124 echo hostid_enable=\"NO\" >> ${.OBJDIR}/release/etc/rc.conf 125 cp ${.CURDIR}/rc.local ${.OBJDIR}/release/etc 126 touch ${.OBJDIR}/${.TARGET} 127 128bootonly: packagesystem 129# Install system 130 mkdir ${.OBJDIR}/bootonly 131 cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \ 132 DESTDIR=${.OBJDIR}/bootonly WITHOUT_AMD=1 WITHOUT_AT=1 \ 133 WITHOUT_BIND_DNSSEC=1 WITHOUT_BIND_ETC=1 WITHOUT_BIND_MTREE=1 \ 134 WITHOUT_BIND_NAMED=1 WITHOUT_GAMES=1 WITHOUT_GROFF=1 \ 135 WITHOUT_INSTALLLIB=1 WITHOUT_LIB32=1 WITHOUT_MAIL=1 \ 136 WITHOUT_NCP=1 WITHOUT_TOOLCHAIN=1 WITHOUT_RESCUE=1 WITHOUT_DICT=1 137 -rm ${.OBJDIR}/bootonly/boot/kernel/*.symbols 138# Copy manifest only (no distfiles) to get checksums 139 mkdir ${.OBJDIR}/bootonly/usr/freebsd-dist 140 cp ${.OBJDIR}/MANIFEST ${.OBJDIR}/bootonly/usr/freebsd-dist 141# Copy documentation, if generated 142.if !defined(NODOC) 143 cp ${.OBJDIR}/reldoc/* ${.OBJDIR}/bootonly 144.endif 145# Set up installation environment 146 ln -s /tmp/bsdinstall_etc/resolv.conf ${.OBJDIR}/bootonly/etc/resolv.conf 147 echo sendmail_enable=\"NONE\" > ${.OBJDIR}/bootonly/etc/rc.conf 148 echo hostid_enable=\"NO\" >> ${.OBJDIR}/bootonly/etc/rc.conf 149 cp ${.CURDIR}/rc.local ${.OBJDIR}/bootonly/etc 150 151release.iso: system 152 sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/release.iso ${.OBJDIR}/release 153 154bootonly.iso: bootonly 155 sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.OBJDIR}/bootonly.iso ${.OBJDIR}/bootonly 156 157memstick: system 158 sh ${.CURDIR}/${TARGET}/make-memstick.sh ${.OBJDIR}/release ${.OBJDIR}/memstick 159 160packagesystem: base.txz kernel.txz ${EXTRA_PACKAGES} 161 sh ${.CURDIR}/scripts/make-manifest.sh ${.OBJDIR}/*.txz > ${.OBJDIR}/MANIFEST 162 touch ${.OBJDIR}/${.TARGET} 163 164cdrom: release.iso bootonly.iso 165ftp: packagesystem 166 rm -rf ${.OBJDIR}/ftp 167 mkdir ${.OBJDIR}/ftp 168 cp ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST ${.OBJDIR}/ftp 169 170release: obj ${RELEASE_TARGETS} 171 172clean: 173 chflags -R noschg ${.OBJDIR} 174 rm -rf ${.OBJDIR}/dist ${.OBJDIR}/ftp 175 rm -f packagesystem 176 rm -f ${.OBJDIR}/*.txz ${.OBJDIR}/MANIFEST 177 rm -f system 178 rm -rf ${.OBJDIR}/release 179 rm -f ${.OBJDIR}/release.iso ${.OBJDIR}/memstick 180 181