Makefile revision 124493
1193323Sed# $FreeBSD: head/release/Makefile 124493 2004-01-13 18:46:09Z obrien $
2193323Sed#
3193323Sed# make release [BUILDNAME=somename] CHROOTDIR=/some/dir CVSROOT=/cvs/dir \
4193323Sed#     [RELEASETAG=tag]
5193323Sed#
6193323Sed# Where "/some/dir" is the pathname of a directory on a some filesystem with
7193323Sed# at least 1000MB of free space, "somename" is what you want the release to
8193323Sed# call itself, "/cvs/dir" is where our source repo resides and, optionally,
9193323Sed# which CVS "tag" name should be used when checking out the sources to build
10193323Sed# the release (default is HEAD).
11193323Sed#
12193323Sed# Please note: the md(4) driver must be present in the kernel
13193323Sed# (either by being compiled in or available as a kld(4) module),
14193323Sed# otherwise the target 'release.9' and possibly others will fail.
15193323Sed#
16193323Sed# Note: If you add options to this file, please keep release(7) updated!
17193323Sed#
18204792Srdivacky# Set these, release builder!
19198090Srdivacky#
20226633Sdim# Fixed version:
21193323Sed#BUILDNAME=5.1-RELEASE
22234353Sdim#
23194178Sed# Automatic SNAP versioning:
24224145SdimDATE != date +%Y%m%d
25193323SedBASE = 5.1
26193323SedBUILDNAME?=${BASE}-${DATE}-SNAP
27210299Sed#
28210299Sed#CHROOTDIR=/junk/release
29210299Sed# If this is a -stable snapshot, then set
30210299Sed#RELEASETAG=RELENG_4
31226633Sdim#
32210299Sed# To test a release with a source tree containing patches and
33210299Sed# other work. This tree will get copied instead of getting the
34234353Sdim# src/ tree from a CVS checkout. For "rerelease", this will NOT
35234353Sdim# be copied; cvs update will be used instead.
36234353Sdim#EXTSRCDIR=/usr/src
37234353Sdim#
38234353Sdim# To add other options to the CVS subcommands (co,up), set
39234353Sdim#CVSCMDARGS="-D '01/01/2002 00:00:00 UTC'"
40239462Sdim#
41234353Sdim# To add other options to the CVS command, set
42234353Sdim#CVSARGS="-lfq"
43234353Sdim#
44234353Sdim# To prefix the cvs command
45234353Sdim#CVSPREFIX="/usr/bin/time"
46234353Sdim#
47210299Sed# Where the CVS repository is
48210299Sed#CVSROOT="/home/ncvs"
49210299Sed#
50210299Sed# Non-zero if ${RELEASETAG} is in the form "RELENG_ver_RELEASE"; we
51210299Sed# are building an official release.  Otherwise, we are building for
52210299Sed# a branch.
53210299Sed.if defined(RELEASETAG)
54234353SdimISRELEASE!=	expr "${RELEASETAG}" : '^RELENG_.*_RELEASE$$' || true
55234353Sdim.if ${ISRELEASE} != 0
56234353Sdim# Convert "RELENG_ver_RELEASE" to "RELEASE_ver" for ports and doc trees.
57234353SdimAUXRELEASETAG!=	echo ${RELEASETAG} | sed -e 's/^RELENG_/RELEASE_/' -e 's/_RELEASE$$//'
58210299SedDOCRELEASETAG?=		${AUXRELEASETAG}
59210299SedPORTSRELEASETAG?=	${AUXRELEASETAG}
60210299Sed.endif
61234353Sdim.endif
62234353Sdim
63234353Sdim# If you want to pass flags to the world build such as -j X, use
64210299Sed# WORLD_FLAGS.  Similarly, you can specify make flags for kernel
65234353Sdim# builds via KERNEL_FLAGS.
66210299Sed# Similarly, you can specify make flags for make readmes via PORTREADMES_FLAGS.
67234353Sdim#WORLD_FLAGS=-j4
68234353Sdim#KERNEL_FLAGS=-j4
69210299Sed#PORTREADMES_FLAGS=-j4
70210299Sed
71210299SedTARGET_ARCH?=	${MACHINE_ARCH}
72210299Sed.if ${TARGET_ARCH} == ${MACHINE_ARCH}
73234353SdimTARGET?=	${MACHINE}
74234353Sdim.else
75234353SdimTARGET?=	${TARGET_ARCH}
76234353Sdim.endif
77234353SdimCROSSENV=	TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}
78234353SdimCROSSMAKE=	${MAKE} ${CROSSENV}
79234353SdimNATIVEMAKE=	${MAKE} TARGET_ARCH=${MACHINE_ARCH} TARGET=${MACHINE}
80234353Sdim
81234353Sdim# If you are using a local CVS repository with components stored in 
82234353Sdim# non-standard modules, override these on the make commandline or
83210299Sed# in the environment.
84210299SedRELEASESRCMODULE?=	src
85195340SedRELEASEDOCMODULE?=	doc
86195340SedRELEASEPORTSMODULE?=	ports
87195340Sed
88226633Sdim# Uncomment this to disable the doc.1 target.  Docs normally require
89195340Sed# the ports tree, so NOPORTS can be set together with NODOC in order
90195340Sed# to have neither ports or docs.  If only NOPORTS is set to YES, but
91195340Sed# docs are still desired, the DOMINIMALDOCPORTS logic below will only
92195340Sed# install the ports that are minimally required for the docs.  This is
93195340Sed# intended as a compromise, less disk space is required than for using
94195340Sed# the entire ports collection (and much less time due to the huge number
95195340Sed# of directories it would create), but still quite a bit as well as some
96195340Sed# CPU cycles (some of the programs are C++, and things like ghostscript
97193323Sed# belong to the required ports nevertheless).
98234353Sdim#
99234353Sdim# Setting this also disables building of release note documentation
100234353Sdim# (RELNOTESng).
101234353Sdim#NODOC=  YES
102234353Sdim#NOPORTS=  YES
103234353Sdim
104234353Sdim# Modify this definition if you want the release notes 
105234353Sdim# and other release documentation in a language other than English.
106193323SedRELNOTES_LANG?=	en_US.ISO8859-1
107195340Sed
108193323Sed# As an alternative to installing the entire ports collection (which
109193323Sed# can take a huge amount of time, in particular on slower disks),
110193323Sed# setting ${MINIMALDOCPORTS} allows to install and build just those
111193323Sed# ports that are really required for getting the docs up & running.
112193323Sed.if defined(NOPORTS) && !defined(NODOC)
113193323SedDOMINIMALDOCPORTS=	YES
114193323Sed.include "Makefile.inc.docports"
115193323SedRELEASEPORTSMODULE=	${MINIMALDOCPORTS}
116193323Sed.endif
117193323Sed
118193323Sed# Helper variable
119193323Sed.if defined(NOPORTS)
120193323Sed.if !defined(DOMINIMALDOCPORTS) || ${DOMINIMALDOCPORTS} != "YES"
121193323SedNOPORTSATALL=	YES
122193323Sed.endif
123210299Sed.endif
124193323Sed
125195340Sed# By default, documentation (Handbook, FAQ, etc.) is built for all
126198090Srdivacky# the languages.  To speed up building, set the DOC_LANG to just
127210299Sed# the languages you need.  (The language for the release notes is
128210299Sed# controlled by the RELNOTES_LANG variable above.)
129193323Sed#DOC_LANG=	en_US.ISO8859-1
130210299SedDOCPORTS=	textproc/docproj
131210299Sed# Set this to wherever the distfiles required by release procedures.
132210299Sed.if defined(DOCDISTFILES)
133210299Sed# Respect DOCDISTFILES which is used before.
134226633SdimRELEASEDISTFILES?=	${DOCDISTFILES}
135226633Sdim.else
136210299SedRELEASEDISTFILES?=	${.CURDIR}/../../ports/distfiles
137210299Sed.endif
138193323Sed# Set this to 1 if you want -P to be used for automatic keyboard detection
139193323Sed# on the boot floppy.  WARNING: Breaks on some Athlon (K7) motherboards.
140210299SedAUTO_KEYBOARD_DETECT?= 0
141193323Sed
142193323Sed.if !defined(NODOC)
143193323SedDIST_DOCS_ARCH_INDEP=	readme errata early-adopter
144193323SedDIST_DOCS_ARCH_DEP=	installation relnotes hardware
145234353Sdim.endif
146226633Sdim
147210299Sed# Things which without too much trouble can be considered variables
148193323Sed# BASE_DISTS are special in that they get full /etc installation sets.
149193323Sed#
150193323Sed.if ${TARGET_ARCH} == "i386"
151193323SedCOMPAT_DISTS?=	compat1x compat20 compat21 compat22 compat3x compat4x
152195340Sed.elif ${TARGET_ARCH} != "ia64"
153195340SedCOMPAT_DISTS?=	compat4x
154193323Sed.endif
155193323SedOTHER_DISTS?=	catpages manpages games proflibs dict info doc
156193323SedCRYPTO_DISTS?=	crypto
157193323SedBASE_DISTS?=	base
158193323SedDISTRIBUTIONS?=	${BASE_DISTS} ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS}
159193323Sed
160193323Sed# mountpoint for filesystems.
161195340SedMNT=			/mnt
162195340Sed
163195340Sed# Various floppy image parameters.
164195340Sed#
165193323Sed
166193323Sed.if ${TARGET_ARCH} == "i386"
167204792Srdivacky.if ${TARGET} == "pc98"
168204792SrdivackySMALLBOOTSIZE=		1200
169204792SrdivackyBOOTSIZE=		1440
170204792SrdivackySMALLFIXITSIZE=		1200
171193323SedFIXITSIZE=		1440
172193323SedMFSSIZE=		4320
173193323SedBOOTINODE=		80000
174193323SedFIXITINODE=		40000
175193323SedMFSINODE=		8000
176193323SedSMALLBOOTLABEL=		fd1200
177195340SedBOOTLABEL=		fd1440
178204642SrdivackySMALLFIXITLABEL=	fd1200
179204642SrdivackyFIXITLABEL=		fd1440
180204642SrdivackyMFSLABEL=		minimum3
181204642Srdivacky.else
182204642SrdivackyDRIVERSIZE=		1440
183204642SrdivackyBOOTSIZE=		1440
184204642SrdivackyFIXITSIZE=		1440
185204642SrdivackyMFSSIZE=		4320
186204642SrdivackyBIGBOOTSIZE=		2880
187204642SrdivackyDRIVERINODE=		40000
188204642SrdivackyBOOTINODE=		80000
189204642SrdivackyFIXITINODE=		40000
190204642SrdivackyMFSINODE=		8000
191204642SrdivackyDRIVERLABEL=		fd1440
192193323SedBOOTLABEL=		fd1440
193226633SdimFIXITLABEL=		fd1440
194224145SdimMFSLABEL=		minimum3
195202878SrdivackyBIGBOOTLABEL=		minimum2
196204642Srdivacky.endif
197204642Srdivacky.elif ${TARGET_ARCH} == "alpha"
198204642SrdivackyMFSSIZE=		4320
199204642SrdivackyMFSINODE=		8000
200204642SrdivackyMFSLABEL=		auto
201193323SedNO_FLOPPIES=
202193323Sed.elif ${TARGET_ARCH} == "sparc64"
203193323SedDISKLABEL=		sunlabel
204193323SedMFSSIZE=		4096
205193323SedMFSINODE=		8192
206204642SrdivackyMFSLABEL=		auto
207193323SedMINIROOT=
208193323SedNO_FLOPPIES=
209193323Sed.elif ${TARGET_ARCH} == "ia64"
210193323SedMFSINODE=		8192
211198090SrdivackyMFSLABEL=		auto
212198090SrdivackyMFSSIZE=		8192
213198090SrdivackyNO_FLOPPIES=
214198090Srdivacky.elif ${TARGET_ARCH} == "amd64"
215198090SrdivackyMFSSIZE=		4096
216193323SedMFSINODE=		8192
217198090SrdivackyMFSLABEL=		auto
218193323SedNO_FLOPPIES=
219193323Sed.endif
220198090Srdivacky
221198090Srdivacky.if exists(/sbin/bsdlabel)
222207618SrdivackyDISKLABEL?=		bsdlabel
223198090Srdivacky.else
224198090SrdivackyDISKLABEL?=		disklabel
225198090Srdivacky.endif
226193323Sed
227193323SedZIPNSPLIT=		gzip --no-name -9 -c | split -b 1423k -
228198090Srdivacky
229198090Srdivacky# Things that need to be compiled without crypto support in releases
230193323Sed.if !defined(FIXCRYPTO) && !make(release) && !make(rerelease)
231198090SrdivackyFIXCRYPTO!=	cd ${.CURDIR}/../kerberos5; ${MAKE} -V KPROGS; \
232198090Srdivacky		cd ${.CURDIR}/../secure; ${MAKE} -V SPROGS
233198090Srdivacky.endif
234198090Srdivacky
235198090Srdivacky# Things which may get you into trouble if you change them
236198090SrdivackyMTREEFILES=		${.CURDIR}/../etc/mtree
237198090Srdivacky_R?=			/R
238198090SrdivackyRD=			${_R}/stage
239198090SrdivackyRND=			${RD}/release.doc
240198090SrdivackyFD=			${_R}/ftp
241198090SrdivackyCD=			${_R}/cdrom
242198090Srdivacky.if ${TARGET} != "pc98"
243198090SrdivackyCD_BOOT=		${CD}/bootonly
244198090Srdivacky.endif
245198090SrdivackyCD_DISC1=		${CD}/disc1
246198090SrdivackyCD_DISC2=		${CD}/disc2
247198090Srdivacky_MK?=			${CHROOTDIR}/mk
248198090Srdivacky
249193323Sed# Where the bootstrap ports (see DOCPORTS) get installed.
250193323SedLOCALDIR=		/usr/local/bin
251193323Sed
252193323Sed.if ${TARGET} != ${MACHINE} && ${DISKLABEL} == "bsdlabel"
253193323SedDOFS_SH=	${.CURDIR}/scripts/doFS.sh ${DISKLABEL} ${TARGET}
254198090Srdivacky.else
255198090SrdivackyDOFS_SH=	${.CURDIR}/scripts/doFS.sh ${DISKLABEL} ""
256198090Srdivacky.endif
257198090Srdivacky
258198090SrdivackyCRUNCH_TARGETS=	boot
259198090Srdivacky.if ${TARGET_ARCH} == "i386"
260198090SrdivackyCRUNCH_TARGETS+=fixit
261198090Srdivacky.if ${TARGET} == "pc98"
262205407SrdivackyCRUNCH_TARGETS+=fixit-small
263198090Srdivacky.endif
264198090Srdivacky.endif
265198090Srdivacky
266198090SrdivackyEXTRAS= ftp.1
267198090Srdivacky.if !defined(NOCDROM)
268198090SrdivackyEXTRAS+= cdrom.1
269198090Srdivacky.if defined(MAKE_ISOS)
270198090SrdivackyEXTRAS+= iso.1
271198090Srdivacky.endif
272198090Srdivacky.if ${TARGET} == "i386" && defined(EMUL_BOOT)
273198090SrdivackyBOOTABLE="-eb"
274207618Srdivacky.elif ${TARGET} == "pc98"
275198090SrdivackyBOOTABLE=
276198090Srdivacky.else
277205407SrdivackyBOOTABLE="-b"
278198090Srdivacky.endif
279198090Srdivacky.endif
280198090Srdivacky
281198090Srdivacky.if !defined(NODOC)
282193323SedDOCREL= doc.1 doc.2
283198090Srdivacky.endif
284198090Srdivacky
285193323Sed.if !make(release) && !make(rerelease)
286193323SedBINMAKE!=	cd ${.CURDIR}/..; ${MAKE} -V BINMAKE
287193323SedWMAKEENV!=	cd ${.CURDIR}/..; \
288198090Srdivacky		${BINMAKE} ${CROSSENV} -f Makefile.inc1 -V WMAKEENV
289207618SrdivackyWMAKE=		${WMAKEENV} ${BINMAKE}
290198090Srdivacky.endif
291193323Sed
292193323SedCVS_SRCARGS=	-P
293193323Sed.if defined(RELEASETAG)
294198090SrdivackyCVS_SRCARGS+=	-r ${RELEASETAG}
295198090Srdivacky.endif
296193323Sed
297221345SdimCVS_DOCARGS=	-P
298221345Sdim.if defined(DOCRELEASETAG)
299193323SedCVS_DOCARGS+=	-r ${DOCRELEASETAG}
300193323Sed.endif
301193323Sed
302193323SedCVS_PORTSARGS=	-P
303193323Sed.if defined(PORTSRELEASETAG)
304193323SedCVS_PORTSARGS+=	-r ${PORTSRELEASETAG}
305198090Srdivacky.endif
306198090Srdivacky
307198090SrdivackyWORLDDIR?=	${.CURDIR}/..
308193323Sed
309198090Srdivackyrelease rerelease:
310226633Sdim.if !defined(CHROOTDIR) || !defined(BUILDNAME) || !defined(CVSROOT)
311198090Srdivacky	@echo "To make a release you must set CHROOTDIR, BUILDNAME and CVSROOT" && false
312198090Srdivacky.endif
313198090Srdivacky.if defined(NOPORTSATALL) && !defined(NODOC)
314198090Srdivacky	@echo "Ports are required for building the docs.  Either set NODOC or"
315198090Srdivacky	@echo "unset NOPORTS, or set at least DOMINIMALDOCPORTS to YES!"
316198090Srdivacky	@exit 1
317198090Srdivacky.endif
318198090Srdivacky.if make(release)
319198090Srdivacky.if exists(${CHROOTDIR})
320207618Srdivacky# The first command will fail on a handful of files that have their schg
321198090Srdivacky# flags set.  But it greatly speeds up the next two commands.
322198090Srdivacky	# NB: clear any vestigal devfs mount, just in case
323198090Srdivacky	-umount ${CHROOTDIR}/dev > /dev/null 2>&1
324205407Srdivacky	-rm -rf ${CHROOTDIR} 2>/dev/null
325198090Srdivacky	-chflags -R noschg ${CHROOTDIR}/.
326210299Sed	-rm -rf ${CHROOTDIR}
327205407Srdivacky.endif
328205407Srdivacky	mkdir -p ${CHROOTDIR}
329198090Srdivacky	@echo ">>> make release for ${TARGET} started on `LC_ALL=C TZ=GMT date`"
330210299Sed	cd ${WORLDDIR} && ${NATIVEMAKE} -DNOGAMES -DNOHTML -DNOINFO -DNOMAN \
331198090Srdivacky	    -DNOPROFILE installworld DESTDIR=${CHROOTDIR}
332198090Srdivacky	cd ${WORLDDIR}/etc && ${NATIVEMAKE} distribution DESTDIR=${CHROOTDIR}
333198090Srdivacky	if [ -f /etc/resolv.conf ]; then \
334198090Srdivacky		cp -p /etc/resolv.conf ${CHROOTDIR}/etc; \
335198090Srdivacky	fi
336198090Srdivacky.if defined(EXTLOCALDIR)
337198090Srdivacky	rm -rf ${CHROOTDIR}/usr/local
338198090Srdivacky	cd ${CHROOTDIR}/usr && cp -R -H ${EXTLOCALDIR} local
339226633Sdim.endif
340198090Srdivacky	rm -rf ${CHROOTDIR}/usr/src
341198090Srdivacky.if defined(EXTSRCDIR)
342198090Srdivacky	cd ${CHROOTDIR}/usr && \
343198090Srdivacky	    cp -R -H ${EXTSRCDIR} src
344198090Srdivacky.else
345198090Srdivacky	cd ${CHROOTDIR}/usr && \
346198090Srdivacky	    ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \
347207618Srdivacky	    co ${CVSCMDARGS} ${CVS_SRCARGS} ${RELEASESRCMODULE}
348198090Srdivacky.endif
349198090Srdivacky.if defined(LOCAL_PATCHES) && !empty(LOCAL_PATCHES)
350221345Sdim.for p in ${LOCAL_PATCHES}
351221345Sdim.if exists(${p})
352221345Sdim	patch -d ${CHROOTDIR}/usr/${RELEASESRCMODULE} ${PATCH_FLAGS} < ${p}
353198090Srdivacky.endif
354198090Srdivacky.endfor
355210299Sed.endif
356198090Srdivacky.if defined(LOCAL_SCRIPT) && exists(${LOCAL_SCRIPT})
357198090Srdivacky	cd ${CHROOTDIR} && env CHROOTDIR=${CHROOTDIR} BUILDNAME=${BUILDNAME} \
358198090Srdivacky	    RELEASETAG=${RELEASETAG} ${LOCAL_SCRIPT}
359198090Srdivacky.endif
360198090Srdivacky	rm -rf ${CHROOTDIR}/usr/ports
361198090Srdivacky.if !defined(NOPORTSATALL)
362198090Srdivacky	cd ${CHROOTDIR}/usr && ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \
363210299Sed	    co ${CVSCMDARGS} ${CVS_PORTSARGS} ${RELEASEPORTSMODULE}
364198090Srdivacky.endif
365198090Srdivacky.if !defined(NODOC)
366198090Srdivacky	rm -rf ${CHROOTDIR}/usr/doc
367198090Srdivacky.if defined(EXTDOCDIR)
368198090Srdivacky	cd ${CHROOTDIR}/usr && cp -R -H ${EXTDOCDIR} doc
369198090Srdivacky.else
370198090Srdivacky	cd ${CHROOTDIR}/usr && ${CVSPREFIX} cvs -R ${CVSARGS} -d ${CVSROOT} \
371198090Srdivacky	    co ${CVSCMDARGS} ${CVS_DOCARGS} ${RELEASEDOCMODULE}
372198090Srdivacky.endif
373198090Srdivacky	if [ -d ${RELEASEDISTFILES}/ ]; then \
374198090Srdivacky		cp -rp ${RELEASEDISTFILES} ${CHROOTDIR}/usr/ports/distfiles; \
375198090Srdivacky	else \
376202878Srdivacky		mkdir -p ${CHROOTDIR}/usr/ports/distfiles; \
377198090Srdivacky	fi
378198090Srdivacky.if !defined(NO_PREFETCHDISTFILES)
379198090Srdivacky	@cd ${.CURDIR} && ${MAKE} fetch-distfiles
380198090Srdivacky.endif
381193323Sed.endif
382193323Sed.endif
383193323Sed.if make(rerelease)
384193323Sed.if !defined(RELEASENOUPDATE)
385193323Sed.if !defined(RELEASETAG)
386193323Sed	cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \
387193323Sed	    update ${CVSCMDARGS} -P -d -A
388193323Sed.else
389193323Sed	cd ${CHROOTDIR}/usr/src && ${CVSPREFIX} cvs -R ${CVSARGS} -q \
390193323Sed	    update ${CVSCMDARGS} -P -d -r ${RELEASETAG}
391193323Sed.endif
392193323Sed	rm -f ${CHROOTDIR}/tmp/.world_done 
393193323Sed.if !defined(NOPORTS)
394193323Sed	cd ${CHROOTDIR}/usr/ports && ${CVSPREFIX} cvs -R ${CVSARGS} -q \
395193323Sed	    update ${CVSCMDARGS} -P -d
396198090Srdivacky.endif
397198090Srdivacky.if defined(DOMINIMALDOCPORTS) && ${DOMINIMALDOCPORTS} == "YES"
398226633Sdim	for i in ${MINIMALDOCPORTS}; do \
399226633Sdim	    ( cd ${CHROOTDIR}/usr/$$i && ${CVSPREFIX} cvs -R ${CVSARGS} -q \
400193323Sed		update ${CVSCMDARGS} -P -d ) ; \
401226633Sdim	done
402193323Sed.endif
403198090Srdivacky.if !defined(NODOC)
404193323Sed	cd ${CHROOTDIR}/usr/doc && ${CVSPREFIX} cvs -R ${CVSARGS} -q \
405193323Sed	    update ${CVSCMDARGS} -P -d
406198090Srdivacky.endif
407198090Srdivacky.endif
408198090Srdivacky.endif
409198090Srdivacky	# Add version information to those things that need it.
410200581Srdivacky	if [ ! -f ${CHROOTDIR}/tmp/.world_done ]; then \
411193323Sed		cd ${CHROOTDIR}/usr/src/sys/conf && \
412193323Sed		mv newvers.sh foo && \
413193323Sed		sed "s/^RELEASE=.*/RELEASE=${BUILDNAME}/" foo > newvers.sh && \
414193323Sed		rm foo; \
415193323Sed	fi
416198090Srdivacky	-test -f install.cfg && cp install.cfg ${CHROOTDIR}/usr/src/release
417198090Srdivacky	echo "#!/bin/sh"			> ${_MK}
418198090Srdivacky	echo "set -ex"				>> ${_MK}
419203954Srdivacky	echo "trap 'umount /dev || true' 0"	>> ${_MK}
420203954Srdivacky	echo "_RELTARGET=\$${1:-doRELEASE}"	>> ${_MK}
421203954Srdivacky.for var in \
422203954Srdivacky	AUTO_KEYBOARD_DETECT \
423203954Srdivacky	BOOT_CONFIG \
424203954Srdivacky	BUILDNAME \
425207618Srdivacky	CD_EXTRA_BITS \
426203954Srdivacky	DISTRIBUTIONS \
427203954Srdivacky	DOC_LANG \
428203954Srdivacky	DOMINIMALDOCPORTS \
429203954Srdivacky	EXTRA_SRC \
430203954Srdivacky	FIXCRYPTO \
431203954Srdivacky	FTP_PASSIVE_MODE \
432203954Srdivacky	FTP_PROXY \
433203954Srdivacky	HTTP_PROXY \
434203954Srdivacky	KERNELS \
435203954Srdivacky	KERNEL_FLAGS \
436203954Srdivacky	MAKE_ISOS \
437193323Sed	NOCDROM \
438203954Srdivacky	NODOC \
439203954Srdivacky	NOPORTS \
440203954Srdivacky	NOSHARED \
441203954Srdivacky	NOSRC \
442203954Srdivacky	NO_CPU_CFLAGS \
443193323Sed	NO_CPU_COPTFLAGS \
444193323Sed	NO_FLOPPIES \
445198090Srdivacky	NO_SENDMAIL \
446198090Srdivacky	RELEASETAG \
447198090Srdivacky	RELNOTES_LANG \
448198090Srdivacky	TARGET \
449198090Srdivacky	TARGET_ARCH \
450193323Sed	WORLD_FLAGS
451193323Sed.if defined(${var})
452193323Sed	echo "export ${var}=\"${${var}}\""	>> ${_MK}
453193323Sed.endif
454193323Sed.endfor
455193323Sed	# Don't remove this, or the build will fall over!
456226633Sdim	echo "export RELEASEDIR=${_R}"		>> ${_MK}
457198090Srdivacky	echo "export PATH=/bin:/usr/bin:/sbin:/usr/sbin:${LOCALDIR}"	>> ${_MK}
458198090Srdivacky	echo "export MANBUILDCAT=YES"		>> ${_MK}
459198090Srdivacky	# NB: these may fail if the host is running w/o devfs
460198090Srdivacky	echo "umount /dev >/dev/null 2>&1 || true" >> ${_MK}
461198090Srdivacky	echo "mount -t devfs devfs /dev >/dev/null 2>&1 || true"	>> ${_MK}
462198090Srdivacky	echo "/etc/rc.d/ldconfig start"		>> ${_MK}
463198090Srdivacky	echo "if [ ! -f /tmp/.world_done ]; then" >> ${_MK}
464193323Sed	echo "	cd /usr/src"			>> ${_MK}
465193323Sed	echo "	${CROSSMAKE} ${WORLD_FLAGS} -DNOCLEAN buildworld && \\" >> ${_MK}
466193323Sed	echo "	touch /tmp/.world_done"		>> ${_MK}
467193323Sed	echo "fi"				>> ${_MK}
468193323Sed	echo "if [ ! -f /tmp/.skip_ports ]; then" >> ${_MK}
469193323Sed	echo "	echo \">>> make readmes started on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK}
470198090Srdivacky	echo "	cd /usr/ports"			>> ${_MK}
471198090Srdivacky	echo "	make ${PORTREADMES_FLAGS} readmes" >> ${_MK}
472193323Sed	echo "	touch /tmp/.skip_ports"		>> ${_MK}
473193323Sed	echo "	echo \">>> make readmes finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK}
474194612Sed	echo "fi"				>> ${_MK}
475193323Sed	echo "cd /usr/src/release"		>> ${_MK}
476198090Srdivacky	echo "make obj"				>> ${_MK}
477193323Sed	echo "make \$${_RELTARGET}"		>> ${_MK}
478193323Sed	echo "echo \">>> make ${.TARGET} for ${TARGET} finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${_MK}
479198090Srdivacky	chmod 755 ${_MK}
480203954Srdivacky.if defined(NOPORTS) || defined(NOPORTREADMES)
481198090Srdivacky	touch ${CHROOTDIR}/tmp/.skip_ports
482198090Srdivacky.endif
483203954Srdivacky	# Ensure md.ko is loaded if md(4) is not statically compiled into 
484226633Sdim	# the kernel
485203954Srdivacky	-mdconfig 2>/dev/null
486203954Srdivacky	env -i /usr/sbin/chroot `dirname ${_MK}` /`basename ${_MK}`
487203954Srdivacky
488203954Srdivackyclean:
489203954Srdivacky	rm -rf ${CRUNCH_TARGETS:S/$/_crunch/} release.[0-9] release.10 \
490198090Srdivacky	    ${EXTRAS}
491198090Srdivacky
492198090Srdivackyfetch-distfiles:
493198090Srdivacky	@for i in ${DOCPORTS}; do \
494198090Srdivacky		cd ${CHROOTDIR}/usr/ports/$$i && \
495203954Srdivacky			make PORTSDIR=${CHROOTDIR}/usr/ports BATCH=yes \
496193323Sed			WITHOUT_X11=yes JADETEX=no WITHOUT_PYTHON=yes \
497198090Srdivacky			checksum-recursive ; \
498198090Srdivacky	done
499198090Srdivacky
500198090Srdivacky# Clean out ${_R} and make the directory structure.
501198090Srdivackyrelease.1:
502198090Srdivacky	mkdir -p ${_R}
503198090Srdivacky	-rm -rf ${_R}/* 2> /dev/null
504198090Srdivacky	-chflags -R noschg ${_R}/.
505198090Srdivacky	rm -rf ${_R}/*
506193323Sed	mkdir ${RD}
507226633Sdim.if !defined(NO_FLOPPIES)
508193323Sed	mkdir ${RD}/floppies
509198090Srdivacky.endif
510198090Srdivacky	mkdir ${RD}/trees
511193323Sed	mkdir ${RD}/kernels
512193323Sed	for i in ${DISTRIBUTIONS} special; do \
513204642Srdivacky		mkdir ${RD}/trees/$$i && \
514193323Sed		mtree -deU -f ${MTREEFILES}/BSD.root.dist \
515193323Sed		    -p ${RD}/trees/$$i > /dev/null && \
516193323Sed		mtree -deU -f ${MTREEFILES}/BSD.usr.dist \
517198090Srdivacky		    -p ${RD}/trees/$$i/usr > /dev/null && \
518193323Sed		mtree -deU -f ${MTREEFILES}/BSD.include.dist \
519198090Srdivacky		    -p ${RD}/trees/$$i/usr/include > /dev/null && \
520198090Srdivacky		mtree -deU -f ${MTREEFILES}/BSD.var.dist \
521234353Sdim		    -p ${RD}/trees/$$i/var > /dev/null ; \
522234353Sdim	done
523234353Sdim	touch ${.TARGET}
524198090Srdivacky
525194178Sed# Install the system into the various distributions.
526193323Sedrelease.2:
527193323Sed	cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/base
528193323Sed	cd ${.CURDIR}/.. && ${CROSSMAKE} distributeworld DISTDIR=${RD}/trees
529193323Sed	touch ${.TARGET}
530226633Sdim
531193323Sed# Build and install non-crypto versions of some tools.
532193323Sedrelease.3:
533193323Sed	# Handle some grief caused by the munition braindeadness.
534195340Sed	cd ${.CURDIR}/..; \
535195340Sed	${CROSSMAKE} ${WORLD_FLAGS} -DNO_MAKEDB_RUN -DNOCRYPT \
536195340Sed	    SUBDIR_OVERRIDE="${FIXCRYPTO}" \
537195340Sed	    buildworld distributeworld DISTDIR=${RD}/trees
538193323Sed	-chflags -R noschg ${RD}/trees
539193323Sed	touch ${.TARGET}
540204792Srdivacky
541204792Srdivacky# Make and install the generic kernel(s).
542204792Srdivackyrelease.4:
543204792Srdivacky.for kernel in ${KERNELS}
544193323Sed	cd ${.CURDIR}/..; \
545193323Sed	${CROSSMAKE} ${KERNEL_FLAGS} -DNO_MODULES \
546193323Sed	    KERNCONF=${kernel} INSTKERNNAME=${kernel} kernel \
547193323Sed	    DESTDIR=${RD}/trees/base
548193323Sed.endfor
549193323Sed	# Install a standard boot kernel+modules.
550193323Sed	cd ${.CURDIR}/..; \
551204642Srdivacky	${CROSSMAKE} ${KERNEL_FLAGS} \
552204642Srdivacky	    kernel \
553204642Srdivacky	    DESTDIR=${RD}/trees/base; \
554204642Srdivacky	cd ${.CURDIR}/..; \
555204642Srdivacky	${CROSSMAKE} ${KERNEL_FLAGS} -DNO_MODULES \
556204642Srdivacky	    reinstallkernel -DINSTALL_DEBUG \
557204642Srdivacky	    DESTDIR=${RD}/trees/base
558204642Srdivacky	touch ${.TARGET}
559204642Srdivacky
560204642Srdivacky# Make and install the three crunched binaries which live on the floppies.
561204642Srdivacky# You are not supposed to like this :-)
562204642Srdivackyrelease.5:
563204642Srdivacky	rm -rf ${RD}/crunch
564204642Srdivacky	mkdir -p ${RD}/crunch
565198090Srdivacky.for j in ${CRUNCH_TARGETS}
566198090Srdivacky.if exists(${.CURDIR}/${TARGET}/${j}_crunch.conf)
567202878Srdivacky	rm -rf ${j}_crunch
568204642Srdivacky	mkdir ${j}_crunch
569204642Srdivacky	cd ${j}_crunch; ${WMAKEENV} crunchgen -o \
570204642Srdivacky	    ${.CURDIR}/${TARGET}/${j}_crunch.conf
571204642Srdivacky	cd ${j}_crunch; ${WMAKE} -f ${j}_crunch.mk subclean
572204642Srdivacky	cd ${.CURDIR}/..; ${BINMAKE} -f Makefile.inc1 _build-tools
573193323Sed	cd ${j}_crunch; ${WMAKE} -f ${j}_crunch.mk \
574193323Sed	    CFLAGS="-Os -pipe" -DNO_CPU_CFLAGS all
575193323Sed	${WMAKEENV} strip -R .comment ${j}_crunch/${j}_crunch
576204642Srdivacky	mv ${j}_crunch/${j}_crunch ${RD}/crunch/${j}
577204642Srdivacky.endif
578204642Srdivacky.endfor
579204642Srdivacky	touch ${.TARGET}
580204642Srdivacky
581204642Srdivacky#
582204642Srdivacky# --==## Fix up the distributions. ##==--
583204642Srdivacky#
584204642Srdivackyrelease.6:
585204642Srdivacky	# Create any "synthetic dists" now.
586204642Srdivacky	@for i in ${DISTRIBUTIONS}; do \
587204642Srdivacky		if [ -f ${.CURDIR}/scripts/$${i}-make.sh ]; then \
588204642Srdivacky			echo -n "Running $$i dist creation script... "; \
589204642Srdivacky			env RD=${RD} sh ${.CURDIR}/scripts/$${i}-make.sh || echo "$$i distribution script returned bad status."; \
590204642Srdivacky			echo "Done."; \
591204642Srdivacky		fi \
592204642Srdivacky	done \
593204642Srdivacky
594204642Srdivacky	# Remove all the directories we don't need.
595204642Srdivacky	-cd ${RD}/trees && \
596204642Srdivacky		find ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS} -depth -type d -print | xargs rmdir
597204642Srdivacky	touch ${.TARGET}
598204642Srdivacky
599204642Srdivacky#
600204642Srdivacky# --==## Package up the tarballs from assembled trees ##==--
601198090Srdivacky#
602198090Srdivackyrelease.7:
603198090Srdivacky	rm -rf ${RD}/dists
604202878Srdivacky	mkdir -p ${RD}/dists
605202878Srdivacky	@for i in ${DISTRIBUTIONS} ; \
606202878Srdivacky	do \
607202878Srdivacky		if [ -d ${RD}/trees/$${i} ] ; then \
608226633Sdim			cd ${.CURDIR} && $(MAKE) doTARBALL \
609195340Sed				SD=${RD}/trees/$${i} \
610193323Sed				TN=$$i TD=$$i ARG="." && \
611202878Srdivacky			echo "$${i} distribution is finished."; \
612204642Srdivacky		fi ; \
613204642Srdivacky	done
614204642Srdivacky.if !defined(NOPORTS)
615204642Srdivacky	# XXX: Inline stripped version of doTARBALL
616204642Srdivacky	@rm -rf ${RD}/dists/ports/ports*
617193323Sed	@mkdir -p ${RD}/dists/ports
618193323Sed	@echo rolling ports/ports tarball
619193323Sed	@tar --exclude CVS --exclude 'ports/distfiles/*' -czf \
620204642Srdivacky	  ${RD}/dists/ports/ports.tgz -C /usr ports
621204642Srdivacky	@cp ${.CURDIR}/scripts/ports-install.sh ${RD}/dists/ports/install.sh
622204642Srdivacky	@(cd ${RD}/dists/ports; \
623204642Srdivacky	  rm -f CHECKSUM.MD5; \
624204642Srdivacky	  md5 * > CHECKSUM.MD5)
625204642Srdivacky	@echo "ports distribution is finished."
626204642Srdivacky.endif
627204642Srdivacky	touch ${.TARGET}
628204642Srdivacky
629204642Srdivacky
630204642Srdivacky#
631204642Srdivacky# --==## Make source dists ##==--
632204642Srdivacky#
633193323Sedrelease.8:
634218893Sdim.if !defined(NOSRC)
635204642Srdivacky	@cd ${.CURDIR} && $(MAKE) doTARBALL SD=/usr/src \
636218893Sdim		TD=src TN=sbase ARG="[A-Z]*"
637218893Sdim	@for i in `cd /usr/src && echo [a-z]*` ; do \
638218893Sdim		if [ -d /usr/src/$$i ] ; then \
639218893Sdim			cd ${.CURDIR} && $(MAKE) doTARBALL \
640218893Sdim				TN=`echo s$$i | tr -d '.' | \
641218893Sdim				    sed -e 's/usr/u/' \
642218893Sdim					-e 's/kerberos5/krb5/'` \
643204642Srdivacky				SD=/usr/src TD=src ARG="$$i" ; \
644218893Sdim		fi ; \
645204642Srdivacky	done
646204642Srdivacky.if defined(EXTRA_SRC)
647204642Srdivacky	@set ${EXTRA_SRC} && \
648218893Sdim	while [ $$# -ge 2 ] ; do \
649218893Sdim		if [ -d /usr/src/$$1 ] ; then \
650204642Srdivacky			cd ${.CURDIR} && $(MAKE) doTARBALL \
651204642Srdivacky				SD=/usr/src TN="s$$2" TD=src ARG="$$1" ; \
652204642Srdivacky		fi && shift && shift ; \
653204642Srdivacky	done
654204642Srdivacky.endif
655204642Srdivacky	if [ -d ${RD}/dists/crypto ] ; then ( cd ${RD}/dists/src && \
656204642Srdivacky		if [ -f ssecure.aa ] ; then mv ssecure.* ../crypto ; fi && \
657204642Srdivacky		if [ -f scrypto.aa ] ; then mv scrypto.* ../crypto ; fi && \
658218893Sdim		if [ -f skrb5.aa ] ; then mv skrb5.* ../crypto ; fi ; \
659218893Sdim		cd ${RD}/dists/crypto; rm -f CHECKSUM.MD5; \
660204642Srdivacky		md5 * > CHECKSUM.MD5 ) ; fi
661218893Sdim	(cd ${RD}/dists/src; rm -f CHECKSUM.MD5; md5 * > CHECKSUM.MD5)
662218893Sdim	@echo "src distribution is finished."
663218893Sdim.endif
664218893Sdim	touch ${.TARGET}
665218893Sdim
666218893Sdim# Complete the bootfd
667218893Sdim#
668218893Sdim# Now, just to get this picture down once and for all:
669218893Sdim#
670218893Sdim# +------------------------------------------------------------------------+
671218893Sdim# |boot.flp                                                                |
672204642Srdivacky# +-----+-----+------------------------------------------------------------+
673204642Srdivacky# |boot1|boot2|floppy filesystem "bootfd"                                  |
674198090Srdivacky# +-----+-----+-+----------------------+---------------------------------+-+
675207618Srdivacky#               |kernel.gz             |mfsroot.gz                       |
676207618Srdivacky#               +----------------------+---------------------------------+
677204642Srdivacky#
678204642Srdivacky
679204642Srdivackyrelease.9:
680204642Srdivacky.if exists(${.CURDIR}/../sys/boot/${TARGET}/loader)
681204642Srdivacky	cd ${.CURDIR}/../sys/boot/${TARGET}/loader; \
682198090Srdivacky	${WMAKE} clean cleandepend; \
683204642Srdivacky	${WMAKE} -DNOMAN -DNOFORTH all; \
684204642Srdivacky	${WMAKE} -DNOMAN -DNOFORTH install DESTDIR=${RD}/trees/special
685212904Sdim.endif
686212904Sdim	cp ${RD}/trees/base/etc/disktab /etc
687212904Sdim	rm -rf ${RD}/mfsfd
688212904Sdim	mkdir ${RD}/mfsfd
689212904Sdim	cd ${RD}/mfsfd && \
690204642Srdivacky		mkdir -p etc/defaults dev mnt stand/etc/defaults stand/help
691204642Srdivacky	@cd ${.CURDIR} && $(MAKE) installCRUNCH CRUNCH=boot \
692204642Srdivacky		DIR=${RD}/mfsfd/stand ZIP=false
693204642Srdivacky	( cd ${RD}/mfsfd && \
694204642Srdivacky	  for dir in bin sbin ; do \
695204642Srdivacky		ln -sf /stand $$dir; \
696204642Srdivacky	  done )
697234353Sdim	cp ${RD}/trees/base/sbin/dhclient-script ${RD}/mfsfd/stand
698234353Sdim.if ${TARGET} == "pc98"
699204642Srdivacky	cp ${.CURDIR}/../etc/defaults/pccard.conf \
700234353Sdim	    ${RD}/mfsfd/etc/defaults/pccard.conf
701204642Srdivacky.endif
702204642Srdivacky	cp ${.CURDIR}/../etc/usbd.conf ${RD}/mfsfd/etc/usbd.conf
703204642Srdivacky	( for F in defaults/rc.conf netconfig protocols ; do \
704204642Srdivacky		sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \
705198090Srdivacky		${RD}/trees/base/etc/$$F > ${RD}/mfsfd/stand/etc/$$F ; \
706204642Srdivacky	  done )
707193323Sed	grep -E '^(ftp|nameserver|domain|sunrpc|cmd|nfsd)[^-\w]' \
708207618Srdivacky	    ${RD}/trees/base/etc/services | \
709207618Srdivacky	    sed -e '/^#.*$$/d' -e 's/[:space:]*#.*$$//g' \
710204642Srdivacky	    > ${RD}/mfsfd/stand/etc/services
711226633Sdim	grep 'operator' ${RD}/trees/base/etc/group \
712193323Sed	    > ${RD}/mfsfd/stand/etc/group
713204642Srdivacky	ln ${RD}/mfsfd/stand/etc/services ${RD}/mfsfd/etc/services
714204642Srdivacky	ln ${RD}/mfsfd/stand/etc/group ${RD}/mfsfd/etc/group
715204642Srdivacky	ln ${RD}/mfsfd/stand/etc/netconfig ${RD}/mfsfd/etc/netconfig
716204642Srdivacky	cp ${RD}/trees/base/COPYRIGHT ${RD}/mfsfd/stand/help/COPYRIGHT.hlp
717204642Srdivacky.if !defined(NODOC)
718204642Srdivacky	@for i in ${DIST_DOCS_ARCH_INDEP}; do \
719204642Srdivacky	  cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \
720218893Sdim	      ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
721204642Srdivacky	done
722204642Srdivacky	@for i in ${DIST_DOCS_ARCH_DEP}; do \
723204642Srdivacky	  cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \
724204642Srdivacky	      ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
725204642Srdivacky	done
726204642Srdivacky	@mv ${RD}/mfsfd/stand/help/INSTALLATION.TXT \
727204642Srdivacky	    ${RD}/mfsfd/stand/help/INSTALL.TXT
728204642Srdivacky	@mv ${RD}/mfsfd/stand/help/EARLY-ADOPTER.TXT \
729204642Srdivacky	    ${RD}/mfsfd/stand/help/EARLY.TXT
730204642Srdivacky.endif
731204642Srdivacky	-test -f ${.CURDIR}/install.cfg \
732204642Srdivacky	    && cp ${.CURDIR}/install.cfg ${RD}/mfsfd
733204642Srdivacky	@mkdir -p ${RD}/mfsfd/boot
734204642Srdivacky.if ${TARGET_ARCH} != "ia64"
735204642Srdivacky	@cp ${RD}/trees/base/boot/boot* ${RD}/mfsfd/boot
736204642Srdivacky.endif
737226633Sdim.if ${TARGET} == "i386" || ${TARGET_ARCH} == "amd64"
738204642Srdivacky	@cp ${RD}/trees/base/boot/mbr ${RD}/mfsfd/boot
739204642Srdivacky.endif
740204642Srdivacky	@tar --exclude CVS -cf - -C ${.CURDIR}/../usr.sbin/sysinstall help | \
741212904Sdim		tar xf - -C ${RD}/mfsfd/stand
742212904Sdim.if defined(SMALLBOOTSIZE)
743212904Sdim	@mkdir -p ${RD}/mfsroot-small
744212904Sdim.if exists(${.CURDIR}/${TARGET}/drivers-small.conf)
745212904Sdim	@mkdir -p ${RD}/mfsfd/modules
746212904Sdim	@awk -f  ${.CURDIR}/scripts/driver-copy2.awk 2 \
747212904Sdim	    ${.CURDIR}/${TARGET}/drivers-small.conf \
748212904Sdim	    ${RD}/trees/base/boot/kernel ${RD}/mfsfd/modules
749212904Sdim.endif
750204642Srdivacky	sh -e ${DOFS_SH} ${RD}/mfsroot-small/mfsroot ${RD} ${MNT} \
751226633Sdim	    ${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL}
752204642Srdivacky	@gzip -9nv ${RD}/mfsroot-small/mfsroot
753207618Srdivacky	@rm -rf ${RD}/mfsfd/modules
754207618Srdivacky.endif
755204642Srdivacky.if exists(${.CURDIR}/${TARGET}/drivers.conf)
756207618Srdivacky	@mkdir -p ${RD}/mfsfd/modules
757207618Srdivacky	@awk -f  ${.CURDIR}/scripts/driver-copy2.awk 2 \
758204642Srdivacky	    ${.CURDIR}/${TARGET}/drivers.conf \
759204642Srdivacky	    ${RD}/trees/base/boot/kernel ${RD}/mfsfd/modules
760204642Srdivacky.endif
761234353Sdim	@mkdir -p ${RD}/mfsroot
762204642Srdivacky	sh -e ${DOFS_SH} ${RD}/mfsroot/mfsroot ${RD} ${MNT} \
763202878Srdivacky	    ${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL}
764204642Srdivacky	@gzip -9nv ${RD}/mfsroot/mfsroot
765204642Srdivacky	touch ${.TARGET}
766204642Srdivacky
767202878Srdivackyrelease.10:
768204642Srdivacky.if !defined(NO_FLOPPIES)
769202878Srdivacky.if exists(${.CURDIR}/${TARGET}/drivers.conf)
770204642Srdivacky	@echo "Making the drivers floppy."
771204642Srdivacky	@rm -rf ${RD}/driversfd
772204642Srdivacky	@mkdir ${RD}/driversfd
773204642Srdivacky	@awk -f  ${.CURDIR}/scripts/driver-copy2.awk 3 \
774204642Srdivacky	    ${.CURDIR}/${TARGET}/drivers.conf \
775202878Srdivacky	    ${RD}/trees/base/boot/kernel ${RD}/driversfd
776193323Sed	-@rmdir ${RD}/driversfd
777204642Srdivacky	if [ -d ${RD}/driversfd ]; then \
778204642Srdivacky	    sh -e ${DOFS_SH} ${RD}/floppies/drivers.flp ${RD} ${MNT} \
779193323Sed	        ${DRIVERSIZE} ${RD}/driversfd ${DRIVERINODE} ${DRIVERLABEL}; \
780193323Sed	    cd ${RD}/driversfd && awk -f  ${.CURDIR}/scripts/driver-desc.awk \
781193323Sed		*.dsc >> ${RD}/floppies/DRIVERS.TXT; \
782226633Sdim	fi
783193323Sed.endif
784204642Srdivacky.if defined(BOOTSIZE)
785204642Srdivacky	@echo "Making the regular boot floppy."
786204642Srdivacky	@cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern
787204642Srdivacky.endif
788204642Srdivacky.if defined(SMALLBOOTSIZE)
789218893Sdim	@echo "Making the small boot floppy."
790193323Sed	@cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern-small FDSIZE=SMALL
791204642Srdivacky.endif
792204642Srdivacky.if defined(BIGBOOTSIZE)
793204642Srdivacky	@echo "Making the big boot floppy."
794204642Srdivacky	@cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=boot FDSIZE=BIG
795204642Srdivacky.endif
796204642Srdivacky.if defined(FIXITSIZE) || defined(SMALLFIXITSIZE)
797204642Srdivacky	@echo "Making fixit floppy."
798204642Srdivacky	@rm -rf ${RD}/fixitfd
799204642Srdivacky	@mkdir ${RD}/fixitfd
800204642Srdivacky	@cd ${RD}/fixitfd && \
801204642Srdivacky	    mkdir -p dev stand bin sbin etc mnt mnt1 mnt2 mnt3 mnt4 tmp \
802204642Srdivacky	    usr/share/misc
803204642Srdivacky	@cp ${RD}/trees/base/etc/spwd.db ${RD}/trees/base/etc/group \
804204642Srdivacky	    ${RD}/fixitfd/etc
805204642Srdivacky	@sed -e 's/#.*//' ${RD}/trees/base/etc/protocols \
806204642Srdivacky	    > ${RD}/fixitfd/etc/protocols
807204642Srdivacky	@sed -e 's/#.*//' ${RD}/trees/base/usr/share/misc/scsi_modes \
808204642Srdivacky	    > ${RD}/fixitfd/usr/share/misc/scsi_modes
809204642Srdivacky	@cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile
810204642Srdivacky	@cp ${.CURDIR}/fixit.services ${RD}/fixitfd/etc/services
811204642Srdivacky	@cp ${.CURDIR}/scripts/tar.sh ${RD}/fixitfd/stand/tar
812204642Srdivacky	@chmod 555 ${RD}/fixitfd/stand/tar
813204642Srdivacky.if defined(SMALLFIXITSIZE)
814204642Srdivacky	@cd ${.CURDIR} && ${MAKE} installCRUNCH CRUNCH=fixit-small \
815204642Srdivacky	    DIR=${RD}/fixitfd/stand ZIP=false
816204642Srdivacky	@sh -e ${DOFS_SH} ${RD}/floppies/fixit-small.flp ${RD} ${MNT} \
817204642Srdivacky	    ${SMALLFIXITSIZE} ${RD}/fixitfd ${FIXITINODE} ${SMALLFIXITLABEL}
818193323Sed	@rm -rf ${RD}/fixitfd/stand
819193323Sed	@mkdir ${RD}/fixitfd/stand
820204642Srdivacky.endif
821193323Sed.if defined(FIXITSIZE)
822193323Sed	@cd ${.CURDIR} && ${MAKE} installCRUNCH CRUNCH=fixit \
823193323Sed	    DIR=${RD}/fixitfd/stand ZIP=false
824226633Sdim	@sh -e ${DOFS_SH} ${RD}/floppies/fixit.flp ${RD} ${MNT} \
825193323Sed	    ${FIXITSIZE} ${RD}/fixitfd ${FIXITINODE} ${FIXITLABEL}
826194178Sed.endif
827193323Sed.endif
828193323Sed# Do our last minute floppies directory setup in a convenient place.
829193323Sed.if !defined(NODOC)
830193323Sed	@cp ${RND}/${RELNOTES_LANG}/installation/${TARGET}/article.txt \
831195340Sed	    ${RD}/floppies/README.TXT
832193323Sed	@(cd ${RD}/floppies; md5 README.TXT *.flp > CHECKSUM.MD5)
833193323Sed.else
834194178Sed	@(cd ${RD}/floppies; md5 *.flp > CHECKSUM.MD5)
835195340Sed.endif
836193323Sed.endif
837193323Sed	touch ${.TARGET}
838193323Sed
839193323Sed#
840193323Sed# --==## Setup a suitable ftp-area ##==--
841198090Srdivacky#
842193323Sedftp.1:
843193323Sed	@echo "Setting up FTP distribution area"
844193323Sed	@mkdir -p ${FD}
845193323Sed	-@ln -s . ${FD}/${BUILDNAME}
846207618Srdivacky.if !defined(NO_FLOPPIES)
847193323Sed	@cd ${RD} && find floppies -print | cpio -dumpl ${FD}
848221345Sdim.endif
849221345Sdim	@cd ${RD}/dists && find . -print | cpio -dumpl ${FD}
850221345Sdim.if !defined(NODOC)
851193323Sed	@for i in ${DIST_DOCS_ARCH_INDEP}; do \
852193323Sed		cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \
853193323Sed		    ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
854198090Srdivacky		cp ${RND}/${RELNOTES_LANG}/$$i/article.html \
855193323Sed		    ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
856193323Sed	done
857193323Sed	@for i in ${DIST_DOCS_ARCH_DEP}; do \
858193323Sed		cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \
859193323Sed		    ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
860193323Sed		cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.html \
861226633Sdim		    ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
862226633Sdim	done
863226633Sdim	@cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${FD}
864226633Sdim	@mv ${FD}/INSTALLATION.TXT ${FD}/INSTALL.TXT
865226633Sdim	@mv ${FD}/INSTALLATION.HTM ${FD}/INSTALL.HTM
866226633Sdim	@mv ${FD}/EARLY-ADOPTER.TXT ${FD}/EARLY.TXT
867226633Sdim	@mv ${FD}/EARLY-ADOPTER.HTM ${FD}/EARLY.HTM
868226633Sdim.endif
869226633Sdim	@echo "CD_VERSION = ${BUILDNAME}" > ${FD}/cdrom.inf
870226633Sdim	touch ${.TARGET}
871226633Sdim
872226633Sdim#
873226633Sdim# --==## Setup a suitable cdrom-area ##==--
874226633Sdim#
875226633Sdimcdrom.1:
876226633Sdim	@echo "Setting up CDROM distribution area"
877226633Sdim	@mkdir -p ${CD_BOOT} ${CD_DISC1} ${CD_DISC2}
878226633Sdim	-@ln -s . ${CD_DISC1}/${BUILDNAME}
879226633Sdim.if !defined(NO_FLOPPIES)
880226633Sdim	@cd ${RD} && find floppies -print | cpio -dumpl ${CD_DISC1}
881226633Sdim.endif
882226633Sdim	@cd ${RD}/dists && find . -print | cpio -dumpl ${CD_DISC1}
883226633Sdim	@for i in ${DISTRIBUTIONS} ; \
884226633Sdim	do \
885226633Sdim		if [ -d ${RD}/trees/$${i} ] ; then \
886226633Sdim			chflags -R noschg ${RD}/trees/$${i} || true ; \
887226633Sdim			( cd ${RD}/trees/$${i} && \
888226633Sdim			    find . -depth -print | cpio -dumpl ${CD_DISC2} ) ; \
889226633Sdim		fi \
890226633Sdim	done
891226633Sdim	@rm -f ${CD_DISC2}/.profile
892234353Sdim	@cp ${.CURDIR}/fixit.profile ${CD_DISC2}/.profile
893234353Sdim	@echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC1}/cdrom.inf
894234353Sdim	@echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC2}/cdrom.inf
895234353Sdim.if !defined(NODOC)
896234353Sdim	@for i in ${DIST_DOCS_ARCH_INDEP}; do \
897234353Sdim	  cp ${RND}/${RELNOTES_LANG}/$$i/article.txt \
898234353Sdim	      ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
899234353Sdim	  cp ${RND}/${RELNOTES_LANG}/$$i/article.html \
900234353Sdim	      ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
901234353Sdim	done
902234353Sdim	@for i in ${DIST_DOCS_ARCH_DEP}; do \
903234353Sdim	  cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.txt \
904234353Sdim	      ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
905234353Sdim	  cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET}/article.html \
906234353Sdim	      ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
907226633Sdim	done
908234353Sdim	@cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${CD_DISC1}
909234353Sdim	@mv ${CD_DISC1}/INSTALLATION.TXT ${CD_DISC1}/INSTALL.TXT
910226633Sdim	@mv ${CD_DISC1}/INSTALLATION.HTM ${CD_DISC1}/INSTALL.HTM
911226633Sdim	@mv ${CD_DISC1}/EARLY-ADOPTER.TXT ${CD_DISC1}/EARLY.TXT
912234353Sdim	@mv ${CD_DISC1}/EARLY-ADOPTER.HTM ${CD_DISC1}/EARLY.HTM
913234353Sdim.endif
914234353Sdim.if ${TARGET} != "pc98"
915234353Sdim	@echo "Setting up boot area"
916234353Sdim	@rm -f ${CD_DISC2}/boot/loader.conf
917234353Sdim	@cp ${RD}/mfsroot/mfsroot.gz ${CD_DISC2}/boot/mfsroot.gz
918226633Sdim	@echo 'mfsroot_load="YES"' > ${CD_DISC2}/boot/loader.conf
919234353Sdim	@echo 'mfsroot_type="mfs_root"' >> ${CD_DISC2}/boot/loader.conf
920234353Sdim	@echo 'mfsroot_name="/boot/mfsroot"' >> ${CD_DISC2}/boot/loader.conf
921226633Sdim.if defined(CD_BOOT)
922226633Sdim	@cp -Rp ${CD_DISC2}/boot ${CD_BOOT}
923226633Sdim.if defined(MINIROOT)
924226633Sdim	@mkdir -p ${FD}/miniroot
925234353Sdim	@sh -e ${DOFS_SH} ${FD}/miniroot/miniroot.ufs \
926234353Sdim	    ${RD} ${MNT} 0 ${CD_BOOT} 8192 auto
927234353Sdim	@gzip -9v ${FD}/miniroot/miniroot.ufs
928234353Sdim.endif
929234353Sdim.endif
930234353Sdim	@cp -Rp ${CD_DISC2}/boot ${CD_DISC1}
931234353Sdim.if ${TARGET} == "i386" && defined(EMUL_BOOT) && !defined(NO_FLOPPIES)
932234353Sdim	# In case bootable ISO with floppy emulation is desired.
933234353Sdim.if defined(CD_BOOT)
934234353Sdim	@mkdir -p ${CD_BOOT}/floppies
935234353Sdim	@cp ${CD_DISC1}/floppies/boot.flp ${CD_BOOT}/floppies
936234353Sdim.endif
937226633Sdim	@mkdir -p ${CD_DISC2}/floppies
938234353Sdim	@cp ${CD_DISC1}/floppies/boot.flp ${CD_DISC2}/floppies
939226633Sdim.endif
940226633Sdim.endif
941226633Sdim	touch ${.TARGET}
942234353Sdim
943226633Sdimiso.1:
944226633Sdim.if exists(${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh)
945234353Sdim	@echo "Creating ISO images..."
946226633Sdim.if defined(CD_BOOT)
947234353Sdim	@sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \
948234353Sdim	    fbsd_bootonly \
949234353Sdim	    ${CD}/${BUILDNAME}-${TARGET}-bootonly.iso ${CD_BOOT}
950234353Sdim.endif
951234353Sdim	@sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \
952234353Sdim	    fbsd_miniinst \
953234353Sdim	    ${CD}/${BUILDNAME}-${TARGET}-miniinst.iso ${CD_DISC1}
954234353Sdim	@sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \
955234353Sdim	    fbsd_livefs \
956234353Sdim	    ${CD}/${BUILDNAME}-${TARGET}-disc2.iso ${CD_DISC2}
957234353Sdim.if defined(CD_EXTRA_BITS)
958239462Sdim	@sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \
959239462Sdim	    fbsd_boot \
960226633Sdim	    ${CD}/${BUILDNAME}-${TARGET}-disc1.iso ${CD_DISC1} \
961234353Sdim	    ${CD_EXTRA_BITS} \
962234353Sdim	    && false
963234353Sdim.endif
964234353Sdim	@(cd ${CD} && md5 *.iso > ${BUILDNAME}-${TARGET}-iso.CHECKSUM.MD5)
965234353Sdim	touch ${.TARGET}
966234353Sdim.else
967234353Sdim	@echo "Do not know how to create an ISO for ${TARGET_ARCH}."
968234353Sdim.endif
969234353Sdim
970234353Sdim#
971234353Sdim# --==## Documentation Project files such as the Handbook and FAQ ##==--
972234353Sdim#
973226633Sdimdoc.1:
974234353Sdim	@echo "Making docs..."
975234353Sdim	@for i in ${DOCPORTS}; do \
976234353Sdim	    cd /usr/ports/$$i && \
977234353Sdim	    env -i FTP_PASSIVE_MODE=$${FTP_PASSIVE_MODE:-no} PATH=$${PATH} \
978234353Sdim		make all install clean BATCH=yes WITHOUT_X11=yes JADETEX=no \
979226633Sdim		WITHOUT_PYTHON=yes FORCE_PKG_REGISTER=yes; \
980226633Sdim	done
981234353Sdim	@cd /usr/doc && make all install 'FORMATS=html html-split txt' \
982234353Sdim	    INSTALL_COMPRESSED='' DOCDIR=${RD}/trees/base/usr/share/doc
983234353Sdim	touch ${.TARGET}
984234353Sdim
985234353Sdim#
986234353Sdim# --==## RELNOTESng:  Next-generation replacements for *.TXT files ##==--
987234353Sdim#
988234353Sdimdoc.2:
989234353Sdim	@echo "Making release documentation..."
990234353Sdim	@cd ${.CURDIR}/doc && make all install clean 'FORMATS=html txt' 
991234353Sdim	    INSTALL_COMPRESSED='' DOCDIR=${RND}
992234353Sdim	touch ${.TARGET}
993234353Sdim
994234353Sdim# Various "subroutine" and other supporting targets.
995234353Sdim
996234353Sdim# RD=
997234353Sdim# SD=
998234353Sdim# TD=
999234353Sdim# ARG=
1000234353SdimdoTARBALL:
1001234353Sdim.if !defined(SD)
1002234353Sdim	@echo "SD undefined in doTARBALL" && exit 1
1003234353Sdim.endif
1004234353Sdim.if !defined(TD)
1005234353Sdim	@echo "TD undefined in doTARBALL" && exit 1
1006234353Sdim.endif
1007234353Sdim.if !defined(ARG)
1008234353Sdim	@echo "ARG undefined in doTARBALL" && exit 1
1009234353Sdim.endif
1010234353Sdim	@rm -rf ${RD}/dists/${TD}/${TN}*
1011234353Sdim	@mkdir -p ${RD}/dists/${TD}
1012234353Sdim	@( cd ${SD} && \
1013234353Sdim		tn=`echo ${TN} | tr 'A-Z' 'a-z' | cut -c1-8` && \
1014234353Sdim		echo rolling ${TD}/$$tn tarball &&\
1015234353Sdim		tar --exclude CVS --exclude obj --exclude BOOTMFS -cf - ${ARG} | \
1016234353Sdim		${ZIPNSPLIT} ${RD}/dists/${TD}/$$tn. && \
1017234353Sdim		sh ${.CURDIR}/scripts/info.sh ${RD}/dists/${TD}/$$tn \
1018234353Sdim		    > ${RD}/dists/${TD}/$$tn.inf && \
1019234353Sdim		if [ -f ${.CURDIR}/scripts/$${TD}-install.sh ]; then \
1020234353Sdim			cp -p ${.CURDIR}/scripts/$${TD}-install.sh \
1021234353Sdim			    ${RD}/dists/${TD}/install.sh; \
1022234353Sdim		fi && \
1023234353Sdim		if [ "${SD}" != "/usr/src" ]; then \
1024234353Sdim			mtree -c -i -p ${SD}/${ARG} \
1025234353Sdim			  -k gname,md5digest,mode,nlink,uname,size,link,type \
1026234353Sdim			  > ${RD}/dists/${TD}/$$tn.mtree ; \
1027202878Srdivacky		else \
1028202878Srdivacky			true; \
1029202878Srdivacky		fi; \
1030202878Srdivacky		( cd ${RD}/dists/${TD}; \
1031202878Srdivacky		rm -f CHECKSUM.MD5; \
1032202878Srdivacky		md5 * > CHECKSUM.MD5 ) \
1033226633Sdim	)
1034226633Sdim
1035224145SdimdoRELEASE: release.1 release.2 release.3 ${DOCREL} release.4 release.5 \
1036224145Sdim    release.6 release.7 release.8 release.9 release.10 ${EXTRAS}
1037202878Srdivacky	@echo "Release done"
1038226633Sdim
1039226633Sdimfloppies:
1040226633Sdim	@rm -f release.5 release.9 release.10
1041226633Sdim	@cd ${.CURDIR} && ${MAKE} release.5 release.9 release.10
1042226633Sdim	@cd ${RD} && find floppies -print | cpio -dumpl ${FD}
1043226633Sdim
1044226633SdiminstallCRUNCH:
1045226633Sdim.if !defined(CRUNCH)
1046226633Sdim	@echo "CRUNCH undefined in installCRUNCH" && exit 1
1047202878Srdivacky.endif
1048226633Sdim.if !defined(DIR)
1049226633Sdim	@echo "DIR undefined in installCRUNCH" && exit 1
1050226633Sdim.endif
1051226633Sdim.if !defined(ZIP)
1052226633Sdim	@echo "ZIP undefined in installCRUNCH" && exit 1
1053226633Sdim.endif
1054234353Sdim	@if ${ZIP} ; then \
1055234353Sdim		gzip -9 < ${RD}/crunch/${CRUNCH} > ${DIR}/${CRUNCH}_crunch ; \
1056226633Sdim	else \
1057226633Sdim		ln -f ${RD}/crunch/${CRUNCH} ${DIR}/${CRUNCH}_crunch ; \
1058226633Sdim	fi
1059226633Sdim	@chmod 555 ${DIR}/${CRUNCH}_crunch
1060234353Sdim	@if [ -f ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf ] ; then \
1061234353Sdim		for i in `crunchgen -l ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf` ; do \
1062234353Sdim			ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \
1063234353Sdim		done \
1064234353Sdim	else \
1065234353Sdim		for i in `crunchgen -l ${.CURDIR}/${CRUNCH}_crunch.conf` ; do \
1066234353Sdim			ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \
1067234353Sdim		done \
1068234353Sdim	fi
1069234353Sdim
1070226633Sdim#
1071226633Sdim# --==## Put a filesystem into a BOOTMFS kernel ##==--
1072226633Sdim#
1073226633SdimdoMFSKERN:
1074226633Sdim	@echo "Running ${.TARGET} for ${FSIMAGE}"
1075226633Sdim	@rm -f ${RD}/kernels/BOOTMFS ${RD}/kernels/BOOTMFS.${FSIMAGE}
1076226633Sdim	@cd ${.CURDIR}/../sys/${TARGET}/conf; \
1077226633Sdim	if [ -r ${.CURDIR}/${TARGET}/dokern.sh ]; then \
1078226633Sdim	    sh ${.CURDIR}/${TARGET}/dokern.sh ${FDSIZE}; \
1079203954Srdivacky	else \
1080202878Srdivacky	    sed -e 's/ident.*GENERIC/ident		BOOTMFS/g'; \
1081202878Srdivacky	fi < GENERIC > BOOTMFS; \
1082202878Srdivacky	[ -r GENERIC.hints ] && cp GENERIC.hints BOOTMFS.hints
1083202878Srdivacky.if defined(FDSIZE) && ${FDSIZE} == "SMALL" && \
1084234353Sdim    exists(${.CURDIR}/${TARGET}/drivers-small.conf)
1085234353Sdim	@awk -f ${.CURDIR}/scripts/driver-remove.awk \
1086234353Sdim	    ${.CURDIR}/${TARGET}/drivers-small.conf \
1087234353Sdim	    ${.CURDIR}/../sys/${TARGET}/conf/BOOTMFS
1088234353Sdim.elif exists(${.CURDIR}/${TARGET}/drivers.conf)
1089234353Sdim	@awk -f ${.CURDIR}/scripts/driver-remove.awk \
1090234353Sdim	    ${.CURDIR}/${TARGET}/drivers.conf \
1091234353Sdim	    ${.CURDIR}/../sys/${TARGET}/conf/BOOTMFS
1092234353Sdim.endif
1093234353Sdim	cd ${.CURDIR}/..; \
1094202878Srdivacky	KERNEL_KO=BOOTMFS KODIR= \
1095202878Srdivacky	    ${CROSSMAKE} ${KERNEL_FLAGS} -DNO_MODULES -DNO_KERNELCLEAN \
1096202878Srdivacky	    KERNCONF=BOOTMFS COPTFLAGS="-Os -pipe" -DNO_CPU_COPTFLAGS \
1097202878Srdivacky	    buildkernel reinstallkernel \
1098224145Sdim	    DESTDIR=${RD}/kernels
1099224145Sdim	[ -r ${.CURDIR}/../sys/${TARGET}/conf/BOOTMFS.hints ] && \
1100224145Sdim	    cp ${.CURDIR}/../sys/${TARGET}/conf/BOOTMFS.hints ${RD}/kernels
1101224145Sdim	@rm -rf ${RD}/image.${FSIMAGE}
1102224145Sdim	@mkdir ${RD}/image.${FSIMAGE}
1103234353Sdim	@cd ${RD}/kernels && \
1104234353Sdim	    (chflags noschg BOOTMFS || true) && \
1105202878Srdivacky	    ${WMAKEENV} strip -R .comment BOOTMFS && \
1106234353Sdim	    cp BOOTMFS BOOTMFS.${FSIMAGE} && \
1107234353Sdim	    [ -r BOOTMFS.hints ] && mv BOOTMFS.hints BOOTMFS.${FSIMAGE}.hints
1108234353Sdim	mv ${RD}/kernels/BOOTMFS ${RD}/image.${FSIMAGE}/kernel
1109234353Sdim	@echo "Setting up /boot directory for ${FSIMAGE} floppy"
1110234353Sdim	@mkdir -p ${RD}/image.${FSIMAGE}/boot
1111202878Srdivacky.if ${TARGET} == "i386"
1112234353Sdim	@${WMAKEENV} kgzip -v -l ${RD}/trees/base/usr/lib/kgzldr.o -o \
1113202878Srdivacky	    ${RD}/image.${FSIMAGE}/boot/loader ${RD}/trees/special/boot/loader
1114202878Srdivacky.else
1115202878Srdivacky	@cp ${RD}/trees/special/boot/loader ${RD}/image.${FSIMAGE}/boot
1116221345Sdim.endif
1117221345Sdim	@[ -r ${RD}/kernels/BOOTMFS.${FSIMAGE}.hints ] && \
1118221345Sdim	  sed -e '/^hint/s/^/set /' -e '/^#/d' \
1119224145Sdim	      ${RD}/kernels/BOOTMFS.${FSIMAGE}.hints > \
1120224145Sdim	      ${RD}/image.${FSIMAGE}/boot/device.hints && \
1121202878Srdivacky	  echo "include /boot/device.hints" \
1122202878Srdivacky	      > ${RD}/image.${FSIMAGE}/boot/loader.rc
1123202878Srdivacky	@echo "load /kernel" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1124221345Sdim.if !defined(FDSIZE) || ${FDSIZE} != "BIG"
1125202878Srdivacky	@echo "echo \\007\\007" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1126202878Srdivacky	@echo "echo Please insert MFS root floppy and press enter:" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1127202878Srdivacky	@echo "read" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1128202878Srdivacky.endif
1129202878Srdivacky	@echo "load -t mfs_root /mfsroot" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1130202878Srdivacky	@echo "set hint.acpi.0.disabled=1" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1131202878Srdivacky	@if [ -r ${RD}/floppies/drivers.flp ]; then \
1132202878Srdivacky		echo "set driver_floppy=YES" >> ${RD}/image.${FSIMAGE}/boot/loader.rc; \
1133234353Sdim	fi
1134234353Sdim	@echo "set module_path=\"/modules;/dist\"" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1135234353Sdim	@echo "echo \\007\\007" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1136202878Srdivacky	@echo "autoboot 10" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
1137202878Srdivacky.if ${TARGET_ARCH} == "i386" && ${AUTO_KEYBOARD_DETECT}
1138224145Sdim	@echo "-P" >> ${RD}/image.${FSIMAGE}/boot.config
1139234353Sdim.endif
1140234353Sdim	@gzip -9v ${RD}/image.${FSIMAGE}/kernel
1141202878Srdivacky	@rm -f ${RD}/floppies/${FSIMAGE}.flp
1142202878Srdivacky.if defined(FDSIZE) && ${FDSIZE} == "BIG"
1143202878Srdivacky	@cp ${RD}/mfsroot/mfsroot.gz ${RD}/image.${FSIMAGE}
1144202878Srdivacky	sh -e ${DOFS_SH} ${RD}/floppies/${FSIMAGE}.flp ${RD} ${MNT} \
1145202878Srdivacky	    ${BIGBOOTSIZE} ${RD}/image.${FSIMAGE} ${BOOTINODE} ${BIGBOOTLABEL}
1146203954Srdivacky.elif defined(FDSIZE) && ${FDSIZE} == "SMALL"
1147202878Srdivacky	sh -e ${DOFS_SH} ${RD}/floppies/mfsroot-small.flp ${RD} ${MNT} \
1148234353Sdim	    ${SMALLBOOTSIZE} ${RD}/mfsroot-small/mfsroot.gz ${BOOTINODE} \
1149234353Sdim	    ${SMALLBOOTLABEL}
1150234353Sdim	sh -e ${DOFS_SH} ${RD}/floppies/${FSIMAGE}.flp ${RD} ${MNT} \
1151234353Sdim	    ${SMALLBOOTSIZE} ${RD}/image.${FSIMAGE} ${BOOTINODE} \
1152202878Srdivacky	    ${SMALLBOOTLABEL}
1153202878Srdivacky.else
1154202878Srdivacky	sh -e ${DOFS_SH} ${RD}/floppies/mfsroot.flp ${RD} ${MNT} \
1155202878Srdivacky	    ${BOOTSIZE} ${RD}/mfsroot/mfsroot.gz ${BOOTINODE} ${BOOTLABEL}
1156202878Srdivacky	sh -e ${DOFS_SH} ${RD}/floppies/${FSIMAGE}.flp ${RD} ${MNT} \
1157202878Srdivacky	    ${BOOTSIZE} ${RD}/image.${FSIMAGE} ${BOOTINODE} ${BOOTLABEL}
1158202878Srdivacky.endif
1159226633Sdim	@echo "Created ${RD}/floppies/${FSIMAGE}.flp"
1160226633Sdim
1161202878Srdivacky.include <bsd.obj.mk>
1162202878Srdivacky