Makefile revision 125406
1275970Scy# $FreeBSD: head/release/Makefile 125406 2004-02-03 22:05:55Z jhb $ 2275970Scy# 3275970Scy# make release [BUILDNAME=somename] CHROOTDIR=/some/dir CVSROOT=/cvs/dir \ 4275970Scy# [RELEASETAG=tag] 5275970Scy# 6275970Scy# Where "/some/dir" is the pathname of a directory on a some filesystem with 7275970Scy# at least 1000MB of free space, "somename" is what you want the release to 8275970Scy# call itself, "/cvs/dir" is where our source repo resides and, optionally, 9275970Scy# which CVS "tag" name should be used when checking out the sources to build 10275970Scy# the release (default is HEAD). 11275970Scy# 12275970Scy# Please note: the md(4) driver must be present in the kernel 13275970Scy# (either by being compiled in or available as a kld(4) module), 14275970Scy# otherwise the target 'release.9' and possibly others will fail. 15275970Scy# 16275970Scy# Note: If you add options to this file, please keep release(7) updated! 17275970Scy# 18275970Scy# Set these, release builder! 19275970Scy# 20275970Scy# Fixed version: 21275970Scy#BUILDNAME=5.2-RELEASE 22275970Scy# 23275970Scy# Automatic SNAP versioning: 24275970ScyDATE != date +%Y%m%d 25275970ScyBASE = 5.2 26275970ScyBUILDNAME?=${BASE}-${DATE}-SNAP 27275970Scy# 28275970Scy#CHROOTDIR=/junk/release 29275970Scy# If this is a -stable snapshot, then set 30275970Scy#RELEASETAG=RELENG_4 31275970Scy# 32275970Scy# To test a release with a source tree containing patches and 33275970Scy# other work. This tree will get copied instead of getting the 34275970Scy# src/ tree from a CVS checkout. For "rerelease", this will NOT 35275970Scy# be copied; cvs update will be used instead. 36275970Scy#EXTSRCDIR=/usr/src 37275970Scy# 38275970Scy# To add other options to the CVS subcommands (co,up), set 39275970Scy#CVSCMDARGS="-D '01/01/2002 00:00:00 UTC'" 40275970Scy# 41275970Scy# To add other options to the CVS command, set 42275970Scy#CVSARGS="-lfq" 43275970Scy# 44275970Scy# To prefix the cvs command 45275970Scy#CVSPREFIX="/usr/bin/time" 46275970Scy# 47275970Scy# Where the CVS repository is 48275970Scy#CVSROOT="/home/ncvs" 49275970Scy# 50275970Scy# Non-zero if ${RELEASETAG} is in the form "RELENG_ver_RELEASE"; we 51275970Scy# are building an official release. Otherwise, we are building for 52275970Scy# a branch. 53275970Scy.if defined(RELEASETAG) 54275970ScyISRELEASE!= expr "${RELEASETAG}" : '^RELENG_.*_RELEASE$$' || true 55275970Scy.if ${ISRELEASE} != 0 56275970Scy# Convert "RELENG_ver_RELEASE" to "RELEASE_ver" for ports and doc trees. 57275970ScyAUXRELEASETAG!= echo ${RELEASETAG} | sed -e 's/^RELENG_/RELEASE_/' -e 's/_RELEASE$$//' 58275970ScyDOCRELEASETAG?= ${AUXRELEASETAG} 59275970ScyPORTSRELEASETAG?= ${AUXRELEASETAG} 60275970Scy.endif 61275970Scy.endif 62275970Scy 63275970Scy# If you want to pass flags to the world build such as -j X, use 64275970Scy# WORLD_FLAGS. Similarly, you can specify make flags for kernel 65275970Scy# builds via KERNEL_FLAGS. 66275970Scy# Similarly, you can specify make flags for make readmes via PORTREADMES_FLAGS. 67275970Scy#WORLD_FLAGS=-j4 68275970Scy#KERNEL_FLAGS=-j4 69275970Scy#PORTREADMES_FLAGS=-j4 70275970Scy 71275970ScyTARGET_ARCH?= ${MACHINE_ARCH} 72275970Scy.if ${TARGET_ARCH} == ${MACHINE_ARCH} 73275970ScyTARGET?= ${MACHINE} 74275970Scy.else 75275970ScyTARGET?= ${TARGET_ARCH} 76275970Scy.endif 77275970ScyCROSSENV= TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET} 78275970ScyCROSSMAKE= ${MAKE} ${CROSSENV} 79275970ScyNATIVEMAKE= ${MAKE} TARGET_ARCH=${MACHINE_ARCH} TARGET=${MACHINE} 80275970Scy 81275970Scy# If you are using a local CVS repository with components stored in 82275970Scy# non-standard modules, override these on the make commandline or 83275970Scy# in the environment. 84275970ScyRELEASESRCMODULE?= src 85275970ScyRELEASEDOCMODULE?= doc 86275970ScyRELEASEPORTSMODULE?= ports 87275970Scy 88275970Scy# Uncomment this to disable the doc.1 target. Docs normally require 89275970Scy# the ports tree, so NOPORTS can be set together with NODOC in order 90275970Scy# to have neither ports or docs. If only NOPORTS is set to YES, but 91275970Scy# docs are still desired, the DOMINIMALDOCPORTS logic below will only 92275970Scy# install the ports that are minimally required for the docs. This is 93275970Scy# intended as a compromise, less disk space is required than for using 94275970Scy# the entire ports collection (and much less time due to the huge number 95275970Scy# of directories it would create), but still quite a bit as well as some 96275970Scy# CPU cycles (some of the programs are C++, and things like ghostscript 97275970Scy# belong to the required ports nevertheless). 98275970Scy# 99275970Scy# Setting this also disables building of release note documentation 100275970Scy# (RELNOTESng). 101275970Scy#NODOC= YES 102275970Scy#NOPORTS= YES 103275970Scy 104275970Scy# Modify this definition if you want the release notes 105275970Scy# and other release documentation in a language other than English. 106275970ScyRELNOTES_LANG?= en_US.ISO8859-1 107275970Scy 108275970Scy# As an alternative to installing the entire ports collection (which 109275970Scy# can take a huge amount of time, in particular on slower disks), 110275970Scy# setting ${MINIMALDOCPORTS} allows to install and build just those 111275970Scy# ports that are really required for getting the docs up & running. 112275970Scy.if defined(NOPORTS) && !defined(NODOC) 113275970ScyDOMINIMALDOCPORTS= YES 114275970Scy.include "Makefile.inc.docports" 115275970ScyRELEASEPORTSMODULE= ${MINIMALDOCPORTS} 116275970Scy.endif 117275970Scy 118275970Scy# Helper variable 119275970Scy.if defined(NOPORTS) 120275970Scy.if !defined(DOMINIMALDOCPORTS) || ${DOMINIMALDOCPORTS} != "YES" 121275970ScyNOPORTSATALL= YES 122275970Scy.endif 123275970Scy.endif 124275970Scy 125275970Scy# By default, documentation (Handbook, FAQ, etc.) is built for all 126275970Scy# the languages. To speed up building, set the DOC_LANG to just 127275970Scy# the languages you need. (The language for the release notes is 128275970Scy# controlled by the RELNOTES_LANG variable above.) 129275970Scy#DOC_LANG= en_US.ISO8859-1 130275970ScyDOCPORTS= textproc/docproj 131275970Scy# Set this to wherever the distfiles required by release procedures. 132275970Scy.if defined(DOCDISTFILES) 133275970Scy# Respect DOCDISTFILES which is used before. 134275970ScyRELEASEDISTFILES?= ${DOCDISTFILES} 135275970Scy.else 136275970ScyRELEASEDISTFILES?= ${.CURDIR}/../../ports/distfiles 137275970Scy.endif 138275970Scy# Set this to 1 if you want -P to be used for automatic keyboard detection 139275970Scy# on the boot floppy. WARNING: Breaks on some Athlon (K7) motherboards. 140275970ScyAUTO_KEYBOARD_DETECT?= 0 141275970Scy 142275970Scy.if !defined(NODOC) 143275970ScyDIST_DOCS_ARCH_INDEP= readme errata early-adopter 144275970ScyDIST_DOCS_ARCH_DEP= installation relnotes hardware 145275970Scy.endif 146275970Scy 147275970Scy# Things which without too much trouble can be considered variables 148275970Scy# BASE_DISTS are special in that they get full /etc installation sets. 149275970Scy# 150275970Scy.if ${TARGET_ARCH} == "i386" 151275970ScyCOMPAT_DISTS?= compat1x compat20 compat21 compat22 compat3x compat4x 152275970Scy.elif ${TARGET_ARCH} == "alpha" 153275970ScyCOMPAT_DISTS?= compat4x 154275970Scy.endif 155275970ScyOTHER_DISTS?= catpages manpages games proflibs dict info doc 156275970ScyCRYPTO_DISTS?= crypto 157275970ScyBASE_DISTS?= base 158275970ScyDISTRIBUTIONS?= ${BASE_DISTS} ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS} 159275970Scy 160275970Scy# mountpoint for filesystems. 161275970ScyMNT= /mnt 162275970Scy 163275970Scy# Various floppy image parameters. 164275970Scy# 165275970Scy 166275970Scy.if ${TARGET_ARCH} == "i386" 167275970Scy.if ${TARGET} == "pc98" 168275970ScySMALLFLOPPYSIZE= 1200 169275970ScySMALLFLOPPYSPLITSIZE= 1152 170275970ScySMALLFLOPPYLABEL= fd1200 171275970ScySPLIT_MFSROOT= 172275970Scy.endif 173275970ScyFLOPPYSIZE= 1440 174275970ScyFLOPPYSPLITSIZE= 1392 175275970ScyFLOPPYINODE= 40000 176275970ScyFLOPPYLABEL= fd1440 177275970ScyBOOTINODE= 80000 178275970ScyMFSSIZE= 4320 179275970ScyMFSINODE= 8000 180275970ScyMFSLABEL= minimum3 181275970Scy.elif ${TARGET_ARCH} == "alpha" 182275970ScyMFSSIZE= 4320 183275970ScyMFSINODE= 8000 184275970ScyMFSLABEL= auto 185275970ScyNO_FLOPPIES= 186275970Scy.elif ${TARGET_ARCH} == "sparc64" 187275970ScyDISKLABEL= sunlabel 188275970ScyMFSSIZE= 4096 189275970ScyMFSINODE= 8192 190275970ScyMFSLABEL= auto 191275970ScyMINIROOT= 192275970ScyNO_FLOPPIES= 193275970Scy.elif ${TARGET_ARCH} == "ia64" 194275970ScyMFSSIZE= 8192 195275970ScyMFSINODE= 8192 196275970ScyMFSLABEL= auto 197275970ScyNO_FLOPPIES= 198275970Scy.elif ${TARGET_ARCH} == "amd64" 199275970ScyMFSSIZE= 4096 200275970ScyMFSINODE= 8192 201275970ScyMFSLABEL= auto 202275970ScyNO_FLOPPIES= 203275970Scy.endif 204275970Scy 205275970Scy.if exists(/sbin/bsdlabel) 206275970ScyDISKLABEL?= bsdlabel 207275970Scy.else 208275970ScyDISKLABEL?= disklabel 209275970Scy.endif 210275970Scy 211275970ScyZIPNSPLIT= gzip --no-name -9 -c | split -b 1392k - 212275970Scy 213275970Scy# Things that need to be compiled without crypto support in releases 214275970Scy.if !defined(FIXCRYPTO) && !make(release) && !make(rerelease) 215275970ScyFIXCRYPTO!= cd ${.CURDIR}/../secure; ${MAKE} -V SPROGS 216275970Scy.endif 217275970Scy 218275970Scy# Things which may get you into trouble if you change them 219275970ScyMTREEFILES= ${.CURDIR}/../etc/mtree 220275970Scy_R?= /R 221275970ScyRD= ${_R}/stage 222275970ScyRND= ${RD}/release.doc 223275970ScyFD= ${_R}/ftp 224275970ScyCD= ${_R}/cdrom 225275970Scy.if ${TARGET} != "pc98" 226275970ScyCD_BOOT= ${CD}/bootonly 227275970Scy.endif 228275970ScyCD_DISC1= ${CD}/disc1 229275970ScyCD_DISC2= ${CD}/disc2 230275970Scy_MK?= ${CHROOTDIR}/mk 231275970Scy 232275970Scy# Where the bootstrap ports (see DOCPORTS) get installed. 233275970ScyLOCALDIR= /usr/local/bin 234275970Scy 235275970Scy.if ${TARGET} != ${MACHINE} && ${DISKLABEL} == "bsdlabel" 236275970ScyDOFS_SH= ${.CURDIR}/scripts/doFS.sh ${DISKLABEL} ${TARGET} 237275970Scy.else 238275970ScyDOFS_SH= ${.CURDIR}/scripts/doFS.sh ${DISKLABEL} "" 239275970Scy.endif 240275970Scy 241275970ScyCRUNCH_TARGETS= boot 242275970Scy.if ${TARGET_ARCH} == "i386" 243275970ScyCRUNCH_TARGETS+=fixit 244275970Scy.if ${TARGET} == "pc98" 245275970ScyCRUNCH_TARGETS+=fixit-small 246275970Scy.endif 247275970Scy.endif 248275970Scy 249275970Scy.if !defined(NO_FLOPPIES) 250275970ScyEXTRAS= floppies.1 floppies.2 floppies.3 251275970Scy.endif 252275970ScyEXTRAS+= ftp.1 253275970Scy.if !defined(NOCDROM) 254275970ScyEXTRAS+= cdrom.1 255275970Scy.if defined(MAKE_ISOS) 256275970ScyEXTRAS+= iso.1 257275970Scy.endif 258275970Scy.if ${TARGET} == "pc98" 259275970ScyBOOTABLE= 260275970Scy.else 261275970ScyBOOTABLE="-b" 262275970Scy.endif 263275970Scy.endif 264275970Scy 265275970Scy.if !defined(NODOC) 266275970ScyDOCREL= doc.1 doc.2 267275970Scy.endif 268275970Scy 269275970Scy.if !make(release) && !make(rerelease) 270275970ScyBINMAKE!= cd ${.CURDIR}/..; ${MAKE} -V BINMAKE 271275970ScyWMAKEENV!= cd ${.CURDIR}/..; \ 272275970Scy ${BINMAKE} ${CROSSENV} -f Makefile.inc1 -V WMAKEENV 273275970ScyWMAKE= ${WMAKEENV} ${BINMAKE} 274275970Scy.endif 275275970Scy 276275970ScyCVS_SRCARGS= -P 277275970Scy.if defined(RELEASETAG) 278275970ScyCVS_SRCARGS+= -r ${RELEASETAG} 279275970Scy.endif 280275970Scy 281275970ScyCVS_DOCARGS= -P 282275970Scy.if defined(DOCRELEASETAG) 283275970ScyCVS_DOCARGS+= -r ${DOCRELEASETAG} 284275970Scy.endif 285275970Scy 286275970ScyCVS_PORTSARGS= -P 287275970Scy.if defined(PORTSRELEASETAG) 288275970ScyCVS_PORTSARGS+= -r ${PORTSRELEASETAG} 289275970Scy.endif 290275970Scy 291275970ScyWORLDDIR?= ${.CURDIR}/.. 292275970Scy 293275970Scyrelease rerelease: 294275970Scy.if !defined(CHROOTDIR) || !defined(BUILDNAME) || !defined(CVSROOT) 295275970Scy @echo "To make a release you must set CHROOTDIR, BUILDNAME and CVSROOT" && false 296275970Scy.endif 297275970Scy.if defined(NOPORTSATALL) && !defined(NODOC) 298275970Scy @echo "Ports are required for building the docs. Either set NODOC or" 299275970Scy @echo "unset NOPORTS, or set at least DOMINIMALDOCPORTS to YES!" 300275970Scy @exit 1 301275970Scy.endif 302275970Scy.if make(release) 303275970Scy.if exists(${CHROOTDIR}) 304275970Scy# The first command will fail on a handful of files that have their schg 305275970Scy# flags set. But it greatly speeds up the next two commands. 306275970Scy # NB: clear any vestigal devfs mount, just in case 307275970Scy -umount ${CHROOTDIR}/dev > /dev/null 2>&1 308275970Scy -rm -rf ${CHROOTDIR} 2>/dev/null 309275970Scy -chflags -R noschg ${CHROOTDIR}/. 310275970Scy -rm -rf ${CHROOTDIR} 311275970Scy.endif 312275970Scy mkdir -p ${CHROOTDIR} 313275970Scy @echo ">>> make release for ${TARGET} started on `LC_ALL=C TZ=GMT date`" 314275970Scy cd ${WORLDDIR} && ${NATIVEMAKE} -DNOGAMES -DNOHTML -DNOINFO -DNOMAN \ 315275970Scy -DNOPROFILE installworld DESTDIR=${CHROOTDIR} 316275970Scy cd ${WORLDDIR}/etc && ${NATIVEMAKE} distribution DESTDIR=${CHROOTDIR} 317275970Scy if [ -f /etc/resolv.conf ]; then \ 318275970Scy cp -p /etc/resolv.conf ${CHROOTDIR}/etc; \ 319275970Scy fi 320275970Scy.if defined(EXTLOCALDIR) 321275970Scy rm -rf ${CHROOTDIR}/usr/local 322275970Scy cd ${CHROOTDIR}/usr && cp -R -H ${EXTLOCALDIR} local 323275970Scy.endif 324275970Scy rm -rf ${CHROOTDIR}/usr/src 325275970Scy.if defined(EXTSRCDIR) 326275970Scy cd ${CHROOTDIR}/usr && \ 327275970Scy cp -R -H ${EXTSRCDIR} src 328275970Scy.else 329275970Scy cd ${CHROOTDIR}/usr && \ 330275970Scy ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \ 331275970Scy co ${CVSCMDARGS} ${CVS_SRCARGS} ${RELEASESRCMODULE} 332275970Scy.endif 333275970Scy.if defined(LOCAL_PATCHES) && !empty(LOCAL_PATCHES) 334275970Scy.for p in ${LOCAL_PATCHES} 335275970Scy.if exists(${p}) 336275970Scy patch -d ${CHROOTDIR}/usr/${RELEASESRCMODULE} ${PATCH_FLAGS} < ${p} 337275970Scy.endif 338275970Scy.endfor 339275970Scy.endif 340275970Scy.if defined(LOCAL_SCRIPT) && exists(${LOCAL_SCRIPT}) 341275970Scy cd ${CHROOTDIR} && env CHROOTDIR=${CHROOTDIR} BUILDNAME=${BUILDNAME} \ 342275970Scy RELEASETAG=${RELEASETAG} ${LOCAL_SCRIPT} 343275970Scy.endif 344275970Scy rm -rf ${CHROOTDIR}/usr/ports 345275970Scy.if !defined(NOPORTSATALL) 346275970Scy cd ${CHROOTDIR}/usr && ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \ 347275970Scy co ${CVSCMDARGS} ${CVS_PORTSARGS} ${RELEASEPORTSMODULE} 348275970Scy.endif 349275970Scy.if !defined(NODOC) 350275970Scy rm -rf ${CHROOTDIR}/usr/doc 351275970Scy.if defined(EXTDOCDIR) 352275970Scy cd ${CHROOTDIR}/usr && cp -R -H ${EXTDOCDIR} doc 353275970Scy.else 354275970Scy cd ${CHROOTDIR}/usr && ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \ 355275970Scy co ${CVSCMDARGS} ${CVS_DOCARGS} ${RELEASEDOCMODULE} 356275970Scy.endif 357275970Scy if [ -d ${RELEASEDISTFILES}/ ]; then \ 358275970Scy cp -rp ${RELEASEDISTFILES} ${CHROOTDIR}/usr/ports/distfiles; \ 359275970Scy else \ 360275970Scy mkdir -p ${CHROOTDIR}/usr/ports/distfiles; \ 361275970Scy fi 362275970Scy.if !defined(NO_PREFETCHDISTFILES) 363275970Scy @cd ${.CURDIR} && ${MAKE} fetch-distfiles 364275970Scy.endif 365275970Scy.endif 366275970Scy.endif 367275970Scy.if make(rerelease) 368275970Scy.if !defined(RELEASENOUPDATE) 369275970Scy.if !defined(RELEASETAG) 370275970Scy cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ 371275970Scy update ${CVSCMDARGS} -P -d -A 372275970Scy.else 373275970Scy cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ 374275970Scy update ${CVSCMDARGS} -P -d -r ${RELEASETAG} 375275970Scy.endif 376275970Scy rm -f ${CHROOTDIR}/tmp/.world_done 377275970Scy.if !defined(NOPORTS) 378275970Scy cd ${CHROOTDIR}/usr/ports && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ 379275970Scy update ${CVSCMDARGS} -P -d 380275970Scy.endif 381275970Scy.if defined(DOMINIMALDOCPORTS) && ${DOMINIMALDOCPORTS} == "YES" 382275970Scy for i in ${MINIMALDOCPORTS}; do \ 383275970Scy ( cd ${CHROOTDIR}/usr/$$i && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ 384275970Scy update ${CVSCMDARGS} -P -d ) ; \ 385275970Scy done 386275970Scy.endif 387275970Scy.if !defined(NODOC) 388275970Scy cd ${CHROOTDIR}/usr/doc && ${CVSPREFIX} cvs -R ${CVSARGS} -q \ 389275970Scy update ${CVSCMDARGS} -P -d 390275970Scy.endif 391275970Scy.endif 392275970Scy.endif 393275970Scy # Add version information to those things that need it. 394275970Scy if [ ! -f ${CHROOTDIR}/tmp/.world_done ]; then \ 395275970Scy cd ${CHROOTDIR}/usr/src/sys/conf && \ 396275970Scy mv newvers.sh foo && \ 397275970Scy sed "s/^RELEASE=.*/RELEASE=${BUILDNAME}/" foo > newvers.sh && \ 398275970Scy rm foo; \ 399275970Scy fi 400275970Scy -test -f install.cfg && cp install.cfg ${CHROOTDIR}/usr/src/release 401275970Scy echo "#!/bin/sh" > ${_MK} 402275970Scy echo "set -ex" >> ${_MK} 403275970Scy echo "trap 'umount /dev || true' 0" >> ${_MK} 404275970Scy echo "_RELTARGET=\$${1:-doRELEASE}" >> ${_MK} 405275970Scy.for var in \ 406275970Scy AUTO_KEYBOARD_DETECT \ 407275970Scy BOOT_CONFIG \ 408275970Scy BUILDNAME \ 409275970Scy CD_EXTRA_BITS \ 410275970Scy DISTRIBUTIONS \ 411275970Scy DOC_LANG \ 412275970Scy DOMINIMALDOCPORTS \ 413275970Scy EXTRA_SRC \ 414275970Scy FIXCRYPTO \ 415275970Scy FTP_PASSIVE_MODE \ 416275970Scy FTP_PROXY \ 417275970Scy HTTP_PROXY \ 418275970Scy KERNELS \ 419275970Scy KERNEL_FLAGS \ 420275970Scy MAKE_ISOS \ 421275970Scy NOCDROM \ 422275970Scy NODOC \ 423275970Scy NOPORTS \ 424275970Scy NOSHARED \ 425275970Scy NOSRC \ 426275970Scy NO_CPU_CFLAGS \ 427275970Scy NO_CPU_COPTFLAGS \ 428275970Scy NO_FLOPPIES \ 429275970Scy NO_SENDMAIL \ 430275970Scy RELEASETAG \ 431275970Scy RELNOTES_LANG \ 432275970Scy TARGET \ 433275970Scy TARGET_ARCH \ 434275970Scy WORLD_FLAGS 435275970Scy.if defined(${var}) 436275970Scy echo "export ${var}=\"${${var}}\"" >> ${_MK} 437275970Scy.endif 438275970Scy.endfor 439275970Scy # Don't remove this, or the build will fall over! 440275970Scy echo "export RELEASEDIR=${_R}" >> ${_MK} 441275970Scy echo "export PATH=/bin:/usr/bin:/sbin:/usr/sbin:${LOCALDIR}" >> ${_MK} 442275970Scy echo "export MANBUILDCAT=YES" >> ${_MK} 443275970Scy # NB: these may fail if the host is running w/o devfs 444275970Scy echo "umount /dev >/dev/null 2>&1 || true" >> ${_MK} 445275970Scy echo "mount -t devfs devfs /dev >/dev/null 2>&1 || true" >> ${_MK} 446275970Scy echo "if [ -x /etc/rc.d/ldconfig ]; then" >> ${_MK} 447275970Scy echo " /etc/rc.d/ldconfig start" >> ${_MK} 448275970Scy echo "else" >> ${_MK} 449275970Scy echo " ldconfig /lib /usr/lib /usr/local/lib || true" >> ${_MK} 450275970Scy echo "fi" >> ${_MK} 451275970Scy echo "if [ ! -f /tmp/.world_done ]; then" >> ${_MK} 452275970Scy echo " cd /usr/src" >> ${_MK} 453275970Scy echo " ${CROSSMAKE} ${WORLD_FLAGS} -DNOCLEAN buildworld && \\" >> ${_MK} 454275970Scy echo " touch /tmp/.world_done" >> ${_MK} 455275970Scy echo "fi" >> ${_MK} 456275970Scy echo "if [ ! -f /tmp/.skip_ports ]; then" >> ${_MK} 457275970Scy echo " echo \">>> make readmes started on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK} 458275970Scy echo " cd /usr/ports" >> ${_MK} 459275970Scy echo " make ${PORTREADMES_FLAGS} readmes" >> ${_MK} 460275970Scy echo " touch /tmp/.skip_ports" >> ${_MK} 461275970Scy echo " echo \">>> make readmes finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK} 462275970Scy echo "fi" >> ${_MK} 463275970Scy echo "cd /usr/src/release" >> ${_MK} 464275970Scy echo "make obj" >> ${_MK} 465275970Scy echo "make \$${_RELTARGET}" >> ${_MK} 466275970Scy echo "echo \">>> make ${.TARGET} for ${TARGET} finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK} 467275970Scy chmod 755 ${_MK} 468275970Scy.if defined(NOPORTS) || defined(NOPORTREADMES) 469275970Scy touch ${CHROOTDIR}/tmp/.skip_ports 470275970Scy.endif 471275970Scy # Ensure md.ko is loaded if md(4) is not statically compiled into 472275970Scy # the kernel 473275970Scy -mdconfig 2>/dev/null 474275970Scy env -i /usr/sbin/chroot `dirname ${_MK}` /`basename ${_MK}` 475275970Scy 476275970Scyclean: 477275970Scy rm -rf ${CRUNCH_TARGETS:S/$/_crunch/} release.[0-9] ${EXTRAS} 478275970Scy 479275970Scyfetch-distfiles: 480275970Scy @for i in ${DOCPORTS}; do \ 481275970Scy cd ${CHROOTDIR}/usr/ports/$$i && \ 482275970Scy make PORTSDIR=${CHROOTDIR}/usr/ports BATCH=yes \ 483275970Scy WITHOUT_X11=yes JADETEX=no WITHOUT_PYTHON=yes \ 484275970Scy checksum-recursive ; \ 485275970Scy done 486275970Scy 487275970Scy# Clean out ${_R} and make the directory structure. 488275970Scyrelease.1: 489275970Scy mkdir -p ${_R} 490275970Scy -rm -rf ${_R}/* 2> /dev/null 491275970Scy -chflags -R noschg ${_R}/. 492275970Scy rm -rf ${_R}/* 493275970Scy mkdir ${RD} 494275970Scy.if !defined(NO_FLOPPIES) 495275970Scy mkdir ${RD}/floppies 496275970Scy.endif 497275970Scy mkdir ${RD}/trees 498275970Scy mkdir ${RD}/kernels 499275970Scy for i in ${DISTRIBUTIONS}; do \ 500275970Scy mkdir ${RD}/trees/$$i && \ 501275970Scy mtree -deU -f ${MTREEFILES}/BSD.root.dist \ 502275970Scy -p ${RD}/trees/$$i > /dev/null && \ 503275970Scy mtree -deU -f ${MTREEFILES}/BSD.usr.dist \ 504275970Scy -p ${RD}/trees/$$i/usr > /dev/null && \ 505275970Scy mtree -deU -f ${MTREEFILES}/BSD.include.dist \ 506275970Scy -p ${RD}/trees/$$i/usr/include > /dev/null && \ 507275970Scy mtree -deU -f ${MTREEFILES}/BSD.var.dist \ 508275970Scy -p ${RD}/trees/$$i/var > /dev/null ; \ 509275970Scy done 510275970Scy touch ${.TARGET} 511275970Scy 512275970Scy# Install the system into the various distributions. 513275970Scyrelease.2: 514275970Scy cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/base 515275970Scy cd ${.CURDIR}/.. && ${CROSSMAKE} distributeworld DISTDIR=${RD}/trees 516275970Scy touch ${.TARGET} 517275970Scy 518275970Scy# Build and install non-crypto versions of some tools. 519275970Scyrelease.3: 520275970Scy # Handle some grief caused by the munition braindeadness. 521275970Scy cd ${.CURDIR}/..; \ 522275970Scy ${CROSSMAKE} ${WORLD_FLAGS} -DNOCRYPT \ 523275970Scy SUBDIR_OVERRIDE="${FIXCRYPTO}" \ 524275970Scy buildworld distributeworld DISTDIR=${RD}/trees 525275970Scy -chflags -R noschg ${RD}/trees 526275970Scy touch ${.TARGET} 527275970Scy 528275970Scy# Make and install the generic kernel(s). 529275970Scyrelease.4: 530275970Scy.for kernel in ${KERNELS} 531275970Scy cd ${.CURDIR}/..; \ 532275970Scy ${CROSSMAKE} ${KERNEL_FLAGS} -DNO_MODULES \ 533275970Scy KERNCONF=${kernel} INSTKERNNAME=${kernel} kernel \ 534275970Scy DESTDIR=${RD}/trees/base 535275970Scy.endfor 536275970Scy # Install a standard boot kernel+modules. 537275970Scy cd ${.CURDIR}/..; \ 538275970Scy ${CROSSMAKE} ${KERNEL_FLAGS} \ 539275970Scy kernel \ 540275970Scy DESTDIR=${RD}/trees/base; \ 541275970Scy cd ${.CURDIR}/..; \ 542275970Scy ${CROSSMAKE} ${KERNEL_FLAGS} -DNO_MODULES \ 543275970Scy reinstallkernel -DINSTALL_DEBUG \ 544275970Scy DESTDIR=${RD}/trees/base 545275970Scy touch ${.TARGET} 546275970Scy 547275970Scy# Make and install the three crunched binaries which live on the floppies. 548275970Scy# You are not supposed to like this :-) 549275970Scyrelease.5: 550275970Scy rm -rf ${RD}/crunch 551275970Scy mkdir -p ${RD}/crunch 552275970Scy.for j in ${CRUNCH_TARGETS} 553275970Scy.if exists(${.CURDIR}/${TARGET}/${j}_crunch.conf) 554275970Scy rm -rf ${j}_crunch 555275970Scy mkdir ${j}_crunch 556275970Scy cd ${j}_crunch; ${WMAKEENV} crunchgen -o \ 557275970Scy ${.CURDIR}/${TARGET}/${j}_crunch.conf 558275970Scy cd ${j}_crunch; ${WMAKE} -f ${j}_crunch.mk subclean 559275970Scy cd ${.CURDIR}/..; ${BINMAKE} -f Makefile.inc1 _build-tools 560275970Scy cd ${j}_crunch; ${WMAKE} -f ${j}_crunch.mk \ 561275970Scy CFLAGS="-Os -pipe" -DNO_CPU_CFLAGS all 562275970Scy ${WMAKEENV} strip -R .comment ${j}_crunch/${j}_crunch 563275970Scy mv ${j}_crunch/${j}_crunch ${RD}/crunch/${j} 564275970Scy.endif 565275970Scy.endfor 566275970Scy touch ${.TARGET} 567275970Scy 568275970Scy# 569275970Scy# --==## Fix up the distributions. ##==-- 570275970Scy# 571275970Scyrelease.6: 572275970Scy # Create any "synthetic dists" now. 573275970Scy @for i in ${DISTRIBUTIONS}; do \ 574275970Scy if [ -f ${.CURDIR}/scripts/$${i}-make.sh ]; then \ 575275970Scy echo -n "Running $$i dist creation script... "; \ 576275970Scy env RD=${RD} sh ${.CURDIR}/scripts/$${i}-make.sh || echo "$$i distribution script returned bad status."; \ 577275970Scy echo "Done."; \ 578275970Scy fi \ 579275970Scy done \ 580275970Scy 581275970Scy # Remove all the directories we don't need. 582275970Scy -cd ${RD}/trees && \ 583275970Scy find ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS} -depth -type d -print | xargs rmdir 584275970Scy touch ${.TARGET} 585275970Scy 586275970Scy# 587275970Scy# --==## Package up the tarballs from assembled trees ##==-- 588275970Scy# 589275970Scyrelease.7: 590275970Scy rm -rf ${RD}/dists 591275970Scy mkdir -p ${RD}/dists 592275970Scy @for i in ${DISTRIBUTIONS} ; \ 593275970Scy do \ 594275970Scy if [ -d ${RD}/trees/$${i} ] ; then \ 595275970Scy cd ${.CURDIR} && $(MAKE) doTARBALL \ 596275970Scy SD=${RD}/trees/$${i} \ 597275970Scy TN=$$i TD=$$i ARG="." && \ 598275970Scy echo "$${i} distribution is finished."; \ 599275970Scy fi ; \ 600275970Scy done 601275970Scy.if !defined(NOPORTS) 602275970Scy # XXX: Inline stripped version of doTARBALL 603275970Scy @rm -rf ${RD}/dists/ports/ports* 604275970Scy @mkdir -p ${RD}/dists/ports 605275970Scy @echo rolling ports/ports tarball 606275970Scy @tar --exclude CVS --exclude 'ports/distfiles/*' -czf \ 607275970Scy ${RD}/dists/ports/ports.tgz -C /usr ports 608275970Scy @cp ${.CURDIR}/scripts/ports-install.sh ${RD}/dists/ports/install.sh 609275970Scy @(cd ${RD}/dists/ports; \ 610275970Scy rm -f CHECKSUM.MD5; \ 611275970Scy md5 * > CHECKSUM.MD5) 612275970Scy @echo "ports distribution is finished." 613275970Scy.endif 614275970Scy touch ${.TARGET} 615275970Scy 616275970Scy 617275970Scy# 618275970Scy# --==## Make source dists ##==-- 619275970Scy# 620275970Scyrelease.8: 621275970Scy.if !defined(NOSRC) 622275970Scy @cd ${.CURDIR} && $(MAKE) doTARBALL SD=/usr/src \ 623275970Scy TD=src TN=sbase ARG="[A-Z]*" 624275970Scy @for i in `cd /usr/src && echo [a-z]*` ; do \ 625275970Scy if [ -d /usr/src/$$i ] ; then \ 626275970Scy cd ${.CURDIR} && $(MAKE) doTARBALL \ 627275970Scy TN=`echo s$$i | tr -d '.' | \ 628275970Scy sed -e 's/usr/u/' \ 629275970Scy -e 's/kerberos5/krb5/'` \ 630275970Scy SD=/usr/src TD=src ARG="$$i" ; \ 631275970Scy fi ; \ 632275970Scy done 633282408Scy.if defined(EXTRA_SRC) 634282408Scy @set ${EXTRA_SRC} && \ 635282408Scy while [ $$# -ge 2 ] ; do \ 636282408Scy if [ -d /usr/src/$$1 ] ; then \ 637282408Scy cd ${.CURDIR} && $(MAKE) doTARBALL \ 638282408Scy SD=/usr/src TN="s$$2" TD=src ARG="$$1" ; \ 639275970Scy fi && shift && shift ; \ 640275970Scy done 641275970Scy.endif 642275970Scy if [ -d ${RD}/dists/crypto ] ; then ( cd ${RD}/dists/src && \ 643275970Scy if [ -f ssecure.aa ] ; then mv ssecure.* ../crypto ; fi && \ 644275970Scy if [ -f scrypto.aa ] ; then mv scrypto.* ../crypto ; fi && \ 645275970Scy if [ -f skrb5.aa ] ; then mv skrb5.* ../crypto ; fi ; \ 646275970Scy cd ${RD}/dists/crypto; rm -f CHECKSUM.MD5; \ 647275970Scy md5 * > CHECKSUM.MD5 ) ; fi 648275970Scy (cd ${RD}/dists/src; rm -f CHECKSUM.MD5; md5 * > CHECKSUM.MD5) 649275970Scy @echo "src distribution is finished." 650275970Scy.endif 651275970Scy touch ${.TARGET} 652275970Scy 653275970Scy# Build the memory root filesystem. 654275970Scyrelease.9: 655275970Scy cp ${RD}/trees/base/etc/disktab /etc 656275970Scy rm -rf ${RD}/mfsfd 657275970Scy mkdir ${RD}/mfsfd 658275970Scy cd ${RD}/mfsfd && \ 659275970Scy mkdir -p etc/defaults dev mnt stand/etc/defaults stand/help 660275970Scy @cd ${.CURDIR} && $(MAKE) installCRUNCH CRUNCH=boot \ 661275970Scy DIR=${RD}/mfsfd/stand ZIP=false 662275970Scy ( cd ${RD}/mfsfd && \ 663275970Scy for dir in bin sbin ; do \ 664275970Scy ln -sf /stand $$dir; \ 665275970Scy done ) 666275970Scy cp ${RD}/trees/base/sbin/dhclient-script ${RD}/mfsfd/stand 667275970Scy.if ${TARGET} == "pc98" 668275970Scy cp ${.CURDIR}/../etc/defaults/pccard.conf \ 669275970Scy ${RD}/mfsfd/etc/defaults/pccard.conf 670275970Scy.endif 671275970Scy cp ${.CURDIR}/../etc/usbd.conf ${RD}/mfsfd/etc/usbd.conf 672275970Scy ( for F in defaults/rc.conf netconfig protocols ; do \ 673275970Scy sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \ 674275970Scy ${RD}/trees/base/etc/$$F > ${RD}/mfsfd/stand/etc/$$F ; \ 675275970Scy done ) 676275970Scy grep -E '^(ftp|nameserver|domain|sunrpc|cmd|nfsd)[^-\w]' \ 677275970Scy ${RD}/trees/base/etc/services | \ 678282408Scy sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \ 679282408Scy > ${RD}/mfsfd/stand/etc/services 680282408Scy grep 'operator' ${RD}/trees/base/etc/group \ 681282408Scy > ${RD}/mfsfd/stand/etc/group 682282408Scy ln ${RD}/mfsfd/stand/etc/services ${RD}/mfsfd/etc/services 683282408Scy ln ${RD}/mfsfd/stand/etc/group ${RD}/mfsfd/etc/group 684282408Scy ln ${RD}/mfsfd/stand/etc/netconfig ${RD}/mfsfd/etc/netconfig 685282408Scy cp ${RD}/trees/base/COPYRIGHT ${RD}/mfsfd/stand/help/COPYRIGHT.hlp 686275970Scy.if !defined(NODOC) 687275970Scy @for i in ${DIST_DOCS_ARCH_INDEP}; do \ 688275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \ 689275970Scy ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ 690275970Scy done 691275970Scy @for i in ${DIST_DOCS_ARCH_DEP}; do \ 692275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \ 693275970Scy ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ 694275970Scy done 695275970Scy @mv ${RD}/mfsfd/stand/help/INSTALLATION.TXT \ 696275970Scy ${RD}/mfsfd/stand/help/INSTALL.TXT 697275970Scy @mv ${RD}/mfsfd/stand/help/EARLY-ADOPTER.TXT \ 698275970Scy ${RD}/mfsfd/stand/help/EARLY.TXT 699275970Scy.endif 700275970Scy -test -f ${.CURDIR}/install.cfg \ 701275970Scy && cp ${.CURDIR}/install.cfg ${RD}/mfsfd 702275970Scy @mkdir -p ${RD}/mfsfd/boot 703275970Scy.if ${TARGET_ARCH} != "ia64" 704275970Scy @cp ${RD}/trees/base/boot/boot* ${RD}/mfsfd/boot 705275970Scy.endif 706275970Scy.if ${TARGET} == "i386" || ${TARGET_ARCH} == "amd64" 707275970Scy @cp ${RD}/trees/base/boot/mbr ${RD}/mfsfd/boot 708275970Scy.endif 709275970Scy @tar --exclude CVS -cf - -C ${.CURDIR}/../usr.sbin/sysinstall help | \ 710275970Scy tar xf - -C ${RD}/mfsfd/stand 711275970Scy @mkdir -p ${RD}/mfsroot 712275970Scy sh -e ${DOFS_SH} ${RD}/mfsroot/mfsroot ${RD} ${MNT} \ 713275970Scy ${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL} 714275970Scy @gzip -9fnv ${RD}/mfsroot/mfsroot 715275970Scy touch ${.TARGET} 716275970Scy 717275970ScyKERNFLOPPYSET= ${RD}/floppyset/kern/kernel.gz 718275970Scy.if defined(SMALLFLOPPYSIZE) 719275970ScySMALLKERNFLOPPYSET= ${RD}/floppyset/kern-small/kernel.gz 720275970Scy.endif 721275970Scy.if defined(SPLIT_MFSROOT) 722275970ScyMFSROOTFLOPPYSET= ${RD}/floppyset/mfsroot/mfsroot.gz 723275970Scy.if defined(SMALLFLOPPYSIZE) 724275970ScySMALLMFSROOTFLOPPYSET= ${RD}/floppyset/mfsroot-small/mfsroot.gz 725275970Scy.endif 726275970Scy.endif 727275970Scy 728275970Scy# Build boot and install floppies. 729275970Scyfloppies.1: 730275970Scy @gzip -9nc ${RD}/trees/base/boot/kernel/kernel > ${RD}/kernels/kernel.gz 731275970Scy @echo "Making the kernel boot floppies..." 732275970Scy @cd ${.CURDIR} && ${MAKE} makeFloppySet FLOPPYBASE=kern \ 733275970Scy FLOPPYDESC="Kernel" SPLITFILE=${RD}/kernels/kernel.gz 734275970Scy.if defined(SMALLFLOPPYSIZE) 735275970Scy @echo "Making the small kernel boot floppies..." 736275970Scy @cd ${.CURDIR} && ${MAKE} makeFloppySet FLOPPYBASE=kern-small \ 737275970Scy FLOPPYDESC="Kernel" SPLITFILE=${RD}/kernels/kernel.gz \ 738275970Scy FDSIZE="SMALL" 739275970Scy.endif 740275970Scy.if defined(SPLIT_MFSROOT) 741275970Scy @echo "Making the mfsroot boot floppies..." 742275970Scy @cd ${.CURDIR} && ${MAKE} makeFloppySet FLOPPYBASE=mfsroot \ 743275970Scy FLOPPYDESC="Memory Filesystem" SPLITFILE=${RD}/mfsroot/mfsroot.gz 744275970Scy.if defined(SMALLFLOPPYSIZE) 745275970Scy @echo "Making the small mfsroot boot floppies..." 746275970Scy @cd ${.CURDIR} && ${MAKE} makeFloppySet FLOPPYBASE=mfsroot-small \ 747275970Scy FLOPPYDESC="Memory Filesystem" SPLITFILE=${RD}/mfsroot/mfsroot.gz \ 748275970Scy FDSIZE="SMALL" 749275970Scy.endif 750275970Scy @cd ${.CURDIR} && ${MAKE} buildBootFloppy FSIMAGE="boot" \ 751275970Scy KERNFILE="${KERNFLOPPYSET}.split ${KERNFLOPPYSET}.boot" \ 752275970Scy MFSROOTFILE="${MFSROOTFLOPPYSET}.split ${MFSROOTFLOPPYSET}.boot" 753275970Scy.if defined(SMALLFLOPPYSIZE) 754275970Scy @cd ${.CURDIR} && ${MAKE} buildBootFloppy FSIMAGE="boot-small" \ 755275970Scy KERNFILE="${SMALLKERNFLOPPYSET}.split ${SMALLKERNFLOPPYSET}.boot" \ 756275970Scy MFSROOTFILE="${SMALLMFSROOTFLOPPYSET}.split ${SMALLMFSROOTFLOPPYSET}.boot" \ 757275970Scy FDSIZE="SMALL" 758275970Scy.endif 759275970Scy.else # !SPLIT_MFSROOT 760275970Scy @cd ${.CURDIR} && ${MAKE} buildBootFloppy FSIMAGE="boot" \ 761275970Scy KERNFILE="${KERNFLOPPYSET}.split ${KERNFLOPPYSET}.boot" \ 762275970Scy MFSROOTFILE=${RD}/mfsroot/mfsroot.gz 763275970Scy.if defined(SMALLFLOPPYSIZE) 764275970Scy @cd ${.CURDIR} && ${MAKE} buildBootFloppy FSIMAGE="boot-small" \ 765275970Scy KERNFILE="${SMALLKERNFLOPPYSET}.split ${SMALLKERNFLOPPYSET}.boot" \ 766275970Scy MFSROOTFILE=${RD}/mfsroot/mfsroot.gz \ 767275970Scy FDSIZE="SMALL" 768275970Scy.endif 769275970Scy.endif # SPLIT_MFSROOT 770275970Scy touch ${.TARGET} 771275970Scy 772275970Scy# Build fixit floppy. 773275970Scyfloppies.2: 774275970Scy @echo "Making fixit floppy." 775275970Scy @rm -rf ${RD}/fixitfd 776275970Scy @mkdir ${RD}/fixitfd 777275970Scy @cd ${RD}/fixitfd && \ 778275970Scy mkdir -p dev stand bin sbin etc mnt mnt1 mnt2 mnt3 mnt4 tmp \ 779275970Scy usr/share/misc 780275970Scy @cp ${RD}/trees/base/etc/spwd.db ${RD}/trees/base/etc/group \ 781275970Scy ${RD}/fixitfd/etc 782275970Scy @sed -e 's/#.*//' ${RD}/trees/base/etc/protocols \ 783275970Scy > ${RD}/fixitfd/etc/protocols 784275970Scy @sed -e 's/#.*//' ${RD}/trees/base/usr/share/misc/scsi_modes \ 785275970Scy > ${RD}/fixitfd/usr/share/misc/scsi_modes 786275970Scy @cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile 787275970Scy @cp ${.CURDIR}/fixit.services ${RD}/fixitfd/etc/services 788275970Scy @cp ${.CURDIR}/scripts/tar.sh ${RD}/fixitfd/stand/tar 789275970Scy @chmod 555 ${RD}/fixitfd/stand/tar 790275970Scy.if defined(SMALLFLOPPYSIZE) 791275970Scy @cd ${.CURDIR} && ${MAKE} installCRUNCH CRUNCH=fixit-small \ 792275970Scy DIR=${RD}/fixitfd/stand ZIP=false 793275970Scy @sh -e ${DOFS_SH} ${RD}/floppies/fixit-small.flp ${RD} ${MNT} \ 794275970Scy ${SMALLFLOPPYSIZE} ${RD}/fixitfd ${FLOPPYINODE} ${SMALLFLOPPYLABEL} 795275970Scy @rm -rf ${RD}/fixitfd/stand 796275970Scy @mkdir ${RD}/fixitfd/stand 797275970Scy.endif 798275970Scy @cd ${.CURDIR} && ${MAKE} installCRUNCH CRUNCH=fixit \ 799275970Scy DIR=${RD}/fixitfd/stand ZIP=false 800275970Scy @sh -e ${DOFS_SH} ${RD}/floppies/fixit.flp ${RD} ${MNT} \ 801275970Scy ${FLOPPYSIZE} ${RD}/fixitfd ${FLOPPYINODE} ${FLOPPYLABEL} 802275970Scy touch ${.TARGET} 803275970Scy 804275970Scy# Do our last minute floppies directory setup 805275970Scyfloppies.3: 806275970Scy.if !defined(NODOC) 807275970Scy @cp ${RND}/${RELNOTES_LANG}/installation/${TARGET}/article.txt \ 808275970Scy ${RD}/floppies/README.TXT 809275970Scy @(cd ${RD}/floppies; md5 README.TXT *.flp > CHECKSUM.MD5) 810275970Scy.else 811275970Scy @(cd ${RD}/floppies; md5 *.flp > CHECKSUM.MD5) 812275970Scy.endif 813275970Scy touch ${.TARGET} 814275970Scy 815275970Scy# 816275970Scy# --==## Setup a suitable ftp-area ##==-- 817275970Scy# 818275970Scyftp.1: 819275970Scy @echo "Setting up FTP distribution area" 820275970Scy @mkdir -p ${FD} 821275970Scy -@ln -s . ${FD}/${BUILDNAME} 822275970Scy.if !defined(NO_FLOPPIES) 823275970Scy @cd ${RD} && find floppies -print | cpio -dumpl ${FD} 824275970Scy.endif 825275970Scy @cd ${RD}/dists && find . -print | cpio -dumpl ${FD} 826275970Scy.if !defined(NODOC) 827275970Scy @for i in ${DIST_DOCS_ARCH_INDEP}; do \ 828275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \ 829275970Scy ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ 830275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/article.html \ 831275970Scy ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ 832275970Scy done 833275970Scy @for i in ${DIST_DOCS_ARCH_DEP}; do \ 834275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \ 835275970Scy ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ 836275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.html \ 837275970Scy ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ 838275970Scy done 839275970Scy @cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${FD} 840275970Scy @mv ${FD}/INSTALLATION.TXT ${FD}/INSTALL.TXT 841275970Scy @mv ${FD}/INSTALLATION.HTM ${FD}/INSTALL.HTM 842275970Scy @mv ${FD}/EARLY-ADOPTER.TXT ${FD}/EARLY.TXT 843275970Scy @mv ${FD}/EARLY-ADOPTER.HTM ${FD}/EARLY.HTM 844275970Scy.endif 845275970Scy @echo "CD_VERSION = ${BUILDNAME}" > ${FD}/cdrom.inf 846275970Scy touch ${.TARGET} 847275970Scy 848275970Scy# 849275970Scy# --==## Setup a suitable cdrom-area ##==-- 850275970Scy# 851275970Scycdrom.1: 852275970Scy @echo "Setting up CDROM distribution area" 853275970Scy @mkdir -p ${CD_BOOT} ${CD_DISC1} ${CD_DISC2} 854275970Scy -@ln -s . ${CD_DISC1}/${BUILDNAME} 855275970Scy.if !defined(NO_FLOPPIES) 856275970Scy @cd ${RD} && find floppies -print | cpio -dumpl ${CD_DISC1} 857275970Scy.endif 858275970Scy @cd ${RD}/dists && find . -print | cpio -dumpl ${CD_DISC1} 859275970Scy @for i in ${DISTRIBUTIONS} ; \ 860275970Scy do \ 861275970Scy if [ -d ${RD}/trees/$${i} ] ; then \ 862275970Scy chflags -R noschg ${RD}/trees/$${i} || true ; \ 863275970Scy ( cd ${RD}/trees/$${i} && \ 864275970Scy find . -depth -print | cpio -dumpl ${CD_DISC2} ) ; \ 865275970Scy fi \ 866275970Scy done 867275970Scy @rm -f ${CD_DISC2}/.profile 868275970Scy @cp ${.CURDIR}/fixit.profile ${CD_DISC2}/.profile 869275970Scy @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC1}/cdrom.inf 870275970Scy @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC2}/cdrom.inf 871275970Scy.if !defined(NODOC) 872275970Scy @for i in ${DIST_DOCS_ARCH_INDEP}; do \ 873275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \ 874275970Scy ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ 875275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/article.html \ 876275970Scy ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ 877275970Scy done 878275970Scy @for i in ${DIST_DOCS_ARCH_DEP}; do \ 879275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \ 880275970Scy ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \ 881275970Scy cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.html \ 882275970Scy ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \ 883275970Scy done 884275970Scy @cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${CD_DISC1} 885275970Scy @mv ${CD_DISC1}/INSTALLATION.TXT ${CD_DISC1}/INSTALL.TXT 886275970Scy @mv ${CD_DISC1}/INSTALLATION.HTM ${CD_DISC1}/INSTALL.HTM 887275970Scy @mv ${CD_DISC1}/EARLY-ADOPTER.TXT ${CD_DISC1}/EARLY.TXT 888275970Scy @mv ${CD_DISC1}/EARLY-ADOPTER.HTM ${CD_DISC1}/EARLY.HTM 889275970Scy.endif 890275970Scy.if ${TARGET} != "pc98" 891275970Scy @echo "Setting up boot area" 892275970Scy @rm -f ${CD_DISC2}/boot/loader.conf 893275970Scy @cp ${RD}/mfsroot/mfsroot.gz ${CD_DISC2}/boot/mfsroot.gz 894275970Scy @echo 'mfsroot_load="YES"' > ${CD_DISC2}/boot/loader.conf 895275970Scy @echo 'mfsroot_type="mfs_root"' >> ${CD_DISC2}/boot/loader.conf 896275970Scy @echo 'mfsroot_name="/boot/mfsroot"' >> ${CD_DISC2}/boot/loader.conf 897275970Scy.if defined(CD_BOOT) 898275970Scy @cp -Rp ${CD_DISC2}/boot ${CD_BOOT} 899275970Scy.if defined(MINIROOT) 900275970Scy @mkdir -p ${FD}/miniroot 901275970Scy @sh -e ${DOFS_SH} ${FD}/miniroot/miniroot.ufs \ 902275970Scy ${RD} ${MNT} 0 ${CD_BOOT} 8192 auto 903275970Scy @gzip -9v ${FD}/miniroot/miniroot.ufs 904275970Scy.endif 905275970Scy.endif 906275970Scy @cp -Rp ${CD_DISC2}/boot ${CD_DISC1} 907275970Scy.endif 908275970Scy touch ${.TARGET} 909275970Scy 910275970Scyiso.1: 911275970Scy.if exists(${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh) 912275970Scy @echo "Creating ISO images..." 913275970Scy.if defined(CD_BOOT) 914275970Scy @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ 915275970Scy fbsd_bootonly \ 916275970Scy ${CD}/${BUILDNAME}-${TARGET}-bootonly.iso ${CD_BOOT} 917275970Scy.endif 918275970Scy @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ 919275970Scy fbsd_miniinst \ 920275970Scy ${CD}/${BUILDNAME}-${TARGET}-miniinst.iso ${CD_DISC1} 921275970Scy @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ 922275970Scy fbsd_livefs \ 923275970Scy ${CD}/${BUILDNAME}-${TARGET}-disc2.iso ${CD_DISC2} 924275970Scy.if defined(CD_EXTRA_BITS) 925275970Scy @sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \ 926275970Scy fbsd_boot \ 927275970Scy ${CD}/${BUILDNAME}-${TARGET}-disc1.iso ${CD_DISC1} \ 928275970Scy ${CD_EXTRA_BITS} \ 929275970Scy && false 930275970Scy.endif 931275970Scy @(cd ${CD} && md5 *.iso > ${BUILDNAME}-${TARGET}-iso.CHECKSUM.MD5) 932275970Scy touch ${.TARGET} 933275970Scy.else 934275970Scy @echo "Do not know how to create an ISO for ${TARGET_ARCH}." 935275970Scy.endif 936275970Scy 937275970Scy# 938275970Scy# --==## Documentation Project files such as the Handbook and FAQ ##==-- 939275970Scy# 940275970Scydoc.1: 941275970Scy @echo "Making docs..." 942275970Scy @for i in ${DOCPORTS}; do \ 943275970Scy cd /usr/ports/$$i && \ 944275970Scy env -i FTP_PASSIVE_MODE=$${FTP_PASSIVE_MODE:-no} PATH=$${PATH} \ 945275970Scy make all install clean BATCH=yes WITHOUT_X11=yes JADETEX=no \ 946275970Scy WITHOUT_PYTHON=yes FORCE_PKG_REGISTER=yes; \ 947275970Scy done 948275970Scy @cd /usr/doc && make all install 'FORMATS=html html-split txt' \ 949275970Scy INSTALL_COMPRESSED='' DOCDIR=${RD}/trees/base/usr/share/doc 950275970Scy touch ${.TARGET} 951275970Scy 952275970Scy# 953275970Scy# --==## RELNOTESng: Next-generation replacements for *.TXT files ##==-- 954275970Scy# 955275970Scydoc.2: 956275970Scy @echo "Making release documentation..." 957275970Scy @cd ${.CURDIR}/doc && make all install clean 'FORMATS=html txt' \ 958275970Scy INSTALL_COMPRESSED='' DOCDIR=${RND} 959275970Scy touch ${.TARGET} 960275970Scy 961275970Scy# Various "subroutine" and other supporting targets. 962275970Scy 963275970Scy# RD= 964275970Scy# SD= 965275970Scy# TD= 966275970Scy# ARG= 967275970ScydoTARBALL: 968275970Scy.if !defined(SD) 969275970Scy @echo "SD undefined in doTARBALL" && exit 1 970275970Scy.endif 971275970Scy.if !defined(TD) 972275970Scy @echo "TD undefined in doTARBALL" && exit 1 973275970Scy.endif 974275970Scy.if !defined(ARG) 975275970Scy @echo "ARG undefined in doTARBALL" && exit 1 976275970Scy.endif 977275970Scy @rm -rf ${RD}/dists/${TD}/${TN}* 978275970Scy @mkdir -p ${RD}/dists/${TD} 979275970Scy @( cd ${SD} && \ 980275970Scy tn=`echo ${TN} | tr 'A-Z' 'a-z' | cut -c1-8` && \ 981275970Scy echo rolling ${TD}/$$tn tarball &&\ 982275970Scy tar --exclude CVS --exclude obj --exclude BOOTMFS -cf - ${ARG} | \ 983275970Scy ${ZIPNSPLIT} ${RD}/dists/${TD}/$$tn. && \ 984275970Scy sh ${.CURDIR}/scripts/info.sh ${RD}/dists/${TD}/$$tn \ 985275970Scy > ${RD}/dists/${TD}/$$tn.inf && \ 986275970Scy if [ -f ${.CURDIR}/scripts/$${TD}-install.sh ]; then \ 987275970Scy cp -p ${.CURDIR}/scripts/$${TD}-install.sh \ 988275970Scy ${RD}/dists/${TD}/install.sh; \ 989275970Scy fi && \ 990275970Scy if [ "${SD}" != "/usr/src" ]; then \ 991275970Scy mtree -c -i -p ${SD}/${ARG} \ 992275970Scy -k gname,md5digest,mode,nlink,uname,size,link,type \ 993275970Scy > ${RD}/dists/${TD}/$$tn.mtree ; \ 994275970Scy else \ 995275970Scy true; \ 996275970Scy fi; \ 997275970Scy ( cd ${RD}/dists/${TD}; \ 998275970Scy rm -f CHECKSUM.MD5; \ 999275970Scy md5 * > CHECKSUM.MD5 ) \ 1000275970Scy ) 1001275970Scy 1002275970ScydoRELEASE: release.1 release.2 release.3 ${DOCREL} release.4 release.5 \ 1003275970Scy release.6 release.7 release.8 release.9 ${EXTRAS} 1004275970Scy @echo "Release done" 1005275970Scy 1006275970Scyfloppies: 1007275970Scy @rm -f release.5 release.9 floppies.[123] 1008275970Scy @cd ${.CURDIR} && ${MAKE} release.5 release.9 floppies.1 floppies.2 \ 1009275970Scy floppies.3 1010275970Scy @cd ${RD} && find floppies -print | cpio -dumpl ${FD} 1011275970Scy 1012275970ScyinstallCRUNCH: 1013275970Scy.if !defined(CRUNCH) 1014275970Scy @echo "CRUNCH undefined in installCRUNCH" && exit 1 1015275970Scy.endif 1016275970Scy.if !defined(DIR) 1017275970Scy @echo "DIR undefined in installCRUNCH" && exit 1 1018275970Scy.endif 1019275970Scy.if !defined(ZIP) 1020275970Scy @echo "ZIP undefined in installCRUNCH" && exit 1 1021275970Scy.endif 1022275970Scy @if ${ZIP} ; then \ 1023275970Scy gzip -9 < ${RD}/crunch/${CRUNCH} > ${DIR}/${CRUNCH}_crunch ; \ 1024275970Scy else \ 1025275970Scy ln -f ${RD}/crunch/${CRUNCH} ${DIR}/${CRUNCH}_crunch ; \ 1026275970Scy fi 1027275970Scy @chmod 555 ${DIR}/${CRUNCH}_crunch 1028275970Scy @if [ -f ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf ] ; then \ 1029275970Scy for i in `crunchgen -l ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf` ; do \ 1030275970Scy ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \ 1031275970Scy done \ 1032275970Scy else \ 1033275970Scy for i in `crunchgen -l ${.CURDIR}/${CRUNCH}_crunch.conf` ; do \ 1034275970Scy ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \ 1035275970Scy done \ 1036275970Scy fi 1037275970Scy 1038275970Scy# 1039275970Scy# --==## Build a floppy set for a splitfs file ##==-- 1040275970Scy# 1041275970Scy# FLOPPYBASE - basename of floppy image files 1042275970Scy# FLOPPYDESC - description of floppy set 1043275970Scy# SPLITFILE - filename of the file to split 1044275970Scy# FDSIZE - if specified and "small", small floppy is created 1045275970Scy 1046275970Scy.if make(makeFloppySet) 1047275970ScySPLITDIR= ${RD}/floppyset/${FLOPPYBASE} 1048275970Scy.if defined(FDSIZE) && ${FDSIZE} == "SMALL" 1049275970ScyFLPSPLITSIZE= ${SMALLFLOPPYSPLITSIZE} 1050275970ScyFLPSIZE= ${SMALLFLOPPYSIZE} 1051275970ScyFLPLABEL= ${SMALLFLOPPYLABEL} 1052275970Scy.else 1053275970ScyFLPSPLITSIZE= ${FLOPPYSPLITSIZE} 1054275970ScyFLPSIZE= ${FLOPPYSIZE} 1055275970ScyFLPLABEL= ${FLOPPYLABEL} 1056275970Scy.endif 1057275970Scy.endif 1058275970Scy 1059275970ScymakeFloppySet: 1060275970Scy.if !defined(FLOPPYBASE) 1061275970Scy @echo "FLOPPYBASE undefined in ${.TARGET}" && exit 1 1062275970Scy.endif 1063275970Scy.if !defined(FLOPPYDESC) 1064275970Scy @echo "FLOPPYDESC undefined in ${.TARGET}" && exit 1 1065275970Scy.endif 1066275970Scy.if !defined(SPLITFILE) 1067275970Scy @echo "SPLITFILE undefined in ${.TARGET}" && exit 1 1068275970Scy.endif 1069275970Scy sh ${.CURDIR}/scripts/split-file.sh ${SPLITFILE} \ 1070275970Scy ${RD}/floppyset/${FLOPPYBASE} ${FLPSPLITSIZE} "${FLOPPYDESC}" 1071275970Scy ( splitfile=${SPLITDIR}/`basename ${SPLITFILE}`.split ; \ 1072275970Scy lines=`cat $${splitfile} | wc -l`; \ 1073275970Scy lines=$$((lines - 1)) ; \ 1074275970Scy for line in `jot $$lines`; do \ 1075275970Scy file=`head -n $$(($${line} + 1)) $${splitfile} | tail -1 | cut -f 1 -d ' '` ; \ 1076275970Scy sh -e ${DOFS_SH} ${RD}/floppies/${FLOPPYBASE}$${line}.flp \ 1077275970Scy ${RD} ${MNT} ${FLPSIZE} ${SPLITDIR}/$${file} \ 1078275970Scy ${BOOTINODE} ${FLPLABEL}; \ 1079275970Scy done ) 1080275970Scy 1081275970Scy# 1082275970Scy# --==## Build a boot floppy ##==-- 1083275970Scy# 1084275970Scy# FSIMAGE - base floppy image name 1085275970Scy# FDSIZE - if specified and "small", small floppy is created 1086275970Scy# KERNFILE - path to kernel split file 1087275970Scy# MFSROOTFILE - path to mfsroot split file 1088275970Scy 1089275970Scy.if make(buildBootFloppy) 1090275970ScyIMAGEDIR= ${RD}/image.${FSIMAGE} 1091275970ScyBOOTDIR= ${RD}/trees/base/boot 1092275970ScyHINTSFILE= ${BOOTDIR}/device.hints 1093275970ScyACPI_KO= ${BOOTDIR}/kernel/acpi.ko 1094275970ScyIMAGEFILE= ${RD}/floppies/${FSIMAGE}.flp 1095275970Scy.if defined(FDSIZE) && ${FDSIZE} == "SMALL" 1096275970ScyFLPSIZE= ${SMALLFLOPPYSIZE} 1097275970ScyFLPLABEL= ${SMALLFLOPPYLABEL} 1098275970Scy.else 1099275970ScyFLPSIZE= ${FLOPPYSIZE} 1100275970ScyFLPLABEL= ${FLOPPYLABEL} 1101275970Scy.endif 1102275970Scy.endif 1103275970Scy 1104275970ScybuildBootFloppy: 1105275970Scy.if !defined(FSIMAGE) 1106275970Scy @echo "FSIMAGE undefined in ${.TARGET}" && exit 1 1107275970Scy.endif 1108275970Scy.if !defined(KERNFILE) 1109275970Scy @echo "KERNFILE undefined in ${.TARGET}" && exit 1 1110275970Scy.endif 1111275970Scy.if !defined(MFSROOTFILE) 1112275970Scy @echo "MFSROOTFILE undefined in ${.TARGET}" && exit 1 1113275970Scy.endif 1114275970Scy @echo "Running ${.TARGET} for ${FSIMAGE}" 1115275970Scy @rm -rf ${IMAGEDIR} 1116275970Scy @mkdir ${IMAGEDIR} 1117275970Scy @echo "Setting up /boot directory for ${FSIMAGE} floppy" 1118275970Scy @mkdir -p ${IMAGEDIR}/boot 1119275970Scy.if ${TARGET} == "i386" 1120275970Scy @${WMAKEENV} kgzip -v -l ${RD}/trees/base/usr/lib/kgzldr.o -o \ 1121275970Scy ${IMAGEDIR}/boot/loader ${BOOTDIR}/loader 1122275970Scy.else 1123275970Scy @cp ${BOOTDIR}/loader ${IMAGEDIR}/boot 1124275970Scy.endif 1125275970Scy @cp -Rp ${BOOTDIR}/*.4th ${BOOTDIR}/defaults ${BOOTDIR}/loader.help \ 1126275970Scy ${BOOTDIR}/loader.rc ${IMAGEDIR}/boot 1127275970Scy.if exists(${HINTSFILE}) 1128275970Scy @gzip -9nc ${HINTSFILE} > ${IMAGEDIR}/boot/device.hints.gz 1129275970Scy.endif 1130275970Scy @gzip -9n ${IMAGEDIR}/boot/*.4th ${IMAGEDIR}/boot/loader.help \ 1131275970Scy ${IMAGEDIR}/boot/defaults/loader.conf 1132275970Scy @echo 'bootfile="/kernel"' > ${IMAGEDIR}/boot/loader.conf 1133275970Scy.if exists(${ACPI_KO}) 1134275970Scy @gzip -9nc ${ACPI_KO} > ${IMAGEDIR}/acpi.ko.gz 1135275970Scy @echo 'acpi_load="YES"' >> ${IMAGEDIR}/boot/loader.conf 1136275970Scy @echo 'acpi_name="/acpi.ko"' >> ${IMAGEDIR}/boot/loader.conf 1137275970Scy @echo 'acpi_before="read -p \"Insert boot floppy and press Enter\""' >> ${IMAGEDIR}/boot/loader.conf 1138275970Scy.endif 1139275970Scy @echo 'mfsroot_load="YES"' >> ${IMAGEDIR}/boot/loader.conf 1140275970Scy @echo 'mfsroot_type="mfs_root"' >> ${IMAGEDIR}/boot/loader.conf 1141275970Scy @echo 'mfsroot_name="/mfsroot"' >> ${IMAGEDIR}/boot/loader.conf 1142275970Scy.if !exists(${ACPI_KO}) 1143275970Scy @echo 'mfsroot_before="read -p \"Insert boot floppy and press Enter\""' >> ${IMAGEDIR}/boot/loader.conf 1144275970Scy.endif 1145275970Scy.if ${TARGET_ARCH} == "i386" && ${AUTO_KEYBOARD_DETECT} 1146275970Scy @echo "-P" >> ${IMAGEDIR}/boot.config 1147275970Scy.endif 1148275970Scy @rm -f ${IMAGEFILE} 1149275970Scy @cp ${KERNFILE} ${MFSROOTFILE} ${IMAGEDIR} 1150275970Scy sh -e ${DOFS_SH} ${IMAGEFILE} ${RD} ${MNT} ${FLPSIZE} ${IMAGEDIR} \ 1151275970Scy ${BOOTINODE} ${FLPLABEL} 1152275970Scy @echo "Created ${RD}/floppies/${FSIMAGE}.flp" 1153275970Scy 1154275970Scy.include <bsd.obj.mk> 1155