Remove NOSECURE which no longer serves a purpose. Note: FreeBSD also removed
[dragonfly.git] / release / Makefile
1 # $FreeBSD: src/release/Makefile,v 1.536.2.110 2003/05/10 23:01:29 murray Exp $
2 # $DragonFly: src/release/Attic/Makefile,v 1.2 2003/06/17 04:27:17 dillon Exp $
3 #
4 # make release CHROOTDIR=/some/dir BUILDNAME=somename CVSROOT=/cvs/dir \
5 #       [ RELEASETAG=tag ]
6 #
7 # Where "/some/dir" is the pathname of a directory on a some filesystem with
8 # at least 1000MB of free space, "somename" is what you want the release to
9 # call itself, "/cvs/dir" is where our source repo resides and, optionally,
10 # which CVS "tag" name should be used when checking out the sources to build
11 # the release (default is HEAD).
12 #
13 # Please note: the vn driver must also be compiled into your kernel,
14 # otherwise the target 'release.8' and possibly others will fail.
15 #
16 # Note:  "/some/dir" cannot reside on a filesystem mounted with
17 # the "nodev" option, otherwise the chrooted "buildworld" will likely
18 # fail.
19 #
20 # Note: If you add options to this file, please keep release(7) updated!
21 #
22 # Set these, release builder!
23 #
24 # Fixed version:
25 #BUILDNAME=4.0-RELEASE
26 #
27 # Automatic SNAP versioning:
28 DATE != date +%Y%m%d
29 BASE = 4.8
30 BUILDNAME?=${BASE}-${DATE}-STABLE
31 #
32 #CHROOTDIR=/junk/release
33 # If this is a -stable snapshot, then set
34 #RELEASETAG=RELENG_4
35 # If you want to add other options to CVS commands, then set
36 #CVSCMDARGS="-D '01/01/2002 00:00:00 UTC'"
37 #
38 # Non-zero if ${RELEASETAG} is in the form "RELENG_ver_RELEASE"; we
39 # are building an official release.  Otherwise, we are building for
40 # a branch.
41 .if defined(RELEASETAG)
42 ISRELEASE!=     expr "${RELEASETAG}" : '^RELENG_.*_RELEASE$$' || true
43 .if ${ISRELEASE} != 0
44 # Convert "RELENG_ver_RELEASE" to "RELEASE_ver" for ports and doc trees.
45 AUXRELEASETAG!= echo ${RELEASETAG} | sed -e 's/^RELENG_/RELEASE_/' -e 's/_RELEASE$$//'
46 DOCRELEASETAG?=         ${AUXRELEASETAG}
47 PORTSRELEASETAG?=       ${AUXRELEASETAG}
48 .endif
49 .endif
50
51 # If you want to pass flags to the world build such as -j X, use
52 # WORLD_FLAGS.  Similarly, you can specify make flags for kernel
53 # builds via KERNEL_FLAGS.
54 # Similarly, you can specify make flags for make readmes via PORTREADMES_FLAGS.
55 #WORLD_FLAGS=-j4
56 #KERNEL_FLAGS=-j4
57 #PORTREADMES_FLAGS=-j4
58
59 TARGET_ARCH?=   ${MACHINE_ARCH}
60 .if ${TARGET_ARCH} == ${MACHINE_ARCH}
61 TARGET?=        ${MACHINE}
62 .else
63 TARGET?=        ${TARGET_ARCH}
64 .endif
65 CROSSMAKE=      ${MAKE} TARGET_ARCH=${TARGET_ARCH} TARGET=${TARGET}
66 NATIVEMAKE=     ${MAKE} TARGET_ARCH=${MACHINE_ARCH} TARGET=${MACHINE}
67
68 # If you are using a local CVS repository with components stored in 
69 # non-standard modules, override these on the make commandline or
70 # in the environment.
71 RELEASESRCMODULE?=      src
72 RELEASEDOCMODULE?=      doc
73 RELEASEPORTSMODULE?=    ports
74
75 # Unless set elsewhere, indicate the object format we'll be using.
76 OBJFORMAT?=             elf
77
78 # Comment this out to enable port readmes to be built.
79 NOPORTREADMES?= YES
80
81 # Uncomment this to disable the doc.1 target.  Docs normally require
82 # the ports tree, so NOPORTS can be set together with NODOC in order
83 # to have neither ports or docs.  If only NOPORTS is set to YES, but
84 # docs are still desired, the DOMINIMALDOCPORTS logic below will only
85 # install the ports that are minimally required for the docs.  This is
86 # intended as a compromise, less disk space is required than for using
87 # the entire ports collection (and much less time due to the huge number
88 # of directories it would create), but still quite a bit as well as some
89 # CPU cycles (some of the programs are C++, and things like ghostscript
90 # belong to the required ports nevertheless).
91 #
92 # Setting this also disables building of release note documentation
93 # (RELNOTESng).
94 #NODOC=  YES
95 #NOPORTS=  YES
96
97 # Modify this definition if you want the release notes 
98 # and other release documentation in a language other than English.
99 RELNOTES_LANG?= en_US.ISO8859-1
100
101 # As an alternative to installing the entire ports collection (which
102 # can take a huge amount of time, in particular on slower disks),
103 # setting ${MINIMALDOCPORTS} allows to install and build just those
104 # ports that are really required for getting the docs up & running.
105 .if defined(NOPORTS) && !defined(NODOC)
106 DOMINIMALDOCPORTS=      YES
107 .include "Makefile.inc.docports"
108 .endif
109
110 # Helper variable
111 .if defined(NOPORTS)
112 .if !defined(DOMINIMALDOCPORTS) || ${DOMINIMALDOCPORTS} != "YES"
113 NOPORTSATALL=   YES
114 .endif
115 .endif
116
117 # By default, documentation (Handbook, FAQ, etc.) is built for all
118 # the languages.  To speed up building, set the DOC_LANG to just
119 # the languages you need.  (The language for the release notes is
120 # controlled by the RELNOTES_LANG variable above.)
121 #DOC_LANG=      en_US.ISO8859-1
122 DOCPORTS=       textproc/docproj
123 # Set this to wherever the distfiles required by release procedures.
124 .if defined(DOCDISTFILES)
125 # Respect DOCDISTFILES which is used before.
126 RELEASEDISTFILES?=      ${DOCDISTFILES}
127 .else
128 RELEASEDISTFILES?=      ${.CURDIR}/../../ports/distfiles
129 .endif
130 # Set this to 1 if you want -P to be used for automatic keyboard detection
131 # on the boot floppy.  WARNING: Breaks on some Athlon (K7) motherboards.
132 AUTO_KEYBOARD_DETECT?= 0
133
134 .if !defined(NODOC)
135 DIST_DOCS_ARCH_INDEP=   readme errata
136 DIST_DOCS_ARCH_DEP=     installation relnotes hardware
137 .endif
138
139 # Things which without too much trouble can be considered variables
140 # BIN_DISTS are special in that they get full /etc installation sets.
141 #
142 .if ${TARGET_ARCH} == "i386"
143 COMPAT_DISTS?=  compat1x compat20 compat21 compat22 compat3x compat4x
144 .else
145 COMPAT_DISTS?=  compat4x
146 .endif
147 OTHER_DISTS?=   catpages manpages games proflibs dict info doc
148 CRYPTO_DISTS?=  crypto krb4 krb5
149 BIN_DISTS?=     bin
150 DISTRIBUTIONS?= ${BIN_DISTS} ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS}
151
152 BOOT1=  etc/protocols etc/defaults/rc.conf
153
154 # mountpoint for filesystems.
155 MNT=                    /mnt
156
157 # Various floppy image parameters.
158 #
159
160 .if ${TARGET_ARCH} == "i386"
161 .if ${TARGET} == "pc98"
162 SMALLBOOTSIZE=          1200
163 BOOTSIZE=               1440
164 FIXITSIZE=              1440
165 MFSSIZE=                4320
166 BOOTINODE=              80000
167 FIXITINODE=             4000
168 MFSINODE=               8000
169 SMALLBOOTLABEL=         fd1200
170 BOOTLABEL=              fd1440
171 FIXITLABEL=             fd1440
172 MFSLABEL=               minimum3
173 .else
174 BOOTSIZE=               1440
175 FIXITSIZE=              1440
176 MFSSIZE=                4320
177 BIGBOOTSIZE=            2880
178 BOOTINODE=              80000
179 FIXITINODE=             4000
180 MFSINODE=               8000
181 BOOTLABEL=              fd1440
182 FIXITLABEL=             fd1440
183 MFSLABEL=               minimum3
184 BIGBOOTLABEL=           minimum2
185 .endif
186 .elif ${TARGET_ARCH} == "alpha"
187 BOOTSIZE=               1440
188 FIXITSIZE=              2880
189 MFSSIZE=                4320
190 BIGBOOTSIZE=            2880
191 BOOTINODE=              80000
192 FIXITINODE=             4000
193 MFSINODE=               8000
194 BOOTLABEL=              fd1440
195 FIXITLABEL=             minimum2
196 MFSLABEL=               auto
197 BIGBOOTLABEL=           minimum2
198 .endif
199
200 ZIPNSPLIT=              gzip --no-name -9 -c | split -b 240640 -
201
202 # Things that need to be recompiled with Kerberos support.
203 .if exists(${.CURDIR}/../kerberosIV) && exists(${.CURDIR}/../crypto) && !defined(NOKERBEROS)
204 K4PROGS!=       cd ${.CURDIR}/../kerberosIV; ${MAKE} -V KPROGS
205 .endif
206 .if exists(${.CURDIR}/../kerberos5) && exists(${.CURDIR}/../crypto) && !defined(NOKERBEROS)
207 K5PROGS!=       cd ${.CURDIR}/../kerberos5; ${MAKE} -V KPROGS
208 .endif
209
210 # Things that need to be compiled without crypto support in releases
211 .if !defined(FIXCRYPTO)
212 FIXCRYPTO=      bin/ed usr.sbin/ppp usr.sbin/pppd usr.sbin/tcpdump/tcpdump \
213                 lib/libfetch usr.bin/fetch
214 .if !defined(NO_SENDMAIL)
215 FIXCRYPTO+=     usr.sbin/sendmail
216 .endif
217 .endif
218
219
220 VNDEVICE?=              vn0
221
222 # Things which may get you into trouble if you change them
223 MTREEFILES=             ${.CURDIR}/../etc/mtree
224 _R?=                    /R
225 RD=                     ${_R}/stage
226 RND=                    ${RD}/release.doc
227 FD=                     ${_R}/ftp
228 CD=                     ${_R}/cdrom
229 CD_DISC1=               ${CD}/disc1
230 CD_DISC2=               ${CD}/disc2
231
232 # Where the bootstrap ports (see DOCPORTS) get installed.
233 LOCALDIR=               /usr/local/bin
234
235 .if !defined(CRUNCH_TARGETS)
236 CRUNCH_TARGETS= boot fixit
237 .endif
238
239 EXTRAS= ftp.1
240 .if !defined(NOCDROM)
241 EXTRAS+= cdrom.1
242 .if defined(MAKE_ISOS)
243 EXTRAS+= iso.1
244 .endif
245 .if ${TARGET} != "pc98"
246 BOOTABLE="-b"
247 .endif
248 .endif
249
250 .if !defined(NODOC)
251 DOCREL= doc.1 doc.2
252 .endif
253
254 TMAKE!=         echo MAKEFLAGS=\"-m ${.CURDIR}/../share/mk\"; \
255                 cd ${.CURDIR}/..; ${MAKE} -f Makefile.inc1 -V TMAKE
256 WMAKEENV!=      echo MAKEFLAGS=\"-m ${.CURDIR}/../share/mk\"; \
257                 cd ${.CURDIR}/..; ${CROSSMAKE} -f Makefile.inc1 -V WMAKEENV
258 WMAKE=          ${WMAKEENV} ${MAKE}
259
260 rerelease release:
261 .if !defined(CHROOTDIR) || !defined(BUILDNAME) || !defined(CVSROOT)
262         @echo "To make a release you must set CHROOTDIR, BUILDNAME and CVSROOT" && false
263 .endif
264 .if defined(NOPORTSATALL) && !defined(NODOC)
265         @echo "Ports are required for building the docs.  Either set NODOC or"
266         @echo "unset NOPORTS, or set at least DOMINIMALDOCPORTS to YES!"
267         @exit 1
268 .endif
269 .if make(release)
270 .if exists(${CHROOTDIR})
271 # The first command will fail on a handful of files that have their schg
272 # flags set.  But it greatly speeds up the next two commands.
273         -rm -rf ${CHROOTDIR} 2>/dev/null
274         -chflags -R noschg ${CHROOTDIR}/.
275         -rm -rf ${CHROOTDIR}
276 .endif
277         mkdir -p ${CHROOTDIR}
278         @echo ">>> make release for ${TARGET} started on `LC_ALL=C TZ=GMT date`"
279         cd ${.CURDIR}/.. && ${NATIVEMAKE} -DNOGAMES -DNOHTML -DNOINFO -DNOMAN \
280             -DNOPROFILE installworld DESTDIR=${CHROOTDIR}
281         cd ${.CURDIR}/../etc && ${NATIVEMAKE} distribution DESTDIR=${CHROOTDIR}
282         if [ -f /etc/resolv.conf ]; then \
283                 cp -p /etc/resolv.conf ${CHROOTDIR}/etc; \
284         fi
285 .if !defined(RELEASETAG)
286         cd ${CHROOTDIR}/usr && rm -rf src && \
287                 cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P ${RELEASESRCMODULE}
288 .else
289         cd ${CHROOTDIR}/usr && rm -rf src && \
290                 cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P -r ${RELEASETAG} ${RELEASESRCMODULE}
291 .endif
292 .if defined(LOCAL_PATCHES) && exists(${LOCAL_PATCHES})
293         cd ${CHROOTDIR}/usr/src && patch ${PATCH_FLAGS} < ${LOCAL_PATCHES}
294 .endif
295 .if defined(LOCAL_SCRIPT) && exists(${LOCAL_SCRIPT})
296         cd ${CHROOTDIR} && env CHROOTDIR=${CHROOTDIR} BUILDNAME=${BUILDNAME} RELEASETAG=${RELEASETAG} ${LOCAL_SCRIPT}
297 .endif
298 .if !defined(NOPORTS)
299 .if defined(PORTSRELEASETAG)
300         cd ${CHROOTDIR}/usr && rm -rf ports && cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P -r ${PORTSRELEASETAG} ${RELEASEPORTSMODULE}
301 .else
302         cd ${CHROOTDIR}/usr && rm -rf ports && cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P ${RELEASEPORTSMODULE}
303 .endif
304 .elif defined(DOMINIMALDOCPORTS) && ${DOMINIMALDOCPORTS} == "YES"
305 .if defined(PORTSRELEASETAG)
306         cd ${CHROOTDIR}/usr && rm -rf ports && cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P -r ${PORTSRELEASETAG} ${MINIMALDOCPORTS}
307 .else
308         cd ${CHROOTDIR}/usr && rm -rf ports && cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P ${MINIMALDOCPORTS}
309 .endif
310 .endif
311 .if !defined(NODOC)
312 .if defined(DOCRELEASETAG)
313         cd ${CHROOTDIR}/usr && rm -rf doc && cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P -r ${DOCRELEASETAG} ${RELEASEDOCMODULE}
314 .else
315         cd ${CHROOTDIR}/usr && rm -rf doc && cvs -R -d ${CVSROOT} co ${CVSCMDARGS} -P ${RELEASEDOCMODULE}
316 .endif
317         if [ -d ${RELEASEDISTFILES}/ ]; then \
318                 cp -rp ${RELEASEDISTFILES} ${CHROOTDIR}/usr/ports/distfiles; \
319         else \
320                 mkdir -p ${CHROOTDIR}/usr/ports/distfiles; \
321         fi
322 .if defined(PREFETCHDISTFILES)
323         @for i in ${DOCPORTS}; do \
324                 cd ${CHROOTDIR}/usr/ports/$$i && \
325                         make PORTSDIR=${CHROOTDIR}/usr/ports BATCH=yes \
326                         WITHOUT_X11=yes JADETEX=no WITHOUT_PYTHON=yes \
327                         fetch-recursive ; \
328         done
329 .endif
330 .endif
331 .endif
332 .if make(rerelease)
333 .if !defined(RELEASENOUPDATE)
334 .if !defined(RELEASETAG)
335         cd ${CHROOTDIR}/usr/src && cvs -R -q update ${CVSCMDARGS} -P -d -A
336 .else
337         cd ${CHROOTDIR}/usr/src && cvs -R -q update ${CVSCMDARGS} -P -d -r ${RELEASETAG}
338 .endif
339 .if !defined(NOPORTS)
340         cd ${CHROOTDIR}/usr/ports && cvs -R -q update ${CVSCMDARGS} -P -d
341 .endif
342 .if defined(DOMINIMALDOCPORTS) && ${DOMINIMALDOCPORTS} == "YES"
343         for i in ${MINIMALDOCPORTS}; do \
344                 ( cd ${CHROOTDIR}/usr/$$i && cvs -R -q update ${CVSCMDARGS} -P -d ) ; \
345         done
346 .endif
347 .if !defined(NODOC)
348         cd ${CHROOTDIR}/usr/doc && cvs -R -q update ${CVSCMDARGS} -P -d
349 .endif
350 .endif
351 .endif
352         # Add version information to those things that need it.
353         ( cd ${CHROOTDIR}/usr/src/sys/conf && \
354           mv newvers.sh foo && \
355           sed "s/^RELEASE=.*/RELEASE=${BUILDNAME}/" foo > newvers.sh && rm foo )
356         echo OBJFORMAT=${OBJFORMAT} > ${CHROOTDIR}/etc/objformat
357         -test -f install.cfg && cp install.cfg ${CHROOTDIR}/usr/src/release
358         echo "#!/bin/sh"                        > ${CHROOTDIR}/mk
359         echo "set -ex"                          >> ${CHROOTDIR}/mk
360         echo "_RELTARGET=\$${1:-doRELEASE}"     >> ${CHROOTDIR}/mk
361         echo "export MODULES_WITH_WORLD=YES"    >> ${CHROOTDIR}/mk
362 .for var in \
363         AUTO_KEYBOARD_DETECT \
364         BOOT_CONFIG \
365         BUILDNAME \
366         CD_EXTRA_BITS \
367         DISTRIBUTIONS \
368         DOC_LANG \
369         DOMINIMALDOCPORTS \
370         EXTRA_SRC \
371         FIXCRYPTO \
372         FTP_PASSIVE_MODE \
373         FTP_PROXY \
374         HTTP_PROXY \
375         KERNELS \
376         KERNEL_FLAGS \
377         MAKE_ISOS \
378         NOCDROM \
379         NODOC \
380         NOKERBEROS \
381         NOPORTS \
382         NOSHARED \
383         NOSRC \
384         NO_SENDMAIL \
385         OBJFORMAT \
386         RELEASETAG \
387         RELNOTES_LANG \
388         TARGET \
389         TARGET_ARCH \
390         VNDEVICE \
391         WORLD_FLAGS
392 .if defined(${var})
393         echo "export ${var}=\"${${var}}\""      >> ${CHROOTDIR}/mk
394 .endif
395 .endfor
396         # Don't remove this, or the build will fall over!
397         echo "export RELEASEDIR=${_R}"          >> ${CHROOTDIR}/mk
398         echo "export PATH=/bin:/usr/bin:/sbin:/usr/sbin:${LOCALDIR}"    >> ${CHROOTDIR}/mk
399         echo "export MANBUILDCAT=YES"           >> ${CHROOTDIR}/mk
400         echo "if [ ! -f /tmp/.world_done ]; then" >> ${CHROOTDIR}/mk
401         echo "  cd /usr/src"                    >> ${CHROOTDIR}/mk
402         echo "  ${CROSSMAKE} ${WORLD_FLAGS} -DNOCLEAN buildworld && \\" >> ${CHROOTDIR}/mk
403         echo "  touch /tmp/.world_done"         >> ${CHROOTDIR}/mk
404         echo "fi"                               >> ${CHROOTDIR}/mk
405 .if defined(NOPORTS) || defined(NOPORTREADMES)
406         echo "if false; then"                   >> ${CHROOTDIR}/mk
407 .else
408         echo "if true; then"                    >> ${CHROOTDIR}/mk
409 .endif
410         echo "  echo \">>> make readmes started on \`LC_ALL=C TZ=GMT date\`\"" >> ${CHROOTDIR}/mk
411         echo "  cd /usr/ports"                  >> ${CHROOTDIR}/mk
412         echo "  make ${PORTREADMES_FLAGS} readmes" >> ${CHROOTDIR}/mk
413         echo "  echo \">>> make readmes finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${CHROOTDIR}/mk
414         echo "fi"                               >> ${CHROOTDIR}/mk
415         echo "cd /usr/src/release"              >> ${CHROOTDIR}/mk
416         echo "make obj"                         >> ${CHROOTDIR}/mk
417         echo "make \$${_RELTARGET}"             >> ${CHROOTDIR}/mk
418         echo "echo \">>> make ${.TARGET} for ${TARGET} finished on \`LC_ALL=C TZ=GMT date\`\"" >> ${CHROOTDIR}/mk
419         chmod 755 ${CHROOTDIR}/mk
420         env -i /usr/sbin/chroot ${CHROOTDIR} /mk
421
422 clean:
423         rm -rf boot_crunch release.[0-9]
424
425 # Clean out ${_R} and make the directory structure.
426 release.1:
427         mkdir -p ${_R}
428         -rm -rf ${_R}/* 2> /dev/null
429         -chflags -R noschg ${_R}/.
430         rm -rf ${_R}/*
431         mkdir ${RD}
432         mkdir ${RD}/floppies
433         mkdir ${RD}/trees
434         mkdir ${RD}/kernels
435         for i in ${DISTRIBUTIONS} ; do \
436                 mkdir ${RD}/trees/$$i && \
437                 mtree -deU -f ${MTREEFILES}/BSD.root.dist \
438                     -p ${RD}/trees/$$i > /dev/null && \
439                 mtree -deU -f ${MTREEFILES}/BSD.usr.dist \
440                     -p ${RD}/trees/$$i/usr > /dev/null && \
441                 mtree -deU -f ${MTREEFILES}/BSD.include.dist \
442                     -p ${RD}/trees/$$i/usr/include > /dev/null && \
443                 mtree -deU -f ${MTREEFILES}/BSD.var.dist \
444                     -p ${RD}/trees/$$i/var > /dev/null ; \
445         done
446         touch release.1
447
448 # Install the system into the various distributions.
449 release.2:
450         cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/bin
451         cd ${.CURDIR}/.. && ${CROSSMAKE} distributeworld DISTDIR=${RD}/trees
452         touch release.2
453
454 # Build and install crypto, krb4 and krb5 distributions.
455 release.3:
456         # Handle some grief caused by the munition braindeadness.
457         cd ${.CURDIR}/..; \
458         ${CROSSMAKE} ${WORLD_FLAGS} -DNO_MAKEDB_RUN -DNOCRYPT \
459             SUBDIR_OVERRIDE="${FIXCRYPTO}" \
460             buildworld distributeworld DISTDIR=${RD}/trees
461 .if exists(${.CURDIR}/../kerberosIV) && exists(${.CURDIR}/../crypto) && !defined(NOKERBEROS)
462         cd ${.CURDIR}/..; \
463         ${CROSSMAKE} ${WORLD_FLAGS} -DNO_MAKEDB_RUN -DMAKE_KERBEROS4 \
464             SUBDIR_OVERRIDE="kerberosIV ${K4PROGS}" \
465             buildworld distributeworld DISTDIR=${RD}/trees
466 .endif
467 .if exists(${.CURDIR}/../kerberos5) && exists(${.CURDIR}/../crypto) && !defined(NOKERBEROS)
468         cd ${.CURDIR}/..; \
469         ${CROSSMAKE} ${WORLD_FLAGS} -DNO_MAKEDB_RUN -DMAKE_KERBEROS5 \
470             SUBDIR_OVERRIDE="kerberos5 ${K5PROGS}" \
471             buildworld distributeworld DISTDIR=${RD}/trees
472 .endif
473         -chflags -R noschg ${RD}/trees
474         touch release.3
475
476 # Make and install the generic kernel(s).
477 release.4:
478 .for kernel in ${KERNELS}
479         cd ${.CURDIR}/..; \
480         ${CROSSMAKE} ${KERNEL_FLAGS} -DNO_MODULES \
481             KERNCONF=${kernel} INSTKERNNAME=kernel.${kernel} kernel \
482             DESTDIR=${RD}/trees/bin
483 .endfor
484         # Install a standard boot kernel.
485         cd ${.CURDIR}/..; \
486         ${CROSSMAKE} ${KERNEL_FLAGS} \
487             INSTKERNNAME=kernel.GENERIC kernel \
488             DESTDIR=${RD}/trees/bin
489         touch release.4
490
491 # Make and install the three crunched binaries which live on the floppies.
492 # You are not supposed to like this :-)
493 release.5:
494         rm -rf ${RD}/crunch
495         mkdir -p ${RD}/crunch
496 .for j in ${CRUNCH_TARGETS}
497         rm -rf ${j}_crunch
498         mkdir ${j}_crunch
499 .if exists(${.CURDIR}/${TARGET}/${j}_crunch.conf)
500         cd ${j}_crunch; ${WMAKEENV} crunchgen -o ${.CURDIR}/${TARGET}/${j}_crunch.conf
501 .else
502         cd ${j}_crunch; ${WMAKEENV} crunchgen -o ${.CURDIR}/${j}_crunch.conf
503 .endif
504         cd ${j}_crunch; ${WMAKE} -f ${j}_crunch.mk subclean
505         cd ${.CURDIR}/..; ${TMAKE} build-tools
506         cd ${j}_crunch; ${WMAKE} -f ${j}_crunch.mk all
507         ${WMAKEENV} strip -R .comment ${j}_crunch/${j}_crunch
508         mv ${j}_crunch/${j}_crunch ${RD}/crunch/${j}
509 .endfor
510         touch release.5
511
512 #
513 # --==## Fix up the distributions. ##==--
514 #
515 release.6:
516         # Create any "synthetic dists" now.
517         @for i in ${DISTRIBUTIONS}; do \
518                 if [ -f ${.CURDIR}/scripts/$${i}-make.sh ]; then \
519                         echo -n "Running $$i dist creation script... "; \
520                         env OBJFORMAT=${OBJFORMAT} RD=${RD} sh ${.CURDIR}/scripts/$${i}-make.sh || echo "$$i distribution script returned bad status."; \
521                         echo "Done."; \
522                 fi \
523         done \
524
525         # Remove all the directories we don't need.
526         -cd ${RD}/trees && \
527                 find ${OTHER_DISTS} ${COMPAT_DISTS} ${CRYPTO_DISTS} -depth -type d -print | xargs rmdir
528         touch release.6
529
530 #
531 # --==## Package up the tarballs from assembled trees ##==--
532 #
533 release.7:
534         rm -rf ${RD}/dists
535         mkdir -p ${RD}/dists
536         @for i in ${DISTRIBUTIONS} ; \
537         do \
538                 if [ -d ${RD}/trees/$${i} ] ; then \
539                         cd ${.CURDIR} && $(MAKE) doTARBALL \
540                                 SD=${RD}/trees/$${i} \
541                                 TN=$$i TD=$$i ARG="." && \
542                         echo "$${i} distribution is finished."; \
543                 fi ; \
544         done
545         # More munition braindeadness.
546         ( cd ${RD}/dists && \
547                 if [ -f krb4/krb4.aa ] ; then \
548                         mv krb4/krb4.* crypto && \
549                         cat krb4/CHECKSUM.MD5 >> crypto/CHECKSUM.MD5 && \
550                         rm -r krb4; \
551                 fi )
552         ( cd ${RD}/dists && \
553                 if [ -f krb5/krb5.aa ] ; then \
554                         mv krb5/krb5.* crypto && \
555                         cat krb5/CHECKSUM.MD5 >> crypto/CHECKSUM.MD5 && \
556                         rm -r krb5; \
557                 fi )
558         touch release.7
559
560
561 #
562 # --==## Make source dists ##==--
563 #
564 release.8:
565 .if !defined(NOSRC)
566         @cd ${.CURDIR} && $(MAKE) doTARBALL SD=/usr/src \
567                 TD=src TN=sbase ARG="[A-Z]*"
568         @for i in `cd /usr/src && echo [a-z]*` ; do \
569                 if [ -d /usr/src/$$i ] ; then \
570                         cd ${.CURDIR} && $(MAKE) doTARBALL \
571                                 TN=`echo s$$i | tr -d '.' | \
572                                     sed -e 's/usr/u/' \
573                                         -e 's/kerberosIV/krb4/' \
574                                         -e 's/kerberos5/krb5/'` \
575                                 SD=/usr/src TD=src ARG="$$i" ; \
576                 fi ; \
577         done
578 .if defined(EXTRA_SRC)
579         @set ${EXTRA_SRC} && \
580         while [ $$# -ge 2 ] ; do \
581                 if [ -d /usr/src/$$1 ] ; then \
582                         cd ${.CURDIR} && $(MAKE) doTARBALL \
583                                 SD=/usr/src TN="s$$2" TD=src ARG="$$1" ; \
584                 fi && shift && shift ; \
585         done
586 .endif
587         if [ -d ${RD}/dists/crypto ] ; then ( cd ${RD}/dists/src && \
588                 if [ -f ssecure.aa ] ; then mv ssecure.* ../crypto ; fi && \
589                 if [ -f scrypto.aa ] ; then mv scrypto.* ../crypto ; fi && \
590                 if [ -f skrb4.aa ] ; then mv skrb4.* ../crypto ; fi && \
591                 if [ -f skrb5.aa ] ; then mv skrb5.* ../crypto ; fi ; \
592                 cd ${RD}/dists/crypto; rm -f CHECKSUM.MD5; \
593                 md5 * > CHECKSUM.MD5 ) ; fi
594         (cd ${RD}/dists/src; rm -f CHECKSUM.MD5; md5 * > CHECKSUM.MD5)
595         @echo "src distribution is finished."
596 .endif
597         touch release.8
598
599 # Complete the bootfd
600 #
601 # Now, just to get this picture down once and for all:
602 #
603 # +------------------------------------------------------------------------+
604 # |boot.flp                                                                |
605 # +-----+-----+------------------------------------------------------------+
606 # |boot1|boot2|floppy filesystem "bootfd"                                  |
607 # +-----+-----+-+----------------------+---------------------------------+-+
608 #               |kernel.gz             |mfsroot.gz                       |
609 #               +----------------------+---------------------------------+
610 #
611
612 release.9:
613         -vnconfig 2>/dev/null
614         rm -rf ${RD}/mfsfd
615         mkdir ${RD}/mfsfd
616         cd ${RD}/mfsfd && \
617                 mkdir -p etc/defaults dev mnt stand/help
618         @cd ${.CURDIR} && $(MAKE) installCRUNCH CRUNCH=boot \
619                 DIR=${RD}/mfsfd/stand ZIP=false
620         ( cd ${RD}/trees/bin/dev && \
621                 ls console tty bpf0 ttyd0 ttyv0 ttyv1 ttyv2 ttyv3 null zero card0 card1 card2 card3 usb usb0 uhid0 ums0 ulpt0 ugen0 kbd0 kmem mem xpt0 | \
622         cpio -dump ${RD}/mfsfd/dev )
623         ( cd ${RD}/mfsfd/dev && rm -f *[swo]d*[bdefgh] )
624         ( cd ${RD}/mfsfd && \
625           for dir in bin sbin ; do \
626                 ln -sf /stand $$dir; \
627           done )
628         cp ${RD}/trees/bin/sbin/dhclient-script ${RD}/mfsfd/stand
629 .if ${TARGET_ARCH} == "i386"
630         cp ${.CURDIR}/../etc/defaults/pccard.conf ${RD}/mfsfd/etc/defaults/pccard.conf
631 .endif
632         cp ${.CURDIR}/../etc/usbd.conf ${RD}/mfsfd/etc/usbd.conf
633         cd ${RD}/trees/bin && ls ${BOOT1} | cpio -dump ${RD}/mfsfd/stand
634         echo "nameserver      42/tcp name"      > ${RD}/mfsfd/stand/etc/services
635         echo "ftp             21/tcp"           >> ${RD}/mfsfd/stand/etc/services
636         echo "domain          53/tcp          nameserver" >> ${RD}/mfsfd/stand/etc/services
637         echo "domain          53/udp          nameserver" >> ${RD}/mfsfd/stand/etc/services
638         echo "cmd             514/tcp    shell" >> ${RD}/mfsfd/stand/etc/services
639         gzip -9c ${RD}/trees/bin/COPYRIGHT > ${RD}/mfsfd/stand/help/COPYRIGHT.hlp.gz
640 .if !defined(NODOC)
641         @for i in ${DIST_DOCS_ARCH_INDEP}; do \
642           gzip -9c ${RND}/${RELNOTES_LANG}/$$i/article.txt > ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT.gz; \
643         done
644         @for i in ${DIST_DOCS_ARCH_DEP}; do \
645           gzip -9c ${RND}/${RELNOTES_LANG}/$$i/${TARGET_ARCH}/article.txt > ${RD}/mfsfd/stand/help/`echo $${i} | tr 'a-z' 'A-Z'`.TXT.gz; \
646         done
647         @mv ${RD}/mfsfd/stand/help/INSTALLATION.TXT.gz ${RD}/mfsfd/stand/help/INSTALL.TXT.gz
648 .endif
649         -test -f ${.CURDIR}/install.cfg && cp ${.CURDIR}/install.cfg ${RD}/mfsfd
650         @mkdir -p ${RD}/mfsfd/boot
651         @cp ${RD}/trees/bin/boot/boot* ${RD}/mfsfd/boot
652 .if ${TARGET} == "i386"
653         @cp ${RD}/trees/bin/boot/mbr ${RD}/mfsfd/boot
654 .endif
655         @cp ${RD}/trees/bin/boot/loader.help ${RD}/mfsfd/boot
656         @echo "Making the regular boot floppy."
657         @tar --exclude CVS -cf - -C ${.CURDIR}/sysinstall help | \
658                 tar xf - -C ${RD}/mfsfd/stand
659         @echo "Compressing doc files..."
660         @gzip -9 ${RD}/mfsfd/stand/help/*.hlp
661 .if exists(${.CURDIR}/${TARGET}/drivers.conf)
662         @mkdir -p ${RD}/mfsfd/stand/modules
663         @awk -f  ${.CURDIR}/scripts/driver-copy2.awk \
664             ${.CURDIR}/${TARGET}/drivers.conf \
665             ${RD}/trees/bin/modules ${RD}/mfsfd/stand/modules
666 .endif
667         sh -e ${.CURDIR}/scripts/doFS.sh -s mfsroot ${RD} ${MNT} \
668                 ${MFSSIZE} ${RD}/mfsfd ${MFSINODE} ${MFSLABEL}
669         @gzip -9vc mfsroot > mfsroot.gz
670 .if ${TARGET} == "pc98"
671         @sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/mfsroot.flp \
672                 ${RD} ${MNT} ${SMALLBOOTSIZE} mfsroot.gz \
673                 ${BOOTINODE} ${SMALLBOOTLABEL}
674         @cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern-small FDSIZE=SMALL
675         @cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern
676 .else
677         @sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/mfsroot.flp \
678                 ${RD} ${MNT} ${BOOTSIZE} mfsroot.gz ${BOOTINODE} ${BOOTLABEL}
679         @cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=kern
680         @cd ${.CURDIR} && ${MAKE} doMFSKERN FSIMAGE=boot FDSIZE=BIG
681 .endif
682         @rm mfsroot mfsroot.gz
683         @echo "Regular and MFS boot floppies made."
684         touch release.9
685
686 #
687 # --==## Create a fixit floppy ##==--
688 #
689 release.10:
690         @echo "Making fixit floppy."
691         @rm -rf ${RD}/fixitfd
692         @mkdir ${RD}/fixitfd
693         @cd ${RD}/fixitfd && \
694                 mkdir -p dev stand bin sbin etc mnt mnt1 mnt2 mnt3 mnt4 tmp \
695                 usr/share/misc
696         @cd ${.CURDIR} && $(MAKE) installCRUNCH CRUNCH=fixit \
697                 DIR=${RD}/fixitfd/stand ZIP=false
698         @( cd ${RD}/fixitfd/dev && \
699                 sed -e '/^PATH/s/^/#/' ${RD}/trees/bin/dev/MAKEDEV > MAKEDEV && \
700                 chmod 755 MAKEDEV && \
701                 sh MAKEDEV fixit )
702         @cp ${RD}/trees/bin/etc/spwd.db ${RD}/trees/bin/etc/group \
703                 ${RD}/trees/bin/etc/protocols ${RD}/fixitfd/etc
704         @cp ${RD}/trees/bin/usr/share/misc/scsi_modes \
705                 ${RD}/fixitfd/usr/share/misc
706         @cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile
707         @cp ${.CURDIR}/fixit.services ${RD}/fixitfd/etc/services
708         @cp ${.CURDIR}/scripts/tar.sh ${RD}/fixitfd/stand/tar
709         @chmod 555 ${RD}/fixitfd/stand/tar
710         @sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/fixit.flp ${RD} \
711                 ${MNT} ${FIXITSIZE} ${RD}/fixitfd ${FIXITINODE} ${FIXITLABEL}
712 # Do our last minute floppies directory setup in a convenient place.
713 .if !defined(NODOC)
714         @cp ${RND}/${RELNOTES_LANG}/installation/${TARGET_ARCH}/article.txt \
715                 ${RD}/floppies/README.TXT
716         @(cd ${RD}/floppies; md5 README.TXT *.flp > CHECKSUM.MD5)
717 .else
718         @(cd ${RD}/floppies; md5 *.flp > CHECKSUM.MD5)
719 .endif
720         touch release.10
721
722 #
723 # --==## Setup a suitable ftp-area ##==--
724 #
725 ftp.1:
726         @echo "Setting up FTP distribution area"
727         @mkdir -p ${FD}
728         -@ln -s . ${FD}/${BUILDNAME}
729         @cd ${RD} && find floppies -print | cpio -dumpl ${FD}
730         @cd ${RD}/dists && find . -print | cpio -dumpl ${FD}
731 .if !defined(NODOC)
732         @for i in ${DIST_DOCS_ARCH_INDEP}; do \
733           cp ${RND}/${RELNOTES_LANG}/$$i/article.txt ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
734           cp ${RND}/${RELNOTES_LANG}/$$i/article.html ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
735         done
736         @for i in ${DIST_DOCS_ARCH_DEP}; do \
737           cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET_ARCH}/article.txt ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
738           cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET_ARCH}/article.html ${FD}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
739         done
740         @cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${FD}
741         @mv ${FD}/INSTALLATION.TXT ${FD}/INSTALL.TXT
742         @mv ${FD}/INSTALLATION.HTM ${FD}/INSTALL.HTM
743 .endif
744         @echo "CD_VERSION = ${BUILDNAME}" > ${FD}/cdrom.inf
745 .if !defined(NOPORTS)
746         @tar --exclude CVS -cBf - -C ${CD_DISC1} ports | tar -xBf - -C ${FD}
747 .endif
748         touch ftp.1
749
750 #
751 # --==## Setup a suitable cdrom-area ##==--
752 #
753 cdrom.1:
754         @echo "Setting up CDROM distribution area"
755         @mkdir -p ${CD_DISC1} ${CD_DISC2}
756         @cd ${RD} && find floppies -print | cpio -dumpl ${CD_DISC1}
757         @cd ${RD}/dists && find . -print | cpio -dumpl ${CD_DISC1}
758         @for i in ${DISTRIBUTIONS} ; \
759         do \
760                 if [ -d ${RD}/trees/$${i} ] ; then \
761                         chflags -R noschg ${RD}/trees/$${i} || true ; \
762                         ( cd ${RD}/trees/$${i} && \
763                         find . -depth -print | cpio -dumpl ${CD_DISC2} ) ; \
764                 fi \
765         done
766         @rm -f ${CD_DISC2}/.profile
767         @cp ${.CURDIR}/fixit.profile ${CD_DISC2}/.profile
768         @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC1}/cdrom.inf
769         @echo "CD_VERSION = ${BUILDNAME}" > ${CD_DISC2}/cdrom.inf
770 .if !defined(NODOC)
771         @for i in ${DIST_DOCS_ARCH_INDEP}; do \
772           cp ${RND}/${RELNOTES_LANG}/$$i/article.txt ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
773           cp ${RND}/${RELNOTES_LANG}/$$i/article.html ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
774         done
775         @for i in ${DIST_DOCS_ARCH_DEP}; do \
776           cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET_ARCH}/article.txt ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.TXT; \
777           cp ${RND}/${RELNOTES_LANG}/$$i/${TARGET_ARCH}/article.html ${CD_DISC1}/`echo $${i} | tr 'a-z' 'A-Z'`.HTM; \
778         done
779         @cp ${RND}/${RELNOTES_LANG}/readme/docbook.css ${CD_DISC1}
780         @mv ${CD_DISC1}/INSTALLATION.TXT ${CD_DISC1}/INSTALL.TXT
781         @mv ${CD_DISC1}/INSTALLATION.HTM ${CD_DISC1}/INSTALL.HTM
782 .endif
783 .if ${TARGET} != "pc98"
784         @echo "Setting up /boot"
785         @cp -Rp ${CD_DISC2}/boot ${CD_DISC1}
786         @ln -f ${RD}/image.boot/mfsroot.gz ${CD_DISC1}/boot/mfsroot.gz
787         @ln -f ${CD_DISC1}/boot/mfsroot.gz ${CD_DISC2}/boot/mfsroot.gz
788         @echo 'mfsroot_load="YES"' > ${CD_DISC1}/boot/loader.conf
789         @echo 'mfsroot_type="mfs_root"' >> ${CD_DISC1}/boot/loader.conf
790         @echo 'mfsroot_name="/boot/mfsroot"' >> ${CD_DISC1}/boot/loader.conf
791 .if ${TARGET} == "i386"
792         @echo 'userconfig_script_load="YES"' >> ${CD_DISC1}/boot/loader.conf
793         @echo 'intro' > ${CD_DISC1}/boot/kernel.conf
794 .endif
795         @ln -f ${CD_DISC1}/boot/loader.conf ${CD_DISC2}/boot/loader.conf
796         @ln -f ${CD_DISC2}/kernel.GENERIC ${CD_DISC1}/kernel
797 .endif
798 .if ${TARGET} == "i386"
799         @mkdir -p ${CD_DISC2}/floppies
800         @cp ${CD_DISC1}/floppies/boot.flp ${CD_DISC2}/floppies
801 .endif
802 .if !defined(NOPORTS)
803         @mkdir -p ${CD_DISC1}/ports && \
804           tar --exclude CVS --exclude 'ports/distfiles/*' -czf \
805           ${CD_DISC1}/ports/ports.tgz -C /usr ports && \
806           cp ${.CURDIR}/scripts/ports-install.sh ${CD_DISC1}/ports/install.sh \
807           && (cd ${CD_DISC1}/ports; md5 * > CHECKSUM.MD5)
808 .endif
809         touch cdrom.1
810
811 iso.1:
812         @if [ -r ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ]; then \
813                 echo "Creating ISO images..."; \
814                 sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \
815                   fbsd_miniinst ${CD}/${BUILDNAME}-${TARGET}-miniinst.iso ${CD_DISC1}; \
816                 sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \
817                   fbsd_livefs ${CD}/${BUILDNAME}-${TARGET}-disc2.iso ${CD_DISC2}; \
818                 if [ "x${CD_EXTRA_BITS}" != "x" ]; then \
819                         sh ${.CURDIR}/${TARGET_ARCH}/mkisoimages.sh ${BOOTABLE} \
820                           fbsd_boot ${CD}/${BUILDNAME}-${TARGET}-disc1.iso ${CD_DISC1} ${CD_EXTRA_BITS}; \
821                 fi \
822         else \
823                 echo "Do not know how to create an ISO for ${TARGET_ARCH}."; \
824         fi
825         touch iso.1
826
827 #
828 # --==## Documentation Project files such as the Handbook and FAQ ##==--
829 #
830 doc.1:
831         @echo "Making docs..."
832         @for i in ${DOCPORTS}; do \
833             cd /usr/ports/$$i && \
834             env -i FTP_PASSIVE_MODE=$${FTP_PASSIVE_MODE:-no} PATH=$${PATH} \
835                 make all install clean BATCH=yes WITHOUT_X11=yes JADETEX=no \
836                 WITHOUT_PYTHON=yes FORCE_PKG_REGISTER=yes; \
837         done
838         @cd /usr/doc && make all install 'FORMATS=html html-split txt' INSTALL_COMPRESSED='' DOCDIR=${RD}/trees/bin/usr/share/doc
839         touch doc.1
840
841 #
842 # --==## RELNOTESng:  Next-generation replacements for *.TXT files ##==--
843 #
844 doc.2:
845         @echo "Making release documentation..."
846         @cd ${.CURDIR}/doc && make all install clean 'FORMATS=html txt' INSTALL_COMPRESSED='' DOCDIR=${RND}
847         touch doc.2
848
849 # Various "subroutine" and other supporting targets.
850
851 # RD=
852 # SD=
853 # TD=
854 # ARG=
855 doTARBALL:
856 .if !defined(SD)
857         @echo "SD undefined in doTARBALL" && exit 1
858 .endif
859 .if !defined(TD)
860         @echo "TD undefined in doTARBALL" && exit 1
861 .endif
862 .if !defined(ARG)
863         @echo "ARG undefined in doTARBALL" && exit 1
864 .endif
865         @rm -rf ${RD}/dists/${TD}/${TN}*
866         @mkdir -p ${RD}/dists/${TD}
867         @( cd ${SD} && \
868                 tn=`echo ${TN} | tr '[A-Z]' '[a-z]' | cut -c1-8` && \
869                 echo rolling ${TD}/$$tn tarball &&\
870                 tar --exclude CVS --exclude obj --exclude BOOTMFS -cf - ${ARG} | \
871                 ${ZIPNSPLIT} ${RD}/dists/${TD}/$$tn. && \
872                 sh ${.CURDIR}/scripts/info.sh ${RD}/dists/${TD}/$$tn > \
873                    ${RD}/dists/${TD}/$$tn.inf && \
874                 if [ -f ${.CURDIR}/scripts/$${TD}-install.sh ]; then \
875                   cp -p ${.CURDIR}/scripts/$${TD}-install.sh ${RD}/dists/${TD}/install.sh; \
876                 fi && \
877                 if [ "${SD}" != "/usr/src" ]; then \
878                         mtree -c -i -p ${SD}/${ARG} \
879                           -k gname,md5digest,mode,nlink,uname,size,link,type \
880                           > ${RD}/dists/${TD}/$$tn.mtree ; \
881                 else \
882                         true; \
883                 fi; \
884                 (cd ${RD}/dists/${TD}; \
885                    rm -f CHECKSUM.MD5; \
886                    md5 * > CHECKSUM.MD5) \
887         )
888
889 doRELEASE:  release.1 release.2 release.3 ${DOCREL} release.4 release.5 \
890                 release.6 release.7 release.8 release.9 release.10
891         @cd ${.CURDIR} && ${MAKE} ${EXTRAS}
892         @echo "Release done"
893
894 floppies:
895         @cd ${.CURDIR} && ${MAKE} boot.flp
896         @cd ${.CURDIR} && ${MAKE} fixit.flp
897         @cd ${RD} && find floppies -print | cpio -dumpl ${FD}
898
899 boot.flp:
900         @rm -f release.5 release.9
901         @cd ${.CURDIR} && ${MAKE} release.5 release.9 CRUNCH_TARGETS=boot
902
903 fixit.flp:
904         @rm -f release.5 release.10
905         @cd ${.CURDIR} && ${MAKE} release.5 release.10 CRUNCH_TARGETS=fixit
906
907 write_mfs_in_kernel:    ${.CURDIR}/write_mfs_in_kernel.c
908         ${CC} ${CFLAGS} -o write_mfs_in_kernel ${.CURDIR}/write_mfs_in_kernel.c
909
910 installCRUNCH:
911 .if !defined(CRUNCH)
912         @echo "CRUNCH undefined in installCRUNCH" && exit 1
913 .endif
914 .if !defined(DIR)
915         @echo "DIR undefined in installCRUNCH" && exit 1
916 .endif
917 .if !defined(ZIP)
918         @echo "ZIP undefined in installCRUNCH" && exit 1
919 .endif
920         @if ${ZIP} ; then \
921                 gzip -9 < ${RD}/crunch/${CRUNCH} > ${DIR}/${CRUNCH}_crunch ; \
922         else \
923                 ln -f ${RD}/crunch/${CRUNCH} ${DIR}/${CRUNCH}_crunch ; \
924         fi
925         @chmod 555 ${DIR}/${CRUNCH}_crunch
926         @if [ -f ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf ] ; then \
927                 for i in `crunchgen -l ${.CURDIR}/${TARGET}/${CRUNCH}_crunch.conf` ; do \
928                         ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \
929                 done \
930         else \
931                 for i in `crunchgen -l ${.CURDIR}/${CRUNCH}_crunch.conf` ; do \
932                         ln -f ${DIR}/${CRUNCH}_crunch ${DIR}/$$i ; \
933                 done \
934         fi
935
936 #
937 # --==## Put a filesystem into a BOOTMFS kernel ##==--
938 #
939 doMFSKERN:
940         @echo "Running ${.TARGET} for ${FSIMAGE}"
941         @rm -f ${RD}/kernels/BOOTMFS ${RD}/kernels/BOOTMFS.${FSIMAGE}
942         @cd ${.CURDIR}/../sys/${TARGET}/conf && \
943             sh ${.CURDIR}/${TARGET}/dokern.sh ${FDSIZE} < GENERIC > BOOTMFS
944 .if ${TARGET_ARCH} == "i386"
945         @echo "options  INTRO_USERCONFIG" >> \
946           ${.CURDIR}/../sys/${TARGET}/conf/BOOTMFS
947 .endif
948 .if exists(${.CURDIR}/${TARGET}/drivers.conf)
949         @awk -f ${.CURDIR}/scripts/driver-remove.awk \
950                 ${.CURDIR}/${TARGET}/drivers.conf \
951                 ${.CURDIR}/../sys/${TARGET}/conf/BOOTMFS
952 .endif
953         cd ${.CURDIR}/..; \
954         INSTKERNNAME=BOOTMFS \
955             ${CROSSMAKE} ${KERNEL_FLAGS} -DNO_MODULES -DNO_KERNELCLEAN \
956             KERNCONF=BOOTMFS buildkernel reinstallkernel \
957             DESTDIR=${RD}/kernels
958         @rm -rf ${RD}/image.${FSIMAGE}
959         @mkdir ${RD}/image.${FSIMAGE}
960         @cd ${RD}/kernels && \
961           (chflags noschg BOOTMFS || true) && \
962           ${WMAKEENV} strip -R .comment BOOTMFS && \
963           cp BOOTMFS BOOTMFS.${FSIMAGE}
964         mv ${RD}/kernels/BOOTMFS ${RD}/image.${FSIMAGE}/kernel
965         @echo "Setting up /boot directory for ${FSIMAGE} floppy"
966         @mkdir -p ${RD}/image.${FSIMAGE}/boot
967 .if ${TARGET} == "i386"
968         @kgzip -vo ${RD}/image.${FSIMAGE}/boot/loader ${RD}/trees/bin/boot/loader
969 .else
970         @cp ${RD}/trees/bin/boot/loader ${RD}/image.${FSIMAGE}/boot
971 .endif
972         @echo "load /kernel" > ${RD}/image.${FSIMAGE}/boot/loader.rc
973 .if !defined(FDSIZE) || ${FDSIZE} != "BIG"
974         @echo "echo \\007\\007" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
975         @echo "echo Please insert MFS root floppy and press enter:" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
976         @echo "read" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
977 .endif
978         @echo "load -t mfs_root /mfsroot" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
979         @echo "echo \\007\\007" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
980         @echo "autoboot 10" >> ${RD}/image.${FSIMAGE}/boot/loader.rc
981 .if ${TARGET_ARCH} == "i386" && ${AUTO_KEYBOARD_DETECT}
982         @echo "-P" >> ${RD}/image.${FSIMAGE}/boot.config
983 .endif
984         @gzip -9v ${RD}/image.${FSIMAGE}/kernel
985         @rm -f ${RD}/floppies/${FSIMAGE}.flp
986 .if defined(FDSIZE) && ${FDSIZE} == "BIG"
987         @cp mfsroot.gz ${RD}/image.${FSIMAGE}
988         sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \
989                 ${RD} ${MNT} ${BIGBOOTSIZE} ${RD}/image.${FSIMAGE} \
990                 ${BOOTINODE} ${BIGBOOTLABEL}
991 .elif defined(FDSIZE) && ${FDSIZE} == "SMALL"
992         sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \
993                 ${RD} ${MNT} ${SMALLBOOTSIZE} ${RD}/image.${FSIMAGE} \
994                 ${BOOTINODE} ${SMALLBOOTLABEL}
995 .else
996         sh -e ${.CURDIR}/scripts/doFS.sh ${RD}/floppies/${FSIMAGE}.flp \
997                 ${RD} ${MNT} ${BOOTSIZE} ${RD}/image.${FSIMAGE} \
998                 ${BOOTINODE} ${BOOTLABEL}
999 .endif
1000         @echo "Created ${RD}/floppies/${FSIMAGE}.flp"
1001
1002 .include <bsd.prog.mk>