Makefile revision 7311
1# $Id: Makefile,v 1.122 1995/03/24 02:05:32 phk Exp $ 2# 3# How to roll a release: 4# 5# make release CHROOTDIR=<lots of disk> [ RELEASETAG=something ] 6# 7# As far as I know, this will roll everything nicely into the "stage" 8# directory. I still need to write the two rules to move that into 9# the "cdrom" and "ftp" directories. 10# I also need to "make ports" and install those, but I'm not going to do 11# that on a 14.4 line just yet... 12 13# Things which without too much trouble can be considered variables 14 15EXPORT_DISTS= games manpages proflibs dict info 16EXTRA_DISTS= secure ${EXPORT_DISTS} 17 18CPIO1= etc/services etc/protocols 19CPIO2= scripts/miscfuncs.sh scripts/instdist.sh scripts/netinst.sh \ 20 scripts/adduser.sh scripts/bininst.sh scripts/setup.sh 21 22FAQS= README MIRROR.SITES 23 24# define this to use a vn device instead of the floppy drive 25# vn driver can still do odd bogosities. don't use it. 26# VNDEVICE= vn0 27 28# work dir for floppies 29MNT= /mnt 30 31# define FDFORMAT to format physical floppies 32FDFORMAT= yes 33 34FDDEVICE= fd0 35FDCYLS= 80 36FDCYLSIZE= 15k 37FDLABEL= fd1200 38 39NEWFSARGS= -c 80 -b 4096 -f 512 -i 9000 -m 0 -t 0 -u 0 \ 40 -o space -T ${FDLABEL} 41 42ZIPNSPLIT= gzip --no-name -9 -c | split -b 240640 - 43 44 45# Things which will get you into trouble if you change them 46DISTRIBUTIONS= bin ${EXTRA_DISTS} 47MTREEFILES= ${.CURDIR}/../etc/mtree 48RD= ${RELEASEDIR}/stage 49FD= ${RELEASEDIR}/ftp 50CD= ${RELEASEDIR}/cdrom 51 52release: 53.if !defined(CHROOTDIR) 54 @echo "To make a release you must set CHROOTDIR" && false 55.endif 56 -mkdir ${CHROOTDIR} 57 chflags -R noschg ${CHROOTDIR}/. 58 rm -rf ${CHROOTDIR}/* 59 cd ${.CURDIR}/../etc ; ${MAKE} distrib-dirs DESTDIR=${CHROOTDIR} 60 cd ${.CURDIR}/../etc ; ${MAKE} distribution DESTDIR=${CHROOTDIR} 61 cd ${.CURDIR}/.. ; ${MAKE} -k install DESTDIR=${CHROOTDIR} 62 echo "#!/bin/sh" > ${CHROOTDIR}/mk 63 echo "set -ex" >> ${CHROOTDIR}/mk 64 echo "cd /usr/src" >> ${CHROOTDIR}/mk 65 echo "make world" >> ${CHROOTDIR}/mk 66 echo "cd sbin/sysinstall" >> ${CHROOTDIR}/mk 67 echo "make obj" >> ${CHROOTDIR}/mk 68 echo "cd ../../release" >> ${CHROOTDIR}/mk 69 echo "make obj" >> ${CHROOTDIR}/mk 70 echo "make doRELEASE" >> ${CHROOTDIR}/mk 71 echo "RELEASEDIR=/R" >> ${CHROOTDIR}/etc/make.conf 72.if !defined(RELEASETAG) 73 cd ${CHROOTDIR}/usr ; cvs co -P src 74.else 75 cd ${CHROOTDIR}/usr ; cvs export -r ${RELEASETAG} src 76.endif 77 chmod 755 ${CHROOTDIR}/mk 78 chroot ${CHROOTDIR} /mk 79 80clean: 81 rm -rf cpio_crunch boot_crunch release.[0-9] release.1[0] 82 83# Clean out ${RELEASEDIR} and make the directory structure. 84release.1: 85 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 86 -mkdir ${RELEASEDIR} 87 chflags -R noschg ${RELEASEDIR}/. 88 rm -rf ${RELEASEDIR}/* 89 mkdir ${RD} 90 mkdir ${RD}/bootfd 91 mkdir ${RD}/bootfd/dev 92 mkdir ${RD}/bootfd/mnt 93 mkdir ${RD}/bootfd/stand 94 mkdir ${RD}/cpiofd 95 mkdir ${RD}/cpiofd/stand 96 mkdir ${RD}/cpiofd/stand/scripts 97 mkdir ${RD}/fixitfd 98 mkdir ${RD}/fixitfd/stand 99 mkdir ${RD}/fixitfd/bin 100 mkdir ${RD}/fixitfd/sbin 101 mkdir ${RD}/fixitfd/mnt 102 mkdir ${RD}/fixitfd/etc 103 mkdir ${RD}/floppies 104 mkdir ${RD}/trees 105 mkdir ${RD}/trees/bin 106 mkdir ${RD}/dists 107 mkdir ${RD}/dists/bin 108 cd ${.CURDIR}/../etc && make distrib-dirs DESTDIR=${RD}/trees/bin 109 for i in ${EXTRA_DISTS} ; do \ 110 mkdir ${RD}/trees/$$i ; \ 111 mkdir ${RD}/dists/$$i ; \ 112 mtree -deU -f ${MTREEFILES}/BSD.root.dist \ 113 -p ${RD}/trees/$$i > /dev/null ; \ 114 mtree -deU -f ${MTREEFILES}/BSD.usr.dist \ 115 -p ${RD}/trees/$$i/usr > /dev/null ; \ 116 mtree -deU -f ${MTREEFILES}/BSD.include.dist \ 117 -p ${RD}/trees/$$i/usr/include > /dev/null ; \ 118 mtree -deU -f ${MTREEFILES}/BSD.var.dist \ 119 -p ${RD}/trees/$$i/var > /dev/null ; \ 120 done 121 touch release.1 122 123# Install the system into the various distributions. 124release.2: 125 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 126 cd ${.CURDIR}/.. ; make distribute DISTDIR=${RD}/trees 127 chflags -R noschg ${RD}/trees 128 touch release.2 129 130# Make and install a couple of kernels we need. 131release.3: 132 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 133 cd ${.CURDIR}/../sys/i386/conf ; \ 134 config GENERIC ; \ 135 config BOOTFLP 136 cd ${.CURDIR}/../sys/compile/GENERIC ; \ 137 make depend ; \ 138 make kernel ; \ 139 install -c kernel ${RD}/trees/bin/kernel.GENERIC 140 ln -f ${RD}/trees/bin/kernel.GENERIC ${RD}/cpiofd/kernel 141 cd ${.CURDIR}/../sys/compile/BOOTFLP ; \ 142 make depend ; \ 143 make kernel ; \ 144 install -s -c kernel ${RD}/bootfd/kernel 145 ln -f ${RD}/bootfd/kernel ${RD}/fixitfd/kernel 146 touch release.3 147 148# Make and install the two crunched binaries which live on the floppies. 149# You are not supposed to like this :-) 150release.4: 151 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 152 for j in boot cpio fixit; do \ 153 rm -rf $${j}_crunch ; \ 154 mkdir $${j}_crunch ; \ 155 ( cd $${j}_crunch ; \ 156 crunchgen ${.CURDIR}/$${j}_crunch.conf ; \ 157 ${MAKE} -f $${j}_crunch.mk objs exe NOCRYPT=yes ) ; \ 158 if [ $$j = cpio ] ; then \ 159 cat < $${j}_crunch/$${j}_crunch \ 160 > ${RD}/$${j}fd/stand/$${j}_crunch ; \ 161 else \ 162 gzip -9 < $${j}_crunch/$${j}_crunch \ 163 > ${RD}/$${j}fd/stand/$${j}_crunch ; \ 164 fi ; \ 165 rm -rf $${j}_crunch ; \ 166 chmod 555 ${RD}/$${j}fd/stand/$${j}_crunch ; \ 167 for i in `crunchgen -l ${.CURDIR}/$${j}_crunch.conf` ; do \ 168 ln -f ${RD}/$${j}fd/stand/$${j}_crunch \ 169 ${RD}/$${j}fd/stand/$$i ; \ 170 done ; \ 171 done 172 touch release.4 173 174# Fix up the distributions. 175release.5: 176 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 177 if [ -d ${RD}/trees/bin/usr/share/man ] ; then \ 178 rm -rf ${RD}/trees/manpages/usr/share/man ;\ 179 mv ${RD}/trees/bin/usr/share/man \ 180 ${RD}/trees/manpages/usr/share/man ;\ 181 fi 182 if [ -d ${RD}/trees/bin/usr/games ] ; then \ 183 rm -rf ${RD}/trees/games/usr/games ;\ 184 mv ${RD}/trees/bin/usr/games \ 185 ${RD}/trees/games/usr/games ;\ 186 fi 187 if [ -d ${RD}/trees/bin/usr/share/games ] ; then \ 188 rm -rf ${RD}/trees/games/usr/share/games ;\ 189 mv ${RD}/trees/bin/usr/share/games \ 190 ${RD}/trees/games/usr/share/games ;\ 191 fi 192 if [ -d ${RD}/trees/bin/var/games ] ; then \ 193 rm -rf ${RD}/trees/games/var/games ;\ 194 mv ${RD}/trees/bin/var/games \ 195 ${RD}/trees/games/var/games ;\ 196 fi 197 if [ -d ${RD}/trees/bin/usr/share/dict ] ; then \ 198 rm -rf ${RD}/trees/dict/usr/share/dict ;\ 199 mv ${RD}/trees/bin/usr/share/dict \ 200 ${RD}/trees/dict/usr/share/dict ;\ 201 fi 202 for i in airport birthtoken flowers na.phone zipcodes ; do \ 203 if [ -f ${RD}/trees/bin/usr/share/misc/$$i ] ; then \ 204 mv ${RD}/trees/bin/usr/share/misc/$$i \ 205 ${RD}/trees/dict/usr/share/misc ; \ 206 fi ; \ 207 done 208 for i in ${RD}/trees/bin/usr/lib/*_p.a ; do \ 209 if [ -f $$i ] ; then \ 210 mv $$i \ 211 ${RD}/trees/proflibs/usr/lib ; \ 212 fi ; \ 213 done 214 -cd ${RD}/trees ; \ 215 find bin ${EXPORT_DISTS} -depth -type d -print | xargs rmdir 216 217 touch release.5 218 219# Complete the bootfd 220release.6: 221 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 222 ( cd ${RD}/trees/bin/dev ; \ 223 ls console tty ttyv1 null zero \ 224 sd[0123][a-h] wd[0123][a-h] fd[01] \ 225 rsd[0123][a-h] rwd[0123][a-h] rfd[01] | \ 226 cpio -dump ${RD}/bootfd/dev ) 227 install -c ${.CURDIR}/../COPYRIGHT ${RD}/bootfd 228 cd ${RD}/trees/bin/usr/share/FAQ/Text ; \ 229 install -c diskspace.FAQ ${RD}/bootfd/DISKSPACE.FAQ ;\ 230 install -c RELNOTES.FreeBSD ${RD}/bootfd ;\ 231 install -c TROUBLESHOOTING ${RD}/bootfd ;\ 232 install -c README ${RD}/bootfd/README 233 touch ${RD}/bootfd/this_is_boot_flp 234 cd ${.CURDIR} ; ${MAKE} doFLOPPY FLOPPY=boot 235 touch release.6 236 237# Complete the cpiofd directory 238# XXX a lot of stuff is missing here... 239release.7: 240 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 241 cd ${RD}/trees/bin ; ls ${CPIO1} | cpio -dump ${RD}/cpiofd/stand 242 cd ${.CURDIR} ; ls ${CPIO2} | cpio -dumpv ${RD}/cpiofd/stand 243 ( JUST_TELL_ME=please ; . ${.CURDIR}/../sys/conf/newvers.sh ; \ 244 sed "/DISTNAME=/s/FOOBAR/$$DISTNAME/" \ 245 < ${RD}/cpiofd/stand/scripts/miscfuncs.sh \ 246 > ${RD}/cpiofd/stand/scripts/tmp ;\ 247 ) 248 mv ${RD}/cpiofd/stand/scripts/tmp \ 249 ${RD}/cpiofd/stand/scripts/miscfuncs.sh 250 chmod 755 ${RD}/cpiofd/stand/scripts/* 251 cp ${RD}/trees/bin/usr/sbin/tzsetup ${RD}/cpiofd/stand 252 ( cd ${RD}/cpiofd ; \ 253 ( rm -f OK ; find . -print ; touch OK ; echo OK ) | \ 254 cpio -H newc -oa | gzip -9 -c | dd conv=osync ) \ 255 > ${RD}/floppies/cpio.flp 256 gzip -1 -c < ${RD}/floppies/cpio.flp > ${RD}/floppies/cpio.flp.gz 257 touch release.7 258 259# Make binary dists 260release.8: 261 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 262 rm -rf ${RD}/dists 263 mkdir -p ${RD}/dists 264 @for i in ${DISTRIBUTIONS} ; \ 265 do \ 266 if [ -d ${RD}/trees/$${i} ] ; then \ 267 cd ${.CURDIR} ; \ 268 $(MAKE) doTARBALL SD=${RD}/trees/$${i} \ 269 TN=$$i TD=$$i ARG="." ; \ 270 ( cd ${RD}/dists/$${i}; \ 271 sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \ 272 cp ${.CURDIR}/scripts/extract_$${i}.sh \ 273 ${RD}/dists/$${i}/extract.sh;\ 274 echo "$${i} distribution is finished."; \ 275 fi ; \ 276 done 277 touch release.8 278 279 280# Make source dists 281release.9: 282 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 283 @cd ${.CURDIR} ; $(MAKE) doTARBALL SD=/usr/src \ 284 TD=src TN=srcbase ARG="[A-Z]*" 285 @for i in `cd /usr/src ; echo *` ; do \ 286 if [ -d /usr/src/$$i -a "$$i" != "CVS" ] ; then \ 287 cd ${.CURDIR} ; \ 288 $(MAKE) doTARBALL SD=/usr/src \ 289 TN=src$$i TD=src ARG="$$i" ; \ 290 fi ; \ 291 done 292 ( cd ${RD}/dists/src; \ 293 sh -e ${.CURDIR}/scripts/mkchecksums.sh ) ; \ 294 cp ${.CURDIR}/scripts/extract_src.sh \ 295 ${RD}/dists/src/extract.sh;\ 296 echo "src distribution is finished."; \ 297 touch release.9 298 299# Complete the fixitfd 300release.10: 301 @cd ${.CURDIR} ; $(MAKE) ckRELEASEDIR 302 ( cd ${RD}/trees/bin/dev ; \ 303 ls console tty ttyv1 null zero \ 304 sd[0123][a-h] wd[0123][a-h] fd[01] \ 305 rsd[0123][a-h] rwd[0123][a-h] rfd[01] | \ 306 cpio -dump ${RD}/fixitfd/dev ) 307 ln -f ${RD}/fixitfd/stand/init ${RD}/fixitfd/sbin 308 ln -f ${RD}/fixitfd/stand/sh ${RD}/fixitfd/bin 309 cp ${RD}/trees/bin/usr/mdec/fdboot ${RD}/fixitfd/etc/boot1 310 cp ${RD}/trees/bin/usr/mdec/bootfd ${RD}/fixitfd/etc/boot2 311 cp ${.CURDIR}/fixit.profile ${RD}/fixitfd/.profile 312 echo 'echo /etc/rc' > ${RD}/fixitfd/etc/rc 313 echo 'exit 1' >> ${RD}/fixitfd/etc/rc 314 touch ${RD}/fixitfd/etc/spwd.db 315 cd ${.CURDIR} ; ${MAKE} doFLOPPY FLOPPY=fixit 316 touch release.10 317 318ftp.1: 319 rm -rf ${FD} 320 mkdir ${FD} 321 cd ${RD} && find floppies dists -print | cpio -dumpl ${FD} 322 cd ${RD}/trees/bin/usr/share/FAQ/Text && ln -f ${FAQS} ${FD} 323 324cdrom.1: 325 rm -rf ${CD} 326 mkdir ${CD} 327 mkdir ${CD}/filesys 328 cd ${RD} && find floppies dists bootfd -print | cpio -dumpl ${FD} 329 cd ${FD} && mv bootfd bootcd 330 for i in ${DISTRIBUTIONS} ; \ 331 do \ 332 if [ -d ${RD}/trees/$${i} ] ; then \ 333 ( cd ${RD}/trees/$${i}; \ 334 find . -depth -print | cpio -dumpl ${CD}/filesys ) ; \ 335 fi \ 336 done 337 338# Various "subroutine" and other supporting targets. 339 340doTARBALL: 341.if !defined(SD) 342 @echo "SD undefined in doTARBALL" ; exit 1 343.endif 344.if !defined(TD) 345 @echo "TB undefined in doTARBALL" ; exit 1 346.endif 347.if !defined(ARG) 348 @echo "ARG undefined in doTARBALL" ; exit 1 349.endif 350 rm -rf ${RD}/dists/${TD}/${TN}* 351 mkdir -p ${RD}/dists/${TD} 352 ( cd ${SD} ; \ 353 echo rolling ${TD}/${TN} tarball ;\ 354 tar --exclude CVS --exclude obj -cf - ${ARG} | \ 355 ${ZIPNSPLIT} ${RD}/dists/${TD}/${TN}. ) 356 357doRELEASE: release.1 release.2 release.3 release.4 release.5 release.6 \ 358 release.7 release.8 release.9 release.10 359 @echo "Release done" 360 361ckRELEASEDIR: 362.if !defined(RELEASEDIR) 363 @echo "To make a release RELEASEDIR must be defined" && false 364.endif 365 366doFLOPPY: 367.if !defined(FLOPPY) 368 @echo "FLOPPY undefined in doFLOPPY" ; exit 1 369.endif 370 rm -f ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp 371.if defined(VNDEVICE) 372 if [ ! -b /dev/${VNDEVICE} -o ! -c /dev/r${VNDEVICE} ] ; then \ 373 cd /dev && sh MAKEDEV ${VNDEVICE} ; fi 374 @umount /dev/${VNDEVICE} 2>/dev/null || true 375 @umount ${MNT} 2>/dev/null || true 376 @vnconfig -u /dev/r${VNDEVICE} 2>/dev/null || true 377 dd of=${RD}/floppies/${FLOPPY}.tmp if=/dev/zero \ 378 bs=${FDCYLSIZE} count=${FDCYLS} 2>/dev/null 379 sync && sleep 5 380 vnconfig -c /dev/r${VNDEVICE} ${RD}/floppies/${FLOPPY}.tmp 381 disklabel -w -r -B \ 382 -b ${RD}/trees/bin/usr/mdec/fdboot \ 383 -s ${RD}/trees/bin/usr/mdec/bootfd \ 384 /dev/r${VNDEVICE} ${FDLABEL} 385 newfs ${NEWFSARGS} /dev/r${VNDEVICE} 386 mount /dev/${VNDEVICE} ${MNT} 387 cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT} 388 umount ${MNT} 389 fsck /dev/r${VNDEVICE} < /dev/null 390.else 391 -umount /dev/${FDDEVICE} 392 -umount ${MNT} 393.if !defined(FDFORMAT) 394 echo y | fdformat /dev/r${FDDEVICE} 395.endif 396 disklabel -w -r -B \ 397 -b ${RD}/trees/bin/usr/mdec/fdboot \ 398 -s ${RD}/trees/bin/usr/mdec/bootfd \ 399 /dev/r${FDDEVICE} ${FDLABEL} 400 newfs ${NEWFSARGS} /dev/r${FDDEVICE} 401 mount /dev/${FDDEVICE} ${MNT} 402 cd ${RD}/${FLOPPY}fd ; find . -print | cpio -dump ${MNT} 403 umount ${MNT} 404 fsck -n /dev/r${FDDEVICE} < /dev/null 405 dd if=/dev/r${FDDEVICE} of=${RD}/floppies/${FLOPPY}.tmp \ 406 bs=${FDCYLSIZE} count=${FDCYLS} 407.endif 408 mv ${RD}/floppies/${FLOPPY}.tmp ${RD}/floppies/${FLOPPY}.flp 409 gzip -9 -c < ${RD}/floppies/${FLOPPY}.flp \ 410 > ${RD}/floppies/${FLOPPY}.flp.gz 411 412.include <bsd.prog.mk> 413