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