Makefile revision 264029
1193326Sed# $FreeBSD: head/release/Makefile 264029 2014-04-01 22:52:27Z gjb $ 2193326Sed# 3193326Sed# Makefile for building releases and release media. 4193326Sed# 5193326Sed# User-driven targets: 6193326Sed# cdrom: Builds release CD-ROM media (disc1.iso) 7193326Sed# dvdrom: Builds release DVD-ROM media (dvd1.iso) 8193326Sed# memstick: Builds memory stick image (memstick.img) 9193326Sed# mini-memstick: Builds minimal memory stick image (mini-memstick.img) 10193326Sed# ftp: Sets up FTP distribution area (ftp) 11193326Sed# release: Build all media and FTP distribution area 12193326Sed# install: Copies all release media into ${DESTDIR} 13193326Sed# 14193326Sed# Variables affecting the build process: 15193326Sed# WORLDDIR: location of src tree -- must have built world and default kernel 16193326Sed# (by default, the directory above this one) 17249423Sdim# PORTSDIR: location of ports tree to distribute (default: /usr/ports) 18249423Sdim# DOCDIR: location of doc tree (default: /usr/doc) 19249423Sdim# NOPKG: if set, do not distribute third-party packages 20263508Sdim# NOPORTS: if set, do not distribute ports tree 21249423Sdim# NOSRC: if set, do not distribute source tree 22249423Sdim# NODOC: if set, do not generate release documentation 23193326Sed# WITH_DVD: if set, generate dvd1.iso 24193326Sed# WITH_COMPRESSED_IMAGES: if set, compress installation images with gzip(1) 25249423Sdim# (uncompressed images are not removed) 26218893Sdim# TARGET/TARGET_ARCH: architecture of built release 27263508Sdim# 28193326Sed 29249423SdimWORLDDIR?= ${.CURDIR}/.. 30224145SdimPORTSDIR?= /usr/ports 31193326SedDOCDIR?= /usr/doc 32193326SedRELNOTES_LANG?= en_US.ISO8859-1 33249423Sdim 34193326Sed.if !defined(TARGET) || empty(TARGET) 35193326SedTARGET= ${MACHINE} 36193326Sed.endif 37193326Sed.if !defined(TARGET_ARCH) || empty(TARGET_ARCH) 38198092Srdivacky.if ${TARGET} == ${MACHINE} 39207619SrdivackyTARGET_ARCH= ${MACHINE_ARCH} 40193326Sed.else 41193326SedTARGET_ARCH= ${TARGET} 42198398Srdivacky.endif 43193326Sed.endif 44210299SedIMAKE= ${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} 45193326SedDISTDIR= dist 46193326Sed 47193326Sed# Define OSRELEASE by using newvars.sh 48193326Sed.if !defined(OSRELEASE) || empty(OSRELEASE) 49234353Sdim.for _V in TYPE BRANCH REVISION 50193326Sed${_V}!= eval $$(awk '/^${_V}=/{print}' ${.CURDIR}/../sys/conf/newvers.sh); echo $$${_V} 51221345Sdim.endfor 52198092Srdivacky.for _V in ${TARGET_ARCH} 53193326Sed.if !empty(TARGET:M${_V}) 54218893SdimOSRELEASE= ${TYPE}-${REVISION}-${BRANCH}-${TARGET} 55193326Sed.else 56193326SedOSRELEASE= ${TYPE}-${REVISION}-${BRANCH}-${TARGET}-${TARGET_ARCH} 57193326Sed.endif 58193326Sed.endfor 59193326Sed.endif 60193326Sed 61193326Sed.if !exists(${DOCDIR}) 62193326SedNODOC= true 63193326Sed.endif 64193326Sed.if !exists(${PORTSDIR}) 65193326SedNOPORTS= true 66204643Srdivacky.endif 67193326Sed 68193326SedEXTRA_PACKAGES= 69193326Sed.if !defined(NOPORTS) 70193326SedEXTRA_PACKAGES+= ports.txz 71193326Sed.endif 72224145Sdim.if !defined(NOSRC) 73193326SedEXTRA_PACKAGES+= src.txz 74193326Sed.endif 75193326Sed.if !defined(NODOC) 76193326SedEXTRA_PACKAGES+= reldoc 77193326Sed.endif 78208600Srdivacky 79212904SdimRELEASE_TARGETS= ftp 80218893SdimIMAGES= 81218893Sdim.if exists(${.CURDIR}/${TARGET}/mkisoimages.sh) 82193326SedRELEASE_TARGETS+= cdrom 83249423SdimIMAGES+= disc1.iso bootonly.iso 84249423Sdim. if defined(WITH_DVD) && !empty(WITH_DVD) 85249423SdimRELEASE_TARGETS+= dvdrom 86249423SdimIMAGES+= dvd1.iso 87249423Sdim. endif 88249423Sdim.endif 89249423Sdim.if exists(${.CURDIR}/${TARGET}/make-memstick.sh) 90249423SdimRELEASE_TARGETS+= memstick.img 91249423SdimRELEASE_TARGETS+= mini-memstick.img 92249423SdimIMAGES+= memstick.img 93249423SdimIMAGES+= mini-memstick.img 94193326Sed.endif 95193326Sed 96218893SdimCLEANFILES= packagesystem *.txz MANIFEST system ${IMAGES} 97243830SdimCLEANDIRS= dist ftp release bootonly dvd 98243830Sdimbeforeclean: 99212904Sdim chflags -R noschg . 100212904Sdim.include <bsd.obj.mk> 101193326Sedclean: beforeclean 102212904Sdim 103212904Sdimbase.txz: 104210299Sed mkdir -p ${DISTDIR} 105212904Sdim cd ${WORLDDIR} && ${IMAKE} distributeworld DISTDIR=${.OBJDIR}/${DISTDIR} 106212904Sdim# Set up mergemaster root database 107212904Sdim sh ${.CURDIR}/scripts/mm-mtree.sh -m ${WORLDDIR} -F \ 108212904Sdim "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" -D "${.OBJDIR}/${DISTDIR}/base" 109212904Sdim etcupdate extract -B -M "TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}" \ 110212904Sdim -s ${WORLDDIR} -d "${.OBJDIR}/${DISTDIR}/base/var/db/etcupdate" 111212904Sdim# Package all components 112212904Sdim cd ${WORLDDIR} && ${IMAKE} packageworld DISTDIR=${.OBJDIR}/${DISTDIR} 113212904Sdim mv ${DISTDIR}/*.txz . 114212904Sdim 115218893Sdimkernel.txz: 116249423Sdim mkdir -p ${DISTDIR} 117249423Sdim cd ${WORLDDIR} && ${IMAKE} distributekernel packagekernel DISTDIR=${.OBJDIR}/${DISTDIR} 118249423Sdim mv ${DISTDIR}/kernel*.txz . 119249423Sdim 120249423Sdimsrc.txz: 121212904Sdim mkdir -p ${DISTDIR}/usr 122210299Sed ln -fs ${WORLDDIR} ${DISTDIR}/usr/src 123210299Sed cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/src.txz --exclude .svn --exclude .zfs \ 124212904Sdim --exclude .git --exclude @ --exclude usr/src/release/dist usr/src 125210299Sed 126210299Sedports.txz: 127193326Sed mkdir -p ${DISTDIR}/usr 128199482Srdivacky ln -fs ${PORTSDIR} ${DISTDIR}/usr/ports 129193326Sed cd ${DISTDIR} && tar cLvJf ${.OBJDIR}/ports.txz \ 130193326Sed --exclude .git --exclude .svn \ 131193326Sed --exclude usr/ports/distfiles --exclude usr/ports/packages \ 132193326Sed --exclude 'usr/ports/INDEX*' --exclude work usr/ports 133251662Sdim 134251662Sdimreldoc: 135193326Sed cd ${.CURDIR}/doc && ${MAKE} all install clean 'FORMATS=html txt' \ 136193326Sed INSTALL_COMPRESSED='' URLS_ABSOLUTE=YES DOCDIR=${.OBJDIR}/rdoc 137193326Sed mkdir -p reldoc 138193326Sed.for i in hardware readme relnotes errata 139193326Sed ln -f rdoc/${RELNOTES_LANG}/${i}/article.txt reldoc/${i:tu}.TXT 140193326Sed ln -f rdoc/${RELNOTES_LANG}/${i}/article.html reldoc/${i:tu}.HTM 141193326Sed.endfor 142200583Srdivacky cp rdoc/${RELNOTES_LANG}/readme/docbook.css reldoc 143200583Srdivacky 144200583Srdivackysystem: packagesystem 145224145Sdim# Install system 146224145Sdim mkdir -p release 147224145Sdim cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \ 148224145Sdim DESTDIR=${.OBJDIR}/release WITHOUT_RESCUE=1 WITHOUT_KERNEL_SYMBOLS=1 \ 149193326Sed WITHOUT_PROFILE=1 WITHOUT_SENDMAIL=1 WITHOUT_ATF=1 WITHOUT_LIB32=1 150210299Sed# Copy distfiles 151210299Sed mkdir -p release/usr/freebsd-dist 152193326Sed cp *.txz MANIFEST release/usr/freebsd-dist 153193326Sed# Copy documentation, if generated 154200583Srdivacky.if !defined(NODOC) 155193326Sed cp reldoc/* release 156193326Sed.endif 157193326Sed# Set up installation environment 158193326Sed ln -fs /tmp/bsdinstall_etc/resolv.conf release/etc/resolv.conf 159193326Sed echo sendmail_enable=\"NONE\" > release/etc/rc.conf 160263508Sdim echo hostid_enable=\"NO\" >> release/etc/rc.conf 161263508Sdim cp ${.CURDIR}/rc.local release/etc 162263508Sdim touch ${.TARGET} 163263508Sdim 164263508Sdimbootonly: packagesystem 165263508Sdim# Install system 166263508Sdim mkdir -p bootonly 167263508Sdim cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \ 168263508Sdim DESTDIR=${.OBJDIR}/bootonly WITHOUT_AMD=1 WITHOUT_AT=1 \ 169263508Sdim WITHOUT_GAMES=1 WITHOUT_GROFF=1 \ 170263508Sdim WITHOUT_INSTALLLIB=1 WITHOUT_LIB32=1 WITHOUT_MAIL=1 \ 171263508Sdim WITHOUT_NCP=1 WITHOUT_TOOLCHAIN=1 WITHOUT_PROFILE=1 \ 172263508Sdim WITHOUT_INSTALLIB=1 WITHOUT_RESCUE=1 WITHOUT_DICT=1 \ 173263508Sdim WITHOUT_KERNEL_SYMBOLS=1 174263508Sdim# Copy manifest only (no distfiles) to get checksums 175263508Sdim mkdir -p bootonly/usr/freebsd-dist 176263508Sdim cp MANIFEST bootonly/usr/freebsd-dist 177263508Sdim# Copy documentation, if generated 178263508Sdim.if !defined(NODOC) 179263508Sdim cp reldoc/* bootonly 180263508Sdim.endif 181263508Sdim# Set up installation environment 182263508Sdim ln -fs /tmp/bsdinstall_etc/resolv.conf bootonly/etc/resolv.conf 183263508Sdim echo sendmail_enable=\"NONE\" > bootonly/etc/rc.conf 184263508Sdim echo hostid_enable=\"NO\" >> bootonly/etc/rc.conf 185263508Sdim cp ${.CURDIR}/rc.local bootonly/etc 186263508Sdim 187263508Sdimdvd: 188263508Sdim# Install system 189263508Sdim mkdir -p ${.TARGET} 190263508Sdim cd ${WORLDDIR} && ${IMAKE} installkernel installworld distribution \ 191263508Sdim DESTDIR=${.OBJDIR}/${.TARGET} WITHOUT_RESCUE=1 WITHOUT_KERNEL_SYMBOLS=1 192263508Sdim# Copy distfiles 193263508Sdim mkdir -p ${.TARGET}/usr/freebsd-dist 194263508Sdim cp *.txz MANIFEST ${.TARGET}/usr/freebsd-dist 195263508Sdim# Copy documentation, if generated 196263508Sdim.if !defined(NODOC) 197263508Sdim cp reldoc/* ${.TARGET} 198263508Sdim.endif 199263508Sdim# Set up installation environment 200263508Sdim ln -fs /tmp/bsdinstall_etc/resolv.conf ${.TARGET}/etc/resolv.conf 201263508Sdim echo sendmail_enable=\"NONE\" > ${.TARGET}/etc/rc.conf 202263508Sdim echo hostid_enable=\"NO\" >> ${.TARGET}/etc/rc.conf 203263508Sdim cp ${.CURDIR}/rc.local ${.TARGET}/etc 204263508Sdim touch ${.TARGET} 205263508Sdim 206263508Sdimrelease.iso: disc1.iso 207263508Sdimdisc1.iso: system 208263508Sdim sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.TARGET} release 209263508Sdim 210263508Sdimdvd1.iso: dvd pkg-stage 211263508Sdim sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.TARGET} dvd 212263508Sdim 213263508Sdimbootonly.iso: bootonly 214263508Sdim sh ${.CURDIR}/${TARGET}/mkisoimages.sh -b FreeBSD_Install ${.TARGET} bootonly 215263508Sdim 216263508Sdimmemstick: memstick.img 217263508Sdimmemstick.img: system 218263508Sdim sh ${.CURDIR}/${TARGET}/make-memstick.sh release ${.TARGET} 219239462Sdim 220239462Sdimmini-memstick: mini-memstick.img 221239462Sdimmini-memstick.img: system 222239462Sdim sh ${.CURDIR}/${TARGET}/make-memstick.sh bootonly ${.TARGET} 223243830Sdim 224243830Sdimpackagesystem: base.txz kernel.txz ${EXTRA_PACKAGES} 225243830Sdim sh ${.CURDIR}/scripts/make-manifest.sh *.txz > MANIFEST 226193326Sed touch ${.TARGET} 227249423Sdim 228249423Sdimpkg-stage: 229249423Sdim.if !defined(NOPKG) 230224145Sdim env REPOS_DIR=${.CURDIR}/pkg_repos/ \ 231224145Sdim sh ${.CURDIR}/scripts/pkg-stage.sh 232224145Sdim mkdir -p ${.OBJDIR}/dvd/packages/repos/ 233218893Sdim cp ${.CURDIR}/scripts/FreeBSD_install_cdrom.conf \ 234218893Sdim ${.OBJDIR}/dvd/packages/repos/ 235218893Sdim.endif 236234353Sdim touch ${.TARGET} 237234353Sdim 238234353Sdimcdrom: disc1.iso bootonly.iso 239208600Srdivackydvdrom: dvd1.iso 240208600Srdivackyftp: packagesystem 241208600Srdivacky rm -rf ftp 242193326Sed mkdir -p ftp 243210299Sed cp *.txz MANIFEST ftp 244263508Sdim 245193326Sedrelease: 246263508Sdim ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} obj 247263508Sdim ${MAKE} -C ${.CURDIR} ${.MAKEFLAGS} ${RELEASE_TARGETS} 248263508Sdim 249263508Sdiminstall: 250263508Sdim.if defined(DESTDIR) && !empty(DESTDIR) 251263508Sdim mkdir -p ${DESTDIR} 252263508Sdim.endif 253263508Sdim cp -a ftp ${DESTDIR}/ 254263508Sdim.for I in ${IMAGES} 255263508Sdim cp -p ${I} ${DESTDIR}/${OSRELEASE}-${I} 256263508Sdim. if defined(WITH_COMPRESSED_IMAGES) && !empty(WITH_COMPRESSED_IMAGES) 257212904Sdim gzip -k ${DESTDIR}/${OSRELEASE}-${I} 258212904Sdim. endif 259212904Sdim.endfor 260212904Sdim cd ${DESTDIR} && sha256 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.SHA256 261212904Sdim cd ${DESTDIR} && md5 ${OSRELEASE}* > ${DESTDIR}/CHECKSUM.MD5 262234353Sdim