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